Fix package name, Unit Test for Context Album 07/55007/1
authorliamfallon <liam.fallon@ericsson.com>
Mon, 18 Jun 2018 12:58:52 +0000 (20:58 +0800)
committerliamfallon <liam.fallon@ericsson.com>
Mon, 18 Jun 2018 13:00:31 +0000 (21:00 +0800)
package org.onap.policy.core renamed to org.onap.policy.apex.core

Added unit text for context exceptions and context album

Issue-ID: POLICY-857
Change-Id: I24f376245d9bc46db6a6a47ac3e8e6c559a16465
Signed-off-by: liamfallon <liam.fallon@ericsson.com>
context/context-management/src/main/java/org/onap/policy/apex/context/ContextAlbum.java
context/context-management/src/main/java/org/onap/policy/apex/context/impl/ContextAlbumImpl.java
context/context-management/src/test/java/org/onap/policy/apex/context/ContextExceptionTest.java [new file with mode: 0644]
context/context-management/src/test/java/org/onap/policy/apex/context/impl/ContextAlbumImplTest.java [new file with mode: 0644]
core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/compile/singleclass/SingleClassBuilder.java [moved from core/core-infrastructure/src/main/java/org/onap/policy/core/infrastructure/java/compile/singleclass/SingleClassBuilder.java with 98% similarity]
core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/compile/singleclass/SingleClassByteCodeFileObject.java [moved from core/core-infrastructure/src/main/java/org/onap/policy/core/infrastructure/java/compile/singleclass/SingleClassByteCodeFileObject.java with 97% similarity]
core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/compile/singleclass/SingleClassCompilationUnit.java [moved from core/core-infrastructure/src/main/java/org/onap/policy/core/infrastructure/java/compile/singleclass/SingleClassCompilationUnit.java with 97% similarity]
core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/compile/singleclass/SingleClassLoader.java [moved from core/core-infrastructure/src/main/java/org/onap/policy/core/infrastructure/java/compile/singleclass/SingleClassLoader.java with 96% similarity]
core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/compile/singleclass/SingleFileManager.java [moved from core/core-infrastructure/src/main/java/org/onap/policy/core/infrastructure/java/compile/singleclass/SingleFileManager.java with 97% similarity]
core/core-infrastructure/src/main/java/org/onap/policy/apex/core/infrastructure/java/compile/singleclass/package-info.java [moved from core/core-infrastructure/src/main/java/org/onap/policy/core/infrastructure/java/compile/singleclass/package-info.java with 93% similarity]

