aaa98fd470f77347d2c4570a6f305da097d93b50
[policy/apex-pdp.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2016-2018 Ericsson. All rights reserved.
4  *  Modifications Copyright (C) 2019-2020 Nordix Foundation.
5  *  Modifications Copyright (C) 2020 Bell Canada. All rights reserved.
6  *  Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  * SPDX-License-Identifier: Apache-2.0
21  * ============LICENSE_END=========================================================
22  */
23
24 package org.onap.policy.apex.service.engine.parameters;
25
26 import static org.assertj.core.api.Assertions.assertThatThrownBy;
27 import static org.junit.Assert.assertEquals;
28 import static org.junit.Assert.assertTrue;
29
30 import java.util.Arrays;
31 import org.junit.Test;
32 import org.onap.policy.apex.service.engine.main.ApexCommandLineArguments;
33 import org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperDooperCarrierTechnologyParameters;
34 import org.onap.policy.apex.service.engine.parameters.dummyclasses.SuperTokenDelimitedEventProtocolParameters;
35 import org.onap.policy.apex.service.parameters.ApexParameterHandler;
36 import org.onap.policy.apex.service.parameters.ApexParameters;
37 import org.onap.policy.apex.service.parameters.carriertechnology.CarrierTechnologyParameters;
38 import org.onap.policy.apex.service.parameters.eventhandler.EventHandlerPeeredMode;
39 import org.onap.policy.apex.service.parameters.eventprotocol.EventProtocolParameters;
40 import org.onap.policy.common.parameters.ParameterException;
41
42 /**
43  * Test for an empty parameter file.
44  *
45  * @author Liam Fallon (liam.fallon@ericsson.com)
46  */
47 public class SyncParameterTests {
48     @Test
49     public void testSyncBadNoSyncWithPeer() throws ParameterException {
50         final String[] args = {"-p", "src/test/resources/parameters/syncBadParamsNoSyncWithPeer.json"};
51         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
52
53         assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments))
54             .hasMessageContaining("src/test/resources/parameters/syncBadParamsNoSyncWithPeer.json")
55             .hasMessageContaining("ApexParameters")
56             .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer0\" INVALID")
57             .hasMessageContaining("peer is illegal");
58     }
59
60     @Test
61     public void testSyncBadNotSyncWithPeer() throws ParameterException {
62         final String[] args = {"-p", "src/test/resources/parameters/syncBadParamsNotSyncWithPeer.json"};
63         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
64
65         assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments))
66             .hasMessageContaining("src/test/resources/parameters/syncBadParamsNotSyncWithPeer.json")
67             .hasMessageContaining("ApexParameters")
68             .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer0\" INVALID")
69             .hasMessageContaining("peer is illegal");
70     }
71
72     @Test
73     public void testSyncBadSyncBadPeers() throws ParameterException {
74         final String[] args = {"-p", "src/test/resources/parameters/syncBadParamsBadPeers.json"};
75         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
76
77         assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments))
78             .hasMessageContaining("src/test/resources/parameters/syncBadParamsBadPeers.json")
79             .hasMessageContaining("ApexParameters")
80             .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer0\" INVALID")
81             .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer1\" INVALID")
82             .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer0\" INVALID")
83             .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer1\" INVALID")
84             .hasMessageContaining("does not exist or is not defined");
85     }
86
87     @Test
88     public void testSyncBadSyncInvalidTimeout() throws ParameterException {
89         final String[] args = {"-p", "src/test/resources/parameters/syncBadParamsInvalidTimeout.json"};
90         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
91
92         assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments))
93             .hasMessageContaining("src/test/resources/parameters/syncBadParamsInvalidTimeout.json")
94             .hasMessageContaining("ApexParameters")
95             .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer0\" INVALID")
96             .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer1\" INVALID")
97             .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer0\" INVALID")
98             .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer1\" INVALID")
99             .hasMessageContaining("timeout value \"-10\" is illegal")
100             .hasMessageContaining("timeout value \"-3\" is illegal")
101             .hasMessageContaining("timeout value \"-1\" is illegal")
102             .hasMessageContaining("timeout value \"-99999999\" is illegal");
103     }
104
105     @Test
106     public void testSyncBadSyncBadTimeout() throws ParameterException {
107         final String[] args = {"-p", "src/test/resources/parameters/syncBadParamsBadTimeout.json"};
108         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
109
110         assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments))
111             .hasMessageContaining("src/test/resources/parameters/syncBadParamsBadTimeout.json")
112             .hasMessageContaining("ApexParameters")
113             .hasMessageContaining("\"eventOutputParameters\" value \"MyOtherProducer\" INVALID, "
114                 + "specified peered mode \"SYNCHRONOUS\" timeout is illegal");
115     }
116
117     @Test
118     public void testSyncBadSyncUnpairedTimeout() throws ParameterException {
119         final String[] args = {"-p", "src/test/resources/parameters/syncBadParamsUnpairedTimeout.json"};
120         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
121
122         assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments))
123             .hasMessageContaining("src/test/resources/parameters/syncBadParamsUnpairedTimeout.json")
124             .hasMessageContaining("ApexParameters")
125             .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer0\" INVALID, peer \"SyncConsumer0\"")
126             .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer1\" INVALID, peer \"SyncConsumer1\"")
127             .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer0\" INVALID, peer \"SyncProducer0\"")
128             .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer1\" INVALID, peer \"SyncProducer1\"")
129             .hasMessageContaining("timeout 10 does not equal peer timeout 1")
130             .hasMessageContaining("timeout 3 does not equal peer timeout 99999999")
131             .hasMessageContaining("timeout 1 does not equal peer timeout 10")
132             .hasMessageContaining("timeout 99999999 does not equal peer timeout 3");
133     }
134
135     @Test
136     public void testSyncGoodSyncGoodTimeoutProducer() throws ParameterException {
137         verifySyncGoodSyncGoodTimeout("src/test/resources/parameters/syncGoodParamsProducerTimeout.json");
138     }
139
140     @Test
141     public void testSyncGoodSyncGoodTimeoutConsumer() throws ParameterException {
142         verifySyncGoodSyncGoodTimeout("src/test/resources/parameters/syncGoodParamsConsumerTimeout.json");
143     }
144
145     @Test
146     public void testSyncGoodSyncGoodTimeoutBoth() throws ParameterException {
147         verifySyncGoodSyncGoodTimeout("src/test/resources/parameters/syncGoodParamsBothTimeout.json");
148     }
149
150     private void verifySyncGoodSyncGoodTimeout(String fileName) throws ParameterException {
151         final String[] args = {"-p", fileName};
152         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
153
154         final ApexParameters parameters = new ApexParameterHandler().getParameters(arguments);
155         assertEquals(fileName, 12345, parameters.getEventInputParameters().get("SyncConsumer0")
156                 .getPeerTimeout(EventHandlerPeeredMode.SYNCHRONOUS));
157         assertEquals(fileName, 1, parameters.getEventInputParameters().get("SyncConsumer1")
158                 .getPeerTimeout(EventHandlerPeeredMode.SYNCHRONOUS));
159         assertEquals(fileName, 12345, parameters.getEventOutputParameters().get("SyncProducer0")
160                 .getPeerTimeout(EventHandlerPeeredMode.SYNCHRONOUS));
161         assertEquals(fileName, 1, parameters.getEventOutputParameters().get("SyncProducer1")
162                 .getPeerTimeout(EventHandlerPeeredMode.SYNCHRONOUS));
163     }
164
165     @Test
166     public void testSyncUnusedConsumerPeers() throws ParameterException {
167         final String[] args = {"-p", "src/test/resources/parameters/syncUnusedConsumerPeers.json"};
168         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
169
170         assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments))
171             .hasMessageContaining("src/test/resources/parameters/syncUnusedConsumerPeers.json")
172             .hasMessageContaining("ApexParameters")
173             .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer1\" INVALID, peer \"SyncConsumer0\"")
174             .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer1\" INVALID, peer \"SyncProducer1\"")
175             .hasMessageContaining("value \"SyncProducer0\" on peer does not equal event handler")
176             .hasMessageContaining("value \"SyncConsumer0\" on peer does not equal event handler");
177     }
178
179     @Test
180     public void testSyncMismatchedPeers() throws ParameterException {
181         final String[] args = {"-p", "src/test/resources/parameters/syncMismatchedPeers.json"};
182         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
183
184         assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments))
185             .hasMessageContaining("src/test/resources/parameters/syncMismatchedPeers.json")
186             .hasMessageContaining("ApexParameters")
187             .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer0\" INVALID, peer \"SyncConsumer1\"")
188             .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer1\" INVALID, peer \"SyncConsumer0\"")
189             .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer0\" INVALID, peer \"SyncProducer0\"")
190             .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer1\" INVALID, peer \"SyncProducer1\"")
191             .hasMessageContaining("value \"SyncProducer1\" on peer does not equal event handler")
192             .hasMessageContaining("value \"SyncProducer0\" on peer does not equal event handler")
193             .hasMessageContaining("value \"SyncConsumer1\" on peer does not equal event handler")
194             .hasMessageContaining("value \"SyncConsumer0\" on peer does not equal event handler");
195     }
196
197     @Test
198     public void testSyncUnusedProducerPeers() throws ParameterException {
199         final String[] args = {"-p", "src/test/resources/parameters/syncUnusedProducerPeers.json"};
200         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
201
202         assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments))
203             .hasMessageContaining("src/test/resources/parameters/syncUnusedProducerPeers.json")
204             .hasMessageContaining("ApexParameters")
205             .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer0\" INVALID, peer \"SyncConsumer0\"")
206             .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer0\" INVALID, peer \"SyncProducer1\"")
207             .hasMessageContaining("value \"SyncProducer1\" on peer does not equal event handler")
208             .hasMessageContaining("value \"SyncConsumer1\" on peer does not equal event handler");
209     }
210
211     @Test
212     public void testSyncMismatchedTimeout() throws ParameterException {
213         final String[] args = {"-p", "src/test/resources/parameters/syncMismatchedTimeout.json"};
214         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
215
216         assertThatThrownBy(() -> new ApexParameterHandler().getParameters(arguments))
217             .hasMessageContaining("src/test/resources/parameters/syncMismatchedTimeout.json")
218             .hasMessageContaining("ApexParameters")
219             .hasMessageContaining("\"eventOutputParameters\" value \"SyncProducer1\" INVALID, peer \"SyncConsumer1\"")
220             .hasMessageContaining("\"eventInputParameters\" value \"SyncConsumer1\" INVALID, peer \"SyncProducer1\"")
221             .hasMessageContaining("timeout 123 does not equal peer timeout 456")
222             .hasMessageContaining("timeout 456 does not equal peer timeout 123");
223     }
224
225     @Test
226     public void testSyncGoodParametersTest() throws ParameterException {
227         final String[] args = {"-p", "src/test/resources/parameters/syncGoodParams.json"};
228         final ApexCommandLineArguments arguments = new ApexCommandLineArguments(args);
229
230         final ApexParameters parameters = new ApexParameterHandler().getParameters(arguments);
231
232         assertEquals("MyApexEngine", parameters.getEngineServiceParameters().getName());
233         assertEquals("0.0.1", parameters.getEngineServiceParameters().getVersion());
234         assertEquals(45, parameters.getEngineServiceParameters().getId());
235         assertEquals(19, parameters.getEngineServiceParameters().getInstanceCount());
236         assertEquals(65522, parameters.getEngineServiceParameters().getDeploymentPort());
237
238         final CarrierTechnologyParameters prodCT0 =
239                 parameters.getEventOutputParameters().get("SyncProducer0").getCarrierTechnologyParameters();
240         final EventProtocolParameters prodEP0 =
241                 parameters.getEventOutputParameters().get("SyncProducer0").getEventProtocolParameters();
242         final CarrierTechnologyParameters consCT0 =
243                 parameters.getEventInputParameters().get("SyncConsumer0").getCarrierTechnologyParameters();
244         final EventProtocolParameters consEP0 =
245                 parameters.getEventInputParameters().get("SyncConsumer0").getEventProtocolParameters();
246         final CarrierTechnologyParameters prodCT1 =
247                 parameters.getEventOutputParameters().get("SyncProducer1").getCarrierTechnologyParameters();
248         final EventProtocolParameters prodEP1 =
249                 parameters.getEventOutputParameters().get("SyncProducer1").getEventProtocolParameters();
250         final CarrierTechnologyParameters consCT1 =
251                 parameters.getEventInputParameters().get("SyncConsumer1").getCarrierTechnologyParameters();
252         final EventProtocolParameters consEP1 =
253                 parameters.getEventInputParameters().get("SyncConsumer1").getEventProtocolParameters();
254
255         assertEquals("FILE", prodCT0.getLabel());
256         assertEquals("JSON", prodEP0.getLabel());
257         assertEquals("FILE", consCT0.getLabel());
258         assertEquals("JSON", consEP0.getLabel());
259         assertEquals("FILE", prodCT1.getLabel());
260         assertEquals("JSON", prodEP1.getLabel());
261         assertEquals("SUPER_DOOPER", consCT1.getLabel());
262         assertEquals("SUPER_TOK_DEL", consEP1.getLabel());
263
264         assertTrue(consCT1 instanceof SuperDooperCarrierTechnologyParameters);
265         assertTrue(consEP1 instanceof SuperTokenDelimitedEventProtocolParameters);
266
267         final SuperDooperCarrierTechnologyParameters superDooperParameters =
268                 (SuperDooperCarrierTechnologyParameters) consCT1;
269         assertEquals("localhost:9092", superDooperParameters.getBootstrapServers());
270         assertEquals("all", superDooperParameters.getAcks());
271         assertEquals(0, superDooperParameters.getRetries());
272         assertEquals(16384, superDooperParameters.getBatchSize());
273         assertEquals(1, superDooperParameters.getLingerTime());
274         assertEquals(33554432, superDooperParameters.getBufferMemory());
275         assertEquals("default-group-id", superDooperParameters.getGroupId());
276         assertTrue(superDooperParameters.isEnableAutoCommit());
277         assertEquals(1000, superDooperParameters.getAutoCommitTime());
278         assertEquals(30000, superDooperParameters.getSessionTimeout());
279         assertEquals("apex-out", superDooperParameters.getProducerTopic());
280         assertEquals(100, superDooperParameters.getConsumerPollTime());
281         assertEquals("org.apache.superDooper.common.serialization.StringSerializer",
282                 superDooperParameters.getKeySerializer());
283         assertEquals("org.apache.superDooper.common.serialization.StringSerializer",
284                 superDooperParameters.getValueSerializer());
285         assertEquals("org.apache.superDooper.common.serialization.StringDeserializer",
286                 superDooperParameters.getKeyDeserializer());
287         assertEquals("org.apache.superDooper.common.serialization.StringDeserializer",
288                 superDooperParameters.getValueDeserializer());
289
290         final String[] consumerTopics = {"apex-in"};
291         assertEquals(Arrays.asList(consumerTopics), superDooperParameters.getConsumerTopicList());
292     }
293 }