244bd7d242c93b493c80cd15d21eb14f52ba6309
[policy/apex-pdp.git] /
1 /*-
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
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.apex.context.test.distribution;
22
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.VERSION;
40
41 import java.util.Collection;
42 import java.util.Date;
43 import java.util.HashMap;
44 import java.util.Locale;
45 import java.util.Map;
46 import java.util.Map.Entry;
47 import java.util.Set;
48 import java.util.TimeZone;
49
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.context.test.utils.Constants;
66 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
67 import org.slf4j.ext.XLogger;
68 import org.slf4j.ext.XLoggerFactory;
69
70
71
72 /**
73  * The Class SequentialContextInstantiation checks sequential initiation of context.
74  *
75  * @author Sergey Sachkov (sergey.sachkov@ericsson.com)
76  */
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);
82
83     /**
84      * Test sequential context instantiation.
85      *
86      * @throws ContextException the context exception
87      */
88     public void testSequentialContextInstantiation() throws ContextException {
89         LOGGER.debug("Running TestContextInstantiation test . . .");
90
91         final Distributor contextDistributor = getDistributor();
92
93         try {
94             final ContextAlbum dateAlbum = getContextAlbum(DATE_CONTEXT_ALBUM, contextDistributor);
95             final Date testDate = new Date();
96             final TestContextDateLocaleItem tciA00 = getTestContextDateLocaleItem();
97
98             dateAlbum.put(DV0, tciA00);
99             assertEquals(tciA00, dateAlbum.get(DV0));
100
101             dateAlbum.put(DV1, tciA00);
102             assertEquals(tciA00, dateAlbum.get(DV1));
103
104             final TestContextDateTzItem tci9 = getTestContextDateTzItem(testDate);
105
106             try {
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));
112             }
113
114             final TestContextDateLocaleItem tciA01 = new TestContextDateLocaleItem(tciA00);
115             final TestContextDateLocaleItem tciA02 = new TestContextDateLocaleItem(tciA00);
116             final TestContextDateLocaleItem tciA03 = new TestContextDateLocaleItem(tciA00);
117
118             final Map<String, Object> valueMap0 = new HashMap<>();
119             valueMap0.put("Item01", tciA01);
120             valueMap0.put("Item02", tciA02);
121             valueMap0.put("Item03", tciA03);
122
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"));
128
129             final Map<String, Object> valueMap1 = getMap(testDate, tciA00, tci9);
130
131             // Get another reference to the album
132             final ContextAlbum dateAlbum1 = getContextAlbum(DATE_CONTEXT_ALBUM, contextDistributor);
133
134             try {
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() + "\""));
140             }
141             assertEquals(5, dateAlbum1.size());
142
143             valueMap1.clear();
144             valueMap1.put("Item00_2", tciA00);
145             dateAlbum1.putAll(valueMap1);
146             assertEquals(6, dateAlbum1.size());
147
148             assertEquals(tciA00, dateAlbum1.get("Item00_2"));
149             dateAlbum.remove("Item00_2");
150             assertEquals(5, dateAlbum1.size());
151
152             final ContextAlbum dateAlbumCopy = getContextAlbum(DATE_CONTEXT_ALBUM, contextDistributor);
153
154             final Map<String, Object> valueMap2 = new HashMap<>();
155             valueMap2.put("Item04", tciA01);
156             valueMap2.put("Item05", tciA02);
157             valueMap2.put("Item06", tciA03);
158
159             dateAlbumCopy.putAll(valueMap2);
160             assertEquals(8, dateAlbumCopy.size());
161
162             assertEquals(tciA03, dateAlbumCopy.get("Item06"));
163
164             final Collection<Object> mapValues = dateAlbum.values();
165             assertTrue(dateAlbumCopy.values().containsAll(mapValues));
166
167             // Check that clearing works
168             dateAlbum1.clear();
169             assertTrue(dateAlbum1.isEmpty());
170
171
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);
178
179             final Map<String, Object> valueMap4 = new HashMap<>();
180             valueMap4.put("Item04", tciA01);
181             valueMap4.put("Item05", tciA02);
182             valueMap4.put("Item06", tciA03);
183
184             dateAlbumCopy.putAll(valueMap4);
185
186             assertContains(dateAlbum, tciA01);
187
188             final Set<Entry<String, Object>> entrySet = dateAlbum.entrySet();
189             assertEquals(7, entrySet.size());
190
191             assertAlbumGetAndPutMethods(dateAlbum, tciA03, tciA00);
192
193             // Should do removes
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
200         } finally {
201             contextDistributor.clear();
202         }
203     }
204
205     private void assertContains(final ContextAlbum dateAlbum, final TestContextDateLocaleItem tciA01) {
206         try {
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());
211         }
212
213         assertTrue(dateAlbum.containsKey("Item05"));
214         assertTrue(!dateAlbum.containsKey("Item07"));
215
216         try {
217             dateAlbum.containsValue(null);
218         } catch (final Exception e) {
219             assertEquals("null values are illegal on method parameter \"value\"", e.getMessage());
220
221         }
222
223         assertTrue(dateAlbum.containsValue(tciA01));
224         assertTrue(!dateAlbum.containsValue("Hello"));
225     }
226
227     private void assertAlbumGetAndPutMethods(final ContextAlbum dateAlbum, final TestContextDateLocaleItem tciA03,
228             final TestContextDateLocaleItem tciA00) {
229         try {
230             dateAlbum.get(null);
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());
234         }
235
236         final Object aObject = dateAlbum.get("Item03");
237         assertEquals(tciA03, aObject);
238         try {
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());
243         }
244
245         // Put null ContextItem should work (return null)
246         try {
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()",
250                     e.getMessage());
251         }
252
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);
263
264         try {
265             dateAlbum.put("ItemNull", null);
266             fail(EXCEPTION_MESSAGE);
267
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()"));
271         }
272
273         dateAlbum.put("TestAA", tciA00);
274         assertEquals(tciA00, dateAlbum.get("TestAA"));
275
276         // Should print warning
277         try {
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()",
282                     e.getMessage());
283         }
284         assertEquals(8, dateAlbum.size());
285         try {
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()",
290                     e.getMessage());
291         }
292         assertEquals(8, dateAlbum.size());
293     }
294
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();
306
307         testBadItem000.setFlag(false);
308         testBadItem001.setByteValue(BYTE_VAL);
309         testBadItem002.setIntValue(INT_VAL);
310         testBadItem003.setLongValue(LONG_VAL);
311         testBadItem004.setFloatValue(FLOAT_VAL);
312         testBadItem005.setDoubleValue(PI_VAL);
313         testBadItem006.setStringValue(STRING_GLOBAL_VAL);
314         testBadItem007.setLongValue(testDate.getTime());
315         testBadItem008.setDateValue(testDate);
316
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);
329         return values;
330     }
331
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());
336         tci9.setDst(true);
337         return tci9;
338     }
339
340     private TestContextDateLocaleItem getTestContextDateLocaleItem() {
341         final TestContextDateLocaleItem tciA00 = new TestContextDateLocaleItem();
342         tciA00.setDateValue(new TestContextDateItem(new Date()));
343         tciA00.setTzValue(TIME_ZONE.getDisplayName());
344         tciA00.setDst(true);
345         tciA00.setUtcOffset(-600);
346         tciA00.setLocale(Locale.ENGLISH);
347         return tciA00;
348     }
349
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(Constants.getAxArtifactKeyArray());
355         return dateAlbum;
356     }
357
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;
363     }
364 }