index 73ef668..5591393 100644 (file)
@@ -111,6 +111,13 @@ public interface ContextAlbum extends Map<String, Object> {
      */
     void unlockForWriting(String key) throws ContextException;
 
+    /**
+     * Get the stack of artifact keys currently using this context item.
+     *
+     * @return the keys of the artifacts using the context album at the moment
+     */
+    AxConcept[]  getUserArtifactStack();
+
     /**
      * Set the stack of artifact keys currently using this context item.
      *
index a682716..fbaeb2c 100644 (file)
@@ -79,6 +79,10 @@ public final class ContextAlbumImpl implements ContextAlbum {
      */
     public ContextAlbumImpl(final AxContextAlbum albumDefinition, final Distributor distributor,
             final Map<String, Object> albumMap) throws ContextException {
+        Assertions.argumentNotNull(albumDefinition, "Context album definition may not be null");
+        Assertions.argumentNotNull(distributor, "Distributor may not be null");
+        Assertions.argumentNotNull(albumMap, "Album map may not be null");
+
         this.albumDefinition = albumDefinition;
 
         // Use the context distributor passed to us
@@ -190,6 +194,17 @@ public final class ContextAlbumImpl implements ContextAlbum {
                 userArtifactStack);
     }
 
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.onap.policy.apex.context.ContextAlbum#getUserArtifactStack()
+     */
+    @Override
+    public AxConcept[] getUserArtifactStack() {
+        return userArtifactStack;
+    }
+
     /*
      * (non-Javadoc)
      *
@@ -440,7 +455,7 @@ public final class ContextAlbumImpl implements ContextAlbum {
     public Object remove(final Object key) {
         if (!albumDefinition.isWritable()) {
             final String returnString = "album \"" + albumDefinition.getID()
-                    + "\" remove() not allowed on read only albums for key=\"" + key;
+                    + "\" remove() not allowed on read only albums for key=\"" + key + "\"";
             LOGGER.warn(returnString);
             throw new ContextRuntimeException(returnString);
         }
diff --git a/context/context-management/src/test/java/org/onap/policy/apex/context/ContextExceptionTest.java b/context/context-management/src/test/java/org/onap/policy/apex/context/ContextExceptionTest.java
new file mode 100644 (file)
index 0000000..15560f7
--- /dev/null
@@ -0,0 +1,41 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.policy.apex.context;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+
+import org.junit.Test;
+
+public class ContextExceptionTest {
+
+    @Test
+    public void testContextException() {
+        assertEquals("context exception message", new ContextException("context exception message").getMessage());
+        assertEquals("context exception message", new ContextException("context exception message", new IOException()).getMessage());
+    }
+
+    @Test
+    public void testContextRuntimeException() {
+        assertEquals("context exception message", new ContextRuntimeException("context exception message").getMessage());
+        assertEquals("context exception message", new ContextRuntimeException("context exception message", new IOException()).getMessage());
+    }
+}
diff --git a/context/context-management/src/test/java/org/onap/policy/apex/context/impl/ContextAlbumImplTest.java b/context/context-management/src/test/java/org/onap/policy/apex/context/impl/ContextAlbumImplTest.java
new file mode 100644 (file)
index 0000000..e5cc61f
--- /dev/null
@@ -0,0 +1,288 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2018 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.apex.context.impl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.onap.policy.apex.context.ContextAlbum;
+import org.onap.policy.apex.context.ContextException;
+import org.onap.policy.apex.context.ContextRuntimeException;
+import org.onap.policy.apex.context.Distributor;
+import org.onap.policy.apex.context.impl.distribution.jvmlocal.JVMLocalDistributor;
+import org.onap.policy.apex.context.impl.schema.java.JavaSchemaHelperParameters;
+import org.onap.policy.apex.context.parameters.ContextParameters;
+import org.onap.policy.apex.context.parameters.SchemaParameters;
+import org.onap.policy.apex.model.basicmodel.concepts.ApexRuntimeException;
+import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey;
+import org.onap.policy.apex.model.basicmodel.concepts.AxConcept;
+import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey;
+import org.onap.policy.apex.model.basicmodel.service.ModelService;
+import org.onap.policy.apex.model.basicmodel.service.ParameterService;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbum;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema;
+import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas;
+
+public class ContextAlbumImplTest {
+    @BeforeClass
+    public static void prepareForTest() {
+        final ContextParameters contextParameters = new ContextParameters();
+        contextParameters.getLockManagerParameters()
+                        .setPluginClass("org.onap.policy.apex.context.impl.locking.jvmlocal.JVMLocalLockManager");
+        ParameterService.registerParameters(ContextParameters.class, contextParameters);
+
+        final SchemaParameters schemaParameters = new SchemaParameters();
+        schemaParameters.getSchemaHelperParameterMap().put("JAVA", new JavaSchemaHelperParameters());
+        ParameterService.registerParameters(SchemaParameters.class, schemaParameters);
+    }
+
+    @Test
+    public void testNullsOnConstructor() {
+        try {
+            new ContextAlbumImpl(null, null, null);
+            fail("this test should throw an exception");
+        } catch (IllegalArgumentException e) {
+            assertEquals("Context album definition may not be null", e.getMessage());
+        } catch (ContextException e) {
+            fail("this test should throw an IllegalArgumentException");
+        }
+
+        try {
+            new ContextAlbumImpl(new AxContextAlbum(), null, null);
+            fail("this test should throw an exception");
+        } catch (IllegalArgumentException e) {
+            assertEquals("Distributor may not be null", e.getMessage());
+        } catch (ContextException e) {
+            fail("this test should throw an IllegalArgumentException");
+        }
+
+        try {
+            new ContextAlbumImpl(new AxContextAlbum(), new JVMLocalDistributor(), null);
+            fail("this test should throw an exception");
+        } catch (IllegalArgumentException e) {
+            assertEquals("Album map may not be null", e.getMessage());
+        } catch (ContextException e) {
+            fail("this test should throw an IllegalArgumentException");
+        }
+
+        try {
+            new ContextAlbumImpl(new AxContextAlbum(), new JVMLocalDistributor(), new LinkedHashMap<String, Object>());
+            fail("this test should throw an exception");
+        } catch (ApexRuntimeException e) {
+            assertEquals("Model for org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas not found in model service",
+                            e.getMessage());
+        } catch (ContextException e) {
+            fail("this test should throw an ApexRuntimeException");
+        }
+    }
+
+    @Test
+    public void testAlbumInterface() throws ContextException {
+        AxContextSchemas schemas = new AxContextSchemas();
+        AxContextSchema simpleStringSchema = new AxContextSchema(new AxArtifactKey("SimpleStringSchema", "0.0.1"),
+                        "JAVA", "java.lang.String");
+        schemas.getSchemasMap().put(simpleStringSchema.getKey(), simpleStringSchema);
+        ModelService.registerModel(AxContextSchemas.class, schemas);
+
+        AxContextAlbum axContextAlbum = new AxContextAlbum(new AxArtifactKey("TestContextAlbum", "0.0.1"), "Policy",
+                        true, AxArtifactKey.getNullKey());
+
+        AxContextAlbum axContextAlbumRO = new AxContextAlbum(new AxArtifactKey("TestContextAlbum", "0.0.1"), "Policy",
+                        false, simpleStringSchema.getKey());
+
+        try {
+            new ContextAlbumImpl(axContextAlbum, new JVMLocalDistributor(), new LinkedHashMap<String, Object>());
+            fail("this test should throw an exception");
+        } catch (ContextException e) {
+            assertEquals("could not initiate schema management for context album AxContextAlbum",
+                            e.getMessage().substring(0, 69));
+        }
+
+        axContextAlbum.setItemSchema(simpleStringSchema.getKey());
+        Distributor distributor = new JVMLocalDistributor();
+        distributor.init(axContextAlbum.getKey());
+        ContextAlbum album = new ContextAlbumImpl(axContextAlbum, distributor, new LinkedHashMap<String, Object>());
+        ContextAlbum albumRO = new ContextAlbumImpl(axContextAlbumRO, distributor, new LinkedHashMap<String, Object>());
+
+        assertEquals("TestContextAlbum", album.getName());
+        assertEquals("TestContextAlbum:0.0.1", album.getKey().getID());
+        assertEquals("TestContextAlbum:0.0.1", album.getAlbumDefinition().getID());
+        assertEquals("SimpleStringSchema:0.0.1", album.getSchemaHelper().getSchema().getID());
+
+        try {
+            album.containsKey(null);
+            fail("test should throw an exception");
+        } catch (ContextRuntimeException e) {
+            assertEquals("null values are illegal on method parameter \"key\"", e.getMessage());
+        }
+        assertEquals(false, album.containsKey("Key0"));
+
+        try {
+            album.containsValue(null);
+            fail("test should throw an exception");
+        } catch (ContextRuntimeException e) {
+            assertEquals("null values are illegal on method parameter \"value\"", e.getMessage());
+        }
+        assertEquals(false, album.containsValue("some value"));
+
+        try {
+            album.get(null);
+            fail("test should throw an exception");
+        } catch (ContextRuntimeException e) {
+            assertEquals("album \"TestContextAlbum:0.0.1\" null keys are illegal on keys for get()", e.getMessage());
+        }
+
+        try {
+            album.put(null, null);
+            fail("test should throw an exception");
+        } catch (ContextRuntimeException e) {
+            assertEquals("album \"TestContextAlbum:0.0.1\" null keys are illegal on keys for put()", e.getMessage());
+        }
+
+        try {
+            album.put("KeyNull", null);
+            fail("test should throw an exception");
+        } catch (ContextRuntimeException e) {
+            assertEquals("album \"TestContextAlbum:0.0.1\" null values are illegal on key \"KeyNull\" for put()",
+                            e.getMessage());
+        }
+
+        try {
+            albumRO.put("KeyReadOnly", "A value for a Read Only Album");
+            fail("test should throw an exception");
+        } catch (ContextRuntimeException e) {
+            assertEquals("album \"TestContextAlbum:0.0.1\" put() not allowed on read only albums "
+                            + "for key=\"KeyReadOnly\", value=\"A value for a Read Only Album", e.getMessage());
+        }
+
+        Map<String, Object> putAllData = new LinkedHashMap<>();
+        putAllData.put("AllKey0", "vaue of AllKey0");
+        putAllData.put("AllKey1", "vaue of AllKey1");
+        putAllData.put("AllKey2", "vaue of AllKey2");
+
+        try {
+            albumRO.putAll(putAllData);
+            fail("test should throw an exception");
+        } catch (ContextRuntimeException e) {
+            assertEquals("album \"TestContextAlbum:0.0.1\" putAll() not allowed on read only albums", e.getMessage());
+        }
+
+        try {
+            albumRO.remove("AllKey0");
+            fail("test should throw an exception");
+        } catch (ContextRuntimeException e) {
+            assertEquals("album \"TestContextAlbum:0.0.1\" remove() not allowed on read only albums for key=\"AllKey0\"",
+                            e.getMessage());
+        }
+
+        try {
+            album.remove(null);
+            fail("test should throw an exception");
+        } catch (ContextRuntimeException e) {
+            assertEquals("null values are illegal on method parameter \"keyID\"", e.getMessage());
+        }
+
+        try {
+            albumRO.clear();
+            fail("test should throw an exception");
+        } catch (ContextRuntimeException e) {
+            assertEquals("album \"TestContextAlbum:0.0.1\" clear() not allowed on read only albums", e.getMessage());
+        }
+
+        // The following locking tests pass because the locking protects access to Key0 across all
+        // copies of the distributed album whether the key exists or not
+        album.lockForReading("Key0");
+        assertEquals(null, album.get("Key0"));
+        album.unlockForReading("Key0");
+        assertEquals(null, album.get("Key0"));
+
+        album.lockForWriting("Key0");
+        assertEquals(null, album.get("Key0"));
+        album.unlockForWriting("Key0");
+        assertEquals(null, album.get("Key0"));
+
+        // Test write access, trivial test because Integration Test does
+        // a full test of access locking over albums in different JVMs
+        album.lockForWriting("Key0");
+        assertEquals(null, album.get("Key0"));
+        album.put("Key0", "value of Key0");
+        assertEquals("value of Key0", album.get("Key0"));
+        album.unlockForWriting("Key0");
+        assertEquals("value of Key0", album.get("Key0"));
+
+        // Test read access, trivial test because Integration Test does
+        // a full test of access locking over albums in different JVMs
+        album.lockForReading("Key0");
+        assertEquals("value of Key0", album.get("Key0"));
+        album.unlockForReading("Key0");
+
+        AxArtifactKey somePolicyKey = new AxArtifactKey("MyPolicy", "0.0.1");
+        AxReferenceKey somePolicyState = new AxReferenceKey(somePolicyKey, "SomeState");
+
+        AxConcept[] userArtifactStack = { somePolicyKey, somePolicyState };
+        album.setUserArtifactStack(userArtifactStack);
+        assertEquals("MyPolicy:0.0.1", album.getUserArtifactStack()[0].getID());
+        assertEquals("MyPolicy:0.0.1:NULL:SomeState", album.getUserArtifactStack()[1].getID());
+
+        assertEquals(true, album.keySet().contains("Key0"));
+        assertEquals(true, album.values().contains("value of Key0"));
+        assertEquals(1, album.entrySet().size());
+
+        // The flush() operation fails because the distributor is not initialized with the album which
+        // is fine for unit test
+        try {
+            album.flush();
+            fail("test should throw an exception");
+        } catch (ContextException e) {
+            assertEquals("map flush failed, supplied map is null", e.getMessage());
+        }
+
+        assertEquals(1, album.size());
+        assertEquals(false, album.isEmpty());
+
+        album.put("Key0", "New value of Key0");
+        assertEquals("New value of Key0", album.get("Key0"));
+
+        album.putAll(putAllData);
+
+        putAllData.put("AllKey3", null);
+        try {
+            album.putAll(putAllData);
+            fail("test should throw an exception");
+        } catch (ContextRuntimeException e) {
+            assertEquals("album \"TestContextAlbum:0.0.1\" null values are illegal on key \"AllKey3\" for put()",
+                            e.getMessage());
+        }
+
+        assertEquals("New value of Key0", album.remove("Key0"));
+        
+        album.clear();
+        assertTrue(album.isEmpty());
+        
+        ModelService.clear();
+    }
+}