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 static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.assertNull;
26 import static org.junit.Assert.assertTrue;
27 import static org.junit.Assert.fail;
28 import static org.onap.policy.apex.context.test.factory.TestContextAlbumFactory.createMultiAlbumsContextModel;
29 import static org.onap.policy.apex.context.test.utils.Constants.APEX_DISTRIBUTOR;
30 import static org.onap.policy.apex.context.test.utils.Constants.BYTE_VAL;
31 import static org.onap.policy.apex.context.test.utils.Constants.DATE_CONTEXT_ALBUM;
32 import static org.onap.policy.apex.context.test.utils.Constants.EXCEPTION_MESSAGE;
33 import static org.onap.policy.apex.context.test.utils.Constants.FLOAT_VAL;
34 import static org.onap.policy.apex.context.test.utils.Constants.INT_VAL;
35 import static org.onap.policy.apex.context.test.utils.Constants.LONG_VAL;
36 import static org.onap.policy.apex.context.test.utils.Constants.PI_VAL;
37 import static org.onap.policy.apex.context.test.utils.Constants.STRING_GLOBAL_VAL;
38 import static org.onap.policy.apex.context.test.utils.Constants.TIME_ZONE;
39 import static org.onap.policy.apex.context.test.utils.Constants.USED_ARTIFACT_STACK_ARRAY;
40 import static org.onap.policy.apex.context.test.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;
51 import org.onap.policy.apex.context.ContextAlbum;
52 import org.onap.policy.apex.context.ContextException;
53 import org.onap.policy.apex.context.Distributor;
54 import org.onap.policy.apex.context.impl.distribution.DistributorFactory;
55 import org.onap.policy.apex.context.test.concepts.TestContextBooleanItem;
56 import org.onap.policy.apex.context.test.concepts.TestContextByteItem;
57 import org.onap.policy.apex.context.test.concepts.TestContextDateItem;
58 import org.onap.policy.apex.context.test.concepts.TestContextDateLocaleItem;
59 import org.onap.policy.apex.context.test.concepts.TestContextDateTzItem;
60 import org.onap.policy.apex.context.test.concepts.TestContextDoubleItem;
61 import org.onap.policy.apex.context.test.concepts.TestContextFloatItem;
62 import org.onap.policy.apex.context.test.concepts.TestContextIntItem;
63 import org.onap.policy.apex.context.test.concepts.TestContextLongItem;
64 import org.onap.policy.apex.context.test.concepts.TestContextLongObjectItem;
65 import org.onap.policy.apex.context.test.concepts.TestContextStringItem;
66 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
67 import org.slf4j.ext.XLogger;
68 import org.slf4j.ext.XLoggerFactory;
73 * The Class SequentialContextInstantiation checks sequential initiation of context.
75 * @author Sergey Sachkov (sergey.sachkov@ericsson.com)
77 public class SequentialContextInstantiation {
78 private static final String DV1 = "dv1";
79 private static final String DV0 = "dv0";
80 // Logger for this class
81 private static final XLogger LOGGER = XLoggerFactory.getXLogger(SequentialContextInstantiation.class);
84 * Test sequential context instantiation.
86 * @throws ContextException the context exception
88 public void testSequentialContextInstantiation() throws ContextException {
89 LOGGER.debug("Running TestContextInstantiation test . . .");
91 final Distributor contextDistributor = getDistributor();
94 final ContextAlbum dateAlbum = getContextAlbum(DATE_CONTEXT_ALBUM, contextDistributor);
95 final Date testDate = new Date();
96 final TestContextDateLocaleItem tciA00 = getTestContextDateLocaleItem();
98 dateAlbum.put(DV0, tciA00);
99 assertEquals(tciA00, dateAlbum.get(DV0));
101 dateAlbum.put(DV1, tciA00);
102 assertEquals(tciA00, dateAlbum.get(DV1));
104 final TestContextDateTzItem tci9 = getTestContextDateTzItem(testDate);
107 dateAlbum.put("tci9", tci9);
108 } catch (final Exception e) {
109 final String message = "class \"" + TestContextDateTzItem.class.getCanonicalName()
110 + "\" not compatible with class \"" + TestContextDateLocaleItem.class.getCanonicalName() + "\"";
111 assertTrue(e.getMessage().contains(message));
114 final TestContextDateLocaleItem tciA01 = new TestContextDateLocaleItem(tciA00);
115 final TestContextDateLocaleItem tciA02 = new TestContextDateLocaleItem(tciA00);
116 final TestContextDateLocaleItem tciA03 = new TestContextDateLocaleItem(tciA00);
118 final Map<String, Object> valueMap0 = new HashMap<>();
119 valueMap0.put("Item01", tciA01);
120 valueMap0.put("Item02", tciA02);
121 valueMap0.put("Item03", tciA03);
123 dateAlbum.putAll(valueMap0);
124 assertEquals(5, dateAlbum.size());
125 assertEquals(tciA01, dateAlbum.get("Item01"));
126 assertEquals(tciA02, dateAlbum.get("Item02"));
127 assertEquals(tciA03, dateAlbum.get("Item03"));
129 final Map<String, Object> valueMap1 = getMap(testDate, tciA00, tci9);
131 // Get another reference to the album
132 final ContextAlbum dateAlbum1 = getContextAlbum(DATE_CONTEXT_ALBUM, contextDistributor);
135 dateAlbum1.putAll(valueMap1);
136 fail(EXCEPTION_MESSAGE);
137 } catch (final Exception e) {
138 assertTrue(e.getMessage().endsWith(
139 "not compatible with class \"" + TestContextDateLocaleItem.class.getCanonicalName() + "\""));
141 assertEquals(5, dateAlbum1.size());
144 valueMap1.put("Item00_2", tciA00);
145 dateAlbum1.putAll(valueMap1);
146 assertEquals(6, dateAlbum1.size());
148 assertEquals(tciA00, dateAlbum1.get("Item00_2"));
149 dateAlbum.remove("Item00_2");
150 assertEquals(5, dateAlbum1.size());
152 final ContextAlbum dateAlbumCopy = getContextAlbum(DATE_CONTEXT_ALBUM, contextDistributor);
154 final Map<String, Object> valueMap2 = new HashMap<>();
155 valueMap2.put("Item04", tciA01);
156 valueMap2.put("Item05", tciA02);
157 valueMap2.put("Item06", tciA03);
159 dateAlbumCopy.putAll(valueMap2);
160 assertEquals(8, dateAlbumCopy.size());
162 assertEquals(tciA03, dateAlbumCopy.get("Item06"));
164 final Collection<Object> mapValues = dateAlbum.values();
165 assertTrue(dateAlbumCopy.values().containsAll(mapValues));
167 // Check that clearing works
169 assertTrue(dateAlbum1.isEmpty());
172 dateAlbum.put("Item00", tciA00);
173 final Map<String, Object> valueMap3 = new HashMap<>();
174 valueMap3.put("Item01", tciA01);
175 valueMap3.put("Item02", tciA02);
176 valueMap3.put("Item03", tciA03);
177 dateAlbum.putAll(valueMap3);
179 final Map<String, Object> valueMap4 = new HashMap<>();
180 valueMap4.put("Item04", tciA01);
181 valueMap4.put("Item05", tciA02);
182 valueMap4.put("Item06", tciA03);
184 dateAlbumCopy.putAll(valueMap4);
186 assertContains(dateAlbum, tciA01);
188 final Set<Entry<String, Object>> entrySet = dateAlbum.entrySet();
189 assertEquals(7, entrySet.size());
191 assertAlbumGetAndPutMethods(dateAlbum, tciA03, tciA00);
194 dateAlbum.remove("TestAA");
195 dateAlbum.remove("TestAB");
196 dateAlbum.remove("ItemNull");
197 assertEquals(7, entrySet.size());
198 assertTrue(dateAlbumCopy.values().containsAll(mapValues));
199 // CHECKSTYLE:ON: checkstyle:magicNumber
201 contextDistributor.clear();
205 private void assertContains(final ContextAlbum dateAlbum, final TestContextDateLocaleItem tciA01) {
207 dateAlbum.containsKey(null);
208 fail(EXCEPTION_MESSAGE);
209 } catch (final Exception e) {
210 assertEquals("null values are illegal on method parameter \"key\"", e.getMessage());
213 assertTrue(dateAlbum.containsKey("Item05"));
214 assertTrue(!dateAlbum.containsKey("Item07"));
217 dateAlbum.containsValue(null);
218 } catch (final Exception e) {
219 assertEquals("null values are illegal on method parameter \"value\"", e.getMessage());
223 assertTrue(dateAlbum.containsValue(tciA01));
224 assertTrue(!dateAlbum.containsValue("Hello"));
227 private void assertAlbumGetAndPutMethods(final ContextAlbum dateAlbum, final TestContextDateLocaleItem tciA03,
228 final TestContextDateLocaleItem tciA00) {
231 fail(EXCEPTION_MESSAGE);
232 } catch (final Exception e) {
233 assertEquals("album \"DateContextAlbum:0.0.1\" null keys are illegal on keys for get()", e.getMessage());
236 final Object aObject = dateAlbum.get("Item03");
237 assertEquals(tciA03, aObject);
239 dateAlbum.put(null, null);
240 fail(EXCEPTION_MESSAGE);
241 } catch (final Exception e) {
242 assertEquals("album \"DateContextAlbum:0.0.1\" null keys are illegal on keys for put()", e.getMessage());
245 // Put null ContextItem should work (return null)
247 dateAlbum.put("ItemNull", null);
248 } catch (final Exception e) {
249 assertEquals("album \"DateContextAlbum:0.0.1\" null values are illegal on key \"ItemNull\" for put()",
253 // Should return null
254 assertNull(dateAlbum.get("ItemNull"));
255 // Put should return the previous contextItem
256 tciA00.setDST(false);
257 final TestContextDateLocaleItem tciA03_clone = new TestContextDateLocaleItem(tciA03);
258 tciA03_clone.setDST(true);
259 TestContextDateLocaleItem retItem = (TestContextDateLocaleItem) dateAlbum.put("Item03", tciA03_clone);
260 assertEquals(tciA03, retItem);
261 retItem = (TestContextDateLocaleItem) dateAlbum.put("Item03", tciA03);
262 assertEquals(tciA03_clone, retItem);
265 dateAlbum.put("ItemNull", null);
266 fail(EXCEPTION_MESSAGE);
268 } catch (final Exception e) {
269 assert (e.getMessage()
270 .equals("album \"DateContextAlbum:0.0.1\" null values are illegal on key \"ItemNull\" for put()"));
273 dateAlbum.put("TestAA", tciA00);
274 assertEquals(tciA00, dateAlbum.get("TestAA"));
276 // Should print warning
278 dateAlbum.put("TestAA", null);
279 fail(EXCEPTION_MESSAGE);
280 } catch (final Exception e) {
281 assertEquals("album \"DateContextAlbum:0.0.1\" null values are illegal on key \"TestAA\" for put()",
284 assertEquals(8, dateAlbum.size());
286 dateAlbum.put("TestAB", null);
287 fail(EXCEPTION_MESSAGE);
288 } catch (final Exception e) {
289 assertEquals("album \"DateContextAlbum:0.0.1\" null values are illegal on key \"TestAB\" for put()",
292 assertEquals(8, dateAlbum.size());
295 private Map<String, Object> getMap(final Date testDate, final TestContextDateLocaleItem tciA00,
296 final TestContextDateTzItem tci9) {
297 final TestContextBooleanItem testBadItem000 = new TestContextBooleanItem();
298 final TestContextByteItem testBadItem001 = new TestContextByteItem();
299 final TestContextIntItem testBadItem002 = new TestContextIntItem();
300 final TestContextLongItem testBadItem003 = new TestContextLongItem();
301 final TestContextFloatItem testBadItem004 = new TestContextFloatItem();
302 final TestContextDoubleItem testBadItem005 = new TestContextDoubleItem();
303 final TestContextStringItem testBadItem006 = new TestContextStringItem();
304 final TestContextLongObjectItem testBadItem007 = new TestContextLongObjectItem();
305 final TestContextDateItem testBadItem008 = new TestContextDateItem();
307 testBadItem000.setFlag(false);
308 testBadItem001.setByteValue(BYTE_VAL);
309 testBadItem002.setIntValue(INT_VAL);
310 testBadItem003.setLongValue(LONG_VAL);
311 testBadItem004.setFloatValue(new Float(FLOAT_VAL));
312 testBadItem005.setDoubleValue(PI_VAL);
313 testBadItem006.setStringValue(STRING_GLOBAL_VAL);
314 testBadItem007.setLongValue(testDate.getTime());
315 testBadItem008.setDateValue(testDate);
317 final Map<String, Object> values = new HashMap<>();
318 values.put("TestBadItem000", testBadItem000);
319 values.put("TestBadItem001", testBadItem001);
320 values.put("TestBadItem002", testBadItem002);
321 values.put("TestBadItem003", testBadItem003);
322 values.put("TestBadItem004", testBadItem004);
323 values.put("TestBadItem005", testBadItem005);
324 values.put("TestBadItem006", testBadItem006);
325 values.put("TestBadItem007", testBadItem007);
326 values.put("TestBadItem008", testBadItem008);
327 values.put("TestBadItem009", tci9);
328 values.put("Item00_2", tciA00);
332 private TestContextDateTzItem getTestContextDateTzItem(final Date testDate) {
333 final TestContextDateTzItem tci9 = new TestContextDateTzItem();
334 tci9.setDateValue(new TestContextDateItem(testDate));
335 tci9.setTZValue(TimeZone.getTimeZone("Europe/Dublin").getDisplayName());
340 private TestContextDateLocaleItem getTestContextDateLocaleItem() {
341 final TestContextDateLocaleItem tciA00 = new TestContextDateLocaleItem();
342 tciA00.setDateValue(new TestContextDateItem(new Date()));
343 tciA00.setTZValue(TIME_ZONE.getDisplayName());
345 tciA00.setUTCOffset(-600);
346 tciA00.setLocale(Locale.ENGLISH);
350 private ContextAlbum getContextAlbum(final String albumName, final Distributor contextDistributor)
351 throws ContextException {
352 final ContextAlbum dateAlbum = contextDistributor.createContextAlbum(new AxArtifactKey(albumName, VERSION));
353 assertNotNull(dateAlbum);
354 dateAlbum.setUserArtifactStack(USED_ARTIFACT_STACK_ARRAY);
358 private Distributor getDistributor() throws ContextException {
359 final AxArtifactKey distributorKey = new AxArtifactKey(APEX_DISTRIBUTOR, VERSION);
360 final Distributor contextDistributor = new DistributorFactory().getDistributor(distributorKey);
361 contextDistributor.registerModel(createMultiAlbumsContextModel());
362 return contextDistributor;