diff options
author | liamfallon <liam.fallon@ericsson.com> | 2018-02-08 21:54:16 +0000 |
---|---|---|
committer | liamfallon <liam.fallon@ericsson.com> | 2018-02-08 22:23:54 +0000 |
commit | d536517dd5d45abeb037eb3900759771d97b2418 (patch) | |
tree | 38c5dda6db8e1ef7846d97b456664b05259e6039 /controlloop/common/eventmanager/src/test/java | |
parent | 5343982363a2221cdf9bd28fdb1f6547c04745f6 (diff) |
JUint/Technical Debt for eventmanager
Unit test expanded for SO POJOs, technical debt removed in eventmanager.
Change-Id: I7045f5af88fd2c15019befe29a0b4fcd69801c49
Signed-off-by: liamfallon <liam.fallon@ericsson.com>
Issue-ID: POLICY-455
Signed-off-by: liamfallon <liam.fallon@ericsson.com>
Diffstat (limited to 'controlloop/common/eventmanager/src/test/java')
8 files changed, 1616 insertions, 232 deletions
diff --git a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/ControlLoopExceptionTest.java b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/ControlLoopExceptionTest.java new file mode 100644 index 000000000..58860435a --- /dev/null +++ b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/ControlLoopExceptionTest.java @@ -0,0 +1,39 @@ +/*- + * ============LICENSE_START======================================================= + * eventmanager + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.controlloop; + +import static org.junit.Assert.*; + +import java.io.IOException; + +import org.junit.Test; + +public class ControlLoopExceptionTest { + + @Test + public void testControlLoopException() { + assertNotNull(new ControlLoopException()); + assertNotNull(new ControlLoopException("In Oz")); + assertNotNull(new ControlLoopException(new IOException())); + assertNotNull(new ControlLoopException("In Oz", new IOException())); + assertNotNull(new ControlLoopException("In Oz", new IOException(), false, false)); + } +} diff --git a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/ControlLoopLoggerTest.java b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/ControlLoopLoggerTest.java new file mode 100644 index 000000000..25208fe32 --- /dev/null +++ b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/ControlLoopLoggerTest.java @@ -0,0 +1,49 @@ +/*- + * ============LICENSE_START======================================================= + * eventmanager + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.controlloop; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; + +import org.junit.Test; +import org.onap.policy.controlloop.ControlLoopException; +import org.onap.policy.controlloop.ControlLoopLogger; +import org.onap.policy.controlloop.impl.ControlLoopLoggerStdOutImpl; + +public class ControlLoopLoggerTest { + @Test + public void testControlLoopLogger() throws ControlLoopException { + ControlLoopLogger logger = new ControlLoopLogger.Factory().buildLogger(ControlLoopLoggerStdOutImpl.class.getCanonicalName()); + assertNotNull(logger); + logger.info("a log message", "and another", " and another"); + logger.metrics("a metric", "and another", " and another"); + logger.metrics(Double.valueOf(3)); + + try { + new ControlLoopLogger.Factory().buildLogger("java.lang.String"); + fail("test should throw an exception here"); + } + catch (Exception e) { + assertEquals("Cannot load class java.lang.String as a control loop logger", e.getMessage()); + } + } +} diff --git a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/ControlLoopPublisherTest.java b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/ControlLoopPublisherTest.java new file mode 100644 index 000000000..3548ab841 --- /dev/null +++ b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/ControlLoopPublisherTest.java @@ -0,0 +1,53 @@ +/*- + * ============LICENSE_START======================================================= + * eventmanager + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.controlloop; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.fail; + +import org.junit.Test; +import org.onap.policy.controlloop.ControlLoopException; +import org.onap.policy.controlloop.impl.ControlLoopPublisherJUnitImpl; + +public class ControlLoopPublisherTest { + @Test + public void testControlLoopPublisher() throws ControlLoopException { + ControlLoopPublisher publisher = new ControlLoopPublisher.Factory().buildLogger(ControlLoopPublisherJUnitImpl.class.getCanonicalName()); + assertNotNull(publisher); + + try { + publisher.publish(Double.valueOf(3)); + fail("test should throw an exception here"); + } + catch (Exception e) { + assertEquals("publish() method is not implemented on org.onap.policy.controlloop.impl.ControlLoopPublisherJUnitImpl", e.getMessage()); + } + + try { + new ControlLoopPublisher.Factory().buildLogger("java.lang.String"); + fail("test should throw an exception here"); + } + catch (Exception e) { + assertEquals("Cannot load class java.lang.String as a control loop publisher", e.getMessage()); + } + } +} diff --git a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManagerTest.java b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManagerTest.java index d4083150d..1df4a4f27 100644 --- a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManagerTest.java +++ b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManagerTest.java @@ -23,12 +23,19 @@ package org.onap.policy.controlloop.eventmanager; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.time.Instant; import java.util.HashMap; import java.util.UUID; +import org.apache.commons.io.IOUtils; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -47,15 +54,21 @@ import org.onap.policy.controlloop.ControlLoopNotificationType; import org.onap.policy.controlloop.Util; import org.onap.policy.controlloop.VirtualControlLoopEvent; import org.onap.policy.controlloop.VirtualControlLoopNotification; +import org.onap.policy.controlloop.eventmanager.ControlLoopEventManager.NEW_EVENT_STATUS; import org.onap.policy.controlloop.policy.ControlLoopPolicy; +import org.onap.policy.controlloop.policy.PolicyResult; import org.onap.policy.drools.http.server.HttpServletServer; -import org.onap.policy.drools.system.PolicyEngine; +import org.onap.policy.drools.system.PolicyEngine; +import org.onap.policy.guard.GuardResult; +import org.onap.policy.guard.PolicyGuard; +import org.onap.policy.guard.PolicyGuard.LockResult; +import org.onap.policy.guard.TargetLock; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ControlLoopEventManagerTest { private static final Logger logger = LoggerFactory.getLogger(ControlLoopEventManagerTest.class); - + private static VirtualControlLoopEvent onset; static { onset = new VirtualControlLoopEvent(); @@ -69,7 +82,7 @@ public class ControlLoopEventManagerTest { onset.getAAI().put("generic-vnf.vnf-id", "83f674e8-7555-44d7-9a39-bdc3770b0491"); onset.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); } - + @BeforeClass public static void setUpSimulator() { try { @@ -86,7 +99,7 @@ public class ControlLoopEventManagerTest { public static void tearDownSimulator() { HttpServletServer.factory.destroy(); } - + @Test public void testAAIVnfInfo() { final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml"); @@ -103,7 +116,7 @@ public class ControlLoopEventManagerTest { fail(e.getMessage()); } } - + @Test public void testAAIVnfInfo2() { final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml"); @@ -120,7 +133,7 @@ public class ControlLoopEventManagerTest { fail(e.getMessage()); } } - + @Test public void testAAIVserver() { final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml"); @@ -145,7 +158,7 @@ public class ControlLoopEventManagerTest { // final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml"); onset.setClosedLoopControlName(pair.a.getControlLoop().getControlLoopName()); - + try { logger.info("testIsClosedLoopDisabled --"); AAIGETVnfResponse response = getQueryByVnfID2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/network/generic-vnfs/generic-vnf/", @@ -153,64 +166,68 @@ public class ControlLoopEventManagerTest { PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(), "5e49ca06-2972-4532-9ed4-6d071588d792"); assertNotNull(response); - boolean disabled = ControlLoopEventManager.isClosedLoopDisabled(response); - logger.info("QueryByVnfID - isClosedLoopDisabled: " + disabled); + + // TODO: Handle this + //boolean disabled = ControlLoopEventManager.isClosedLoopDisabled(response); + //logger.info("QueryByVnfID - isClosedLoopDisabled: " + disabled); response = getQueryByVnfName2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/network/generic-vnfs/generic-vnf?vnf-name=", PolicyEngine.manager.getEnvironmentProperty("aai.username"), PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(), "lll_vnf_010317"); assertNotNull(response); - disabled = ControlLoopEventManager.isClosedLoopDisabled(response); - logger.info("QueryByVnfName - isClosedLoopDisabled: " + disabled); + // TODO: Handle this + //disabled = ControlLoopEventManager.isClosedLoopDisabled(response); + //logger.info("QueryByVnfName - isClosedLoopDisabled: " + disabled); AAIGETVserverResponse response2 = getQueryByVserverName2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/nodes/vservers?vserver-name=", PolicyEngine.manager.getEnvironmentProperty("aai.user"), PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(), "USMSO1SX7NJ0103UJZZ01-vjunos0"); assertNotNull(response2); - disabled = ControlLoopEventManager.isClosedLoopDisabled(response2); - logger.info("QueryByVserverName - isClosedLoopDisabled: " + disabled); + // TODO: Handle this + //disabled = ControlLoopEventManager.isClosedLoopDisabled(response2); + //logger.info("QueryByVserverName - isClosedLoopDisabled: " + disabled); } catch (Exception e) { fail(e.getMessage()); } - } - + } + @Test public void abatemetCheckEventSyntaxTest() { VirtualControlLoopEvent event = new VirtualControlLoopEvent(); - event.setClosedLoopControlName("abatementAAI"); - event.setRequestID(UUID.randomUUID()); - event.setTarget("generic-vnf.vnf-id"); - event.setClosedLoopAlarmStart(Instant.now()); - event.setClosedLoopEventStatus(ControlLoopEventStatus.ABATED); - ControlLoopEventManager manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID()); - assertNull(manager.getVnfResponse()); - assertNull(manager.getVserverResponse()); - try { + event.setClosedLoopControlName("abatementAAI"); + event.setRequestID(UUID.randomUUID()); + event.setTarget("generic-vnf.vnf-id"); + event.setClosedLoopAlarmStart(Instant.now()); + event.setClosedLoopEventStatus(ControlLoopEventStatus.ABATED); + ControlLoopEventManager manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID()); + assertNull(manager.getVnfResponse()); + assertNull(manager.getVserverResponse()); + try { manager.checkEventSyntax(event); } catch (ControlLoopException e) { logger.debug("ControlLoopException in abatemetCheckEventSyntaxTest: "+e.getMessage()); e.printStackTrace(); fail("Exception in check event syntax"); } - assertNull(manager.getVnfResponse()); - assertNull(manager.getVserverResponse()); - + assertNull(manager.getVnfResponse()); + assertNull(manager.getVserverResponse()); + - event.setAAI(new HashMap<>()); - event.getAAI().put("generic-vnf.vnf-name", "abatementTest"); - try { + event.setAAI(new HashMap<>()); + event.getAAI().put("generic-vnf.vnf-name", "abatementTest"); + try { manager.checkEventSyntax(event); } catch (ControlLoopException e) { logger.debug("ControlLoopException in abatemetCheckEventSyntaxTest: "+e.getMessage()); e.printStackTrace(); fail("Exception in check event syntax"); } - assertNull(manager.getVnfResponse()); - assertNull(manager.getVserverResponse()); + assertNull(manager.getVnfResponse()); + assertNull(manager.getVserverResponse()); } - + @Test public void subsequentOnsetTest() { UUID requestId = UUID.randomUUID(); @@ -218,59 +235,59 @@ public class ControlLoopEventManagerTest { event.setClosedLoopControlName("TwoOnsetTest"); event.setRequestID(requestId); event.setTarget("generic-vnf.vnf-id"); - event.setClosedLoopAlarmStart(Instant.now()); - event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); - event.setAAI(new HashMap<>()); - event.getAAI().put("generic-vnf.vnf-name", "onsetOne"); - - ControlLoopEventManager manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID()); - VirtualControlLoopNotification notification = manager.activate(event); - - assertNotNull(notification); - assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); - - ControlLoopEventManager.NEW_EVENT_STATUS status = null; - try { - status = manager.onNewEvent(event); - } catch (AAIException e) { - logger.warn(e.toString()); - fail("A&AI Query Failed"); - } - assertNotNull(status); - assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.FIRST_ONSET, status); - - AAIGETVnfResponse response = manager.getVnfResponse(); - assertNotNull(response); - assertNull(manager.getVserverResponse()); - - VirtualControlLoopEvent event2 = new VirtualControlLoopEvent(); + event.setClosedLoopAlarmStart(Instant.now()); + event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); + event.setAAI(new HashMap<>()); + event.getAAI().put("generic-vnf.vnf-name", "onsetOne"); + + ControlLoopEventManager manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID()); + VirtualControlLoopNotification notification = manager.activate(event); + + assertNotNull(notification); + assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); + + ControlLoopEventManager.NEW_EVENT_STATUS status = null; + try { + status = manager.onNewEvent(event); + } catch (AAIException e) { + logger.warn(e.toString()); + fail("A&AI Query Failed"); + } + assertNotNull(status); + assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.FIRST_ONSET, status); + + AAIGETVnfResponse response = manager.getVnfResponse(); + assertNotNull(response); + assertNull(manager.getVserverResponse()); + + VirtualControlLoopEvent event2 = new VirtualControlLoopEvent(); event2.setClosedLoopControlName("TwoOnsetTest"); event2.setRequestID(requestId); event2.setTarget("generic-vnf.vnf-id"); - event2.setClosedLoopAlarmStart(Instant.now()); - event2.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); - event2.setAAI(new HashMap<>()); - event2.getAAI().put("generic-vnf.vnf-name", "onsetTwo"); - - - try { - status = manager.onNewEvent(event2); - } catch (AAIException e) { - logger.warn(e.toString()); - fail("A&AI Query Failed"); - } - assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.SUBSEQUENT_ONSET, status); - AAIGETVnfResponse response2 = manager.getVnfResponse(); - assertNotNull(response2); - // We should not have queried AAI, so the stored response should be the same - assertEquals(response, response2); - assertNull(manager.getVserverResponse()); + event2.setClosedLoopAlarmStart(Instant.now()); + event2.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); + event2.setAAI(new HashMap<>()); + event2.getAAI().put("generic-vnf.vnf-name", "onsetTwo"); + + + try { + status = manager.onNewEvent(event2); + } catch (AAIException e) { + logger.warn(e.toString()); + fail("A&AI Query Failed"); + } + assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.SUBSEQUENT_ONSET, status); + AAIGETVnfResponse response2 = manager.getVnfResponse(); + assertNotNull(response2); + // We should not have queried AAI, so the stored response should be the same + assertEquals(response, response2); + assertNull(manager.getVserverResponse()); } - + // Simulate a response public static AAIGETVnfResponse getQueryByVnfID2(String urlGet, String username, String password, UUID requestID, String key) { AAIGETVnfResponse response = new AAIGETVnfResponse(); - + response.setVnfID("83f674e8-7555-44d7-9a39-bdc3770b0491"); response.setVnfName("lll_vnf_010317"); response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1"); @@ -280,44 +297,44 @@ public class ControlLoopEventManagerTest { response.setIsClosedLoopDisabled("false"); response.setResourceVersion("1494001988835"); response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa"); - - RelationshipList relationshipList = new RelationshipList(); - Relationship relationship = new Relationship(); - RelationshipData relationshipData = new RelationshipData(); - RelationshipDataItem relationshipDataItem = new RelationshipDataItem(); - - relationshipDataItem.setRelationshipKey ("customer.global-customer-id"); - relationshipDataItem.setRelationshipValue("MSO_1610_ST"); - relationshipData.getRelationshipData().add(relationshipDataItem); - - relationshipDataItem.setRelationshipKey ("service-subscription.service-type"); - relationshipDataItem.setRelationshipValue("MSO-dev-service-type"); - relationshipData.getRelationshipData().add(relationshipDataItem); - - relationshipDataItem.setRelationshipKey ("service-instance.service-instance-id"); - relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970"); - relationshipData.getRelationshipData().add(relationshipDataItem); - - RelatedToProperty relatedToProperty = new RelatedToProperty(); - RelatedToPropertyItem item = new RelatedToPropertyItem(); - item.setPropertyKey("service-instance.service-instance-name"); - item.setPropertyValue("lll_svc_010317"); - relatedToProperty.getRelatedTo().add(item); - - relationship.setRelatedTo("service-instance"); - relationship.setRelatedLink("/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/e1e9c97c-02c0-4919-9b4c-eb5d5ef68970"); - relationship.setRelationshipData(relationshipData); - relationship.setRelatedToProperty(relatedToProperty); - - relationshipList.getRelationshipList().add(relationship); - response.setRelationshipList(relationshipList); + + RelationshipList relationshipList = new RelationshipList(); + Relationship relationship = new Relationship(); + RelationshipData relationshipData = new RelationshipData(); + RelationshipDataItem relationshipDataItem = new RelationshipDataItem(); + + relationshipDataItem.setRelationshipKey ("customer.global-customer-id"); + relationshipDataItem.setRelationshipValue("MSO_1610_ST"); + relationshipData.getRelationshipData().add(relationshipDataItem); + + relationshipDataItem.setRelationshipKey ("service-subscription.service-type"); + relationshipDataItem.setRelationshipValue("MSO-dev-service-type"); + relationshipData.getRelationshipData().add(relationshipDataItem); + + relationshipDataItem.setRelationshipKey ("service-instance.service-instance-id"); + relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970"); + relationshipData.getRelationshipData().add(relationshipDataItem); + + RelatedToProperty relatedToProperty = new RelatedToProperty(); + RelatedToPropertyItem item = new RelatedToPropertyItem(); + item.setPropertyKey("service-instance.service-instance-name"); + item.setPropertyValue("lll_svc_010317"); + relatedToProperty.getRelatedTo().add(item); + + relationship.setRelatedTo("service-instance"); + relationship.setRelatedLink("/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/e1e9c97c-02c0-4919-9b4c-eb5d5ef68970"); + relationship.setRelationshipData(relationshipData); + relationship.setRelatedToProperty(relatedToProperty); + + relationshipList.getRelationshipList().add(relationship); + response.setRelationshipList(relationshipList); return response; } public static AAIGETVnfResponse getQueryByVnfName2(String urlGet, String username, String password, UUID requestID, String key) { AAIGETVnfResponse response = new AAIGETVnfResponse(); - + response.setVnfID("83f674e8-7555-44d7-9a39-bdc3770b0491"); response.setVnfName("lll_vnf_010317"); response.setVnfType("Basa-122216-Service/VidVsamp12BaseVolume 1"); @@ -327,44 +344,44 @@ public class ControlLoopEventManagerTest { response.setIsClosedLoopDisabled("false"); response.setResourceVersion("1494001988835"); response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa"); - - RelationshipList relationshipList = new RelationshipList(); - Relationship relationship = new Relationship(); - RelationshipData relationshipData = new RelationshipData(); - RelationshipDataItem relationshipDataItem = new RelationshipDataItem(); - - relationshipDataItem.setRelationshipKey("customer.global-customer-id"); - relationshipDataItem.setRelationshipValue("MSO_1610_ST"); - relationshipData.getRelationshipData().add(relationshipDataItem); - - relationshipDataItem.setRelationshipKey("service-subscription.service-type"); - relationshipDataItem.setRelationshipValue("MSO-dev-service-type"); - relationshipData.getRelationshipData().add(relationshipDataItem); - - relationshipDataItem.setRelationshipKey("service-instance.service-instance-id"); - relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970"); - relationshipData.getRelationshipData().add(relationshipDataItem); - - RelatedToProperty relatedToProperty = new RelatedToProperty(); - RelatedToPropertyItem item = new RelatedToPropertyItem(); - item.setPropertyKey("service-instance.service-instance-name"); - item.setPropertyValue("lll_svc_010317"); - relatedToProperty.getRelatedTo().add(item); - - relationship.setRelatedTo("service-instance"); - relationship.setRelatedLink("/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/e1e9c97c-02c0-4919-9b4c-eb5d5ef68970"); - relationship.setRelationshipData(relationshipData); - relationship.setRelatedToProperty(relatedToProperty); - - relationshipList.getRelationshipList().add(relationship); - response.setRelationshipList(relationshipList); + + RelationshipList relationshipList = new RelationshipList(); + Relationship relationship = new Relationship(); + RelationshipData relationshipData = new RelationshipData(); + RelationshipDataItem relationshipDataItem = new RelationshipDataItem(); + + relationshipDataItem.setRelationshipKey("customer.global-customer-id"); + relationshipDataItem.setRelationshipValue("MSO_1610_ST"); + relationshipData.getRelationshipData().add(relationshipDataItem); + + relationshipDataItem.setRelationshipKey("service-subscription.service-type"); + relationshipDataItem.setRelationshipValue("MSO-dev-service-type"); + relationshipData.getRelationshipData().add(relationshipDataItem); + + relationshipDataItem.setRelationshipKey("service-instance.service-instance-id"); + relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970"); + relationshipData.getRelationshipData().add(relationshipDataItem); + + RelatedToProperty relatedToProperty = new RelatedToProperty(); + RelatedToPropertyItem item = new RelatedToPropertyItem(); + item.setPropertyKey("service-instance.service-instance-name"); + item.setPropertyValue("lll_svc_010317"); + relatedToProperty.getRelatedTo().add(item); + + relationship.setRelatedTo("service-instance"); + relationship.setRelatedLink("/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/e1e9c97c-02c0-4919-9b4c-eb5d5ef68970"); + relationship.setRelationshipData(relationshipData); + relationship.setRelatedToProperty(relatedToProperty); + + relationshipList.getRelationshipList().add(relationship); + response.setRelationshipList(relationshipList); return response; } public static AAIGETVserverResponse getQueryByVserverName2(String urlGet, String username, String password, UUID requestID, String key) { AAIGETVserverResponse response = new AAIGETVserverResponse(); - + response.setVserverID("d0668d4f-c25e-4a1b-87c4-83845c01efd8"); response.setVserverName("USMSO1SX7NJ0103UJZZ01-vjunos0"); response.setVserverName2("vjunos0"); @@ -372,38 +389,614 @@ public class ControlLoopEventManagerTest { response.setInMaint("false"); response.setIsClosedLoopDisabled("false"); response.setResourceVersion("1494001931513"); - - RelationshipList relationshipList = new RelationshipList(); - Relationship relationship = new Relationship(); - RelationshipData relationshipData = new RelationshipData(); - RelationshipDataItem relationshipDataItem = new RelationshipDataItem(); - - relationshipDataItem.setRelationshipKey("customer.global-customer-id"); - relationshipDataItem.setRelationshipValue("MSO_1610_ST"); - relationshipData.getRelationshipData().add(relationshipDataItem); - - relationshipDataItem.setRelationshipKey("service-subscription.service-type"); - relationshipDataItem.setRelationshipValue("MSO-dev-service-type"); - relationshipData.getRelationshipData().add(relationshipDataItem); - - relationshipDataItem.setRelationshipKey("service-instance.service-instance-id"); - relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970"); - relationshipData.getRelationshipData().add(relationshipDataItem); - - RelatedToProperty relatedToProperty = new RelatedToProperty(); - RelatedToPropertyItem item = new RelatedToPropertyItem(); - item.setPropertyKey("service-instance.service-instance-name"); - item.setPropertyValue("lll_svc_010317"); - relatedToProperty.getRelatedTo().add(item); - - relationship.setRelatedTo("service-instance"); - relationship.setRelatedLink("/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/e1e9c97c-02c0-4919-9b4c-eb5d5ef68970"); - relationship.setRelationshipData(relationshipData); - relationship.setRelatedToProperty(relatedToProperty); - - relationshipList.getRelationshipList().add(relationship); - response.setRelationshipList(relationshipList); + + RelationshipList relationshipList = new RelationshipList(); + Relationship relationship = new Relationship(); + RelationshipData relationshipData = new RelationshipData(); + RelationshipDataItem relationshipDataItem = new RelationshipDataItem(); + + relationshipDataItem.setRelationshipKey("customer.global-customer-id"); + relationshipDataItem.setRelationshipValue("MSO_1610_ST"); + relationshipData.getRelationshipData().add(relationshipDataItem); + + relationshipDataItem.setRelationshipKey("service-subscription.service-type"); + relationshipDataItem.setRelationshipValue("MSO-dev-service-type"); + relationshipData.getRelationshipData().add(relationshipDataItem); + + relationshipDataItem.setRelationshipKey("service-instance.service-instance-id"); + relationshipDataItem.setRelationshipValue("e1e9c97c-02c0-4919-9b4c-eb5d5ef68970"); + relationshipData.getRelationshipData().add(relationshipDataItem); + + RelatedToProperty relatedToProperty = new RelatedToProperty(); + RelatedToPropertyItem item = new RelatedToPropertyItem(); + item.setPropertyKey("service-instance.service-instance-name"); + item.setPropertyValue("lll_svc_010317"); + relatedToProperty.getRelatedTo().add(item); + + relationship.setRelatedTo("service-instance"); + relationship.setRelatedLink("/aai/v11/business/customers/customer/MSO_1610_ST/service-subscriptions/service-subscription/MSO-dev-service-type/service-instances/service-instance/e1e9c97c-02c0-4919-9b4c-eb5d5ef68970"); + relationship.setRelationshipData(relationshipData); + relationship.setRelatedToProperty(relatedToProperty); + + relationshipList.getRelationshipList().add(relationship); + response.setRelationshipList(relationshipList); return response; } + + @Test + public void testMethods() { + ControlLoopEventManager clem = new ControlLoopEventManager("MyClosedLoopName", UUID.randomUUID()); + + clem.setActivated(true); + assertEquals(true, clem.isActivated()); + + clem.setControlLoopResult("SUCCESS"); + assertEquals("SUCCESS", clem.getControlLoopResult()); + + clem.setControlLoopTimedOut(); + assertEquals(true, clem.isControlLoopTimedOut()); + + clem.setNumAbatements(12345); + assertEquals(Integer.valueOf(12345), clem.getNumAbatements()); + + clem.setNumOnsets(54321); + assertEquals(Integer.valueOf(54321), clem.getNumOnsets()); + + assertNull(clem.getOnsetEvent()); + assertNull(clem.getAbatementEvent()); + assertNull(clem.getProcessor()); + + assertEquals(true, clem.isActive()); + assertEquals(false, clem.releaseLock()); + assertEquals(true, clem.isControlLoopTimedOut()); + + assertNull(clem.unlockCurrentOperation()); + } + + @Test + public void testAlreadyActivated() { + UUID requestId = UUID.randomUUID(); + VirtualControlLoopEvent event = new VirtualControlLoopEvent(); + event.setClosedLoopControlName("TwoOnsetTest"); + event.setRequestID(requestId); + event.setTarget("generic-vnf.vnf-id"); + event.setClosedLoopAlarmStart(Instant.now()); + event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); + event.setAAI(new HashMap<>()); + event.getAAI().put("generic-vnf.vnf-name", "onsetOne"); + + ControlLoopEventManager manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID()); + manager.setActivated(true); + VirtualControlLoopNotification notification = manager.activate(event); + assertEquals(ControlLoopNotificationType.REJECTED, notification.getNotification()); + } + + @Test + public void testActivationYaml() throws IOException { + InputStream is = new FileInputStream(new File("src/test/resources/test.yaml")); + String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + + InputStream isBad = new FileInputStream(new File("src/test/resources/notutf8.yaml")); + String yamlStringBad = IOUtils.toString(isBad, StandardCharsets.UTF_8); + + UUID requestId = UUID.randomUUID(); + VirtualControlLoopEvent event = new VirtualControlLoopEvent(); + event.setClosedLoopControlName("TwoOnsetTest"); + event.setRequestID(requestId); + event.setTarget("generic-vnf.vnf-id"); + event.setClosedLoopAlarmStart(Instant.now()); + event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); + event.setAAI(new HashMap<>()); + event.getAAI().put("generic-vnf.vnf-name", "onsetOne"); + + ControlLoopEventManager manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID()); + + // Null YAML should fail + VirtualControlLoopNotification notificationNull = manager.activate(null, event); + assertNotNull(notificationNull); + assertEquals(ControlLoopNotificationType.REJECTED, notificationNull.getNotification()); + + // Empty YAML should fail + VirtualControlLoopNotification notificationEmpty = manager.activate("", event); + assertNotNull(notificationEmpty); + assertEquals(ControlLoopNotificationType.REJECTED, notificationEmpty.getNotification()); + + // Bad YAML should fail + VirtualControlLoopNotification notificationBad = manager.activate(yamlStringBad, event); + assertNotNull(notificationBad); + assertEquals(ControlLoopNotificationType.REJECTED, notificationBad.getNotification()); + + VirtualControlLoopNotification notification = manager.activate(yamlString, event); + assertNotNull(notification); + assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); + + // Another activate should fail + VirtualControlLoopNotification notificationActive = manager.activate(yamlString, event); + assertNotNull(notificationActive); + assertEquals(ControlLoopNotificationType.REJECTED, notificationActive.getNotification()); + } + + @Test + public void testControlLoopFinal() throws ControlLoopException, IOException { + InputStream is = new FileInputStream(new File("src/test/resources/test.yaml")); + String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + + UUID requestId = UUID.randomUUID(); + VirtualControlLoopEvent event = new VirtualControlLoopEvent(); + event.setClosedLoopControlName("TwoOnsetTest"); + event.setRequestID(requestId); + event.setTarget("generic-vnf.vnf-id"); + event.setClosedLoopAlarmStart(Instant.now()); + event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); + event.setAAI(new HashMap<>()); + event.getAAI().put("generic-vnf.vnf-name", "onsetOne"); + + ControlLoopEventManager manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID()); + try { + manager.isControlLoopFinal(); + fail("test should throw an exception here"); + } catch (ControlLoopException e) { + assertEquals("ControlLoopEventManager MUST be activated first.", e.getMessage()); + } + + manager.setActivated(true); + try { + manager.isControlLoopFinal(); + fail("test should throw an exception here"); + } catch (ControlLoopException e) { + assertEquals("No onset event for ControlLoopEventManager.", e.getMessage()); + } + + manager.setActivated(false); + VirtualControlLoopNotification notification = manager.activate(yamlString, event); + assertNotNull(notification); + assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); + + VirtualControlLoopNotification clfNotification = manager.isControlLoopFinal(); + assertNull(clfNotification); + + manager.getProcessor().nextPolicyForResult(PolicyResult.SUCCESS); + clfNotification = manager.isControlLoopFinal(); + assertNotNull(clfNotification); + assertEquals(ControlLoopNotificationType.FINAL_SUCCESS, clfNotification.getNotification()); + + manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID()); + notification = manager.activate(yamlString, event); + assertNotNull(notification); + assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); + + manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_EXCEPTION); + clfNotification = manager.isControlLoopFinal(); + assertNotNull(clfNotification); + assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification()); + + manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID()); + notification = manager.activate(yamlString, event); + assertNotNull(notification); + assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); + + manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_GUARD); + clfNotification = manager.isControlLoopFinal(); + assertNotNull(clfNotification); + assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification()); + + manager.setControlLoopTimedOut(); + clfNotification = manager.isControlLoopFinal(); + assertNotNull(clfNotification); + assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification()); + } + + @Test + public void testProcessControlLoop() throws ControlLoopException, IOException, AAIException { + InputStream is = new FileInputStream(new File("src/test/resources/test.yaml")); + String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + + UUID requestId = UUID.randomUUID(); + VirtualControlLoopEvent event = new VirtualControlLoopEvent(); + event.setClosedLoopControlName("TwoOnsetTest"); + event.setRequestID(requestId); + event.setTarget("generic-vnf.vnf-id"); + event.setClosedLoopAlarmStart(Instant.now()); + event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); + event.setAAI(new HashMap<>()); + event.getAAI().put("generic-vnf.vnf-name", "onsetOne"); + + ControlLoopEventManager manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID()); + try { + manager.processControlLoop(); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("ControlLoopEventManager MUST be activated first.", e.getMessage()); + } + + manager.setActivated(true); + try { + manager.processControlLoop(); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("No onset event for ControlLoopEventManager.", e.getMessage()); + } + + manager.setActivated(false); + VirtualControlLoopNotification notification = manager.activate(yamlString, event); + assertNotNull(notification); + assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); + + ControlLoopOperationManager clom = manager.processControlLoop(); + assertNotNull(clom); + assertNull(clom.getOperationResult()); + + // Test operation in progress + try { + manager.processControlLoop(); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("Already working an Operation, do not call this method.", e.getMessage()); + } + + manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID()); + notification = manager.activate(yamlString, event); + assertNotNull(notification); + assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); + + manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE_GUARD); + VirtualControlLoopNotification clfNotification = manager.isControlLoopFinal(); + assertNotNull(clfNotification); + assertEquals(ControlLoopNotificationType.FINAL_FAILURE, clfNotification.getNotification()); + + // Test operation completed + try { + manager.processControlLoop(); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("Control Loop is in FINAL state, do not call this method.", e.getMessage()); + } + + manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID()); + notification = manager.activate(yamlString, event); + assertNotNull(notification); + assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); + manager.getProcessor().nextPolicyForResult(PolicyResult.FAILURE); + + // Test operation with no next policy defined + try { + manager.processControlLoop(); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("The target type is null", e.getMessage()); + } + } + + @Test + public void testFinishOperation() throws IOException, ControlLoopException, AAIException { + InputStream is = new FileInputStream(new File("src/test/resources/testSOactor.yaml")); + String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + + InputStream isStd = new FileInputStream(new File("src/test/resources/test.yaml")); + String yamlStringStd = IOUtils.toString(isStd, StandardCharsets.UTF_8); + + UUID requestId = UUID.randomUUID(); + VirtualControlLoopEvent event = new VirtualControlLoopEvent(); + event.setClosedLoopControlName("TwoOnsetTest"); + event.setRequestID(requestId); + event.setTarget("generic-vnf.vnf-id"); + event.setClosedLoopAlarmStart(Instant.now()); + event.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); + event.setAAI(new HashMap<>()); + event.getAAI().put("generic-vnf.vnf-name", "onsetOne"); + + ControlLoopEventManager manager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID()); + try { + manager.finishOperation(null); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("No operation to finish.", e.getMessage()); + } + + manager.setActivated(true); + try { + manager.finishOperation(null); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("No operation to finish.", e.getMessage()); + } + + manager.setActivated(false); + VirtualControlLoopNotification notification = manager.activate(yamlString, event); + assertNotNull(notification); + assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); + + try { + manager.lockCurrentOperation(); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("Do not have a current operation.", e.getMessage()); + } + + assertNull(manager.unlockCurrentOperation()); + + ControlLoopOperationManager clom = manager.processControlLoop(); + assertNotNull(clom); + assertNull(clom.getOperationResult()); + + LockResult<GuardResult, TargetLock> lockLock = manager.lockCurrentOperation(); + assertNotNull(lockLock); + + LockResult<GuardResult, TargetLock> lockLockAgain = manager.lockCurrentOperation(); + assertNotNull(lockLockAgain); + assertEquals(lockLock.getB(), lockLockAgain.getB()); + + assertEquals(lockLock.getB(), manager.unlockCurrentOperation()); + assertNull(manager.unlockCurrentOperation()); + + lockLock = manager.lockCurrentOperation(); + assertNotNull(lockLock); + PolicyGuard.unlockTarget(lockLock.getB()); + assertNull(manager.unlockCurrentOperation()); + + clom.startOperation(event); + + // This call should be exception free + manager.finishOperation(clom); + + ControlLoopEventManager otherManager = new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestID()); + VirtualControlLoopNotification otherNotification = otherManager.activate(yamlStringStd, event); + assertNotNull(otherNotification); + assertEquals(ControlLoopNotificationType.ACTIVE, otherNotification.getNotification()); + + ControlLoopOperationManager otherClom = otherManager.processControlLoop(); + assertNotNull(otherClom); + assertNull(otherClom.getOperationResult()); + + otherManager.finishOperation(clom); + } + + @Test + public void testOnNewEvent() throws IOException, AAIException { + InputStream is = new FileInputStream(new File("src/test/resources/test.yaml")); + String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + + UUID requestId = UUID.randomUUID(); + VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent(); + onsetEvent.setClosedLoopControlName("TwoOnsetTest"); + onsetEvent.setRequestID(requestId); + onsetEvent.setTarget("generic-vnf.vnf-id"); + onsetEvent.setClosedLoopAlarmStart(Instant.now()); + onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); + onsetEvent.setAAI(new HashMap<>()); + onsetEvent.getAAI().put("generic-vnf.vnf-name", "onsetOne"); + + VirtualControlLoopEvent abatedEvent = new VirtualControlLoopEvent(); + abatedEvent.setClosedLoopControlName("TwoOnsetTest"); + abatedEvent.setRequestID(requestId); + abatedEvent.setTarget("generic-vnf.vnf-id"); + abatedEvent.setClosedLoopAlarmStart(Instant.now()); + abatedEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ABATED); + abatedEvent.setAAI(new HashMap<>()); + abatedEvent.getAAI().put("generic-vnf.vnf-name", "onsetOne"); + + ControlLoopEventManager manager = new ControlLoopEventManager(onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestID()); + VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent); + assertNotNull(notification); + assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); + + assertEquals(NEW_EVENT_STATUS.FIRST_ONSET, manager.onNewEvent(onsetEvent)); + assertEquals(NEW_EVENT_STATUS.FIRST_ABATEMENT, manager.onNewEvent(abatedEvent)); + assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent)); + + VirtualControlLoopEvent checkSyntaxEvent = new VirtualControlLoopEvent(); + checkSyntaxEvent.setAAI(null); + checkSyntaxEvent.setClosedLoopAlarmEnd(null); + checkSyntaxEvent.setClosedLoopAlarmStart(null); + checkSyntaxEvent.setClosedLoopControlName(null); + checkSyntaxEvent.setClosedLoopEventClient(null); + checkSyntaxEvent.setClosedLoopEventStatus(null); + checkSyntaxEvent.setFrom(null); + checkSyntaxEvent.setPolicyName(null); + checkSyntaxEvent.setPolicyScope(null); + checkSyntaxEvent.setPolicyVersion(null); + checkSyntaxEvent.setRequestID(null); + checkSyntaxEvent.setTarget(null); + checkSyntaxEvent.setTargetType(null); + checkSyntaxEvent.setVersion(null); + + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setClosedLoopControlName(null); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setClosedLoopControlName(""); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setClosedLoopControlName("TwoOnsetTest"); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setRequestID(null); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setRequestID(requestId); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setAAI(null); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setAAI(new HashMap<>()); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setTarget(""); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setTarget(null); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setTarget(""); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setTarget("OZ"); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setTarget("VM_NAME"); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setTarget("VNF_NAME"); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setTarget("vserver.vserver-name"); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setTarget("generic-vnf.vnf-id"); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setTarget("generic-vnf.vnf-name"); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setAAI(null); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.setAAI(new HashMap<>()); + assertEquals(NEW_EVENT_STATUS.SYNTAX_ERROR, manager.onNewEvent(checkSyntaxEvent)); + + checkSyntaxEvent.getAAI().put("generic-vnf.vnf-name", "onsetOne"); + assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent)); + + checkSyntaxEvent.getAAI().put("vserver.vserver-name", "onsetOne"); + assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent)); + + checkSyntaxEvent.getAAI().put("generic-vnf.vnf-id", "onsetOne"); + assertEquals(NEW_EVENT_STATUS.SUBSEQUENT_ABATEMENT, manager.onNewEvent(abatedEvent)); + } + + @Test + public void testControlLoopTimeout() throws IOException { + InputStream is = new FileInputStream(new File("src/test/resources/test.yaml")); + String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + + UUID requestId = UUID.randomUUID(); + VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent(); + onsetEvent.setClosedLoopControlName("TwoOnsetTest"); + onsetEvent.setRequestID(requestId); + onsetEvent.setTarget("generic-vnf.vnf-id"); + onsetEvent.setClosedLoopAlarmStart(Instant.now()); + onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); + onsetEvent.setAAI(new HashMap<>()); + onsetEvent.getAAI().put("generic-vnf.vnf-name", "onsetOne"); + + ControlLoopEventManager manager = new ControlLoopEventManager(onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestID()); + assertTrue(0 == manager.getControlLoopTimeout(null)); + assertTrue(120 == manager.getControlLoopTimeout(120)); + + VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent); + assertNotNull(notification); + assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); + + assertTrue(60 == manager.getControlLoopTimeout(null)); + } + + @Test + public void testQueryAAI() throws IOException, AAIException { + InputStream is = new FileInputStream(new File("src/test/resources/test.yaml")); + String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + + UUID requestId = UUID.randomUUID(); + VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent(); + onsetEvent.setClosedLoopControlName("TwoOnsetTest"); + onsetEvent.setRequestID(requestId); + onsetEvent.setTarget("generic-vnf.vnf-id"); + onsetEvent.setClosedLoopAlarmStart(Instant.now()); + onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); + onsetEvent.setAAI(new HashMap<>()); + onsetEvent.getAAI().put("generic-vnf.vnf-name", "onsetOne"); + + ControlLoopEventManager manager = new ControlLoopEventManager(onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestID()); + manager.queryAai(onsetEvent); + + VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent); + assertNotNull(notification); + assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); + + manager.queryAai(onsetEvent); + + onsetEvent.getAAI().put("generic-vnf.is-closed-loop-disabled", "true"); + try { + manager.queryAai(onsetEvent); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("is-closed-loop-disabled is set to true on VServer or VNF", e.getMessage()); + } + onsetEvent.getAAI().put("vserver.is-closed-loop-disabled", "true"); + try { + manager.queryAai(onsetEvent); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("is-closed-loop-disabled is set to true on VServer or VNF", e.getMessage()); + } + onsetEvent.getAAI().remove("generic-vnf.is-closed-loop-disabled"); + try { + manager.queryAai(onsetEvent); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("is-closed-loop-disabled is set to true on VServer or VNF", e.getMessage()); + } + onsetEvent.getAAI().remove("vserver.is-closed-loop-disabled"); + manager.queryAai(onsetEvent); + + onsetEvent.getAAI().put("generic-vnf.is-closed-loop-disabled", "false"); + manager.queryAai(onsetEvent); + onsetEvent.getAAI().put("vserver.is-closed-loop-disabled", "false"); + manager.queryAai(onsetEvent); + + onsetEvent.getAAI().remove("generic-vnf.vnf-id"); + onsetEvent.getAAI().remove("generic-vnf.vnf-name"); + onsetEvent.getAAI().remove("vserver.vserver-name"); + manager.queryAai(onsetEvent); + + onsetEvent.getAAI().put("vserver.vserver-name", "AVserver"); + manager.queryAai(onsetEvent); + + onsetEvent.getAAI().put("generic-vnf.vnf-name", "AVNFName"); + manager.queryAai(onsetEvent); + + onsetEvent.getAAI().put("generic-vnf.vnf-id", "AVNFID"); + manager.queryAai(onsetEvent); + + onsetEvent.getAAI().remove("vserver.vserver-name"); + manager.queryAai(onsetEvent); + + onsetEvent.getAAI().remove("generic-vnf.vnf-name"); + manager.queryAai(onsetEvent); + + // Force AAI errors + PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:9999"); + + try { + manager.queryAai(onsetEvent); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("Exception from queryAai: org.onap.policy.aai.util.AAIException: AAI Response is null (query by vnf-id)", e.getMessage()); + } + + onsetEvent.getAAI().remove("generic-vnf.vnf-id"); + onsetEvent.getAAI().put("generic-vnf.vnf-name", "AVNFName"); + try { + manager.queryAai(onsetEvent); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("Exception from queryAai: org.onap.policy.aai.util.AAIException: AAI Response is null (query by vnf-name)", e.getMessage()); + } + + onsetEvent.getAAI().remove("generic-vnf.vnf-name"); + onsetEvent.getAAI().put("vserver.vserver-name", "AVserver"); + try { + manager.queryAai(onsetEvent); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("Exception from queryAai: org.onap.policy.aai.util.AAIException: AAI Response is null (query by vserver-name)", e.getMessage()); + } + + PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666"); + } }
\ No newline at end of file diff --git a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManagerTest.java b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManagerTest.java index 76020b0c9..4a30a451a 100644 --- a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManagerTest.java +++ b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManagerTest.java @@ -23,17 +23,29 @@ package org.onap.policy.controlloop.eventmanager; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.time.Instant; import java.util.HashMap; import java.util.UUID; +import org.apache.commons.io.IOUtils; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.onap.policy.aai.util.AAIException; +import org.onap.policy.appc.CommonHeader; +import org.onap.policy.appc.Response; +import org.onap.policy.appc.ResponseCode; +import org.onap.policy.appc.ResponseStatus; +import org.onap.policy.appclcm.LCMCommonHeader; import org.onap.policy.appclcm.LCMRequest; import org.onap.policy.appclcm.LCMRequestWrapper; import org.onap.policy.appclcm.LCMResponse; @@ -46,16 +58,26 @@ import org.onap.policy.controlloop.ControlLoopTargetType; import org.onap.policy.controlloop.Util; import org.onap.policy.controlloop.VirtualControlLoopNotification; import org.onap.policy.controlloop.policy.ControlLoopPolicy; +import org.onap.policy.controlloop.policy.Policy; import org.onap.policy.controlloop.policy.PolicyResult; +import org.onap.policy.controlloop.policy.Target; +import org.onap.policy.controlloop.policy.TargetType; import org.onap.policy.controlloop.processor.ControlLoopProcessor; import org.onap.policy.drools.http.server.HttpServletServer; import org.onap.policy.drools.system.PolicyEngine; +import org.onap.policy.so.SOResponse; +import org.onap.policy.so.SOResponseWrapper; +import org.onap.policy.vfc.VFCResponse; +import org.onap.policy.vfc.VFCResponseDescriptor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class ControlLoopOperationManagerTest { private static final Logger logger = LoggerFactory.getLogger(ControlLoopOperationManagerTest.class); + + private static VirtualControlLoopEvent onset; + static { onset = new VirtualControlLoopEvent(); onset.setRequestID(UUID.randomUUID()); @@ -65,27 +87,27 @@ public class ControlLoopOperationManagerTest { onset.setAAI(new HashMap<>()); onset.getAAI().put("generic-vnf.vnf-name", "testTriggerSource"); onset.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); - + /* Set environment properties */ - PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666"); - PolicyEngine.manager.setEnvironmentProperty("aai.username", "AAI"); - PolicyEngine.manager.setEnvironmentProperty("aai.password", "AAI"); + PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666"); + PolicyEngine.manager.setEnvironmentProperty("aai.username", "AAI"); + PolicyEngine.manager.setEnvironmentProperty("aai.password", "AAI"); } @BeforeClass - public static void setUpSimulator() { - try { - org.onap.policy.simulators.Util.buildAaiSim(); - } catch (Exception e) { - fail(e.getMessage()); - } - } - - @AfterClass - public static void tearDownSimulator() { - HttpServletServer.factory.destroy(); - } - + public static void setUpSimulator() { + try { + org.onap.policy.simulators.Util.buildAaiSim(); + } catch (Exception e) { + fail(e.getMessage()); + } + } + + @AfterClass + public static void tearDownSimulator() { + HttpServletServer.factory.destroy(); + } + @Test public void testRetriesFail() { // @@ -102,21 +124,21 @@ public class ControlLoopOperationManagerTest { // create the manager // ControlLoopEventManager eventManager = new ControlLoopEventManager(onset.getClosedLoopControlName(), onset.getRequestID()); - VirtualControlLoopNotification notification = eventManager.activate(onset); - + VirtualControlLoopNotification notification = eventManager.activate(onset); + assertNotNull(notification); assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); - + ControlLoopEventManager.NEW_EVENT_STATUS status = null; - try { - status = eventManager.onNewEvent(onset); - } catch (AAIException e) { - logger.warn(e.toString()); - fail("A&AI Query Failed"); - } - assertNotNull(status); - assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.FIRST_ONSET, status); - + try { + status = eventManager.onNewEvent(onset); + } catch (AAIException e) { + logger.warn(e.toString()); + fail("A&AI Query Failed"); + } + assertNotNull(status); + assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.FIRST_ONSET, status); + ControlLoopOperationManager manager = new ControlLoopOperationManager(onset, processor.getCurrentPolicy(), eventManager); logger.debug("{}",manager); // @@ -232,20 +254,20 @@ public class ControlLoopOperationManagerTest { // ControlLoopEventManager eventManager = new ControlLoopEventManager(onset.getClosedLoopControlName(), onset.getRequestID()); VirtualControlLoopNotification notification = eventManager.activate(onset); - + assertNotNull(notification); assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); ControlLoopEventManager.NEW_EVENT_STATUS status = null; - try { - status = eventManager.onNewEvent(onset); - } catch (AAIException e) { - logger.warn(e.toString()); - fail("A&AI Query Failed"); - } - assertNotNull(status); - assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.FIRST_ONSET, status); - + try { + status = eventManager.onNewEvent(onset); + } catch (AAIException e) { + logger.warn(e.toString()); + fail("A&AI Query Failed"); + } + assertNotNull(status); + assertEquals(ControlLoopEventManager.NEW_EVENT_STATUS.FIRST_ONSET, status); + ControlLoopOperationManager manager = new ControlLoopOperationManager(onset, processor.getCurrentPolicy(), eventManager); // // @@ -270,7 +292,7 @@ public class ControlLoopOperationManagerTest { // LCMResponseWrapper dmaapResponse = new LCMResponseWrapper(); LCMResponse appcResponse = new LCMResponse(appcRequest); - dmaapResponse.setBody(appcResponse); + dmaapResponse.setBody(appcResponse); appcResponse.getStatus().setCode(100); appcResponse.getStatus().setMessage("ACCEPT"); // @@ -311,4 +333,414 @@ public class ControlLoopOperationManagerTest { } } + @Test + public void testMethods() throws IOException, ControlLoopException, AAIException { + InputStream is = new FileInputStream(new File("src/test/resources/testSOactor.yaml")); + String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + + UUID requestId = UUID.randomUUID(); + VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent(); + onsetEvent.setClosedLoopControlName("TwoOnsetTest"); + onsetEvent.setRequestID(requestId); + onsetEvent.setTarget("generic-vnf.vnf-id"); + onsetEvent.setClosedLoopAlarmStart(Instant.now()); + onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); + onsetEvent.setAAI(new HashMap<>()); + onsetEvent.getAAI().put("generic-vnf.vnf-name", "onsetOne"); + + ControlLoopEventManager manager = new ControlLoopEventManager(onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestID()); + VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent); + assertNotNull(notification); + assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); + + ControlLoopOperationManager clom = manager.processControlLoop(); + assertNotNull(clom); + assertNull(clom.getOperationResult()); + + clom.setEventManager(manager); + assertEquals(manager, clom.getEventManager()); + + assertNull(clom.getTargetEntity()); + + clom.setGuardApprovalStatus("WizardOKedIt"); + assertEquals("WizardOKedIt", clom.getGuardApprovalStatus()); + + assertNull(clom.getOperationResult()); + + Policy policy = manager.getProcessor().getCurrentPolicy(); + clom.getTarget(policy); + + Target savedTarget = policy.getTarget(); + policy.setTarget(null); + try { + clom.getTarget(policy); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("The target is null", e.getMessage()); + } + + policy.setTarget(new Target()); + try { + clom.getTarget(policy); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("The target type is null", e.getMessage()); + } + + policy.setTarget(savedTarget); + + policy.getTarget().setType(TargetType.PNF); + try { + clom.getTarget(policy); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("PNF target is not supported", e.getMessage()); + } + + onsetEvent.setTarget("Oz"); + onsetEvent.getAAI().remove("generic-vnf.vnf-name"); + onsetEvent.getAAI().remove("generic-vnf.vnf-id"); + onsetEvent.getAAI().remove("vserver.vserver-name"); + + policy.getTarget().setType(TargetType.VNF); + try { + clom.getTarget(policy); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("Target does not match target type", e.getMessage()); + } + + onsetEvent.setTarget("vserver.vserver-name"); + onsetEvent.getAAI().put("vserver.vserver-name", "OzVServer"); + assertEquals("OzVServer", clom.getTarget(policy)); + + onsetEvent.getAAI().remove("vserver.vserver-name"); + onsetEvent.setTarget("generic-vnf.vnf-id"); + onsetEvent.getAAI().put("generic-vnf.vnf-id", "OzVNF"); + assertEquals("OzVNF", clom.getTarget(policy)); + + onsetEvent.setTarget("generic-vnf.vnf-name"); + assertEquals("OzVNF", clom.getTarget(policy)); + + manager.onNewEvent(onsetEvent); + + onsetEvent.getAAI().remove("generic-vnf.vnf-id"); + manager.getVnfResponse(); + clom.getEventManager().getVnfResponse().setVnfID("generic-vnf.vnf-id"); + assertEquals("generic-vnf.vnf-id", clom.getTarget(policy)); + + policy.getTarget().setType(TargetType.VFC); + try { + clom.getTarget(policy); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("The target type is not supported", e.getMessage()); + } + + assertEquals(Integer.valueOf(20), clom.getOperationTimeout()); + + assertEquals("20s", clom.getOperationTimeoutString(100)); + + assertEquals(null, clom.getOperationMessage()); + assertEquals(null, clom.getOperationMessage("The Wizard Escaped")); + + clom.startOperation(onsetEvent); + + assertEquals("actor=SO,operation=Restart,target=Target [type=VFC, resourceID=null],subRequestId=1", clom.getOperationMessage()); + assertEquals("actor=SO,operation=Restart,target=Target [type=VFC, resourceID=null],subRequestId=1, Guard result: The Wizard Escaped", clom.getOperationMessage("The Wizard Escaped")); + + assertEquals("actor=SO,operation=Restart,tar", clom.getOperationHistory().substring(0, 30)); + + clom.setOperationHasException("The Wizard is gone"); + clom.setOperationHasGuardDeny(); + } + + @Test + public void testConstructor() throws IOException, ControlLoopException, AAIException { + InputStream is = new FileInputStream(new File("src/test/resources/test.yaml")); + String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + + UUID requestId = UUID.randomUUID(); + VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent(); + onsetEvent.setClosedLoopControlName("TwoOnsetTest"); + onsetEvent.setRequestID(requestId); + onsetEvent.setTarget("generic-vnf.vnf-id"); + onsetEvent.setClosedLoopAlarmStart(Instant.now()); + onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); + onsetEvent.setAAI(new HashMap<>()); + onsetEvent.getAAI().put("generic-vnf.vnf-name", "onsetOne"); + + ControlLoopEventManager manager = new ControlLoopEventManager(onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestID()); + VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent); + assertNotNull(notification); + assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); + + Policy policy = manager.getProcessor().getCurrentPolicy(); + ControlLoopOperationManager clom = new ControlLoopOperationManager(onsetEvent, policy, manager); + assertNotNull(clom); + + policy.setRecipe("ModifyConfig"); + policy.getTarget().setResourceID(UUID.randomUUID().toString()); + try { + new ControlLoopOperationManager(onsetEvent, policy, manager); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("Target vnf-id could not be found", e.getMessage()); + } + + policy.getTarget().setResourceID("82194af1-3c2c-485a-8f44-420e22a9eaa4"); + clom = new ControlLoopOperationManager(onsetEvent, policy, manager); + assertNotNull(clom); + + policy.setActor("SO"); + clom = new ControlLoopOperationManager(onsetEvent, policy, manager); + assertNotNull(clom); + + policy.setActor("VFC"); + clom = new ControlLoopOperationManager(onsetEvent, policy, manager); + assertNotNull(clom); + + policy.setActor("Dorothy"); + try { + new ControlLoopOperationManager(onsetEvent, policy, manager); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("ControlLoopEventManager: policy has an unknown actor.", e.getMessage()); + } + } + + @Test + public void testStartOperation() throws IOException, ControlLoopException, AAIException { + InputStream is = new FileInputStream(new File("src/test/resources/test.yaml")); + String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + + UUID requestId = UUID.randomUUID(); + VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent(); + onsetEvent.setClosedLoopControlName("TwoOnsetTest"); + onsetEvent.setRequestID(requestId); + onsetEvent.setTarget("generic-vnf.vnf-id"); + onsetEvent.setClosedLoopAlarmStart(Instant.now()); + onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); + onsetEvent.setAAI(new HashMap<>()); + onsetEvent.getAAI().put("generic-vnf.vnf-name", "onsetOne"); + + ControlLoopEventManager manager = new ControlLoopEventManager(onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestID()); + VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent); + assertNotNull(notification); + assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); + + Policy policy = manager.getProcessor().getCurrentPolicy(); + ControlLoopOperationManager clom = new ControlLoopOperationManager(onsetEvent, policy, manager); + assertNotNull(clom); + + clom.startOperation(onsetEvent); + + try { + clom.startOperation(onsetEvent); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("current operation is not null (an operation is already running)", e.getMessage()); + } + + clom = new ControlLoopOperationManager(onsetEvent, policy, manager); + assertNotNull(clom); + String savedRecipe = policy.getRecipe(); + policy.setRecipe("ModifyConfig"); + policy.getTarget().setResourceID(UUID.randomUUID().toString()); + clom.startOperation(onsetEvent); + policy.setRecipe(savedRecipe); + + policy.setRetry(null); + clom = new ControlLoopOperationManager(onsetEvent, policy, manager); + assertNotNull(clom); + clom.startOperation(onsetEvent); + clom.setOperationHasTimedOut(); + assertTrue(clom.isOperationComplete()); + try { + clom.startOperation(onsetEvent); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("current operation failed and retries are not allowed", e.getMessage()); + } + + policy.setRetry(0); + clom = new ControlLoopOperationManager(onsetEvent, policy, manager); + assertNotNull(clom); + clom.startOperation(onsetEvent); + clom.setOperationHasTimedOut(); + assertTrue(clom.isOperationComplete()); + try { + clom.startOperation(onsetEvent); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("current operation failed and retries are not allowed", e.getMessage()); + } + + policy.setRetry(1); + clom = new ControlLoopOperationManager(onsetEvent, policy, manager); + assertNotNull(clom); + clom.startOperation(onsetEvent); + clom.setOperationHasTimedOut(); + clom.startOperation(onsetEvent); + clom.setOperationHasTimedOut(); + assertTrue(clom.isOperationComplete()); + try { + clom.startOperation(onsetEvent); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("current oepration has failed after 2 retries", e.getMessage()); + } + + clom = new ControlLoopOperationManager(onsetEvent, policy, manager); + assertNotNull(clom); + policy.setActor("SO"); + clom.startOperation(onsetEvent); + + clom = new ControlLoopOperationManager(onsetEvent, policy, manager); + assertNotNull(clom); + policy.setActor("VFC"); + clom.startOperation(onsetEvent); + + clom = new ControlLoopOperationManager(onsetEvent, policy, manager); + assertNotNull(clom); + policy.setActor("Oz"); + try { + clom.startOperation(onsetEvent); + fail("test should throw an exception here"); + } catch (Exception e) { + assertEquals("invalid actor Oz on policy", e.getMessage()); + } + } + + @Test + public void testOnResponse() throws IOException, ControlLoopException, AAIException { + InputStream is = new FileInputStream(new File("src/test/resources/test.yaml")); + String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + + UUID requestId = UUID.randomUUID(); + VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent(); + onsetEvent.setClosedLoopControlName("TwoOnsetTest"); + onsetEvent.setRequestID(requestId); + onsetEvent.setTarget("generic-vnf.vnf-id"); + onsetEvent.setClosedLoopAlarmStart(Instant.now()); + onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); + onsetEvent.setAAI(new HashMap<>()); + onsetEvent.getAAI().put("generic-vnf.vnf-name", "onsetOne"); + + ControlLoopEventManager manager = new ControlLoopEventManager(onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestID()); + VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent); + assertNotNull(notification); + assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); + + Policy policy = manager.getProcessor().getCurrentPolicy(); + ControlLoopOperationManager clom = new ControlLoopOperationManager(onsetEvent, policy, manager); + assertNotNull(clom); + + assertNull(clom.onResponse(null)); + + Response appcResponse = new Response(); + CommonHeader commonHeader = new CommonHeader(); + appcResponse.setCommonHeader(commonHeader ); + assertEquals(PolicyResult.FAILURE_EXCEPTION, clom.onResponse(appcResponse)); + + commonHeader.setSubRequestID("12345"); + appcResponse.setStatus(null); + assertEquals(PolicyResult.FAILURE_EXCEPTION, clom.onResponse(appcResponse)); + + ResponseStatus responseStatus = new ResponseStatus(); + appcResponse.setStatus(responseStatus); + assertEquals(PolicyResult.FAILURE_EXCEPTION, clom.onResponse(appcResponse)); + + responseStatus.setCode(0); + assertEquals(PolicyResult.FAILURE_EXCEPTION, clom.onResponse(appcResponse)); + + responseStatus.setCode(ResponseCode.ACCEPT.getValue()); + assertEquals(null, clom.onResponse(appcResponse)); + + responseStatus.setCode(ResponseCode.ERROR.getValue()); + assertEquals(PolicyResult.FAILURE_EXCEPTION, clom.onResponse(appcResponse)); + + responseStatus.setCode(ResponseCode.FAILURE.getValue()); + assertEquals(PolicyResult.FAILURE, clom.onResponse(appcResponse)); + + responseStatus.setCode(ResponseCode.REJECT.getValue()); + assertEquals(PolicyResult.FAILURE_EXCEPTION, clom.onResponse(appcResponse)); + + responseStatus.setCode(ResponseCode.SUCCESS.getValue()); + assertEquals(PolicyResult.SUCCESS, clom.onResponse(appcResponse)); + + LCMResponseWrapper lrw = new LCMResponseWrapper(); + LCMResponse body = new LCMResponse(); + LCMCommonHeader lcmCH = new LCMCommonHeader(); + body.setCommonHeader(lcmCH ); + lrw.setBody(body ); + + lcmCH.setSubRequestId("NotANumber"); + assertEquals(PolicyResult.FAILURE_EXCEPTION, clom.onResponse(lrw)); + + lcmCH.setSubRequestId("12345"); + assertEquals(PolicyResult.FAILURE_EXCEPTION, clom.onResponse(lrw)); + + SOResponse soResponse = new SOResponse(); + SOResponseWrapper soRW = new SOResponseWrapper(soResponse , null); + + soResponse.setHttpResponseCode(200); + assertEquals(PolicyResult.SUCCESS, clom.onResponse(soRW)); + + soResponse.setHttpResponseCode(202); + assertEquals(PolicyResult.SUCCESS, clom.onResponse(soRW)); + + soResponse.setHttpResponseCode(500); + assertEquals(PolicyResult.FAILURE, clom.onResponse(soRW)); + + VFCResponse vfcResponse = new VFCResponse(); + VFCResponseDescriptor responseDescriptor = new VFCResponseDescriptor(); + vfcResponse.setResponseDescriptor(responseDescriptor ); + + responseDescriptor.setStatus("finished"); + assertEquals(PolicyResult.SUCCESS, clom.onResponse(vfcResponse)); + + responseDescriptor.setStatus("unfinished"); + assertEquals(PolicyResult.FAILURE, clom.onResponse(vfcResponse)); + } + + @Test + public void testCompleteOperation() throws ControlLoopException, AAIException, IOException { + InputStream is = new FileInputStream(new File("src/test/resources/test.yaml")); + String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + + UUID requestId = UUID.randomUUID(); + VirtualControlLoopEvent onsetEvent = new VirtualControlLoopEvent(); + onsetEvent.setClosedLoopControlName("TwoOnsetTest"); + onsetEvent.setRequestID(requestId); + onsetEvent.setTarget("generic-vnf.vnf-id"); + onsetEvent.setClosedLoopAlarmStart(Instant.now()); + onsetEvent.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); + onsetEvent.setAAI(new HashMap<>()); + onsetEvent.getAAI().put("generic-vnf.vnf-name", "onsetOne"); + + ControlLoopEventManager manager = new ControlLoopEventManager(onsetEvent.getClosedLoopControlName(), onsetEvent.getRequestID()); + VirtualControlLoopNotification notification = manager.activate(yamlString, onsetEvent); + assertNotNull(notification); + assertEquals(ControlLoopNotificationType.ACTIVE, notification.getNotification()); + + Policy policy = manager.getProcessor().getCurrentPolicy(); + ControlLoopOperationManager clom = new ControlLoopOperationManager(onsetEvent, policy, manager); + assertNotNull(clom); + + clom.startOperation(onsetEvent); + + SOResponse soResponse = new SOResponse(); + SOResponseWrapper soRW = new SOResponseWrapper(soResponse , null); + + PolicyEngine.manager.setEnvironmentProperty("guard.disabled", "false"); + PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_URL, "http://somewhere.over.the.rainbow"); + PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_USER, "Dorothy"); + PolicyEngine.manager.setEnvironmentProperty(org.onap.policy.guard.Util.ONAP_KEY_PASS, "Toto"); + + assertEquals(PolicyResult.FAILURE, clom.onResponse(soRW)); + + System.setProperty("OperationsHistoryPU", "TestOperationsHistoryPU"); + assertEquals(PolicyResult.FAILURE, clom.onResponse(soRW)); + } } diff --git a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/OperationsHistoryDbEntryTest.java b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/OperationsHistoryDbEntryTest.java new file mode 100644 index 000000000..315565cf0 --- /dev/null +++ b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/OperationsHistoryDbEntryTest.java @@ -0,0 +1,80 @@ +/*- + * ============LICENSE_START======================================================= + * eventmanager + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.controlloop.eventmanager; + +import static org.junit.Assert.*; + +import java.sql.Timestamp; +import java.util.UUID; + +import org.junit.Test; + +public class OperationsHistoryDbEntryTest { + + @Test + public void testOperationsHistoryDbEntry() { + OperationsHistoryDbEntry entry = new OperationsHistoryDbEntry(); + + String actor = "Dorothy"; + entry.setActor(actor); + assertEquals(actor, entry.getActor()); + + String closedLoopName = "GoToOz"; + entry.setClosedLoopName(closedLoopName); + assertEquals(closedLoopName, entry.getClosedLoopName()); + + Timestamp endtime = new Timestamp(System.currentTimeMillis()); + entry.setEndtime(endtime); + assertEquals(endtime, entry.getEndtime()); + + String message = "I Want to go Home"; + entry.setMessage(message); + assertEquals(message, entry.getMessage()); + + String operation = "Get Home"; + entry.setOperation(operation); + assertEquals(operation, entry.getOperation()); + + String outcome = "Back in Kansas"; + entry.setOutcome(outcome); + assertEquals(outcome, entry.getOutcome()); + + String requestId = UUID.randomUUID().toString(); + entry.setRequestId(requestId); + assertEquals(requestId, entry.getRequestId()); + + long rowid = 12345; + entry.setRowid(rowid); + assertEquals(rowid, entry.getRowid()); + + Timestamp starttime = new Timestamp(endtime.getTime() - 100); + entry.setStarttime(starttime); + assertEquals(starttime, entry.getStarttime()); + + String subrequestId = "12321"; + entry.setSubrequestId(subrequestId); + assertEquals(subrequestId, entry.getSubrequestId()); + + String target = "WizardOfOz"; + entry.setTarget(target); + assertEquals(target, entry.getTarget()); + } +} diff --git a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/processor/ControlLoopProcessorTest.java b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/processor/ControlLoopProcessorTest.java index 7bd18a3ff..87ccdb5b9 100644 --- a/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/processor/ControlLoopProcessorTest.java +++ b/controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/processor/ControlLoopProcessorTest.java @@ -24,7 +24,6 @@ import static org.junit.Assert.*; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; @@ -41,25 +40,92 @@ import org.slf4j.LoggerFactory; public class ControlLoopProcessorTest { private static final Logger logger = LoggerFactory.getLogger(ControlLoopProcessorTest.class); - + + @Test + public void testControlLoopProcessor() throws IOException, ControlLoopException { + InputStream is = new FileInputStream(new File("src/test/resources/test.yaml")); + String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + this.testSuccess(yamlString); + this.testFailure(yamlString); + } + @Test - public void test() { - try (InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"))) { - String result = IOUtils.toString(is, StandardCharsets.UTF_8); - this.testSuccess(result); - this.testFailure(result); - } catch (FileNotFoundException e) { - e.printStackTrace(); - fail(e.getMessage()); - } catch (IOException e) { - e.printStackTrace(); - fail(e.getMessage()); - } catch (ControlLoopException e) { - e.printStackTrace(); - fail(e.getMessage()); + public void testControlLoopProcessorBadYaml() throws IOException { + InputStream is = new FileInputStream(new File("src/test/resources/string.yaml")); + String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + + try { + new ControlLoopProcessor(yamlString); + fail("test should thrown an exception"); + } + catch (Exception e) { + assertEquals("Cannot create property=string for JavaBean=ControlLoopPolicy", e.getMessage().substring(0, 60)); } } - + + @Test + public void testControlLoopProcessorBadTriggerYaml() throws IOException, ControlLoopException { + InputStream is = new FileInputStream(new File("src/test/resources/badtriggerpolicy.yaml")); + String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + + ControlLoopProcessor clProcessor = new ControlLoopProcessor(yamlString); + assertNull(clProcessor.getCurrentPolicy()); + + try { + clProcessor.nextPolicyForResult(PolicyResult.SUCCESS); + fail("test shold throw an exception here"); + } + catch (ControlLoopException e) { + assertEquals("There is no current policy to determine where to go to.", e.getMessage()); + } + } + + @Test + public void testControlLoopProcessorNoPolicyYaml() throws IOException, ControlLoopException { + InputStream is = new FileInputStream(new File("src/test/resources/nopolicy.yaml")); + String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + + ControlLoopProcessor clProcessor = new ControlLoopProcessor(yamlString); + + try { + clProcessor.getCurrentPolicy(); + fail("test shold throw an exception here"); + } + catch (ControlLoopException e) { + assertEquals("There are no policies defined.", e.getMessage()); + } + } + + @Test + public void testControlLoopProcessorNextPolicyForResult() throws IOException, ControlLoopException { + InputStream is = new FileInputStream(new File("src/test/resources/test.yaml")); + String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + + ControlLoopProcessor clProcessor = new ControlLoopProcessor(yamlString); + clProcessor.getCurrentPolicy(); + clProcessor.nextPolicyForResult(PolicyResult.SUCCESS); + + clProcessor = new ControlLoopProcessor(yamlString); + clProcessor.getCurrentPolicy(); + clProcessor.nextPolicyForResult(PolicyResult.FAILURE); + + clProcessor = new ControlLoopProcessor(yamlString); + clProcessor.getCurrentPolicy(); + clProcessor.nextPolicyForResult(PolicyResult.FAILURE_EXCEPTION); + + clProcessor = new ControlLoopProcessor(yamlString); + clProcessor.getCurrentPolicy(); + clProcessor.nextPolicyForResult(PolicyResult.FAILURE_GUARD); + + clProcessor = new ControlLoopProcessor(yamlString); + clProcessor.getCurrentPolicy(); + clProcessor.nextPolicyForResult(PolicyResult.FAILURE_RETRIES); + + clProcessor = new ControlLoopProcessor(yamlString); + clProcessor.getCurrentPolicy(); + clProcessor.nextPolicyForResult(PolicyResult.FAILURE_TIMEOUT); + } + public void testSuccess(String yaml) throws ControlLoopException { ControlLoopProcessor processor = new ControlLoopProcessor(yaml); logger.debug("testSuccess: {}", processor.getControlLoop()); @@ -91,5 +157,4 @@ public class ControlLoopProcessorTest { processor.nextPolicyForResult(PolicyResult.FAILURE); } } - } diff --git a/controlloop/common/eventmanager/src/test/java/org/onap/policy/drools/DroolsPolicyEngineTest.java b/controlloop/common/eventmanager/src/test/java/org/onap/policy/drools/DroolsPolicyEngineTest.java new file mode 100644 index 000000000..d94230e5e --- /dev/null +++ b/controlloop/common/eventmanager/src/test/java/org/onap/policy/drools/DroolsPolicyEngineTest.java @@ -0,0 +1,73 @@ +/*- + * ============LICENSE_START======================================================= + * eventmanager + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.policy.drools; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.onap.policy.appc.CommonHeader; +import org.onap.policy.appc.Request; +import org.onap.policy.appclcm.LCMCommonHeader; +import org.onap.policy.appclcm.LCMRequest; +import org.onap.policy.appclcm.LCMRequestWrapper; +import org.onap.policy.controlloop.ControlLoopNotification; +import org.onap.policy.controlloop.VirtualControlLoopNotification; +import org.onap.policy.drools.impl.PolicyEngineJUnitImpl; + +public class DroolsPolicyEngineTest { + @Test + public void testDroolsPolicyEngine() { + PolicyEngineJUnitImpl pe = new PolicyEngineJUnitImpl(); + assertNotNull(pe); + + pe.addListener(new TestPolicyEngineListener()); + pe.notifyListeners("TheWizardOfOz"); + + pe.subscribe("OmniBus", "TheWizardOfOz"); + + pe.deliver("OmniBus", "TheWizardOfOz", "Dorothy"); + + pe.subscribe("OmniBus", "TheWizardOfOz"); + pe.subscribe("OmniBus", "ThisTopicDoesNotExist"); + + ControlLoopNotification notification = new VirtualControlLoopNotification(); + pe.deliver("OmniBus", "TheWizardOfOz", notification); + + Request request = new Request(); + request.setCommonHeader(new CommonHeader()); + request.getCommonHeader().setSubRequestID("12321"); + pe.deliver("OmniBus", "TheWizardOfOz", request); + + LCMRequestWrapper lcmRW = new LCMRequestWrapper(); + lcmRW.setBody(new LCMRequest()); + lcmRW.getBody().setCommonHeader(new LCMCommonHeader()); + lcmRW.getBody().getCommonHeader().setSubRequestId("54321"); + pe.deliver("OmniBus", "TheWizardOfOz", lcmRW); + } + + private class TestPolicyEngineListener implements PolicyEngineListener { + @Override + public void newEventNotification(String topic) { + assertEquals("TheWizardOfOz", topic); + } + } +} |