75c6158980bf7e50c1a63d902afea9e3419c91ef
[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.assertFalse;
25 import static org.junit.Assert.assertNotNull;
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.createPolicyContextModel;
29 import static org.onap.policy.apex.context.test.utils.Constants.BYTE_VAL;
30 import static org.onap.policy.apex.context.test.utils.Constants.EXCEPTION_MESSAGE;
31 import static org.onap.policy.apex.context.test.utils.Constants.EXTERNAL_CONTEXT;
32 import static org.onap.policy.apex.context.test.utils.Constants.EXTERNAL_CONTEXT_ALBUM;
33 import static org.onap.policy.apex.context.test.utils.Constants.FLOAT_VAL;
34 import static org.onap.policy.apex.context.test.utils.Constants.GLOBAL_CONTEXT_ALBUM;
35 import static org.onap.policy.apex.context.test.utils.Constants.GLOBAL_CONTEXT_KEY;
36 import static org.onap.policy.apex.context.test.utils.Constants.INT_VAL;
37 import static org.onap.policy.apex.context.test.utils.Constants.INT_VAL_2;
38 import static org.onap.policy.apex.context.test.utils.Constants.INT_VAL_3;
39 import static org.onap.policy.apex.context.test.utils.Constants.LONG_VAL;
40 import static org.onap.policy.apex.context.test.utils.Constants.PI_VAL;
41 import static org.onap.policy.apex.context.test.utils.Constants.POLICY_CONTEXT_ALBUM;
42 import static org.onap.policy.apex.context.test.utils.Constants.STRING_EXT_VAL;
43 import static org.onap.policy.apex.context.test.utils.Constants.STRING_GLOBAL_VAL;
44 import static org.onap.policy.apex.context.test.utils.Constants.STRING_VAL;
45 import static org.onap.policy.apex.context.test.utils.Constants.TEST_POLICY_CONTEXT_ITEM;
46 import static org.onap.policy.apex.context.test.utils.Constants.TIME_ZONE;
47 import static org.onap.policy.apex.context.test.utils.Constants.VERSION;
48
49 import java.util.Collection;
50 import java.util.Date;
51 import java.util.HashMap;
52 import java.util.LinkedHashMap;
53 import java.util.Locale;
54 import java.util.Map;
55 import java.util.Map.Entry;
56 import java.util.Set;
57 import java.util.TreeSet;
58
59 import org.onap.policy.apex.context.ContextAlbum;
60 import org.onap.policy.apex.context.ContextException;
61 import org.onap.policy.apex.context.ContextRuntimeException;
62 import org.onap.policy.apex.context.Distributor;
63 import org.onap.policy.apex.context.impl.distribution.DistributorFactory;
64 import org.onap.policy.apex.context.test.concepts.TestContextBooleanItem;
65 import org.onap.policy.apex.context.test.concepts.TestContextByteItem;
66 import org.onap.policy.apex.context.test.concepts.TestContextDateItem;
67 import org.onap.policy.apex.context.test.concepts.TestContextDateLocaleItem;
68 import org.onap.policy.apex.context.test.concepts.TestContextDateTzItem;
69 import org.onap.policy.apex.context.test.concepts.TestContextDoubleItem;
70 import org.onap.policy.apex.context.test.concepts.TestContextFloatItem;
71 import org.onap.policy.apex.context.test.concepts.TestContextIntItem;
72 import org.onap.policy.apex.context.test.concepts.TestContextLongItem;
73 import org.onap.policy.apex.context.test.concepts.TestContextLongObjectItem;
74 import org.onap.policy.apex.context.test.concepts.TestContextStringItem;
75 import org.onap.policy.apex.context.test.concepts.TestContextTreeMapItem;
76 import org.onap.policy.apex.context.test.concepts.TestContextTreeSetItem;
77 import org.onap.policy.apex.context.test.concepts.TestExternalContextItem;
78 import org.onap.policy.apex.context.test.concepts.TestGlobalContextItem;
79 import org.onap.policy.apex.context.test.concepts.TestPolicyContextItem;
80 import org.onap.policy.apex.context.test.factory.TestContextAlbumFactory;
81 import org.onap.policy.apex.context.test.utils.Constants;
82 import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
83 import org.onap.policy.apex.model.basicmodel.concepts.AxValidationResult;
84 import org.onap.policy.apex.model.contextmodel.concepts.AxContextModel;
85 import org.slf4j.ext.XLogger;
86 import org.slf4j.ext.XLoggerFactory;
87
88 /**
89  * The Class TestContextInstantiation is used to test Apex context insitiation is correct.
90  *
91  * @author Sergey Sachkov (sergey.sachkov@ericsson.com)
92  */
93 public class ContextInstantiation {
94     // Logger for this class
95     private static final XLogger LOGGER = XLoggerFactory.getXLogger(ContextInstantiation.class);
96
97     private static final TreeSet<String> TEST_TREE_SET = new TreeSet<>();
98     private static final Map<String, String> TEST_HASH_MAP = new HashMap<>();
99
100     static {
101         TEST_TREE_SET.add("one hundred");
102         TEST_TREE_SET.add("one hundred and one");
103         TEST_TREE_SET.add("one hundred and two");
104         TEST_TREE_SET.add("one hundred and three");
105         TEST_TREE_SET.add("one hundred and four");
106
107         TEST_HASH_MAP.put("0", "zero");
108         TEST_HASH_MAP.put("1", "one");
109         TEST_HASH_MAP.put("2", "two");
110         TEST_HASH_MAP.put("3", "three");
111         TEST_HASH_MAP.put("4", "four");
112
113     }
114
115     /**
116      * Test context instantiation.
117      *
118      * @throws ContextException the context exception
119      */
120     public void testContextInstantiation() throws ContextException {
121         LOGGER.debug("Running TestContextInstantiation test . . .");
122
123         final Distributor contextDistributor = getDistributor();
124
125         try {
126
127             final ContextAlbum policyContextAlbum =
128                     contextDistributor.createContextAlbum(new AxArtifactKey(POLICY_CONTEXT_ALBUM, VERSION));
129
130             assertNotNull(policyContextAlbum);
131             policyContextAlbum.setUserArtifactStack(Constants.getAxArtifactKeyArray());
132
133             final Date testDate = new Date();
134
135             final TestContextDateTzItem tci9 = getTestContextDateTzItem(testDate);
136             final TestContextDateLocaleItem tciA = getTestContextDateLocaleItem(testDate);
137
138             final TestPolicyContextItem policyContext = getTestPolicyContextItem(policyContextAlbum, testDate);
139
140             final Map<String, Object> valueMap0 = new HashMap<>();
141             valueMap0.put(TEST_POLICY_CONTEXT_ITEM, policyContext);
142
143             policyContextAlbum.putAll(valueMap0);
144
145             final TestPolicyContextItem contextItem =
146                     (TestPolicyContextItem) policyContextAlbum.get(TEST_POLICY_CONTEXT_ITEM);
147             assertEquals(STRING_VAL, contextItem.getTestPolicyContextItem000().getStringValue());
148
149             assertEquals(LONG_VAL, contextItem.getTestPolicyContextItem001().getLongValue());
150             assertDouble(contextItem.getTestPolicyContextItem002().getDoubleValue(), PI_VAL);
151             assertTrue(contextItem.getTestPolicyContextItem003().getFlag());
152             assertEquals(contextItem.getTestPolicyContextItem004().getLongValue(), testDate.getTime());
153             assertEquals(TEST_HASH_MAP, contextItem.getTestPolicyContextItem005().getMapValue());
154
155             final TestGlobalContextItem globalContext =
156                     getTestGlobalContextItem(contextDistributor, testDate, tci9, tciA);
157
158             final Map<String, Object> valueMap1 = new HashMap<>();
159             valueMap1.put(GLOBAL_CONTEXT_KEY, globalContext);
160
161             final ContextAlbum globalContextAlbum = getContextAlbum(contextDistributor);
162
163             globalContextAlbum.putAll(valueMap1);
164
165             final TestGlobalContextItem globalContextItem =
166                     (TestGlobalContextItem) globalContextAlbum.get(GLOBAL_CONTEXT_KEY);
167
168             assertFalse(globalContextItem.getTestGlobalContextItem000().getFlag());
169
170             assertEquals(BYTE_VAL, globalContextItem.getTestGlobalContextItem001().getByteValue());
171
172             assertEquals(INT_VAL, globalContextItem.getTestGlobalContextItem002().getIntValue());
173             assertEquals(LONG_VAL, globalContextItem.getTestGlobalContextItem003().getLongValue());
174             assertFloat(FLOAT_VAL, globalContextItem.getTestGlobalContextItem004().getFloatValue());
175
176             assertDouble(PI_VAL, globalContextItem.getTestGlobalContextItem005().getDoubleValue());
177             assertEquals(STRING_GLOBAL_VAL, globalContextItem.getTestGlobalContextItem006().getStringValue());
178
179             assertEquals(new Long(testDate.getTime()), globalContextItem.getTestGlobalContextItem007().getLongValue());
180             assertEquals(testDate, globalContextItem.getTestGlobalContextItem008().getDateValue());
181             assertEquals(tci9.getDateValue().getTime(),
182                     globalContextItem.getTestGlobalContextItem009().getDateValue().getTime());
183
184             assertEquals(tciA.getDateValue().getTime(),
185                     globalContextItem.getTestGlobalContextItem00A().getDateValue().getTime());
186
187             assertEquals(TEST_TREE_SET, globalContextItem.getTestGlobalContextItem00B().getSetValue());
188             assertEquals(TEST_HASH_MAP, globalContextItem.getTestGlobalContextItem00C().getMapValue());
189
190             final AxContextModel externalContextModel = TestContextAlbumFactory.createExternalContextModel();
191
192             final TestContextDateTzItem tci9A = new TestContextDateTzItem(tci9);
193             final TestContextDateLocaleItem tciA_A = new TestContextDateLocaleItem(tciA);
194             final TestExternalContextItem externalContext = getTestExternalContextItem(testDate, tci9A, tciA_A);
195
196             final Map<String, Object> valueMap2 = new HashMap<>();
197             valueMap2.put(EXTERNAL_CONTEXT, externalContext);
198
199             contextDistributor.clear();
200             contextDistributor.init(new AxArtifactKey("ClearedandInittedDistributor", VERSION));
201             contextDistributor.registerModel(externalContextModel);
202
203             final AxArtifactKey axContextAlbumKey = new AxArtifactKey(EXTERNAL_CONTEXT_ALBUM, VERSION);
204             final ContextAlbum externalContextAlbum = contextDistributor.createContextAlbum(axContextAlbumKey);
205             assertNotNull(externalContextAlbum);
206             externalContextAlbum.setUserArtifactStack(Constants.getAxArtifactKeyArray());
207
208             externalContextAlbum.putAll(valueMap2);
209             externalContextAlbum.getAlbumDefinition().setWritable(false);
210
211             TestExternalContextItem externalContextItem =
212                     (TestExternalContextItem) externalContextAlbum.get(EXTERNAL_CONTEXT);
213
214             assertFalse(externalContextItem.getTestExternalContextItem000().getFlag());
215             assertEquals(BYTE_VAL, externalContextItem.getTestExternalContextItem001().getByteValue());
216             assertEquals(INT_VAL, externalContextItem.getTestExternalContextItem002().getIntValue());
217
218             assertFloat(LONG_VAL, externalContextItem.getTestExternalContextItem003().getLongValue());
219             assertFloat(FLOAT_VAL, externalContextItem.getTestExternalContextItem004().getFloatValue());
220
221             assertDouble(PI_VAL, externalContextItem.getTestExternalContextItem005().getDoubleValue());
222             assertEquals(STRING_EXT_VAL, externalContextItem.getTestExternalContextItem006().getStringValue());
223             assertEquals(new Long(testDate.getTime()),
224                     externalContextItem.getTestExternalContextItem007().getLongValue());
225             assertEquals(testDate, externalContextItem.getTestExternalContextItem008().getDateValue());
226             assertEquals(tci9A.getDateValue().getTime(),
227                     externalContextItem.getTestExternalContextItem009().getDateValue().getTime());
228
229             assertEquals(tciA_A.getDateValue().getTime(),
230                     externalContextItem.getTestExternalContextItem00A().getDateValue().getTime());
231             assertEquals(TEST_TREE_SET, externalContextItem.getTestExternalContextItem00B().getSetValue());
232             assertEquals(TEST_HASH_MAP, externalContextItem.getTestExternalContextItem00C().getMapValue());
233
234             final Collection<Object> mapValues = externalContextAlbum.values();
235             assertTrue(externalContextAlbum.values().containsAll(mapValues));
236
237             // Check that clearing does not work
238             try {
239                 externalContextAlbum.clear();
240                 fail(EXCEPTION_MESSAGE);
241             } catch (final ContextRuntimeException e) {
242                 assertEquals("album \"ExternalContextAlbum:0.0.1\" clear() not allowed on read only albums",
243                         e.getMessage());
244             }
245
246             assertEquals(1, externalContextAlbum.size());
247
248             assertContextAlbumContains(externalContext, externalContextAlbum);
249
250             final Set<Entry<String, Object>> entrySet = externalContextAlbum.entrySet();
251             assertEquals(1, entrySet.size());
252
253             try {
254                 externalContextAlbum.get(null);
255             } catch (final ContextRuntimeException e) {
256                 assertEquals("album \"ExternalContextAlbum:0.0.1\" null keys are illegal on keys for get()",
257                         e.getMessage());
258
259             }
260
261             final Object aObject = externalContextAlbum.get(EXTERNAL_CONTEXT);
262             assertEquals(aObject, externalContext);
263
264             // put null keys should fail, throws a runtime exception
265             try {
266                 externalContextAlbum.put(null, null);
267             } catch (final ContextRuntimeException e) {
268                 assertEquals("album \"ExternalContextAlbum:0.0.1\" null keys are illegal on keys for put()",
269                         e.getMessage());
270             }
271
272             try {
273                 externalContextAlbum.put("TestExternalContextItem00A", null);
274             } catch (final ContextRuntimeException e) {
275                 assertEquals("album \"ExternalContextAlbum:0.0.1\" null values are illegal on key "
276                         + "\"TestExternalContextItem00A\" for put()", e.getMessage());
277             }
278             assertEquals(tciA_A, externalContextItem.getTestExternalContextItem00A());
279
280             // Should return the hash set
281             assertEquals(TEST_TREE_SET, externalContextItem.getTestExternalContextItem00B().getSetValue());
282
283             assertTrue(externalContextAlbum.values().containsAll(mapValues));
284
285             // Set the write flag back as it should be
286             externalContextAlbum.getAlbumDefinition().setWritable(true);
287
288             // Put should return the previous contextItem
289             final TestExternalContextItem externalContextOther = new TestExternalContextItem();
290             externalContextOther.setTestExternalContextItem002(new TestContextIntItem());
291             externalContextOther.getTestExternalContextItem002().setIntValue(INT_VAL_2);
292
293             assertTrue(externalContextAlbum.put(EXTERNAL_CONTEXT, externalContextOther).equals(externalContext));
294             externalContextItem = (TestExternalContextItem) externalContextAlbum.get(EXTERNAL_CONTEXT);
295             assertEquals(INT_VAL_2, externalContextItem.getTestExternalContextItem002().getIntValue());
296             assertTrue(externalContextAlbum.put(EXTERNAL_CONTEXT, externalContext).equals(externalContextOther));
297             externalContextItem = (TestExternalContextItem) externalContextAlbum.get(EXTERNAL_CONTEXT);
298             assertEquals(INT_VAL_3, externalContextItem.getTestExternalContextItem002().getIntValue());
299
300             try {
301                 externalContextAlbum.put("TestExternalContextItem00A", null);
302             } catch (final ContextRuntimeException e) {
303                 assert (e.getMessage().equals("album \"ExternalContextAlbum:0.0.1\" null values are illegal on key "
304                         + "\"TestExternalContextItem00A\" for put()"));
305             }
306             assertTrue(externalContextAlbum.get(EXTERNAL_CONTEXT).equals(externalContext));
307
308             try {
309                 externalContextAlbum.put("TestExternalContextItemFFF", null);
310             } catch (final ContextRuntimeException e) {
311                 assert (e.getMessage().equals("album \"ExternalContextAlbum:0.0.1\" null values are illegal on key "
312                         + "\"TestExternalContextItemFFF\" for put()"));
313             }
314             assertEquals(1, externalContextAlbum.size());
315
316             try {
317                 externalContextAlbum.put("TestExternalContextItemFFF", null);
318             } catch (final ContextRuntimeException e) {
319                 assertEquals("album \"ExternalContextAlbum:0.0.1\" null values are illegal on key "
320                         + "\"TestExternalContextItemFFF\" for put()", e.getMessage());
321             }
322             assertEquals(1, externalContextAlbum.size());
323
324             // Should ignore remove
325             externalContextAlbum.remove("TestExternalContextItem017");
326             assertEquals(1, externalContextAlbum.size());
327             assertEquals(1, externalContextAlbum.values().size());
328             assertTrue(externalContextAlbum.values().containsAll(mapValues));
329         } catch (final Exception exception) {
330             LOGGER.error("Unexpected Error:", exception);
331             throw exception;
332         } finally {
333             contextDistributor.clear();
334         }
335
336     }
337
338     private void assertContextAlbumContains(final TestExternalContextItem externalContext,
339             final ContextAlbum externalContextAlbum) {
340         try {
341             externalContextAlbum.containsKey(null);
342         } catch (final ContextRuntimeException e) {
343             assertEquals("null values are illegal on method parameter \"key\"", e.getMessage());
344         }
345
346         assertTrue(externalContextAlbum.containsKey(EXTERNAL_CONTEXT));
347         assertTrue(!externalContextAlbum.containsKey(GLOBAL_CONTEXT_KEY));
348
349         try {
350             externalContextAlbum.containsValue(null);
351         } catch (final ContextRuntimeException e) {
352             assertEquals("null values are illegal on method parameter \"value\"", e.getMessage());
353         }
354
355         assertTrue(externalContextAlbum.containsValue(externalContext));
356         assertFalse(externalContextAlbum.containsValue("Hello"));
357     }
358
359     private ContextAlbum getContextAlbum(final Distributor contextDistributor) throws ContextException {
360         final ContextAlbum globalContextAlbum =
361                 contextDistributor.createContextAlbum(new AxArtifactKey(GLOBAL_CONTEXT_ALBUM, VERSION));
362         assertNotNull(globalContextAlbum);
363         globalContextAlbum.setUserArtifactStack(Constants.getAxArtifactKeyArray());
364         return globalContextAlbum;
365     }
366
367     private TestGlobalContextItem getTestGlobalContextItem(final Distributor contextDistributor, final Date testDate,
368             final TestContextDateTzItem tci9, final TestContextDateLocaleItem tciA) throws ContextException {
369         final AxContextModel globalContextModel = TestContextAlbumFactory.createGlobalContextModel();
370         final TestGlobalContextItem globalContext = getTestGlobalContextItem(testDate, tci9, tciA);
371         contextDistributor.registerModel(globalContextModel);
372         return globalContext;
373     }
374
375     private TestGlobalContextItem getTestGlobalContextItem(final Date testDate, final TestContextDateTzItem tci9,
376             final TestContextDateLocaleItem tciA) {
377         final TestGlobalContextItem globalContext = new TestGlobalContextItem();
378
379         final TestContextBooleanItem testGlobalContextItem000 = new TestContextBooleanItem(false);
380         final TestContextByteItem testGlobalContextItem001 = new TestContextByteItem(BYTE_VAL);
381         final TestContextIntItem testGlobalContextItem002 = new TestContextIntItem(INT_VAL);
382         final TestContextLongItem testGlobalContextItem003 = new TestContextLongItem(LONG_VAL);
383         final TestContextFloatItem testGlobalContextItem004 = new TestContextFloatItem(new Float(FLOAT_VAL));
384         final TestContextDoubleItem testGlobalContextItem005 = new TestContextDoubleItem(PI_VAL);
385         final TestContextStringItem testGlobalContextItem006 = new TestContextStringItem(STRING_GLOBAL_VAL);
386         final TestContextLongObjectItem testGlobalContextItem007 = new TestContextLongObjectItem(testDate.getTime());
387
388         final TestContextDateItem testGlobalContextItem008 = new TestContextDateItem(testDate);
389         final TestContextTreeSetItem testGlobalContextItem00B = new TestContextTreeSetItem(TEST_TREE_SET);
390         final TestContextTreeMapItem testGlobalContextItem00C = new TestContextTreeMapItem(TEST_HASH_MAP);
391
392
393         globalContext.setTestGlobalContextItem000(testGlobalContextItem000);
394         globalContext.setTestGlobalContextItem001(testGlobalContextItem001);
395         globalContext.setTestGlobalContextItem002(testGlobalContextItem002);
396         globalContext.setTestGlobalContextItem003(testGlobalContextItem003);
397         globalContext.setTestGlobalContextItem004(testGlobalContextItem004);
398         globalContext.setTestGlobalContextItem005(testGlobalContextItem005);
399         globalContext.setTestGlobalContextItem006(testGlobalContextItem006);
400         globalContext.setTestGlobalContextItem007(testGlobalContextItem007);
401         globalContext.setTestGlobalContextItem008(testGlobalContextItem008);
402         globalContext.setTestGlobalContextItem009(tci9);
403         globalContext.setTestGlobalContextItem00A(tciA);
404         globalContext.setTestGlobalContextItem00B(testGlobalContextItem00B);
405         globalContext.setTestGlobalContextItem00C(testGlobalContextItem00C);
406         return globalContext;
407     }
408
409     private TestPolicyContextItem getTestPolicyContextItem(final ContextAlbum policyContextAlbum, final Date testDate) {
410         final TestContextStringItem contextStringItem = new TestContextStringItem(STRING_VAL);
411         final TestContextLongItem contextLongItem = new TestContextLongItem(LONG_VAL);
412         final TestContextDoubleItem contextDoubleItem = new TestContextDoubleItem(PI_VAL);
413         final TestContextBooleanItem contextBooleanItem = new TestContextBooleanItem(true);
414         final TestContextLongItem contextLongItem2 = new TestContextLongItem(testDate.getTime());
415         final TestContextTreeMapItem contextTreeMapItem = new TestContextTreeMapItem(TEST_HASH_MAP);
416
417         final Map<String, Object> valueMapA = new LinkedHashMap<>();
418         valueMapA.put("TestPolicyContextItem001", contextLongItem);
419         valueMapA.put("TestPolicyContextItem002", contextDoubleItem);
420         valueMapA.put("TestPolicyContextItem003", contextBooleanItem);
421         valueMapA.put("TestPolicyContextItem004", contextLongItem2);
422         valueMapA.put("TestPolicyContextItem005", contextTreeMapItem);
423         valueMapA.put("TestPolicyContextItem000", contextStringItem);
424
425         assertPutMethods(policyContextAlbum, contextStringItem, valueMapA);
426
427         final TestPolicyContextItem policyContext = new TestPolicyContextItem();
428
429         LOGGER.debug(policyContextAlbum.toString());
430
431         policyContext.setTestPolicyContextItem000(contextStringItem);
432         policyContext.setTestPolicyContextItem001(contextLongItem);
433         policyContext.setTestPolicyContextItem002(contextDoubleItem);
434         policyContext.setTestPolicyContextItem003(contextBooleanItem);
435         policyContext.setTestPolicyContextItem004(contextLongItem2);
436         policyContext.setTestPolicyContextItem005(contextTreeMapItem);
437         return policyContext;
438     }
439
440     private void assertPutMethods(final ContextAlbum policyContextAlbum, final TestContextStringItem contextStringItem,
441             final Map<String, Object> valueMapA) {
442         try {
443             policyContextAlbum.put("TestPolicyContextItem000", contextStringItem);
444             fail(EXCEPTION_MESSAGE);
445         } catch (final ContextRuntimeException e) {
446             assertEquals(
447                     getMessage("TestPolicyContextItem000", "TestContextItem006",
448                             TestContextStringItem.class.getCanonicalName(), "stringValue=" + STRING_VAL),
449                     e.getMessage());
450         }
451
452         try {
453             policyContextAlbum.putAll(valueMapA);
454             fail(EXCEPTION_MESSAGE);
455         } catch (final ContextRuntimeException e) {
456             assertEquals(getMessage("TestPolicyContextItem001", "TestContextItem003",
457                     TestContextLongItem.class.getCanonicalName(), "longValue=" + INT_VAL_3), e.getMessage());
458         }
459     }
460
461     private AxContextModel getAxContextModel() {
462         final AxContextModel policyContextModel = createPolicyContextModel();
463         final AxValidationResult result = new AxValidationResult();
464         policyContextModel.validate(result);
465         LOGGER.debug(result.toString());
466
467         assertTrue(result.isValid());
468         return policyContextModel;
469     }
470
471     private TestContextDateLocaleItem getTestContextDateLocaleItem(final Date testDate) {
472         final TestContextDateLocaleItem tciA = new TestContextDateLocaleItem();
473         tciA.setDateValue(new TestContextDateItem(testDate));
474         tciA.setTzValue(TIME_ZONE.getDisplayName());
475         tciA.setDst(true);
476         tciA.setUtcOffset(-600);
477         tciA.setLocale(Locale.ENGLISH);
478         return tciA;
479     }
480
481     private TestContextDateTzItem getTestContextDateTzItem(final Date testDate) {
482         final TestContextDateTzItem tci9 = new TestContextDateTzItem();
483         tci9.setDateValue(new TestContextDateItem(testDate));
484         tci9.setTzValue(TIME_ZONE.getDisplayName());
485         tci9.setDst(true);
486         return tci9;
487     }
488
489     private TestExternalContextItem getTestExternalContextItem(final Date testDate, final TestContextDateTzItem tci9A,
490             final TestContextDateLocaleItem tciAa) {
491         final TestExternalContextItem externalContext = new TestExternalContextItem();
492
493         final TestContextBooleanItem testExternalContextItem000 = new TestContextBooleanItem(false);
494         final TestContextByteItem testExternalContextItem001 = new TestContextByteItem(BYTE_VAL);
495         final TestContextIntItem testExternalContextItem002 = new TestContextIntItem(INT_VAL);
496         final TestContextLongItem testExternalContextItem003 = new TestContextLongItem(LONG_VAL);
497         final TestContextFloatItem testExternalContextItem004 = new TestContextFloatItem(new Float(3.14159265359));
498         final TestContextDoubleItem testExternalContextItem005 = new TestContextDoubleItem(PI_VAL);
499         final TestContextStringItem testExternalContextItem006 = new TestContextStringItem(STRING_EXT_VAL);
500         final TestContextLongObjectItem testExternalContextItem007 = new TestContextLongObjectItem(testDate.getTime());
501         final TestContextDateItem testExternalContextItem008 = new TestContextDateItem(testDate);
502         final TestContextTreeSetItem testExternalContextItem00B = new TestContextTreeSetItem(TEST_TREE_SET);
503         final TestContextTreeMapItem testExternalContextItem00C = new TestContextTreeMapItem(TEST_HASH_MAP);
504
505
506         externalContext.setTestExternalContextItem000(testExternalContextItem000);
507         externalContext.setTestExternalContextItem001(testExternalContextItem001);
508         externalContext.setTestExternalContextItem002(testExternalContextItem002);
509         externalContext.setTestExternalContextItem003(testExternalContextItem003);
510         externalContext.setTestExternalContextItem004(testExternalContextItem004);
511         externalContext.setTestExternalContextItem005(testExternalContextItem005);
512         externalContext.setTestExternalContextItem006(testExternalContextItem006);
513         externalContext.setTestExternalContextItem007(testExternalContextItem007);
514         externalContext.setTestExternalContextItem008(testExternalContextItem008);
515         externalContext.setTestExternalContextItem009(tci9A);
516         externalContext.setTestExternalContextItem00A(tciAa);
517         externalContext.setTestExternalContextItem00B(testExternalContextItem00B);
518         externalContext.setTestExternalContextItem00C(testExternalContextItem00C);
519         return externalContext;
520     }
521
522     private String getMessage(final String key, final String objName, final String clazzName, final String valString) {
523         return getMessage(key, objName, clazzName, valString, TestPolicyContextItem.class.getCanonicalName());
524     }
525
526     private String getMessage(final String key, final String objName, final String clazzName, final String valString,
527             final String compatibleClazzName) {
528         return "Failed to set context value for key \"" + key + "\" in album \"PolicyContextAlbum:0.0.1\": "
529                 + "PolicyContextAlbum:0.0.1: object \"" + objName + " [" + valString + "]\" " + "of class \""
530                 + clazzName + "\"" + " not compatible with class \"" + compatibleClazzName + "\"";
531     }
532
533     private void assertFloat(final float actual, final float expected) {
534         assertTrue(Float.compare(actual, expected) == 0);
535     }
536
537     private void assertDouble(final double actual, final double expected) {
538         assertTrue(Double.compare(actual, expected) == 0);
539     }
540
541
542     private Distributor getDistributor() throws ContextException {
543         final AxArtifactKey distributorKey = new AxArtifactKey("ApexDistributorInit", VERSION);
544         final Distributor distributor = new DistributorFactory().getDistributor(distributorKey);
545         final AxContextModel policyContextModel = getAxContextModel();
546         distributor.registerModel(policyContextModel);
547         return distributor;
548     }
549 }