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 java.util.Collection;
24 import java.util.Date;
25 import java.util.HashMap;
26 import java.util.Locale;
28 import java.util.Map.Entry;
30 import java.util.TimeZone;
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;
54 * The Class SequentialContextInstantiation checks sequential initiation of context.
56 * @author Sergey Sachkov (sergey.sachkov@ericsson.com)
58 public class SequentialContextInstantiation {
59 // Logger for this class
60 private static final XLogger LOGGER = XLoggerFactory.getXLogger(SequentialContextInstantiation.class);
63 * Test sequential context instantiation.
65 * @throws ContextException the context exception
67 // CHECKSTYLE:OFF: checkstyle:MaximumMethodLength
68 public void testSequentialContextInstantiation() throws ContextException {
69 // CHECKSTYLE:ON: MaximumMethodLength
70 LOGGER.debug("Running TestContextInstantiation test . . .");
72 final AxArtifactKey distributorKey = new AxArtifactKey("ApexDistributor", "0.0.1");
73 Distributor contextDistributor = null;
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(""));
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")
91 // CHECKSTYLE:OFF: checkstyle:magicNumber
92 final AxContextModel multiModel = TestContextAlbumFactory.createMultiAlbumsContextModel();
93 contextDistributor.registerModel(multiModel);
95 final ContextAlbum dateAlbum =
96 contextDistributor.createContextAlbum(new AxArtifactKey("DateContextAlbum", "0.0.1"));
97 assert (dateAlbum != null);
98 dateAlbum.setUserArtifactStack(usedArtifactStackArray);
100 final Date testDate = new Date();
102 final TestContextItem00A tciA00 = new TestContextItem00A();
103 tciA00.setDateValue(new TestContextItem008(new Date()));
104 tciA00.setTZValue(TimeZone.getTimeZone("Europe/Dublin").getDisplayName());
106 tciA00.setUTCOffset(-600);
107 tciA00.setLocale(Locale.ENGLISH);
109 dateAlbum.put("dv0", tciA00);
110 assert (tciA00.equals(dateAlbum.get("dv0")));
112 dateAlbum.put("dv1", tciA00);
113 assert (tciA00.equals(dateAlbum.get("dv1")));
115 final TestContextItem009 tci9 = new TestContextItem009();
116 tci9.setDateValue(new TestContextItem008(testDate));
117 tci9.setTZValue(TimeZone.getTimeZone("Europe/Dublin").getDisplayName());
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\""));
127 final TestContextItem00A tciA01 = new TestContextItem00A(tciA00);
128 final TestContextItem00A tciA02 = new TestContextItem00A(tciA00);
129 final TestContextItem00A tciA03 = new TestContextItem00A(tciA00);
131 final Map<String, Object> valueMap0 = new HashMap<>();
132 valueMap0.put("Item01", tciA01);
133 valueMap0.put("Item02", tciA02);
134 valueMap0.put("Item03", tciA03);
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")));
142 final Float testFloat = new Float(3.14159265359);
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();
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);
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);
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);
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\""));
189 assert (dateAlbum1.size() == 5);
192 valueMap1.put("Item00_2", tciA00);
193 dateAlbum1.putAll(valueMap1);
194 assert (dateAlbum1.size() == 6);
196 assert (tciA00.equals(dateAlbum1.get("Item00_2")));
197 dateAlbum.remove("Item00_2");
198 assert (5 == dateAlbum1.size());
200 final ContextAlbum dateAlbumCopy =
201 contextDistributor.createContextAlbum(new AxArtifactKey("DateContextAlbum", "0.0.1"));
202 assert (dateAlbumCopy != null);
203 dateAlbumCopy.setUserArtifactStack(usedArtifactStackArray);
205 final Map<String, Object> valueMap2 = new HashMap<>();
206 valueMap2.put("Item04", tciA01);
207 valueMap2.put("Item05", tciA02);
208 valueMap2.put("Item06", tciA03);
210 dateAlbumCopy.putAll(valueMap2);
211 assert (8 == dateAlbumCopy.size());
212 assert (tciA03.equals(dateAlbumCopy.get("Item06")));
214 final Collection<Object> mapValues = dateAlbum.values();
215 assert (dateAlbumCopy.values().containsAll(mapValues));
217 // Check that clearing works
219 assert (dateAlbum1.size() == 0);
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);
228 final Map<String, Object> valueMap4 = new HashMap<>();
229 valueMap4.put("Item04", tciA01);
230 valueMap4.put("Item05", tciA02);
231 valueMap4.put("Item06", tciA03);
233 dateAlbumCopy.putAll(valueMap4);
236 dateAlbum.containsKey(null);
237 } catch (final Exception e) {
238 assert (e.getMessage().equals("null values are illegal on method parameter \"key\""));
241 for (final Entry<String, Object> entry : dateAlbum.entrySet()) {
242 System.out.println(entry.getKey() + "->" + entry.getValue());
244 assert (dateAlbum.containsKey("Item05"));
245 assert (!dateAlbum.containsKey("Item07"));
248 dateAlbum.containsValue(null);
249 } catch (final Exception e) {
250 assert (e.getMessage().equals("null values are illegal on method parameter \"value\""));
253 assert (dateAlbum.containsValue(tciA01));
254 assert (!dateAlbum.containsValue(new String("Hello")));
256 final Set<Entry<String, Object>> entrySet = dateAlbum.entrySet();
257 assert (entrySet.size() == 7);
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()"));
266 final Object aObject = dateAlbum.get("Item03");
267 assert (aObject.equals(tciA03));
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()"));
277 // Put null ContextItem should work (return null)
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()"));
285 // Should return null
286 assert (dateAlbum.get("ItemNull") == null);
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));
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()"));
305 dateAlbum.put("TestAA", tciA00);
306 assert (dateAlbum.get("TestAA").equals(tciA00));
308 // Should print warning
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()"));
315 assert (dateAlbum.size() == 8);
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()"));
322 assert (dateAlbum.size() == 8);
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(""));
338 contextDistributor.clear();
339 } catch (final Exception exception) {
340 LOGGER.error("Error occured while clearing context distributor", exception);
341 assert ("Test has failed".equals(""));