2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2016-2018 Ericsson. All rights reserved.
4 * Modifications Copyright (C) 2019 Nordix Foundation.
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.apex.testsuites.integration.context.distribution;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertNull;
27 import static org.junit.Assert.assertTrue;
28 import static org.junit.Assert.fail;
29 import static org.onap.policy.apex.testsuites.integration.context.factory.TestContextAlbumFactory.createMultiAlbumsContextModel;
30 import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.APEX_DISTRIBUTOR;
31 import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.BYTE_VAL;
32 import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.DATE_CONTEXT_ALBUM;
33 import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.EXCEPTION_MESSAGE;
34 import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.FLOAT_VAL;
35 import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.INT_VAL;
36 import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.LONG_VAL;
37 import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.PI_VAL;
38 import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.STRING_GLOBAL_VAL;
39 import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.TIME_ZONE;
40 import static org.onap.policy.apex.testsuites.integration.context.utils.Constants.VERSION;
42 import java.util.Collection;
43 import java.util.Date;
44 import java.util.HashMap;
45 import java.util.Locale;
47 import java.util.Map.Entry;
49 import java.util.TimeZone;
50 import org.onap.policy.apex.context.ContextAlbum;
51 import org.onap.policy.apex.context.ContextException;
52 import org.onap.policy.apex.context.Distributor;
53 import org.onap.policy.apex.context.impl.distribution.DistributorFactory;
54 import org.onap.policy.apex.context.test.concepts.TestContextBooleanItem;
55 import org.onap.policy.apex.context.test.concepts.TestContextByteItem;
56 import org.onap.policy.apex.context.test.concepts.TestContextDateItem;
57 import org.onap.policy.apex.context.test.concepts.TestContextDateLocaleItem;
58 import org.onap.policy.apex.context.test.concepts.TestContextDateTzItem;
59 import org.onap.policy.apex.context.test.concepts.TestContextDoubleItem;
60 import org.onap.policy.apex.context.test.concepts.TestContextFloatItem;
61 import org.onap.policy.apex.context.test.concepts.TestContextIntItem;
62 import org.onap.policy.apex.context.test.concepts.TestContextLongItem;
63 import org.onap.policy.apex.context.test.concepts.TestContextLongObjectItem;
64 import org.onap.policy.apex.context.test.concepts.TestContextStringItem;
65 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
66 import org.onap.policy.apex.testsuites.integration.context.utils.Constants;
67 import org.slf4j.ext.XLogger;
68 import org.slf4j.ext.XLoggerFactory;
71 * The Class SequentialContextInstantiation checks sequential initiation of context.
73 * @author Sergey Sachkov (sergey.sachkov@ericsson.com)
75 public class SequentialContextInstantiation {
76 // Logger for this class
77 private static final XLogger LOGGER = XLoggerFactory.getXLogger(SequentialContextInstantiation.class);
79 // Recurring string constants.
80 private static final String TEST_AB = "TestAB";
81 private static final String TEST_AA = "TestAA";
82 private static final String ITEM_NULL = "ItemNull";
83 private static final String ITEM06 = "Item06";
84 private static final String ITEM05 = "Item05";
85 private static final String ITEM03 = "Item03";
86 private static final String ITEM02 = "Item02";
87 private static final String ITEM01 = "Item01";
88 private static final String ITEM00_2 = "Item00_2";
90 // Recurring string constants.
91 private static final String NORMAL_TEST_EXCEPTION = "normal test exception";
92 private static final String DV1 = "dv1";
93 private static final String DV0 = "dv0";
96 * Test sequential context instantiation.
98 * @throws ContextException the context exception
100 public void testSequentialContextInstantiation() throws ContextException {
101 LOGGER.debug("Running TestContextInstantiation test . . .");
103 final Distributor contextDistributor = getDistributor();
106 final ContextAlbum dateAlbum = getContextAlbum(DATE_CONTEXT_ALBUM, contextDistributor);
107 final Date testDate = new Date();
108 final TestContextDateLocaleItem tciA00 = getTestContextDateLocaleItem();
110 dateAlbum.put(DV0, tciA00);
111 assertEquals(tciA00, dateAlbum.get(DV0));
113 dateAlbum.put(DV1, tciA00);
114 assertEquals(tciA00, dateAlbum.get(DV1));
116 final TestContextDateTzItem tci9 = getTestContextDateTzItem(testDate);
119 dateAlbum.put("tci9", tci9);
120 } catch (final Exception e) {
121 final String message = "class \"" + TestContextDateTzItem.class.getName()
122 + "\" not compatible with class \"" + TestContextDateLocaleItem.class.getName()
124 assertTrue(e.getMessage().contains(message));
125 LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
128 final TestContextDateLocaleItem tciA01 = new TestContextDateLocaleItem(tciA00);
129 final TestContextDateLocaleItem tciA02 = new TestContextDateLocaleItem(tciA00);
130 final TestContextDateLocaleItem tciA03 = new TestContextDateLocaleItem(tciA00);
132 final Map<String, Object> valueMap0 = new HashMap<>();
133 valueMap0.put(ITEM01, tciA01);
134 valueMap0.put(ITEM02, tciA02);
135 valueMap0.put(ITEM03, tciA03);
137 dateAlbum.putAll(valueMap0);
138 assertEquals(5, dateAlbum.size());
139 assertEquals(tciA01, dateAlbum.get(ITEM01));
140 assertEquals(tciA02, dateAlbum.get(ITEM02));
141 assertEquals(tciA03, dateAlbum.get(ITEM03));
143 final Map<String, Object> valueMap1 = getMap(testDate, tciA00, tci9);
145 // Get another reference to the album
146 final ContextAlbum dateAlbum1 = getContextAlbum(DATE_CONTEXT_ALBUM, contextDistributor);
149 dateAlbum1.putAll(valueMap1);
150 fail(EXCEPTION_MESSAGE);
151 } catch (final Exception e) {
152 assertTrue(e.getMessage().endsWith("not compatible with class \""
153 + TestContextDateLocaleItem.class.getName() + "\""));
154 LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
156 assertEquals(5, dateAlbum1.size());
159 valueMap1.put(ITEM00_2, tciA00);
160 dateAlbum1.putAll(valueMap1);
161 assertEquals(6, dateAlbum1.size());
163 assertEquals(tciA00, dateAlbum1.get(ITEM00_2));
164 dateAlbum.remove(ITEM00_2);
165 assertEquals(5, dateAlbum1.size());
167 final ContextAlbum dateAlbumCopy = getContextAlbum(DATE_CONTEXT_ALBUM, contextDistributor);
169 final Map<String, Object> valueMap2 = new HashMap<>();
170 valueMap2.put("Item04", tciA01);
171 valueMap2.put(ITEM05, tciA02);
172 valueMap2.put(ITEM06, tciA03);
174 dateAlbumCopy.putAll(valueMap2);
175 assertEquals(8, dateAlbumCopy.size());
177 assertEquals(tciA03, dateAlbumCopy.get(ITEM06));
179 final Collection<Object> mapValues = dateAlbum.values();
180 assertTrue(dateAlbumCopy.values().containsAll(mapValues));
182 // Check that clearing works
184 assertTrue(dateAlbum1.isEmpty());
186 dateAlbum.put("Item00", tciA00);
187 final Map<String, Object> valueMap3 = new HashMap<>();
188 valueMap3.put(ITEM01, tciA01);
189 valueMap3.put(ITEM02, tciA02);
190 valueMap3.put(ITEM03, tciA03);
191 dateAlbum.putAll(valueMap3);
193 final Map<String, Object> valueMap4 = new HashMap<>();
194 valueMap4.put("Item04", tciA01);
195 valueMap4.put(ITEM05, tciA02);
196 valueMap4.put(ITEM06, tciA03);
198 dateAlbumCopy.putAll(valueMap4);
200 assertContains(dateAlbum, tciA01);
202 final Set<Entry<String, Object>> entrySet = dateAlbum.entrySet();
203 assertEquals(7, entrySet.size());
205 assertAlbumGetAndPutMethods(dateAlbum, tciA03, tciA00);
208 dateAlbum.remove(TEST_AA);
209 dateAlbum.remove(TEST_AB);
210 dateAlbum.remove(ITEM_NULL);
211 assertEquals(7, entrySet.size());
212 assertTrue(dateAlbumCopy.values().containsAll(mapValues));
213 // CHECKSTYLE:ON: checkstyle:magicNumber
215 contextDistributor.clear();
219 private void assertContains(final ContextAlbum dateAlbum, final TestContextDateLocaleItem tciA01) {
221 dateAlbum.containsKey(null);
222 fail(EXCEPTION_MESSAGE);
223 } catch (final Exception e) {
224 assertEquals("null values are illegal on method parameter \"key\"", e.getMessage());
225 LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
228 assertTrue(dateAlbum.containsKey(ITEM05));
229 assertTrue(!dateAlbum.containsKey("Item07"));
232 dateAlbum.containsValue(null);
233 } catch (final Exception e) {
234 assertEquals("null values are illegal on method parameter \"value\"", e.getMessage());
235 LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
238 assertTrue(dateAlbum.containsValue(tciA01));
239 assertTrue(!dateAlbum.containsValue("Hello"));
242 private void assertAlbumGetAndPutMethods(final ContextAlbum dateAlbum, final TestContextDateLocaleItem tciA03,
243 final TestContextDateLocaleItem tciA00) {
246 fail(EXCEPTION_MESSAGE);
247 } catch (final Exception e) {
248 assertEquals("album \"DateContextAlbum:0.0.1\" null keys are illegal on keys for get()", e.getMessage());
249 LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
252 final Object aObject = dateAlbum.get(ITEM03);
253 assertEquals(tciA03, aObject);
255 dateAlbum.put(null, null);
256 fail(EXCEPTION_MESSAGE);
257 } catch (final Exception e) {
258 assertEquals("album \"DateContextAlbum:0.0.1\" null keys are illegal on keys for put()", e.getMessage());
259 LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
262 // Put null ContextItem should work (return null)
264 dateAlbum.put(ITEM_NULL, null);
265 } catch (final Exception e) {
266 assertEquals("album \"DateContextAlbum:0.0.1\" null values are illegal on key \"ItemNull\" for put()",
268 LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
271 // Should return null
272 assertNull(dateAlbum.get(ITEM_NULL));
273 // Put should return the previous contextItem
274 tciA00.setDst(false);
275 final TestContextDateLocaleItem tciA03Clone = new TestContextDateLocaleItem(tciA03);
276 tciA03Clone.setDst(true);
277 TestContextDateLocaleItem retItem = (TestContextDateLocaleItem) dateAlbum.put(ITEM03, tciA03Clone);
278 assertEquals(tciA03, retItem);
279 retItem = (TestContextDateLocaleItem) dateAlbum.put(ITEM03, tciA03);
280 assertEquals(tciA03Clone, retItem);
283 dateAlbum.put(ITEM_NULL, null);
284 fail(EXCEPTION_MESSAGE);
286 } catch (final Exception e) {
287 assert ("album \"DateContextAlbum:0.0.1\" null values are illegal on key \"ItemNull\" for put()"
288 .equals(e.getMessage()));
289 LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
292 dateAlbum.put(TEST_AA, tciA00);
293 assertEquals(tciA00, dateAlbum.get(TEST_AA));
295 // Should print warning
297 dateAlbum.put(TEST_AA, null);
298 fail(EXCEPTION_MESSAGE);
299 } catch (final Exception e) {
300 assertEquals("album \"DateContextAlbum:0.0.1\" null values are illegal on key \"TestAA\" for put()",
302 LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
304 assertEquals(8, dateAlbum.size());
306 dateAlbum.put(TEST_AB, null);
307 fail(EXCEPTION_MESSAGE);
308 } catch (final Exception e) {
309 assertEquals("album \"DateContextAlbum:0.0.1\" null values are illegal on key \"TestAB\" for put()",
311 LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
313 assertEquals(8, dateAlbum.size());
316 private Map<String, Object> getMap(final Date testDate, final TestContextDateLocaleItem tciA00,
317 final TestContextDateTzItem tci9) {
318 final TestContextBooleanItem testBadItem000 = new TestContextBooleanItem();
319 final TestContextByteItem testBadItem001 = new TestContextByteItem();
320 final TestContextIntItem testBadItem002 = new TestContextIntItem();
321 final TestContextLongItem testBadItem003 = new TestContextLongItem();
322 final TestContextFloatItem testBadItem004 = new TestContextFloatItem();
323 final TestContextDoubleItem testBadItem005 = new TestContextDoubleItem();
324 final TestContextStringItem testBadItem006 = new TestContextStringItem();
325 final TestContextLongObjectItem testBadItem007 = new TestContextLongObjectItem();
326 final TestContextDateItem testBadItem008 = new TestContextDateItem();
328 testBadItem000.setFlag(false);
329 testBadItem001.setByteValue(BYTE_VAL);
330 testBadItem002.setIntValue(INT_VAL);
331 testBadItem003.setLongValue(LONG_VAL);
332 testBadItem004.setFloatValue(FLOAT_VAL);
333 testBadItem005.setDoubleValue(PI_VAL);
334 testBadItem006.setStringValue(STRING_GLOBAL_VAL);
335 testBadItem007.setLongValue(testDate.getTime());
336 testBadItem008.setDateValue(testDate);
338 final Map<String, Object> values = new HashMap<>();
339 values.put("TestBadItem000", testBadItem000);
340 values.put("TestBadItem001", testBadItem001);
341 values.put("TestBadItem002", testBadItem002);
342 values.put("TestBadItem003", testBadItem003);
343 values.put("TestBadItem004", testBadItem004);
344 values.put("TestBadItem005", testBadItem005);
345 values.put("TestBadItem006", testBadItem006);
346 values.put("TestBadItem007", testBadItem007);
347 values.put("TestBadItem008", testBadItem008);
348 values.put("TestBadItem009", tci9);
349 values.put(ITEM00_2, tciA00);
353 private TestContextDateTzItem getTestContextDateTzItem(final Date testDate) {
354 final TestContextDateTzItem tci9 = new TestContextDateTzItem();
355 tci9.setDateValue(new TestContextDateItem(testDate));
356 tci9.setTzValue(TimeZone.getTimeZone("Europe/Dublin").getDisplayName());
361 private TestContextDateLocaleItem getTestContextDateLocaleItem() {
362 final TestContextDateLocaleItem tciA00 = new TestContextDateLocaleItem();
363 tciA00.setDateValue(new TestContextDateItem(new Date()));
364 tciA00.setTzValue(TIME_ZONE.getDisplayName());
366 tciA00.setUtcOffset(-600);
367 tciA00.setLocale(Locale.ENGLISH);
371 private ContextAlbum getContextAlbum(final String albumName, final Distributor contextDistributor)
372 throws ContextException {
373 final ContextAlbum dateAlbum = contextDistributor.createContextAlbum(new AxArtifactKey(albumName, VERSION));
374 assertNotNull(dateAlbum);
375 dateAlbum.setUserArtifactStack(Constants.getAxArtifactKeyArray());
379 private Distributor getDistributor() throws ContextException {
380 final AxArtifactKey distributorKey = new AxArtifactKey(APEX_DISTRIBUTOR, VERSION);
381 final Distributor contextDistributor = new DistributorFactory().getDistributor(distributorKey);
382 contextDistributor.registerModel(createMultiAlbumsContextModel());
383 return contextDistributor;