diff options
Diffstat (limited to 'examples')
3 files changed, 425 insertions, 0 deletions
diff --git a/examples/examples-adaptive/src/test/java/org/onap/policy/apex/examples/adaptive/AnomalyDetectionTaskSelectionTest.java b/examples/examples-adaptive/src/test/java/org/onap/policy/apex/examples/adaptive/AnomalyDetectionTaskSelectionTest.java new file mode 100644 index 000000000..0bcf5ac03 --- /dev/null +++ b/examples/examples-adaptive/src/test/java/org/onap/policy/apex/examples/adaptive/AnomalyDetectionTaskSelectionTest.java @@ -0,0 +1,179 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (c) 2024 Nordix Foundation. + * ================================================================================ + * 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.examples.adaptive; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; + +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.onap.policy.apex.context.ContextRuntimeException; +import org.onap.policy.apex.context.impl.ContextAlbumImpl; +import org.onap.policy.apex.context.impl.schema.java.JavaSchemaHelperParameters; +import org.onap.policy.apex.context.parameters.ContextParameterConstants; +import org.onap.policy.apex.context.parameters.SchemaParameters; +import org.onap.policy.apex.core.engine.context.ApexInternalContext; +import org.onap.policy.apex.core.engine.event.EnEvent; +import org.onap.policy.apex.core.engine.executor.TaskSelectExecutor; +import org.onap.policy.apex.core.engine.executor.context.TaskSelectionExecutionContext; +import org.onap.policy.apex.examples.adaptive.model.java.AnomalyDetectionPolicyDecideTaskSelectionLogic; +import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; +import org.onap.policy.apex.model.basicmodel.concepts.AxModel; +import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey; +import org.onap.policy.apex.model.basicmodel.service.ModelService; +import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbums; +import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema; +import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas; +import org.onap.policy.apex.model.eventmodel.concepts.AxEvent; +import org.onap.policy.apex.model.eventmodel.concepts.AxEvents; +import org.onap.policy.apex.model.eventmodel.concepts.AxField; +import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel; +import org.onap.policy.apex.model.policymodel.concepts.AxState; +import org.onap.policy.apex.model.policymodel.concepts.AxStateTaskReference; +import org.onap.policy.apex.model.policymodel.concepts.AxTask; +import org.onap.policy.apex.model.policymodel.concepts.AxTasks; +import org.onap.policy.common.parameters.ParameterService; +import org.springframework.util.ReflectionUtils; + +class AnomalyDetectionTaskSelectionTest { + + private SchemaParameters schemaParameters; + + + @BeforeEach + void beforeTest() { + schemaParameters = new SchemaParameters(); + schemaParameters.setName(ContextParameterConstants.SCHEMA_GROUP_NAME); + schemaParameters.getSchemaHelperParameterMap().put("JAVA", new JavaSchemaHelperParameters()); + ParameterService.register(schemaParameters); + } + + /** + * After test. + */ + @AfterEach + void afterTest() { + ParameterService.deregister(schemaParameters); + } + + @Test + void testGetTask() { + var key = new AxArtifactKey(); + var axEvent = new AxEvent(key); + ModelService.registerModel(AxEvent.class, axEvent); + var model = new AxPolicyModel(key); + model.setAlbums(new AxContextAlbums(key)); + ModelService.registerModel(AxModel.class, model); + + var event0Key = new AxArtifactKey("Event0:0.0.1"); + var event0 = new AxEvent(event0Key, "a.name.space", "source", "target"); + var schemas = new AxContextSchemas(event0Key); + var axField = new AxField(); + axField.setSchema(schemas.getKey()); + event0.getParameterMap().put("MonitoredValue", axField); + event0.getParameterMap().put("Iteration", axField); + var events = new AxEvents(); + events.getEventMap().put(event0Key, event0); + + ModelService.registerModel(AxEvents.class, events); + var simpleDoubleSchema = new AxContextSchema(new AxArtifactKey(event0Key), + "JAVA", "java.lang.Double"); + schemas.getSchemasMap().put(simpleDoubleSchema.getKey(), simpleDoubleSchema); + ModelService.registerModel(AxContextSchemas.class, schemas); + + var event = new EnEvent(event0Key); + event.put("MonitoredValue", 100.0D); + + var anomalyDetectionLogic = spy(new AnomalyDetectionPolicyDecideTaskSelectionLogic()); + var internalContext = mock(ApexInternalContext.class); + + + var executionContext = + spy(new TaskSelectionExecutionContext(mock(TaskSelectExecutor.class), 15326, new AxState(), + event, new AxArtifactKey(), internalContext)); + + assertThatThrownBy(() -> anomalyDetectionLogic.getTask(executionContext)) + .isInstanceOf(ContextRuntimeException.class) + .hasMessageContaining("cannot find definition of context album \"AnomalyDetectionAlbum\""); + + var taskKey = new AxArtifactKey("task1", "0.0.1"); + var task = new AxTask(taskKey); + task.setInputEvent(event0); + + var tasks = new AxTasks(new AxArtifactKey("task1", "0.0.1"), + Map.of(new AxArtifactKey(taskKey), task)); + ModelService.registerModel(AxTasks.class, tasks); + + var axState = new AxState(new AxReferenceKey("axstate:0.0.1:newtask:test")); + axState.setTaskReferences(Map.of(taskKey, new AxStateTaskReference())); + + var executionContext2 = + spy(new TaskSelectionExecutionContext(mock(TaskSelectExecutor.class), 15326, axState, + event, new AxArtifactKey(), internalContext)); + + doReturn(mock(ContextAlbumImpl.class)).when(executionContext2).getContextAlbum("AnomalyDetectionAlbum"); + + assertDoesNotThrow(() -> anomalyDetectionLogic.getTask(executionContext2)); + } + + @Test + void testGetStats() { + var getStats = ReflectionUtils.findMethod(AnomalyDetectionPolicyDecideTaskSelectionLogic.class, + "getStatsTest", List.class, double.class); + assertNotNull(getStats); + ReflectionUtils.makeAccessible(getStats); + var anomalyDetectionLogic = spy(new AnomalyDetectionPolicyDecideTaskSelectionLogic()); + assertDoesNotThrow(() -> ReflectionUtils.invokeMethod(getStats, anomalyDetectionLogic, + List.of(35.5, 56.7, 89.7), 22.3)); + } + + @Test + void testRemoveValue() { + var removeValue = ReflectionUtils.findMethod(AnomalyDetectionPolicyDecideTaskSelectionLogic.class, + "removevalue", + Double[].class, double.class); + assertNotNull(removeValue); + ReflectionUtils.makeAccessible(removeValue); + var anomalyDetectionLogic = spy(new AnomalyDetectionPolicyDecideTaskSelectionLogic()); + Double[] array = {22.1, 23.2}; + assertDoesNotThrow(() -> ReflectionUtils.invokeMethod(removeValue, anomalyDetectionLogic, array, 23.2)); + } + + @Test + void testisAllEqual() { + var isAllEqual = ReflectionUtils.findMethod(AnomalyDetectionPolicyDecideTaskSelectionLogic.class, "isAllEqual", + Double[].class); + assertNotNull(isAllEqual); + ReflectionUtils.makeAccessible(isAllEqual); + var anomalyDetectionLogic = spy(new AnomalyDetectionPolicyDecideTaskSelectionLogic()); + Double[] array = {22.1, 23.2, 22.1}; + assertDoesNotThrow(() -> ReflectionUtils.invokeMethod(isAllEqual, anomalyDetectionLogic, (Object) array)); + + } + +} diff --git a/examples/examples-adaptive/src/test/java/org/onap/policy/apex/examples/adaptive/AutoLearnConceptTest.java b/examples/examples-adaptive/src/test/java/org/onap/policy/apex/examples/adaptive/AutoLearnConceptTest.java new file mode 100644 index 000000000..cae889c0b --- /dev/null +++ b/examples/examples-adaptive/src/test/java/org/onap/policy/apex/examples/adaptive/AutoLearnConceptTest.java @@ -0,0 +1,69 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (c) 2024 Nordix Foundation. + * ================================================================================ + * 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.examples.adaptive; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.ArrayList; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.onap.policy.apex.examples.adaptive.concepts.AutoLearn; + + +class AutoLearnConceptTest { + + @Test + void testToString() { + AutoLearn autoLearn = new AutoLearn(); + AutoLearn compareAutoLearn = new AutoLearn(); + assertEquals(autoLearn.hashCode(), compareAutoLearn.hashCode()); + List<Double> avDiffs = new ArrayList<>(); + avDiffs.add(27d); + List<Long> counts = new ArrayList<>(); + counts.add(2L); + autoLearn.setCounts(counts); + autoLearn.setAvDiffs(avDiffs); + assertEquals(avDiffs, autoLearn.getAvDiffs()); + assertEquals(counts, autoLearn.getCounts()); + assertTrue(autoLearn.isInitialized()); + assertEquals("AutoLearn(avDiffs=[27.0], counts=[2])", autoLearn.toString()); + } + + @Test + void testConditions() { + AutoLearn a1 = new AutoLearn(); + a1.setCounts(List.of(1L, 3L)); + assertTrue(a1.checkSetCounts()); + assertFalse(a1.checkSetAvDiffs()); + AutoLearn a2 = new AutoLearn(); + a2.init(1); + assertNotNull(a2.getCounts()); + a1.unsetAvDiffs(); + a1.unsetCounts(); + assertNull(a1.getCounts()); + assertNull(a1.getAvDiffs()); + } + +} diff --git a/examples/examples-adaptive/src/test/java/org/onap/policy/apex/examples/adaptive/AutoLearnTaskSelectionTest.java b/examples/examples-adaptive/src/test/java/org/onap/policy/apex/examples/adaptive/AutoLearnTaskSelectionTest.java new file mode 100644 index 000000000..863579010 --- /dev/null +++ b/examples/examples-adaptive/src/test/java/org/onap/policy/apex/examples/adaptive/AutoLearnTaskSelectionTest.java @@ -0,0 +1,177 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (c) 2024 Nordix Foundation. + * ================================================================================ + * 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.examples.adaptive; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; + +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.onap.policy.apex.context.ContextRuntimeException; +import org.onap.policy.apex.context.impl.ContextAlbumImpl; +import org.onap.policy.apex.context.impl.schema.java.JavaSchemaHelperParameters; +import org.onap.policy.apex.context.parameters.ContextParameterConstants; +import org.onap.policy.apex.context.parameters.SchemaParameters; +import org.onap.policy.apex.core.engine.context.ApexInternalContext; +import org.onap.policy.apex.core.engine.event.EnEvent; +import org.onap.policy.apex.core.engine.executor.TaskSelectExecutor; +import org.onap.policy.apex.core.engine.executor.context.TaskSelectionExecutionContext; +import org.onap.policy.apex.examples.adaptive.concepts.AutoLearn; +import org.onap.policy.apex.examples.adaptive.model.java.AutoLearnPolicyDecideTaskSelectionLogic; +import org.onap.policy.apex.model.basicmodel.concepts.AxArtifactKey; +import org.onap.policy.apex.model.basicmodel.concepts.AxModel; +import org.onap.policy.apex.model.basicmodel.concepts.AxReferenceKey; +import org.onap.policy.apex.model.basicmodel.service.ModelService; +import org.onap.policy.apex.model.contextmodel.concepts.AxContextAlbums; +import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchema; +import org.onap.policy.apex.model.contextmodel.concepts.AxContextSchemas; +import org.onap.policy.apex.model.eventmodel.concepts.AxEvent; +import org.onap.policy.apex.model.eventmodel.concepts.AxEvents; +import org.onap.policy.apex.model.eventmodel.concepts.AxField; +import org.onap.policy.apex.model.policymodel.concepts.AxPolicyModel; +import org.onap.policy.apex.model.policymodel.concepts.AxState; +import org.onap.policy.apex.model.policymodel.concepts.AxStateTaskReference; +import org.onap.policy.apex.model.policymodel.concepts.AxTask; +import org.onap.policy.apex.model.policymodel.concepts.AxTasks; +import org.onap.policy.common.parameters.ParameterService; +import org.springframework.util.ReflectionUtils; + + +class AutoLearnTaskSelectionTest { + + private SchemaParameters schemaParameters; + + + @BeforeEach + void beforeTest() { + schemaParameters = new SchemaParameters(); + schemaParameters.setName(ContextParameterConstants.SCHEMA_GROUP_NAME); + schemaParameters.getSchemaHelperParameterMap().put("JAVA", new JavaSchemaHelperParameters()); + ParameterService.register(schemaParameters); + } + + /** + * After test. + */ + @AfterEach + void afterTest() { + ParameterService.deregister(schemaParameters); + } + + @Test + void testGetTask() { + var key = new AxArtifactKey(); + var axEvent = new AxEvent(key); + ModelService.registerModel(AxEvent.class, axEvent); + var model = new AxPolicyModel(key); + model.setAlbums(new AxContextAlbums(key)); + ModelService.registerModel(AxModel.class, model); + + var event0Key = new AxArtifactKey("Event0:0.0.1"); + var event0 = new AxEvent(event0Key, "a.name.space", "source", "target"); + var schemas = new AxContextSchemas(event0Key); + var axField = new AxField(); + axField.setSchema(schemas.getKey()); + event0.getParameterMap().put("MonitoredValue", axField); + var events = new AxEvents(); + events.getEventMap().put(event0Key, event0); + + ModelService.registerModel(AxEvents.class, events); + var simpleDoubleSchema = new AxContextSchema(new AxArtifactKey(event0Key), + "JAVA", "java.lang.Double"); + schemas.getSchemasMap().put(simpleDoubleSchema.getKey(), simpleDoubleSchema); + ModelService.registerModel(AxContextSchemas.class, schemas); + + var event = new EnEvent(event0Key); + event.put("MonitoredValue", 100.0D); + + var autoLearnLogic = new AutoLearnPolicyDecideTaskSelectionLogic(); + var internalContext = mock(ApexInternalContext.class); + + + var executionContext = + spy(new TaskSelectionExecutionContext(mock(TaskSelectExecutor.class), 15326, new AxState(), + event, new AxArtifactKey(), internalContext)); + + assertThatThrownBy(() -> autoLearnLogic.getTask(executionContext)).isInstanceOf(ContextRuntimeException.class) + .hasMessageContaining("cannot find definition of context album \"AutoLearnAlbum\""); + + + var taskKey = new AxArtifactKey("task1", "0.0.1"); + var task = new AxTask(taskKey); + task.setInputEvent(event0); + + var tasks = new AxTasks(new AxArtifactKey("task1", "0.0.1"), + Map.of(new AxArtifactKey(taskKey), task)); + ModelService.registerModel(AxTasks.class, tasks); + + var axState = new AxState(new AxReferenceKey("axstate:0.0.1:newtask:test")); + axState.setTaskReferences(Map.of(taskKey, new AxStateTaskReference())); + + var executionContext2 = + spy(new TaskSelectionExecutionContext(mock(TaskSelectExecutor.class), 15326, axState, + event, new AxArtifactKey(), internalContext)); + + doReturn(mock(ContextAlbumImpl.class)).when(executionContext2).getContextAlbum("AutoLearnAlbum"); + assertDoesNotThrow(() -> autoLearnLogic.getTask(executionContext2)); + + } + + @Test + void testGetOption() { + var autoLearn = new AutoLearn(); + autoLearn.setCounts(List.of(2L)); + autoLearn.setAvDiffs(List.of(2.0, 3.0)); + var getOption = ReflectionUtils.findMethod(AutoLearnPolicyDecideTaskSelectionLogic.class, + "getOption", double.class, AutoLearn.class); + assertNotNull(getOption); + + var size = ReflectionUtils.findField(AutoLearnPolicyDecideTaskSelectionLogic.class, "size"); + + ReflectionUtils.makeAccessible(getOption); + ReflectionUtils.makeAccessible(size); + var autoLearnTaskSelectionLogic = spy(new AutoLearnPolicyDecideTaskSelectionLogic()); + ReflectionUtils.setField(size, autoLearnTaskSelectionLogic, 2); + assertDoesNotThrow(() -> ReflectionUtils.invokeMethod(getOption, autoLearnTaskSelectionLogic, 2.0, + autoLearn)); + } + + @Test + void testLearn() { + var autoLearn = new AutoLearn(); + autoLearn.setCounts(List.of(2L, 3L)); + autoLearn.setAvDiffs(List.of(2.0, 3.0)); + var learn = ReflectionUtils.findMethod(AutoLearnPolicyDecideTaskSelectionLogic.class, "learn", int.class, + double.class, AutoLearn.class); + assertNotNull(learn); + ReflectionUtils.makeAccessible(learn); + var autoLearnTaskSelectionLogic = spy(new AutoLearnPolicyDecideTaskSelectionLogic()); + assertDoesNotThrow(() -> ReflectionUtils.invokeMethod(learn, autoLearnTaskSelectionLogic, 1, 2.0, + autoLearn)); + } +} |