2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2016-2018 Ericsson. All rights reserved.
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.apex.context.test.distribution;
23 import java.util.Collection;
24 import java.util.Date;
25 import java.util.HashMap;
26 import java.util.LinkedHashMap;
27 import java.util.Locale;
29 import java.util.Map.Entry;
31 import java.util.TimeZone;
32 import java.util.TreeSet;
34 import org.onap.policy.apex.context.ContextAlbum;
35 import org.onap.policy.apex.context.ContextException;
36 import org.onap.policy.apex.context.ContextRuntimeException;
37 import org.onap.policy.apex.context.Distributor;
38 import org.onap.policy.apex.context.impl.distribution.DistributorFactory;
39 import org.onap.policy.apex.context.test.concepts.TestContextItem000;
40 import org.onap.policy.apex.context.test.concepts.TestContextItem001;
41 import org.onap.policy.apex.context.test.concepts.TestContextItem002;
42 import org.onap.policy.apex.context.test.concepts.TestContextItem003;
43 import org.onap.policy.apex.context.test.concepts.TestContextItem004;
44 import org.onap.policy.apex.context.test.concepts.TestContextItem005;
45 import org.onap.policy.apex.context.test.concepts.TestContextItem006;
46 import org.onap.policy.apex.context.test.concepts.TestContextItem007;
47 import org.onap.policy.apex.context.test.concepts.TestContextItem008;
48 import org.onap.policy.apex.context.test.concepts.TestContextItem009;
49 import org.onap.policy.apex.context.test.concepts.TestContextItem00A;
50 import org.onap.policy.apex.context.test.concepts.TestContextItem00B;
51 import org.onap.policy.apex.context.test.concepts.TestContextItem00C;
52 import org.onap.policy.apex.context.test.concepts.TestExternalContextItem;
53 import org.onap.policy.apex.context.test.concepts.TestGlobalContextItem;
54 import org.onap.policy.apex.context.test.concepts.TestPolicyContextItem;
55 import org.onap.policy.apex.context.test.factory.TestContextAlbumFactory;
56 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
57 import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
58 import org.onap.policy.apex.model.contextmodel.concepts.AxContextModel;
59 import org.slf4j.ext.XLogger;
60 import org.slf4j.ext.XLoggerFactory;
63 * The Class TestContextInstantiation is used to test Apex context insitiation is correct.
65 * @author Sergey Sachkov (sergey.sachkov@ericsson.com)
67 public class ContextInstantiation {
68 // Logger for this class
69 private static final XLogger LOGGER = XLoggerFactory.getXLogger(ContextInstantiation.class);
72 * Test context instantiation.
74 * @throws ContextException the context exception
76 // CHECKSTYLE:OFF: checkstyle:MaximumMethodLength
77 public void testContextInstantiation() throws ContextException {
78 // CHECKSTYLE:ON: checkstyle:MaximumMethodLength
79 LOGGER.debug("Running TestContextInstantiation test . . .");
81 final AxArtifactKey distributorKey = new AxArtifactKey("ApexDistributorInit", "0.0.1");
82 Distributor contextDistributor = null;
84 contextDistributor = new DistributorFactory().getDistributor(distributorKey);
85 } catch (final Exception exception) {
86 LOGGER.error("Error occured while Instantiating Distributor for : {}", distributorKey, exception);
91 final AxArtifactKey[] usedArtifactStackArray = {
92 new AxArtifactKey("testC-top", "0.0.1"), new AxArtifactKey("testC-next", "0.0.1"),
93 new AxArtifactKey("testC-bot", "0.0.1")
98 // CHECKSTYLE:OFF: checkstyle:magicNumber
99 final AxContextModel policyContextModel = TestContextAlbumFactory.createPolicyContextModel();
100 final AxValidationResult result = new AxValidationResult();
101 policyContextModel.validate(result);
102 LOGGER.debug(result.toString());
103 assert (result.isValid());
105 contextDistributor.registerModel(policyContextModel);
107 final ContextAlbum policyContextAlbum =
108 contextDistributor.createContextAlbum(new AxArtifactKey("PolicyContextAlbum", "0.0.1"));
109 assert (policyContextAlbum != null);
110 policyContextAlbum.setUserArtifactStack(usedArtifactStackArray);
112 final Float testFloat = new Float(3.14159265359);
113 final Date testDate = new Date();
115 final TestContextItem009 tci9 = new TestContextItem009();
116 tci9.setDateValue(new TestContextItem008(testDate));
117 tci9.setTZValue(TimeZone.getTimeZone("Europe/Dublin").getDisplayName());
120 final TestContextItem00A tciA = new TestContextItem00A();
121 tciA.setDateValue(new TestContextItem008(testDate));
122 tciA.setTZValue(TimeZone.getTimeZone("Europe/Dublin").getDisplayName());
124 tciA.setUTCOffset(-600);
125 tciA.setLocale(Locale.ENGLISH);
127 final TreeSet<String> testTreeSet = new TreeSet<>();
128 testTreeSet.add("one hundred");
129 testTreeSet.add("one hundred and one");
130 testTreeSet.add("one hundred and two");
131 testTreeSet.add("one hundred and three");
132 testTreeSet.add("one hundred and four");
134 final Map<String, String> testHashMap = new HashMap<>();
135 testHashMap.put("0", "zero");
136 testHashMap.put("1", "one");
137 testHashMap.put("2", "two");
138 testHashMap.put("3", "three");
139 testHashMap.put("4", "four");
141 final TestContextItem006 testPolicyContextItem000 =
142 new TestContextItem006("This is a policy context string");
143 final TestContextItem003 testPolicyContextItem001 = new TestContextItem003(0xFFFFFFFFFFFFFFFFL);
144 final TestContextItem005 testPolicyContextItem002 = new TestContextItem005(Math.PI);
145 final TestContextItem000 testPolicyContextItem003 = new TestContextItem000(true);
146 final TestContextItem003 testPolicyContextItem004 = new TestContextItem003(testDate.getTime());
147 final TestContextItem00C testPolicyContextItem005 = new TestContextItem00C(testHashMap);
149 final Map<String, Object> valueMapA = new LinkedHashMap<>();
150 valueMapA.put("TestPolicyContextItem001", testPolicyContextItem001);
151 valueMapA.put("TestPolicyContextItem002", testPolicyContextItem002);
152 valueMapA.put("TestPolicyContextItem003", testPolicyContextItem003);
153 valueMapA.put("TestPolicyContextItem004", testPolicyContextItem004);
154 valueMapA.put("TestPolicyContextItem005", testPolicyContextItem005);
155 valueMapA.put("TestPolicyContextItem000", testPolicyContextItem000);
158 policyContextAlbum.put("TestPolicyContextItem000", testPolicyContextItem000);
159 assert ("Test should throw an exception".equals(""));
160 } catch (final ContextRuntimeException e) {
161 assert (e.getMessage()
162 .equals("Failed to set context value for key \"TestPolicyContextItem000\" in album \"PolicyContextAlbum:0.0.1\": "
163 + "PolicyContextAlbum:0.0.1: object \"TestContextItem006 [stringValue=This is a policy context string]\" "
164 + "of class \"org.onap.policy.apex.context.test.concepts.TestContextItem006\""
165 + " not compatible with class \"org.onap.policy.apex.context.test.concepts.TestPolicyContextItem\""));
169 policyContextAlbum.putAll(valueMapA);
170 assert ("Test should throw an exception".equals(""));
171 } catch (final ContextRuntimeException e) {
172 assert (e.getMessage()
173 .equals("Failed to set context value for key \"TestPolicyContextItem001\" in album \"PolicyContextAlbum:0.0.1\": "
174 + "PolicyContextAlbum:0.0.1: object \"TestContextItem003 [longValue=-1]\" "
175 + "of class \"org.onap.policy.apex.context.test.concepts.TestContextItem003\""
176 + " not compatible with class \"org.onap.policy.apex.context.test.concepts.TestPolicyContextItem\""));
179 final TestPolicyContextItem policyContext = new TestPolicyContextItem();
181 LOGGER.debug(policyContextAlbum.toString());
183 policyContext.setTestPolicyContextItem000(testPolicyContextItem000);
184 policyContext.setTestPolicyContextItem001(testPolicyContextItem001);
185 policyContext.setTestPolicyContextItem002(testPolicyContextItem002);
186 policyContext.setTestPolicyContextItem003(testPolicyContextItem003);
187 policyContext.setTestPolicyContextItem004(testPolicyContextItem004);
188 policyContext.setTestPolicyContextItem005(testPolicyContextItem005);
190 final Map<String, Object> valueMap0 = new HashMap<>();
191 valueMap0.put("TestPolicyContextItem", policyContext);
193 policyContextAlbum.putAll(valueMap0);
195 final TestPolicyContextItem contextItem =
196 (TestPolicyContextItem) policyContextAlbum.get("TestPolicyContextItem");
197 assert (contextItem.getTestPolicyContextItem000().getStringValue()
198 .equals("This is a policy context string"));
199 assert (contextItem.getTestPolicyContextItem001().getLongValue() == 0xFFFFFFFFFFFFFFFFL);
200 assert (Double.compare(contextItem.getTestPolicyContextItem002().getDoubleValue(), Math.PI) == 0);
201 assert (contextItem.getTestPolicyContextItem003().getFlag());
202 assert (contextItem.getTestPolicyContextItem004().getLongValue() == testDate.getTime());
203 assert (contextItem.getTestPolicyContextItem005().getMapValue().equals(testHashMap));
205 final AxContextModel globalContextModel = TestContextAlbumFactory.createGlobalContextModel();
207 final TestContextItem000 testGlobalContextItem000 = new TestContextItem000(false);
208 final TestContextItem001 testGlobalContextItem001 = new TestContextItem001((byte) 0xFF);
209 final TestContextItem002 testGlobalContextItem002 = new TestContextItem002(0xFFFFFFFF);
210 final TestContextItem003 testGlobalContextItem003 = new TestContextItem003(0xFFFFFFFFFFFFFFFFL);
211 final TestContextItem004 testGlobalContextItem004 = new TestContextItem004(testFloat);
212 final TestContextItem005 testGlobalContextItem005 = new TestContextItem005(Math.PI);
213 final TestContextItem006 testGlobalContextItem006 =
214 new TestContextItem006("This is a global context string");
215 final TestContextItem007 testGlobalContextItem007 = new TestContextItem007(testDate.getTime());
216 final TestContextItem008 testGlobalContextItem008 = new TestContextItem008(testDate);
217 final TestContextItem00B testGlobalContextItem00B = new TestContextItem00B(testTreeSet);
218 final TestContextItem00C testGlobalContextItem00C = new TestContextItem00C(testHashMap);
220 final TestGlobalContextItem globalContext = new TestGlobalContextItem();
222 globalContext.setTestGlobalContextItem000(testGlobalContextItem000);
223 globalContext.setTestGlobalContextItem001(testGlobalContextItem001);
224 globalContext.setTestGlobalContextItem002(testGlobalContextItem002);
225 globalContext.setTestGlobalContextItem003(testGlobalContextItem003);
226 globalContext.setTestGlobalContextItem004(testGlobalContextItem004);
227 globalContext.setTestGlobalContextItem005(testGlobalContextItem005);
228 globalContext.setTestGlobalContextItem006(testGlobalContextItem006);
229 globalContext.setTestGlobalContextItem007(testGlobalContextItem007);
230 globalContext.setTestGlobalContextItem008(testGlobalContextItem008);
231 globalContext.setTestGlobalContextItem009(tci9);
232 globalContext.setTestGlobalContextItem00A(tciA);
233 globalContext.setTestGlobalContextItem00B(testGlobalContextItem00B);
234 globalContext.setTestGlobalContextItem00C(testGlobalContextItem00C);
235 final Map<String, Object> valueMap1 = new HashMap<>();
236 valueMap1.put("globalContext", globalContext);
239 contextDistributor.registerModel(globalContextModel);
240 } catch (final ContextException e) {
241 assert (e.getMessage().equals(
242 "active context albums found in distributor, clear the distributor before registering models"));
245 contextDistributor.registerModel(globalContextModel);
247 final ContextAlbum globalContextAlbum =
248 contextDistributor.createContextAlbum(new AxArtifactKey("GlobalContextAlbum", "0.0.1"));
249 assert (globalContextAlbum != null);
250 globalContextAlbum.setUserArtifactStack(usedArtifactStackArray);
252 globalContextAlbum.putAll(valueMap1);
254 final TestGlobalContextItem globalContextItem =
255 (TestGlobalContextItem) globalContextAlbum.get("globalContext");
256 assert (!globalContextItem.getTestGlobalContextItem000().getFlag());
257 assert (globalContextItem.getTestGlobalContextItem001().getByteValue() == (byte) 0xFF);
258 assert (globalContextItem.getTestGlobalContextItem002().getIntValue() == 0xFFFFFFFF);
259 assert (globalContextItem.getTestGlobalContextItem003().getLongValue() == 0xFFFFFFFFFFFFFFFFL);
260 assert (Float.compare(globalContextItem.getTestGlobalContextItem004().getFloatValue(), testFloat) == 0);
261 assert (Double.compare(globalContextItem.getTestGlobalContextItem005().getDoubleValue(), Math.PI) == 0);
262 assert (globalContextItem.getTestGlobalContextItem006().getStringValue()
263 .equals("This is a global context string"));
264 assert (globalContextItem.getTestGlobalContextItem007().getLongValue() == testDate.getTime());
265 assert (globalContextItem.getTestGlobalContextItem008().getDateValue().equals(testDate));
266 assert (globalContextItem.getTestGlobalContextItem009().getDateValue().getTime() == tci9.getDateValue()
268 assert (globalContextItem.getTestGlobalContextItem00A().getDateValue().getTime() == tciA.getDateValue()
270 assert (globalContextItem.getTestGlobalContextItem00B().getSetValue().equals(testTreeSet));
271 assert (globalContextItem.getTestGlobalContextItem00C().getMapValue().equals(testHashMap));
273 final AxContextModel externalContextModel = TestContextAlbumFactory.createExternalContextModel();
275 final TestExternalContextItem externalContext = new TestExternalContextItem();
277 final TestContextItem000 testExternalContextItem000 = new TestContextItem000(false);
278 final TestContextItem001 testExternalContextItem001 = new TestContextItem001((byte) 0xFF);
279 final TestContextItem002 testExternalContextItem002 = new TestContextItem002(0xFFFFFFFF);
280 final TestContextItem003 testExternalContextItem003 = new TestContextItem003(0xFFFFFFFFFFFFFFFFL);
281 final TestContextItem004 testExternalContextItem004 = new TestContextItem004(testFloat);
282 final TestContextItem005 testExternalContextItem005 = new TestContextItem005(Math.PI);
283 final TestContextItem006 testExternalContextItem006 =
284 new TestContextItem006("This is an external context string");
285 final TestContextItem007 testExternalContextItem007 = new TestContextItem007(testDate.getTime());
286 final TestContextItem008 testExternalContextItem008 = new TestContextItem008(testDate);
287 final TestContextItem00B testExternalContextItem00B = new TestContextItem00B(testTreeSet);
288 final TestContextItem00C testExternalContextItem00C = new TestContextItem00C(testHashMap);
290 final TestContextItem009 tci9A = new TestContextItem009(tci9);
291 final TestContextItem00A tciAA = new TestContextItem00A(tciA);
293 externalContext.setTestExternalContextItem000(testExternalContextItem000);
294 externalContext.setTestExternalContextItem001(testExternalContextItem001);
295 externalContext.setTestExternalContextItem002(testExternalContextItem002);
296 externalContext.setTestExternalContextItem003(testExternalContextItem003);
297 externalContext.setTestExternalContextItem004(testExternalContextItem004);
298 externalContext.setTestExternalContextItem005(testExternalContextItem005);
299 externalContext.setTestExternalContextItem006(testExternalContextItem006);
300 externalContext.setTestExternalContextItem007(testExternalContextItem007);
301 externalContext.setTestExternalContextItem008(testExternalContextItem008);
302 externalContext.setTestExternalContextItem009(tci9A);
303 externalContext.setTestExternalContextItem00A(tciAA);
304 externalContext.setTestExternalContextItem00B(testExternalContextItem00B);
305 externalContext.setTestExternalContextItem00C(testExternalContextItem00C);
307 final Map<String, Object> valueMap2 = new HashMap<>();
308 valueMap2.put("externalContext", externalContext);
310 contextDistributor.clear();
311 contextDistributor.init(new AxArtifactKey("ClearedandInittedDistributor", "0.0.1"));
312 contextDistributor.registerModel(externalContextModel);
314 final ContextAlbum externalContextAlbum =
315 contextDistributor.createContextAlbum(new AxArtifactKey("ExternalContextAlbum", "0.0.1"));
316 assert (externalContextAlbum != null);
317 externalContextAlbum.setUserArtifactStack(usedArtifactStackArray);
319 externalContextAlbum.putAll(valueMap2);
320 externalContextAlbum.getAlbumDefinition().setWritable(false);
322 final TestExternalContextItem externalContextItem =
323 (TestExternalContextItem) externalContextAlbum.get("externalContext");
325 assert (!externalContextItem.getTestExternalContextItem000().getFlag());
326 assert (externalContextItem.getTestExternalContextItem001().getByteValue() == (byte) 0xFF);
327 assert (externalContextItem.getTestExternalContextItem002().getIntValue() == 0xFFFFFFFF);
328 assert (externalContextItem.getTestExternalContextItem003().getLongValue() == 0xFFFFFFFFFFFFFFFFL);
329 assert (Float.compare(externalContextItem.getTestExternalContextItem004().getFloatValue(), testFloat) == 0);
330 assert (Double.compare(externalContextItem.getTestExternalContextItem005().getDoubleValue(), Math.PI) == 0);
331 assert (externalContextItem.getTestExternalContextItem006().getStringValue()
332 .equals("This is an external context string"));
333 assert (externalContextItem.getTestExternalContextItem007().getLongValue() == testDate.getTime());
334 assert (externalContextItem.getTestExternalContextItem008().getDateValue().equals(testDate));
335 assert (externalContextItem.getTestExternalContextItem009().getDateValue().getTime() == tci9A.getDateValue()
337 assert (externalContextItem.getTestExternalContextItem00A().getDateValue().getTime() == tciAA.getDateValue()
339 assert (externalContextItem.getTestExternalContextItem00B().getSetValue().equals(testTreeSet));
340 assert (externalContextItem.getTestExternalContextItem00C().getMapValue().equals(testHashMap));
342 final Collection<Object> mapValues = externalContextAlbum.values();
343 assert (externalContextAlbum.values().containsAll(mapValues));
345 // Check that clearing does not work
347 externalContextAlbum.clear();
348 assert ("Test should throw an exception".equals(""));
349 } catch (final ContextRuntimeException e) {
350 assert (e.getMessage()
351 .equals("album \"ExternalContextAlbum:0.0.1\" clear() not allowed on read only albums"));
354 assert (externalContextAlbum.size() == 1);
357 externalContextAlbum.containsKey(null);
358 } catch (final ContextRuntimeException e) {
359 assert (e.getMessage().equals("null values are illegal on method parameter \"key\""));
362 assert (externalContextAlbum.containsKey("externalContext"));
363 assert (!externalContextAlbum.containsKey("globalContext"));
366 externalContextAlbum.containsValue(null);
367 } catch (final ContextRuntimeException e) {
368 assert (e.getMessage().equals("null values are illegal on method parameter \"value\""));
371 assert (externalContextAlbum.containsValue(externalContext));
372 assert (!externalContextAlbum.containsValue(new String("Hello")));
374 final Set<Entry<String, Object>> entrySet = externalContextAlbum.entrySet();
375 assert (entrySet.size() == 1);
378 externalContextAlbum.get(null);
379 } catch (final ContextRuntimeException e) {
380 assert (e.getMessage()
381 .equals("album \"ExternalContextAlbum:0.0.1\" null keys are illegal on keys for get()"));
384 final Object aObject = externalContextAlbum.get("externalContext");
385 assert (aObject.equals(externalContext));
387 // put null keys should fail, throws a runtime exception
389 externalContextAlbum.put(null, null);
390 } catch (final ContextRuntimeException e) {
391 assert (e.getMessage()
392 .equals("album \"ExternalContextAlbum:0.0.1\" null keys are illegal on keys for put()"));
396 externalContextAlbum.put("TestExternalContextItem00A", null);
397 } catch (final ContextRuntimeException e) {
398 assert (e.getMessage().equals(
399 "album \"ExternalContextAlbum:0.0.1\" null values are illegal on key \"TestExternalContextItem00A\" for put()"));
401 assert (externalContextItem.getTestExternalContextItem00A().equals(tciAA));
403 // Should return the hash set
404 assert (externalContextItem.getTestExternalContextItem00B().getSetValue().equals(testTreeSet));
406 assert (externalContextAlbum.values().containsAll(mapValues));
408 // Set the write flag back as it should be
409 externalContextAlbum.getAlbumDefinition().setWritable(true);
411 // Put should return the previous contextItem
412 final TestExternalContextItem externalContextOther = new TestExternalContextItem();
413 externalContextOther.setTestExternalContextItem002(new TestContextItem002());
414 externalContextOther.getTestExternalContextItem002().setIntValue(2000);
416 final Object object = externalContextAlbum.put("externalContext", externalContextOther);
417 assert (object.equals(externalContext));
419 final TestExternalContextItem item = (TestExternalContextItem) externalContextAlbum.get("externalContext");
420 assert (item.getTestExternalContextItem002().getIntValue() == 2000);
421 final Object actualExternalContext = externalContextAlbum.put("externalContext", externalContext);
422 assert (actualExternalContext.equals(externalContextOther));
423 assert (externalContextItem.getTestExternalContextItem002().getIntValue() == -1);
426 externalContextAlbum.put("TestExternalContextItem00A", null);
427 } catch (final ContextRuntimeException e) {
428 assert (e.getMessage().equals(
429 "album \"ExternalContextAlbum:0.0.1\" null values are illegal on key \"TestExternalContextItem00A\" for put()"));
431 assert (externalContextAlbum.get("externalContext").equals(externalContext));
434 externalContextAlbum.put("TestExternalContextItemFFF", null);
435 } catch (final ContextRuntimeException e) {
436 assert (e.getMessage().equals(
437 "album \"ExternalContextAlbum:0.0.1\" null values are illegal on key \"TestExternalContextItemFFF\" for put()"));
439 assert (externalContextAlbum.size() == 1);
442 externalContextAlbum.put("TestExternalContextItemFFF", null);
443 } catch (final ContextRuntimeException e) {
444 assert (e.getMessage().equals(
445 "album \"ExternalContextAlbum:0.0.1\" null values are illegal on key \"TestExternalContextItemFFF\" for put()"));
447 assert (externalContextAlbum.size() == 1);
449 // Should ignore remove
450 externalContextAlbum.remove("TestExternalContextItem017");
451 assert (externalContextAlbum.size() == 1);
453 assert (externalContextAlbum.values().size() == 1);
454 assert (externalContextAlbum.values().containsAll(mapValues));
455 // CHECKSTYLE:ON: checkstyle:magicNumber
456 } catch (final Exception exception) {
457 LOGGER.error("Error: ", exception);
458 contextDistributor.clear();
459 assert ("Test has failed".equals(""));
463 contextDistributor.clear();
464 } catch (final Exception exception) {
465 LOGGER.error("Error occured while clearing context distributor: ", exception);
466 assert ("Test has failed".equals(""));