4a9af5a4cc5a8afa67f6feac4ec4a132055360e7
[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.LinkedHashMap;
27 import java.util.Locale;
28 import java.util.Map;
29 import java.util.Map.Entry;
30 import java.util.Set;
31 import java.util.TimeZone;
32 import java.util.TreeSet;
33
34 import org.onap.policy.apex.context.ContextAlbum;
35 import org.onap.policy.apex.context.ContextException;
36 import org.onap.policy.apex.context.ContextRuntimeException;
37 import org.onap.policy.apex.context.Distributor;
38 import org.onap.policy.apex.context.impl.distribution.DistributorFactory;
39 import org.onap.policy.apex.context.test.concepts.TestContextItem000;
40 import org.onap.policy.apex.context.test.concepts.TestContextItem001;
41 import org.onap.policy.apex.context.test.concepts.TestContextItem002;
42 import org.onap.policy.apex.context.test.concepts.TestContextItem003;
43 import org.onap.policy.apex.context.test.concepts.TestContextItem004;
44 import org.onap.policy.apex.context.test.concepts.TestContextItem005;
45 import org.onap.policy.apex.context.test.concepts.TestContextItem006;
46 import org.onap.policy.apex.context.test.concepts.TestContextItem007;
47 import org.onap.policy.apex.context.test.concepts.TestContextItem008;
48 import org.onap.policy.apex.context.test.concepts.TestContextItem009;
49 import org.onap.policy.apex.context.test.concepts.TestContextItem00A;
50 import org.onap.policy.apex.context.test.concepts.TestContextItem00B;
51 import org.onap.policy.apex.context.test.concepts.TestContextItem00C;
52 import org.onap.policy.apex.context.test.concepts.TestExternalContextItem;
53 import org.onap.policy.apex.context.test.concepts.TestGlobalContextItem;
54 import org.onap.policy.apex.context.test.concepts.TestPolicyContextItem;
55 import org.onap.policy.apex.context.test.factory.TestContextAlbumFactory;
56 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
57 import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
58 import org.onap.policy.apex.model.contextmodel.concepts.AxContextModel;
59 import org.slf4j.ext.XLogger;
60 import org.slf4j.ext.XLoggerFactory;
61
62 /**
63  * The Class TestContextInstantiation is used to test Apex context insitiation is correct.
64  *
65  * @author Sergey Sachkov (sergey.sachkov@ericsson.com)
66  */
67 public class ContextInstantiation {
68     // Logger for this class
69     private static final XLogger LOGGER = XLoggerFactory.getXLogger(ContextInstantiation.class);
70
71     /**
72      * Test context instantiation.
73      *
74      * @throws ContextException the context exception
75      */
76     // CHECKSTYLE:OFF: checkstyle:MaximumMethodLength
77     public void testContextInstantiation() throws ContextException {
78         // CHECKSTYLE:ON: checkstyle:MaximumMethodLength
79         LOGGER.debug("Running TestContextInstantiation test . . .");
80
81         final AxArtifactKey distributorKey = new AxArtifactKey("ApexDistributorInit", "0.0.1");
82         Distributor contextDistributor = null;
83         try {
84             contextDistributor = new DistributorFactory().getDistributor(distributorKey);
85         } catch (final Exception e) {
86             e.printStackTrace();
87             return;
88         }
89
90         // @formatter:off
91         final AxArtifactKey[] usedArtifactStackArray = {
92                 new AxArtifactKey("testC-top", "0.0.1"), new AxArtifactKey("testC-next", "0.0.1"),
93                 new AxArtifactKey("testC-bot", "0.0.1")
94         };
95         // @formatter:on
96
97         try {
98             // CHECKSTYLE:OFF: checkstyle:magicNumber
99             final AxContextModel policyContextModel = TestContextAlbumFactory.createPolicyContextModel();
100             final AxValidationResult result = new AxValidationResult();
101             policyContextModel.validate(result);
102             LOGGER.debug(result.toString());
103             assert (result.isValid());
104
105             contextDistributor.registerModel(policyContextModel);
106
107             final ContextAlbum policyContextAlbum =
108                     contextDistributor.createContextAlbum(new AxArtifactKey("PolicyContextAlbum", "0.0.1"));
109             assert (policyContextAlbum != null);
110             policyContextAlbum.setUserArtifactStack(usedArtifactStackArray);
111
112             final Float testFloat = new Float(3.14159265359);
113             final Date testDate = new Date();
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             final TestContextItem00A tciA = new TestContextItem00A();
121             tciA.setDateValue(new TestContextItem008(testDate));
122             tciA.setTZValue(TimeZone.getTimeZone("Europe/Dublin").getDisplayName());
123             tciA.setDST(true);
124             tciA.setUTCOffset(-600);
125             tciA.setLocale(Locale.ENGLISH);
126
127             final TreeSet<String> testTreeSet = new TreeSet<>();
128             testTreeSet.add("one hundred");
129             testTreeSet.add("one hundred and one");
130             testTreeSet.add("one hundred and two");
131             testTreeSet.add("one hundred and three");
132             testTreeSet.add("one hundred and four");
133
134             final Map<String, String> testHashMap = new HashMap<>();
135             testHashMap.put("0", "zero");
136             testHashMap.put("1", "one");
137             testHashMap.put("2", "two");
138             testHashMap.put("3", "three");
139             testHashMap.put("4", "four");
140
141             final TestContextItem006 testPolicyContextItem000 =
142                     new TestContextItem006("This is a policy context string");
143             final TestContextItem003 testPolicyContextItem001 = new TestContextItem003(0xFFFFFFFFFFFFFFFFL);
144             final TestContextItem005 testPolicyContextItem002 = new TestContextItem005(Math.PI);
145             final TestContextItem000 testPolicyContextItem003 = new TestContextItem000(true);
146             final TestContextItem003 testPolicyContextItem004 = new TestContextItem003(testDate.getTime());
147             final TestContextItem00C testPolicyContextItem005 = new TestContextItem00C(testHashMap);
148
149             final Map<String, Object> valueMapA = new LinkedHashMap<>();
150             valueMapA.put("TestPolicyContextItem001", testPolicyContextItem001);
151             valueMapA.put("TestPolicyContextItem002", testPolicyContextItem002);
152             valueMapA.put("TestPolicyContextItem003", testPolicyContextItem003);
153             valueMapA.put("TestPolicyContextItem004", testPolicyContextItem004);
154             valueMapA.put("TestPolicyContextItem005", testPolicyContextItem005);
155             valueMapA.put("TestPolicyContextItem000", testPolicyContextItem000);
156
157             try {
158                 policyContextAlbum.put("TestPolicyContextItem000", testPolicyContextItem000);
159                 assert ("Test should throw an exception".equals(""));
160             } catch (final ContextRuntimeException e) {
161                 assert (e.getMessage().equals(
162                         "Failed to set context value for key \"TestPolicyContextItem000\" in album \"PolicyContextAlbum:0.0.1\": "
163                                 + "PolicyContextAlbum:0.0.1: object \"TestContextItem006 [stringValue=This is a policy context string]\" "
164                                 + "of class \"org.onap.policy.apex.context.test.concepts.TestContextItem006\""
165                                 + " not compatible with class \"org.onap.policy.apex.context.test.concepts.TestPolicyContextItem\""));
166             }
167
168             try {
169                 policyContextAlbum.putAll(valueMapA);
170                 assert ("Test should throw an exception".equals(""));
171             } catch (final ContextRuntimeException e) {
172                 assert (e.getMessage().equals(
173                         "Failed to set context value for key \"TestPolicyContextItem001\" in album \"PolicyContextAlbum:0.0.1\": "
174                                 + "PolicyContextAlbum:0.0.1: object \"TestContextItem003 [longValue=-1]\" "
175                                 + "of class \"org.onap.policy.apex.context.test.concepts.TestContextItem003\""
176                                 + " not compatible with class \"org.onap.policy.apex.context.test.concepts.TestPolicyContextItem\""));
177             }
178
179             final TestPolicyContextItem policyContext = new TestPolicyContextItem();
180
181             LOGGER.debug(policyContextAlbum.toString());
182
183             policyContext.setTestPolicyContextItem000(testPolicyContextItem000);
184             policyContext.setTestPolicyContextItem001(testPolicyContextItem001);
185             policyContext.setTestPolicyContextItem002(testPolicyContextItem002);
186             policyContext.setTestPolicyContextItem003(testPolicyContextItem003);
187             policyContext.setTestPolicyContextItem004(testPolicyContextItem004);
188             policyContext.setTestPolicyContextItem005(testPolicyContextItem005);
189
190             final Map<String, Object> valueMap0 = new HashMap<>();
191             valueMap0.put("TestPolicyContextItem", policyContext);
192
193             policyContextAlbum.putAll(valueMap0);
194
195             assert (((TestPolicyContextItem) policyContextAlbum.get("TestPolicyContextItem"))
196                     .getTestPolicyContextItem000().getStringValue().equals("This is a policy context string"));
197             assert (((TestPolicyContextItem) policyContextAlbum.get("TestPolicyContextItem"))
198                     .getTestPolicyContextItem001().getLongValue() == 0xFFFFFFFFFFFFFFFFL);
199             assert (((TestPolicyContextItem) policyContextAlbum.get("TestPolicyContextItem"))
200                     .getTestPolicyContextItem002().getDoubleValue() == Math.PI);
201             assert (((TestPolicyContextItem) policyContextAlbum.get("TestPolicyContextItem"))
202                     .getTestPolicyContextItem003().getFlag());
203             assert (((TestPolicyContextItem) policyContextAlbum.get("TestPolicyContextItem"))
204                     .getTestPolicyContextItem004().getLongValue() == testDate.getTime());
205             assert (((TestPolicyContextItem) policyContextAlbum.get("TestPolicyContextItem"))
206                     .getTestPolicyContextItem005().getMapValue().equals(testHashMap));
207
208             final AxContextModel globalContextModel = TestContextAlbumFactory.createGlobalContextModel();
209
210             final TestContextItem000 testGlobalContextItem000 = new TestContextItem000(false);
211             final TestContextItem001 testGlobalContextItem001 = new TestContextItem001((byte) 0xFF);
212             final TestContextItem002 testGlobalContextItem002 = new TestContextItem002(0xFFFFFFFF);
213             final TestContextItem003 testGlobalContextItem003 = new TestContextItem003(0xFFFFFFFFFFFFFFFFL);
214             final TestContextItem004 testGlobalContextItem004 = new TestContextItem004(testFloat);
215             final TestContextItem005 testGlobalContextItem005 = new TestContextItem005(Math.PI);
216             final TestContextItem006 testGlobalContextItem006 =
217                     new TestContextItem006("This is a global context string");
218             final TestContextItem007 testGlobalContextItem007 = new TestContextItem007(testDate.getTime());
219             final TestContextItem008 testGlobalContextItem008 = new TestContextItem008(testDate);
220             final TestContextItem00B testGlobalContextItem00B = new TestContextItem00B(testTreeSet);
221             final TestContextItem00C testGlobalContextItem00C = new TestContextItem00C(testHashMap);
222
223             final TestGlobalContextItem globalContext = new TestGlobalContextItem();
224
225             globalContext.setTestGlobalContextItem000(testGlobalContextItem000);
226             globalContext.setTestGlobalContextItem001(testGlobalContextItem001);
227             globalContext.setTestGlobalContextItem002(testGlobalContextItem002);
228             globalContext.setTestGlobalContextItem003(testGlobalContextItem003);
229             globalContext.setTestGlobalContextItem004(testGlobalContextItem004);
230             globalContext.setTestGlobalContextItem005(testGlobalContextItem005);
231             globalContext.setTestGlobalContextItem006(testGlobalContextItem006);
232             globalContext.setTestGlobalContextItem007(testGlobalContextItem007);
233             globalContext.setTestGlobalContextItem008(testGlobalContextItem008);
234             globalContext.setTestGlobalContextItem009(tci9);
235             globalContext.setTestGlobalContextItem00A(tciA);
236             globalContext.setTestGlobalContextItem00B(testGlobalContextItem00B);
237             globalContext.setTestGlobalContextItem00C(testGlobalContextItem00C);
238             final Map<String, Object> valueMap1 = new HashMap<>();
239             valueMap1.put("globalContext", globalContext);
240
241             try {
242                 contextDistributor.registerModel(globalContextModel);
243             } catch (final ContextException e) {
244                 assert (e.getMessage().equals(
245                         "active context albums found in distributor, clear the distributor before registering models"));
246             }
247
248             contextDistributor.registerModel(globalContextModel);
249
250             final ContextAlbum globalContextAlbum =
251                     contextDistributor.createContextAlbum(new AxArtifactKey("GlobalContextAlbum", "0.0.1"));
252             assert (globalContextAlbum != null);
253             globalContextAlbum.setUserArtifactStack(usedArtifactStackArray);
254
255             globalContextAlbum.putAll(valueMap1);
256
257             assert (!((TestGlobalContextItem) globalContextAlbum.get("globalContext")).getTestGlobalContextItem000()
258                     .getFlag());
259             assert (((TestGlobalContextItem) globalContextAlbum.get("globalContext")).getTestGlobalContextItem001()
260                     .getByteValue() == (byte) 0xFF);
261             assert (((TestGlobalContextItem) globalContextAlbum.get("globalContext")).getTestGlobalContextItem002()
262                     .getIntValue() == 0xFFFFFFFF);
263             assert (((TestGlobalContextItem) globalContextAlbum.get("globalContext")).getTestGlobalContextItem003()
264                     .getLongValue() == 0xFFFFFFFFFFFFFFFFL);
265             assert (((TestGlobalContextItem) globalContextAlbum.get("globalContext")).getTestGlobalContextItem004()
266                     .getFloatValue() == testFloat);
267             assert (((TestGlobalContextItem) globalContextAlbum.get("globalContext")).getTestGlobalContextItem005()
268                     .getDoubleValue() == Math.PI);
269             assert (((TestGlobalContextItem) globalContextAlbum.get("globalContext")).getTestGlobalContextItem006()
270                     .getStringValue().equals("This is a global context string"));
271             assert (((TestGlobalContextItem) globalContextAlbum.get("globalContext")).getTestGlobalContextItem007()
272                     .getLongValue() == testDate.getTime());
273             assert (((TestGlobalContextItem) globalContextAlbum.get("globalContext")).getTestGlobalContextItem008()
274                     .getDateValue().equals(testDate));
275             assert (((TestGlobalContextItem) globalContextAlbum.get("globalContext")).getTestGlobalContextItem009()
276                     .getDateValue().getTime() == tci9.getDateValue().getTime());
277             assert (((TestGlobalContextItem) globalContextAlbum.get("globalContext")).getTestGlobalContextItem00A()
278                     .getDateValue().getTime() == tciA.getDateValue().getTime());
279             assert (((TestGlobalContextItem) globalContextAlbum.get("globalContext")).getTestGlobalContextItem00B()
280                     .getSetValue().equals(testTreeSet));
281             assert (((TestGlobalContextItem) globalContextAlbum.get("globalContext")).getTestGlobalContextItem00C()
282                     .getMapValue().equals(testHashMap));
283
284             final AxContextModel externalContextModel = TestContextAlbumFactory.createExternalContextModel();
285
286             final TestExternalContextItem externalContext = new TestExternalContextItem();
287
288             final TestContextItem000 testExternalContextItem000 = new TestContextItem000(false);
289             final TestContextItem001 testExternalContextItem001 = new TestContextItem001((byte) 0xFF);
290             final TestContextItem002 testExternalContextItem002 = new TestContextItem002(0xFFFFFFFF);
291             final TestContextItem003 testExternalContextItem003 = new TestContextItem003(0xFFFFFFFFFFFFFFFFL);
292             final TestContextItem004 testExternalContextItem004 = new TestContextItem004(testFloat);
293             final TestContextItem005 testExternalContextItem005 = new TestContextItem005(Math.PI);
294             final TestContextItem006 testExternalContextItem006 =
295                     new TestContextItem006("This is an external context string");
296             final TestContextItem007 testExternalContextItem007 = new TestContextItem007(testDate.getTime());
297             final TestContextItem008 testExternalContextItem008 = new TestContextItem008(testDate);
298             final TestContextItem00B testExternalContextItem00B = new TestContextItem00B(testTreeSet);
299             final TestContextItem00C testExternalContextItem00C = new TestContextItem00C(testHashMap);
300
301             final TestContextItem009 tci9A = new TestContextItem009(tci9);
302             final TestContextItem00A tciAA = new TestContextItem00A(tciA);
303
304             externalContext.setTestExternalContextItem000(testExternalContextItem000);
305             externalContext.setTestExternalContextItem001(testExternalContextItem001);
306             externalContext.setTestExternalContextItem002(testExternalContextItem002);
307             externalContext.setTestExternalContextItem003(testExternalContextItem003);
308             externalContext.setTestExternalContextItem004(testExternalContextItem004);
309             externalContext.setTestExternalContextItem005(testExternalContextItem005);
310             externalContext.setTestExternalContextItem006(testExternalContextItem006);
311             externalContext.setTestExternalContextItem007(testExternalContextItem007);
312             externalContext.setTestExternalContextItem008(testExternalContextItem008);
313             externalContext.setTestExternalContextItem009(tci9A);
314             externalContext.setTestExternalContextItem00A(tciAA);
315             externalContext.setTestExternalContextItem00B(testExternalContextItem00B);
316             externalContext.setTestExternalContextItem00C(testExternalContextItem00C);
317
318             final Map<String, Object> valueMap2 = new HashMap<>();
319             valueMap2.put("externalContext", externalContext);
320
321             contextDistributor.clear();
322             contextDistributor.init(new AxArtifactKey("ClearedandInittedDistributor", "0.0.1"));
323             contextDistributor.registerModel(externalContextModel);
324
325             final ContextAlbum externalContextAlbum =
326                     contextDistributor.createContextAlbum(new AxArtifactKey("ExternalContextAlbum", "0.0.1"));
327             assert (externalContextAlbum != null);
328             externalContextAlbum.setUserArtifactStack(usedArtifactStackArray);
329
330             externalContextAlbum.putAll(valueMap2);
331             externalContextAlbum.getAlbumDefinition().setWritable(false);
332
333             assert (!((TestExternalContextItem) externalContextAlbum.get("externalContext"))
334                     .getTestExternalContextItem000().getFlag());
335             assert (((TestExternalContextItem) externalContextAlbum.get("externalContext"))
336                     .getTestExternalContextItem001().getByteValue() == (byte) 0xFF);
337             assert (((TestExternalContextItem) externalContextAlbum.get("externalContext"))
338                     .getTestExternalContextItem002().getIntValue() == 0xFFFFFFFF);
339             assert (((TestExternalContextItem) externalContextAlbum.get("externalContext"))
340                     .getTestExternalContextItem003().getLongValue() == 0xFFFFFFFFFFFFFFFFL);
341             assert (((TestExternalContextItem) externalContextAlbum.get("externalContext"))
342                     .getTestExternalContextItem004().getFloatValue() == testFloat);
343             assert (((TestExternalContextItem) externalContextAlbum.get("externalContext"))
344                     .getTestExternalContextItem005().getDoubleValue() == Math.PI);
345             assert (((TestExternalContextItem) externalContextAlbum.get("externalContext"))
346                     .getTestExternalContextItem006().getStringValue().equals("This is an external context string"));
347             assert (((TestExternalContextItem) externalContextAlbum.get("externalContext"))
348                     .getTestExternalContextItem007().getLongValue() == testDate.getTime());
349             assert (((TestExternalContextItem) externalContextAlbum.get("externalContext"))
350                     .getTestExternalContextItem008().getDateValue().equals(testDate));
351             assert (((TestExternalContextItem) externalContextAlbum.get("externalContext"))
352                     .getTestExternalContextItem009().getDateValue().getTime() == tci9A.getDateValue().getTime());
353             assert (((TestExternalContextItem) externalContextAlbum.get("externalContext"))
354                     .getTestExternalContextItem00A().getDateValue().getTime() == tciAA.getDateValue().getTime());
355             assert (((TestExternalContextItem) externalContextAlbum.get("externalContext"))
356                     .getTestExternalContextItem00B().getSetValue().equals(testTreeSet));
357             assert (((TestExternalContextItem) externalContextAlbum.get("externalContext"))
358                     .getTestExternalContextItem00C().getMapValue().equals(testHashMap));
359
360             final Collection<Object> mapValues = externalContextAlbum.values();
361             assert (externalContextAlbum.values().containsAll(mapValues));
362
363             // Check that clearing does not work
364             try {
365                 externalContextAlbum.clear();
366                 assert ("Test should throw an exception".equals(""));
367             } catch (final ContextRuntimeException e) {
368                 assert (e.getMessage()
369                         .equals("album \"ExternalContextAlbum:0.0.1\" clear() not allowed on read only albums"));
370             }
371
372             assert (externalContextAlbum.size() == 1);
373
374             try {
375                 externalContextAlbum.containsKey(null);
376             } catch (final ContextRuntimeException e) {
377                 assert (e.getMessage().equals("null values are illegal on method parameter \"key\""));
378             }
379
380             assert (externalContextAlbum.containsKey("externalContext"));
381             assert (!externalContextAlbum.containsKey("globalContext"));
382
383             try {
384                 externalContextAlbum.containsValue(null);
385             } catch (final ContextRuntimeException e) {
386                 assert (e.getMessage().equals("null values are illegal on method parameter \"value\""));
387             }
388
389             assert (externalContextAlbum.containsValue(externalContext));
390             assert (!externalContextAlbum.containsValue(new String("Hello")));
391
392             final Set<Entry<String, Object>> entrySet = externalContextAlbum.entrySet();
393             assert (entrySet.size() == 1);
394
395             try {
396                 externalContextAlbum.get(null);
397             } catch (final ContextRuntimeException e) {
398                 assert (e.getMessage()
399                         .equals("album \"ExternalContextAlbum:0.0.1\" null keys are illegal on keys for get()"));
400             }
401
402             final Object aObject = externalContextAlbum.get("externalContext");
403             assert (aObject.equals(externalContext));
404
405             // put null keys should fail, throws a runtime exception
406             try {
407                 externalContextAlbum.put(null, null);
408             } catch (final ContextRuntimeException e) {
409                 assert (e.getMessage()
410                         .equals("album \"ExternalContextAlbum:0.0.1\" null keys are illegal on keys for put()"));
411             }
412
413             try {
414                 externalContextAlbum.put("TestExternalContextItem00A", null);
415             } catch (final ContextRuntimeException e) {
416                 assert (e.getMessage().equals(
417                         "album \"ExternalContextAlbum:0.0.1\" null values are illegal on key \"TestExternalContextItem00A\" for put()"));
418             }
419             assert (((TestExternalContextItem) externalContextAlbum.get("externalContext"))
420                     .getTestExternalContextItem00A().equals(tciAA));
421
422             // Should return the hash set
423             assert (((TestExternalContextItem) externalContextAlbum.get("externalContext"))
424                     .getTestExternalContextItem00B().getSetValue().equals(testTreeSet));
425
426             assert (externalContextAlbum.values().containsAll(mapValues));
427
428             // Set the write flag back as it should be
429             externalContextAlbum.getAlbumDefinition().setWritable(true);
430
431             // Put should return the previous contextItem
432             final TestExternalContextItem externalContextOther = new TestExternalContextItem();
433             externalContextOther.setTestExternalContextItem002(new TestContextItem002());
434             externalContextOther.getTestExternalContextItem002().setIntValue(2000);
435
436             assert (externalContextAlbum.put("externalContext", externalContextOther).equals(externalContext));
437             assert (((TestExternalContextItem) externalContextAlbum.get("externalContext"))
438                     .getTestExternalContextItem002().getIntValue() == 2000);
439             assert (externalContextAlbum.put("externalContext", externalContext).equals(externalContextOther));
440             assert (((TestExternalContextItem) externalContextAlbum.get("externalContext"))
441                     .getTestExternalContextItem002().getIntValue() == -1);
442
443             try {
444                 externalContextAlbum.put("TestExternalContextItem00A", null);
445             } catch (final ContextRuntimeException e) {
446                 assert (e.getMessage().equals(
447                         "album \"ExternalContextAlbum:0.0.1\" null values are illegal on key \"TestExternalContextItem00A\" for put()"));
448             }
449             assert (externalContextAlbum.get("externalContext").equals(externalContext));
450
451             try {
452                 externalContextAlbum.put("TestExternalContextItemFFF", null);
453             } catch (final ContextRuntimeException e) {
454                 assert (e.getMessage().equals(
455                         "album \"ExternalContextAlbum:0.0.1\" null values are illegal on key \"TestExternalContextItemFFF\" for put()"));
456             }
457             assert (externalContextAlbum.size() == 1);
458
459             try {
460                 externalContextAlbum.put("TestExternalContextItemFFF", null);
461             } catch (final ContextRuntimeException e) {
462                 assert (e.getMessage().equals(
463                         "album \"ExternalContextAlbum:0.0.1\" null values are illegal on key \"TestExternalContextItemFFF\" for put()"));
464             }
465             assert (externalContextAlbum.size() == 1);
466
467             // Should ignore remove
468             externalContextAlbum.remove("TestExternalContextItem017");
469             assert (externalContextAlbum.size() == 1);
470
471             assert (externalContextAlbum.values().size() == 1);
472             assert (externalContextAlbum.values().containsAll(mapValues));
473             // CHECKSTYLE:ON: checkstyle:magicNumber
474         } catch (final Exception e) {
475             e.printStackTrace();
476             contextDistributor.clear();
477             assert ("Test has failed".equals(""));
478         }
479
480         try {
481             contextDistributor.clear();
482         } catch (final Exception e) {
483             e.printStackTrace();
484             assert ("Test has failed".equals(""));
485         }
486     }
487 }