e22321cdf13f8345ba1a91a63ae8343cba044a68
[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 java.util.Collection;
24 import java.util.Date;
25 import java.util.HashMap;
26 import java.util.Locale;
27 import java.util.Map;
28 import java.util.Map.Entry;
29 import java.util.Set;
30 import java.util.TimeZone;
31
32 import org.onap.policy.apex.context.ContextAlbum;
33 import org.onap.policy.apex.context.ContextException;
34 import org.onap.policy.apex.context.Distributor;
35 import org.onap.policy.apex.context.impl.distribution.DistributorFactory;
36 import org.onap.policy.apex.context.test.concepts.TestContextItem000;
37 import org.onap.policy.apex.context.test.concepts.TestContextItem001;
38 import org.onap.policy.apex.context.test.concepts.TestContextItem002;
39 import org.onap.policy.apex.context.test.concepts.TestContextItem003;
40 import org.onap.policy.apex.context.test.concepts.TestContextItem004;
41 import org.onap.policy.apex.context.test.concepts.TestContextItem005;
42 import org.onap.policy.apex.context.test.concepts.TestContextItem006;
43 import org.onap.policy.apex.context.test.concepts.TestContextItem007;
44 import org.onap.policy.apex.context.test.concepts.TestContextItem008;
45 import org.onap.policy.apex.context.test.concepts.TestContextItem009;
46 import org.onap.policy.apex.context.test.concepts.TestContextItem00A;
47 import org.onap.policy.apex.context.test.factory.TestContextAlbumFactory;
48 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
49 import org.onap.policy.apex.model.contextmodel.concepts.AxContextModel;
50 import org.slf4j.ext.XLogger;
51 import org.slf4j.ext.XLoggerFactory;
52
53 /**
54  * The Class SequentialContextInstantiation checks sequential initiation of context.
55  *
56  * @author Sergey Sachkov (sergey.sachkov@ericsson.com)
57  */
58 public class SequentialContextInstantiation {
59     // Logger for this class
60     private static final XLogger LOGGER = XLoggerFactory.getXLogger(SequentialContextInstantiation.class);
61
62     /**
63      * Test sequential context instantiation.
64      *
65      * @throws ContextException the context exception
66      */
67     // CHECKSTYLE:OFF: checkstyle:MaximumMethodLength
68     public void testSequentialContextInstantiation() throws ContextException {
69         // CHECKSTYLE:ON: MaximumMethodLength
70         LOGGER.debug("Running TestContextInstantiation test . . .");
71
72         final AxArtifactKey distributorKey = new AxArtifactKey("ApexDistributor", "0.0.1");
73         Distributor contextDistributor = null;
74         try {
75             contextDistributor = new DistributorFactory().getDistributor(distributorKey);
76         } catch (final Exception exception) {
77             LOGGER.error("Error occured while Instantiating Distributor for : {}", distributorKey, exception);
78             assert ("Test has failed".equals(""));
79             return;
80         }
81
82         // @formatter:off
83        final AxArtifactKey[] usedArtifactStackArray = {
84                 new AxArtifactKey("testC-top", "0.0.1"),
85                 new AxArtifactKey("testC-next", "0.0.1"),
86                 new AxArtifactKey("testC-bot", "0.0.1")
87                 };
88        // @formatter:on
89
90         try {
91             // CHECKSTYLE:OFF: checkstyle:magicNumber
92             final AxContextModel multiModel = TestContextAlbumFactory.createMultiAlbumsContextModel();
93             contextDistributor.registerModel(multiModel);
94
95             final ContextAlbum dateAlbum =
96                     contextDistributor.createContextAlbum(new AxArtifactKey("DateContextAlbum", "0.0.1"));
97             assert (dateAlbum != null);
98             dateAlbum.setUserArtifactStack(usedArtifactStackArray);
99
100             final Date testDate = new Date();
101
102             final TestContextItem00A tciA00 = new TestContextItem00A();
103             tciA00.setDateValue(new TestContextItem008(new Date()));
104             tciA00.setTZValue(TimeZone.getTimeZone("Europe/Dublin").getDisplayName());
105             tciA00.setDST(true);
106             tciA00.setUTCOffset(-600);
107             tciA00.setLocale(Locale.ENGLISH);
108
109             dateAlbum.put("dv0", tciA00);
110             assert (tciA00.equals(dateAlbum.get("dv0")));
111
112             dateAlbum.put("dv1", tciA00);
113             assert (tciA00.equals(dateAlbum.get("dv1")));
114
115             final TestContextItem009 tci9 = new TestContextItem009();
116             tci9.setDateValue(new TestContextItem008(testDate));
117             tci9.setTZValue(TimeZone.getTimeZone("Europe/Dublin").getDisplayName());
118             tci9.setDST(true);
119
120             try {
121                 dateAlbum.put("tci9", tci9);
122             } catch (final Exception e) {
123                 assert (e.getMessage().contains(
124                         "class \"org.onap.policy.apex.context.test.concepts.TestContextItem009\" not compatible with class \"org.onap.policy.apex.context.test.concepts.TestContextItem00A\""));
125             }
126
127             final TestContextItem00A tciA01 = new TestContextItem00A(tciA00);
128             final TestContextItem00A tciA02 = new TestContextItem00A(tciA00);
129             final TestContextItem00A tciA03 = new TestContextItem00A(tciA00);
130
131             final Map<String, Object> valueMap0 = new HashMap<>();
132             valueMap0.put("Item01", tciA01);
133             valueMap0.put("Item02", tciA02);
134             valueMap0.put("Item03", tciA03);
135
136             dateAlbum.putAll(valueMap0);
137             assert (dateAlbum.size() == 5);
138             assert (tciA01.equals(dateAlbum.get("Item01")));
139             assert (tciA02.equals(dateAlbum.get("Item02")));
140             assert (tciA03.equals(dateAlbum.get("Item03")));
141
142             final Float testFloat = new Float(3.14159265359);
143
144             final TestContextItem000 testBadItem000 = new TestContextItem000();
145             final TestContextItem001 testBadItem001 = new TestContextItem001();
146             final TestContextItem002 testBadItem002 = new TestContextItem002();
147             final TestContextItem003 testBadItem003 = new TestContextItem003();
148             final TestContextItem004 testBadItem004 = new TestContextItem004();
149             final TestContextItem005 testBadItem005 = new TestContextItem005();
150             final TestContextItem006 testBadItem006 = new TestContextItem006();
151             final TestContextItem007 testBadItem007 = new TestContextItem007();
152             final TestContextItem008 testBadItem008 = new TestContextItem008();
153
154             testBadItem000.setFlag(false);
155             testBadItem001.setByteValue((byte) 0xFF);
156             testBadItem002.setIntValue(0xFFFFFFFF);
157             testBadItem003.setLongValue(0xFFFFFFFFFFFFFFFFL);
158             testBadItem004.setFloatValue(testFloat);
159             testBadItem005.setDoubleValue(Math.PI);
160             testBadItem006.setStringValue("This is a global context string");
161             testBadItem007.setLongValue(testDate.getTime());
162             testBadItem008.setDateValue(testDate);
163
164             final Map<String, Object> valueMap1 = new HashMap<>();
165             valueMap1.put("TestBadItem000", testBadItem000);
166             valueMap1.put("TestBadItem001", testBadItem001);
167             valueMap1.put("TestBadItem002", testBadItem002);
168             valueMap1.put("TestBadItem003", testBadItem003);
169             valueMap1.put("TestBadItem004", testBadItem004);
170             valueMap1.put("TestBadItem005", testBadItem005);
171             valueMap1.put("TestBadItem006", testBadItem006);
172             valueMap1.put("TestBadItem007", testBadItem007);
173             valueMap1.put("TestBadItem008", testBadItem008);
174             valueMap1.put("TestBadItem009", tci9);
175             valueMap1.put("Item00_2", tciA00);
176
177             // Get another reference to the album
178             final ContextAlbum dateAlbum1 =
179                     contextDistributor.createContextAlbum(new AxArtifactKey("DateContextAlbum", "0.0.1"));
180             assert (dateAlbum1 != null);
181             dateAlbum1.setUserArtifactStack(usedArtifactStackArray);
182
183             try {
184                 dateAlbum1.putAll(valueMap1);
185             } catch (final Exception e) {
186                 assert (e.getMessage().endsWith(
187                         "not compatible with class \"org.onap.policy.apex.context.test.concepts.TestContextItem00A\""));
188             }
189             assert (dateAlbum1.size() == 5);
190
191             valueMap1.clear();
192             valueMap1.put("Item00_2", tciA00);
193             dateAlbum1.putAll(valueMap1);
194             assert (dateAlbum1.size() == 6);
195
196             assert (tciA00.equals(dateAlbum1.get("Item00_2")));
197             dateAlbum.remove("Item00_2");
198             assert (5 == dateAlbum1.size());
199
200             final ContextAlbum dateAlbumCopy =
201                     contextDistributor.createContextAlbum(new AxArtifactKey("DateContextAlbum", "0.0.1"));
202             assert (dateAlbumCopy != null);
203             dateAlbumCopy.setUserArtifactStack(usedArtifactStackArray);
204
205             final Map<String, Object> valueMap2 = new HashMap<>();
206             valueMap2.put("Item04", tciA01);
207             valueMap2.put("Item05", tciA02);
208             valueMap2.put("Item06", tciA03);
209
210             dateAlbumCopy.putAll(valueMap2);
211             assert (8 == dateAlbumCopy.size());
212             assert (tciA03.equals(dateAlbumCopy.get("Item06")));
213
214             final Collection<Object> mapValues = dateAlbum.values();
215             assert (dateAlbumCopy.values().containsAll(mapValues));
216
217             // Check that clearing works
218             dateAlbum1.clear();
219             assert (dateAlbum1.size() == 0);
220
221             dateAlbum.put("Item00", tciA00);
222             final Map<String, Object> valueMap3 = new HashMap<>();
223             valueMap3.put("Item01", tciA01);
224             valueMap3.put("Item02", tciA02);
225             valueMap3.put("Item03", tciA03);
226             dateAlbum.putAll(valueMap3);
227
228             final Map<String, Object> valueMap4 = new HashMap<>();
229             valueMap4.put("Item04", tciA01);
230             valueMap4.put("Item05", tciA02);
231             valueMap4.put("Item06", tciA03);
232
233             dateAlbumCopy.putAll(valueMap4);
234
235             try {
236                 dateAlbum.containsKey(null);
237             } catch (final Exception e) {
238                 assert (e.getMessage().equals("null values are illegal on method parameter \"key\""));
239             }
240
241             for (final Entry<String, Object> entry : dateAlbum.entrySet()) {
242                 System.out.println(entry.getKey() + "->" + entry.getValue());
243             }
244             assert (dateAlbum.containsKey("Item05"));
245             assert (!dateAlbum.containsKey("Item07"));
246
247             try {
248                 dateAlbum.containsValue(null);
249             } catch (final Exception e) {
250                 assert (e.getMessage().equals("null values are illegal on method parameter \"value\""));
251             }
252
253             assert (dateAlbum.containsValue(tciA01));
254             assert (!dateAlbum.containsValue(new String("Hello")));
255
256             final Set<Entry<String, Object>> entrySet = dateAlbum.entrySet();
257             assert (entrySet.size() == 7);
258
259             try {
260                 assert (dateAlbum.get(null) == null);
261             } catch (final Exception e) {
262                 assert (e.getMessage()
263                         .equals("album \"DateContextAlbum:0.0.1\" null keys are illegal on keys for get()"));
264             }
265
266             final Object aObject = dateAlbum.get("Item03");
267             assert (aObject.equals(tciA03));
268
269             try {
270                 final Object object = dateAlbum.put(null, null);
271                 assert (object == null);
272             } catch (final Exception e) {
273                 assert (e.getMessage()
274                         .equals("album \"DateContextAlbum:0.0.1\" null keys are illegal on keys for put()"));
275             }
276
277             // Put null ContextItem should work (return null)
278             try {
279                 dateAlbum.put("ItemNull", null);
280             } catch (final Exception e) {
281                 assert (e.getMessage().equals(
282                         "album \"DateContextAlbum:0.0.1\" null values are illegal on key \"ItemNull\" for put()"));
283             }
284
285             // Should return null
286             assert (dateAlbum.get("ItemNull") == null);
287
288             // Put should return the previous contextItem
289             tciA00.setDST(false);
290             final TestContextItem00A tciA03_clone = new TestContextItem00A(tciA03);
291             tciA03_clone.setDST(true);
292             TestContextItem00A retItem = (TestContextItem00A) dateAlbum.put("Item03", tciA03_clone);
293             assert (retItem.equals(tciA03));
294             retItem = (TestContextItem00A) dateAlbum.put("Item03", tciA03);
295             assert (retItem.equals(tciA03_clone));
296
297             try {
298                 dateAlbum.put("ItemNull", null);
299                 assert (dateAlbum.get("ItemNull") == null);
300             } catch (final Exception e) {
301                 assert (e.getMessage().equals(
302                         "album \"DateContextAlbum:0.0.1\" null values are illegal on key \"ItemNull\" for put()"));
303             }
304
305             dateAlbum.put("TestAA", tciA00);
306             assert (dateAlbum.get("TestAA").equals(tciA00));
307
308             // Should print warning
309             try {
310                 dateAlbum.put("TestAA", null);
311             } catch (final Exception e) {
312                 assert (e.getMessage().equals(
313                         "album \"DateContextAlbum:0.0.1\" null values are illegal on key \"TestAA\" for put()"));
314             }
315             assert (dateAlbum.size() == 8);
316             try {
317                 dateAlbum.put("TestAB", null);
318             } catch (final Exception e) {
319                 assert (e.getMessage().equals(
320                         "album \"DateContextAlbum:0.0.1\" null values are illegal on key \"TestAB\" for put()"));
321             }
322             assert (dateAlbum.size() == 8);
323
324             // Should do removes
325             dateAlbum.remove("TestAA");
326             dateAlbum.remove("TestAB");
327             dateAlbum.remove("ItemNull");
328             assert (dateAlbum.size() == 7);
329             assert (dateAlbumCopy.values().containsAll(mapValues));
330             // CHECKSTYLE:ON: checkstyle:magicNumber
331         } catch (final Exception exception) {
332             LOGGER.error("Error: ", exception);
333             contextDistributor.clear();
334             assert ("Test has failed".equals(""));
335         }
336
337         try {
338             contextDistributor.clear();
339         } catch (final Exception exception) {
340             LOGGER.error("Error occured while clearing context distributor", exception);
341             assert ("Test has failed".equals(""));
342         }
343     }
344 }