93c0179f8f0e8d048da5867dc88b138c90aaea11
[policy/apex-pdp.git] / testsuites / integration / integration-context-test / src / test / java / org / onap / policy / apex / testsuites / integration / context / distribution / SequentialContextInstantiation.java
1 /*-
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
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.apex.testsuites.integration.context.distribution;
23
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;
41
42 import java.util.Collection;
43 import java.util.Date;
44 import java.util.HashMap;
45 import java.util.Locale;
46 import java.util.Map;
47 import java.util.Map.Entry;
48 import java.util.Set;
49 import java.util.TimeZone;
50
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.onap.policy.apex.testsuites.integration.context.utils.Constants;
68 import org.slf4j.ext.XLogger;
69 import org.slf4j.ext.XLoggerFactory;
70
71 /**
72  * The Class SequentialContextInstantiation checks sequential initiation of context.
73  *
74  * @author Sergey Sachkov (sergey.sachkov@ericsson.com)
75  */
76 public class SequentialContextInstantiation {
77     // Logger for this class
78     private static final XLogger LOGGER = XLoggerFactory.getXLogger(SequentialContextInstantiation.class);
79
80     // Recurring string constants.
81     private static final String TEST_AB = "TestAB";
82     private static final String TEST_AA = "TestAA";
83     private static final String ITEM_NULL = "ItemNull";
84     private static final String ITEM06 = "Item06";
85     private static final String ITEM05 = "Item05";
86     private static final String ITEM03 = "Item03";
87     private static final String ITEM02 = "Item02";
88     private static final String ITEM01 = "Item01";
89     private static final String ITEM00_2 = "Item00_2";
90
91     // Recurring string constants.
92     private static final String NORMAL_TEST_EXCEPTION = "normal test exception";
93     private static final String DV1 = "dv1";
94     private static final String DV0 = "dv0";
95
96     /**
97      * Test sequential context instantiation.
98      *
99      * @throws ContextException the context exception
100      */
101     public void testSequentialContextInstantiation() throws ContextException {
102         LOGGER.debug("Running TestContextInstantiation test . . .");
103
104         final Distributor contextDistributor = getDistributor();
105
106         try {
107             final ContextAlbum dateAlbum = getContextAlbum(DATE_CONTEXT_ALBUM, contextDistributor);
108             final Date testDate = new Date();
109             final TestContextDateLocaleItem tciA00 = getTestContextDateLocaleItem();
110
111             dateAlbum.put(DV0, tciA00);
112             assertEquals(tciA00, dateAlbum.get(DV0));
113
114             dateAlbum.put(DV1, tciA00);
115             assertEquals(tciA00, dateAlbum.get(DV1));
116
117             final TestContextDateTzItem tci9 = getTestContextDateTzItem(testDate);
118
119             try {
120                 dateAlbum.put("tci9", tci9);
121             } catch (final Exception e) {
122                 final String message = "class \"" + TestContextDateTzItem.class.getName()
123                                 + "\" not compatible with class \"" + TestContextDateLocaleItem.class.getName()
124                                 + "\"";
125                 assertTrue(e.getMessage().contains(message));
126                 LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
127             }
128
129             final TestContextDateLocaleItem tciA01 = new TestContextDateLocaleItem(tciA00);
130             final TestContextDateLocaleItem tciA02 = new TestContextDateLocaleItem(tciA00);
131             final TestContextDateLocaleItem tciA03 = new TestContextDateLocaleItem(tciA00);
132
133             final Map<String, Object> valueMap0 = new HashMap<>();
134             valueMap0.put(ITEM01, tciA01);
135             valueMap0.put(ITEM02, tciA02);
136             valueMap0.put(ITEM03, tciA03);
137
138             dateAlbum.putAll(valueMap0);
139             assertEquals(5, dateAlbum.size());
140             assertEquals(tciA01, dateAlbum.get(ITEM01));
141             assertEquals(tciA02, dateAlbum.get(ITEM02));
142             assertEquals(tciA03, dateAlbum.get(ITEM03));
143
144             final Map<String, Object> valueMap1 = getMap(testDate, tciA00, tci9);
145
146             // Get another reference to the album
147             final ContextAlbum dateAlbum1 = getContextAlbum(DATE_CONTEXT_ALBUM, contextDistributor);
148
149             try {
150                 dateAlbum1.putAll(valueMap1);
151                 fail(EXCEPTION_MESSAGE);
152             } catch (final Exception e) {
153                 assertTrue(e.getMessage().endsWith("not compatible with class \""
154                                 + TestContextDateLocaleItem.class.getName() + "\""));
155                 LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
156             }
157             assertEquals(5, dateAlbum1.size());
158
159             valueMap1.clear();
160             valueMap1.put(ITEM00_2, tciA00);
161             dateAlbum1.putAll(valueMap1);
162             assertEquals(6, dateAlbum1.size());
163
164             assertEquals(tciA00, dateAlbum1.get(ITEM00_2));
165             dateAlbum.remove(ITEM00_2);
166             assertEquals(5, dateAlbum1.size());
167
168             final ContextAlbum dateAlbumCopy = getContextAlbum(DATE_CONTEXT_ALBUM, contextDistributor);
169
170             final Map<String, Object> valueMap2 = new HashMap<>();
171             valueMap2.put("Item04", tciA01);
172             valueMap2.put(ITEM05, tciA02);
173             valueMap2.put(ITEM06, tciA03);
174
175             dateAlbumCopy.putAll(valueMap2);
176             assertEquals(8, dateAlbumCopy.size());
177
178             assertEquals(tciA03, dateAlbumCopy.get(ITEM06));
179
180             final Collection<Object> mapValues = dateAlbum.values();
181             assertTrue(dateAlbumCopy.values().containsAll(mapValues));
182
183             // Check that clearing works
184             dateAlbum1.clear();
185             assertTrue(dateAlbum1.isEmpty());
186
187             dateAlbum.put("Item00", tciA00);
188             final Map<String, Object> valueMap3 = new HashMap<>();
189             valueMap3.put(ITEM01, tciA01);
190             valueMap3.put(ITEM02, tciA02);
191             valueMap3.put(ITEM03, tciA03);
192             dateAlbum.putAll(valueMap3);
193
194             final Map<String, Object> valueMap4 = new HashMap<>();
195             valueMap4.put("Item04", tciA01);
196             valueMap4.put(ITEM05, tciA02);
197             valueMap4.put(ITEM06, tciA03);
198
199             dateAlbumCopy.putAll(valueMap4);
200
201             assertContains(dateAlbum, tciA01);
202
203             final Set<Entry<String, Object>> entrySet = dateAlbum.entrySet();
204             assertEquals(7, entrySet.size());
205
206             assertAlbumGetAndPutMethods(dateAlbum, tciA03, tciA00);
207
208             // Should do removes
209             dateAlbum.remove(TEST_AA);
210             dateAlbum.remove(TEST_AB);
211             dateAlbum.remove(ITEM_NULL);
212             assertEquals(7, entrySet.size());
213             assertTrue(dateAlbumCopy.values().containsAll(mapValues));
214             // CHECKSTYLE:ON: checkstyle:magicNumber
215         } finally {
216             contextDistributor.clear();
217         }
218     }
219
220     private void assertContains(final ContextAlbum dateAlbum, final TestContextDateLocaleItem tciA01) {
221         try {
222             dateAlbum.containsKey(null);
223             fail(EXCEPTION_MESSAGE);
224         } catch (final Exception e) {
225             assertEquals("null values are illegal on method parameter \"key\"", e.getMessage());
226             LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
227         }
228
229         assertTrue(dateAlbum.containsKey(ITEM05));
230         assertTrue(!dateAlbum.containsKey("Item07"));
231
232         try {
233             dateAlbum.containsValue(null);
234         } catch (final Exception e) {
235             assertEquals("null values are illegal on method parameter \"value\"", e.getMessage());
236             LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
237         }
238
239         assertTrue(dateAlbum.containsValue(tciA01));
240         assertTrue(!dateAlbum.containsValue("Hello"));
241     }
242
243     private void assertAlbumGetAndPutMethods(final ContextAlbum dateAlbum, final TestContextDateLocaleItem tciA03,
244                     final TestContextDateLocaleItem tciA00) {
245         try {
246             dateAlbum.get(null);
247             fail(EXCEPTION_MESSAGE);
248         } catch (final Exception e) {
249             assertEquals("album \"DateContextAlbum:0.0.1\" null keys are illegal on keys for get()", e.getMessage());
250             LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
251         }
252
253         final Object aObject = dateAlbum.get(ITEM03);
254         assertEquals(tciA03, aObject);
255         try {
256             dateAlbum.put(null, null);
257             fail(EXCEPTION_MESSAGE);
258         } catch (final Exception e) {
259             assertEquals("album \"DateContextAlbum:0.0.1\" null keys are illegal on keys for put()", e.getMessage());
260             LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
261         }
262
263         // Put null ContextItem should work (return null)
264         try {
265             dateAlbum.put(ITEM_NULL, null);
266         } catch (final Exception e) {
267             assertEquals("album \"DateContextAlbum:0.0.1\" null values are illegal on key \"ItemNull\" for put()",
268                             e.getMessage());
269             LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
270         }
271
272         // Should return null
273         assertNull(dateAlbum.get(ITEM_NULL));
274         // Put should return the previous contextItem
275         tciA00.setDst(false);
276         final TestContextDateLocaleItem tciA03Clone = new TestContextDateLocaleItem(tciA03);
277         tciA03Clone.setDst(true);
278         TestContextDateLocaleItem retItem = (TestContextDateLocaleItem) dateAlbum.put(ITEM03, tciA03Clone);
279         assertEquals(tciA03, retItem);
280         retItem = (TestContextDateLocaleItem) dateAlbum.put(ITEM03, tciA03);
281         assertEquals(tciA03Clone, retItem);
282
283         try {
284             dateAlbum.put(ITEM_NULL, null);
285             fail(EXCEPTION_MESSAGE);
286
287         } catch (final Exception e) {
288             assert ("album \"DateContextAlbum:0.0.1\" null values are illegal on key \"ItemNull\" for put()"
289                             .equals(e.getMessage()));
290             LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
291         }
292
293         dateAlbum.put(TEST_AA, tciA00);
294         assertEquals(tciA00, dateAlbum.get(TEST_AA));
295
296         // Should print warning
297         try {
298             dateAlbum.put(TEST_AA, null);
299             fail(EXCEPTION_MESSAGE);
300         } catch (final Exception e) {
301             assertEquals("album \"DateContextAlbum:0.0.1\" null values are illegal on key \"TestAA\" for put()",
302                             e.getMessage());
303             LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
304         }
305         assertEquals(8, dateAlbum.size());
306         try {
307             dateAlbum.put(TEST_AB, null);
308             fail(EXCEPTION_MESSAGE);
309         } catch (final Exception e) {
310             assertEquals("album \"DateContextAlbum:0.0.1\" null values are illegal on key \"TestAB\" for put()",
311                             e.getMessage());
312             LOGGER.trace(NORMAL_TEST_EXCEPTION, e);
313         }
314         assertEquals(8, dateAlbum.size());
315     }
316
317     private Map<String, Object> getMap(final Date testDate, final TestContextDateLocaleItem tciA00,
318                     final TestContextDateTzItem tci9) {
319         final TestContextBooleanItem testBadItem000 = new TestContextBooleanItem();
320         final TestContextByteItem testBadItem001 = new TestContextByteItem();
321         final TestContextIntItem testBadItem002 = new TestContextIntItem();
322         final TestContextLongItem testBadItem003 = new TestContextLongItem();
323         final TestContextFloatItem testBadItem004 = new TestContextFloatItem();
324         final TestContextDoubleItem testBadItem005 = new TestContextDoubleItem();
325         final TestContextStringItem testBadItem006 = new TestContextStringItem();
326         final TestContextLongObjectItem testBadItem007 = new TestContextLongObjectItem();
327         final TestContextDateItem testBadItem008 = new TestContextDateItem();
328
329         testBadItem000.setFlag(false);
330         testBadItem001.setByteValue(BYTE_VAL);
331         testBadItem002.setIntValue(INT_VAL);
332         testBadItem003.setLongValue(LONG_VAL);
333         testBadItem004.setFloatValue(FLOAT_VAL);
334         testBadItem005.setDoubleValue(PI_VAL);
335         testBadItem006.setStringValue(STRING_GLOBAL_VAL);
336         testBadItem007.setLongValue(testDate.getTime());
337         testBadItem008.setDateValue(testDate);
338
339         final Map<String, Object> values = new HashMap<>();
340         values.put("TestBadItem000", testBadItem000);
341         values.put("TestBadItem001", testBadItem001);
342         values.put("TestBadItem002", testBadItem002);
343         values.put("TestBadItem003", testBadItem003);
344         values.put("TestBadItem004", testBadItem004);
345         values.put("TestBadItem005", testBadItem005);
346         values.put("TestBadItem006", testBadItem006);
347         values.put("TestBadItem007", testBadItem007);
348         values.put("TestBadItem008", testBadItem008);
349         values.put("TestBadItem009", tci9);
350         values.put(ITEM00_2, tciA00);
351         return values;
352     }
353
354     private TestContextDateTzItem getTestContextDateTzItem(final Date testDate) {
355         final TestContextDateTzItem tci9 = new TestContextDateTzItem();
356         tci9.setDateValue(new TestContextDateItem(testDate));
357         tci9.setTzValue(TimeZone.getTimeZone("Europe/Dublin").getDisplayName());
358         tci9.setDst(true);
359         return tci9;
360     }
361
362     private TestContextDateLocaleItem getTestContextDateLocaleItem() {
363         final TestContextDateLocaleItem tciA00 = new TestContextDateLocaleItem();
364         tciA00.setDateValue(new TestContextDateItem(new Date()));
365         tciA00.setTzValue(TIME_ZONE.getDisplayName());
366         tciA00.setDst(true);
367         tciA00.setUtcOffset(-600);
368         tciA00.setLocale(Locale.ENGLISH);
369         return tciA00;
370     }
371
372     private ContextAlbum getContextAlbum(final String albumName, final Distributor contextDistributor)
373                     throws ContextException {
374         final ContextAlbum dateAlbum = contextDistributor.createContextAlbum(new AxArtifactKey(albumName, VERSION));
375         assertNotNull(dateAlbum);
376         dateAlbum.setUserArtifactStack(Constants.getAxArtifactKeyArray());
377         return dateAlbum;
378     }
379
380     private Distributor getDistributor() throws ContextException {
381         final AxArtifactKey distributorKey = new AxArtifactKey(APEX_DISTRIBUTOR, VERSION);
382         final Distributor contextDistributor = new DistributorFactory().getDistributor(distributorKey);
383         contextDistributor.registerModel(createMultiAlbumsContextModel());
384         return contextDistributor;
385     }
386 }