diff options
Diffstat (limited to 'controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManagerTest.java')
-rw-r--r-- | controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManagerTest.java | 1915 |
1 files changed, 981 insertions, 934 deletions
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 1df4a4f27..ea057c9d9 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 @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * unit test * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017-2018 AT&T Intellectual Property. 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. @@ -67,936 +67,983 @@ 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(); - onset.setClosedLoopControlName("ControlLoop-vUSP"); - onset.setRequestID(UUID.randomUUID()); - onset.setTarget("VM_NAME"); - onset.setClosedLoopAlarmStart(Instant.now()); - onset.setAAI(new HashMap<String, String>()); - onset.getAAI().put("cloud-region.identity-url", "foo"); - onset.getAAI().put("vserver.selflink", "bar"); - onset.getAAI().put("generic-vnf.vnf-id", "83f674e8-7555-44d7-9a39-bdc3770b0491"); - onset.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); - } - - @BeforeClass - public static void setUpSimulator() { - try { - org.onap.policy.simulators.Util.buildAaiSim(); - } catch (Exception e) { - fail(e.getMessage()); - } - PolicyEngine.manager.setEnvironmentProperty("aai.username", "AAI"); - PolicyEngine.manager.setEnvironmentProperty("aai.password", "AAI"); - PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666"); - } - - @AfterClass - public static void tearDownSimulator() { - HttpServletServer.factory.destroy(); - } - - @Test - public void testAAIVnfInfo() { - final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml"); - onset.setClosedLoopControlName(pair.a.getControlLoop().getControlLoopName()); - try { - AAIGETVnfResponse response = getQueryByVnfID2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/network/generic-vnfs/generic-vnf/", - PolicyEngine.manager.getEnvironmentProperty("aai.username"), - PolicyEngine.manager.getEnvironmentProperty("aai.password"), - UUID.randomUUID(), "5e49ca06-2972-4532-9ed4-6d071588d792"); - assertNotNull(response); - logger.info("testAAIVnfInfo test result is " + (response == null ? "null" : "not null")); - } catch (Exception e) { - logger.error("testAAIVnfInfo Exception: ", e); - fail(e.getMessage()); - } - } - - @Test - public void testAAIVnfInfo2() { - final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml"); - onset.setClosedLoopControlName(pair.a.getControlLoop().getControlLoopName()); - try { - AAIGETVnfResponse 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); - logger.info("testAAIVnfInfo2 test result is " + (response == null ? "null" : "not null")); - } catch (Exception e) { - logger.error("testAAIVnfInfo2 Exception: ", e); - fail(e.getMessage()); - } - } - - @Test - public void testAAIVserver() { - final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml"); - onset.setClosedLoopControlName(pair.a.getControlLoop().getControlLoopName()); - try { - AAIGETVserverResponse response = getQueryByVserverName2(PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/nodes/vservers?vserver-name=", - PolicyEngine.manager.getEnvironmentProperty("aai.username"), - PolicyEngine.manager.getEnvironmentProperty("aai.password"), - UUID.randomUUID(), "USMSO1SX7NJ0103UJZZ01-vjunos0"); - assertNotNull(response); - logger.info("testAAIVserver test result is " + (response == null ? "null" : "not null")); - } catch (Exception e) { - logger.error("testAAIVserver Exception: ", e); - fail(e.getMessage()); - } - } - - @Test - public void testIsClosedLoopDisabled() { - // - // Load up the policy - // - 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/", - PolicyEngine.manager.getEnvironmentProperty("aai.username"), - PolicyEngine.manager.getEnvironmentProperty("aai.password"), - UUID.randomUUID(), "5e49ca06-2972-4532-9ed4-6d071588d792"); - assertNotNull(response); - - // 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); - // 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); - // 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 { - 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()); - - - 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()); - } - - @Test - public void subsequentOnsetTest() { - 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()); - 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()); - } - - // 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"); - response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb"); - response.setOrchestrationStatus("Created"); - response.setInMaint("false"); - 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); - - 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"); - response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb"); - response.setOrchestrationStatus("Created"); - response.setInMaint("false"); - 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); - - 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"); - response.setVserverSelflink("https://aai-ext1.test.att.com:8443/aai/v7/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/tenants/tenant/USMSO1SX7NJ0103UJZZ01%3A%3AuCPE-VMS/vservers/vserver/d0668d4f-c25e-4a1b-87c4-83845c01efd8"); - 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); - - 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 + private static final Logger logger = LoggerFactory.getLogger(ControlLoopEventManagerTest.class); + + private static VirtualControlLoopEvent onset; + + { + onset = new VirtualControlLoopEvent(); + onset.setClosedLoopControlName("ControlLoop-vUSP"); + onset.setRequestID(UUID.randomUUID()); + onset.setTarget("VM_NAME"); + onset.setClosedLoopAlarmStart(Instant.now()); + onset.setAAI(new HashMap<String, String>()); + onset.getAAI().put("cloud-region.identity-url", "foo"); + onset.getAAI().put("vserver.selflink", "bar"); + onset.getAAI().put("generic-vnf.vnf-id", "83f674e8-7555-44d7-9a39-bdc3770b0491"); + onset.setClosedLoopEventStatus(ControlLoopEventStatus.ONSET); + } + + /** + * Set up test class. + */ + @BeforeClass + public static void setUpSimulator() { + try { + org.onap.policy.simulators.Util.buildAaiSim(); + } catch (Exception e) { + fail(e.getMessage()); + } + PolicyEngine.manager.setEnvironmentProperty("aai.username", "AAI"); + PolicyEngine.manager.setEnvironmentProperty("aai.password", "AAI"); + PolicyEngine.manager.setEnvironmentProperty("aai.url", "http://localhost:6666"); + } + + @AfterClass + public static void tearDownSimulator() { + HttpServletServer.factory.destroy(); + } + + @Test + public void testAaiVnfInfo() { + final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml"); + onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName()); + try { + AAIGETVnfResponse response = getQueryByVnfId2( + PolicyEngine.manager.getEnvironmentProperty("aai.url") + + "/aai/v11/network/generic-vnfs/generic-vnf/", + PolicyEngine.manager.getEnvironmentProperty("aai.username"), + PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(), + "5e49ca06-2972-4532-9ed4-6d071588d792"); + assertNotNull(response); + logger.info("testAAIVnfInfo test result is " + (response == null ? "null" : "not null")); + } catch (Exception e) { + logger.error("testAAIVnfInfo Exception: ", e); + fail(e.getMessage()); + } + } + + @Test + public void testAaiVnfInfo2() { + final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml"); + onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName()); + try { + AAIGETVnfResponse 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); + logger.info("testAAIVnfInfo2 test result is " + (response == null ? "null" : "not null")); + } catch (Exception e) { + logger.error("testAAIVnfInfo2 Exception: ", e); + fail(e.getMessage()); + } + } + + @Test + public void testAaiVserver() { + final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml"); + onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName()); + try { + AAIGETVserverResponse response = getQueryByVserverName2( + PolicyEngine.manager.getEnvironmentProperty("aai.url") + "/aai/v11/nodes/vservers?vserver-name=", + PolicyEngine.manager.getEnvironmentProperty("aai.username"), + PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(), + "USMSO1SX7NJ0103UJZZ01-vjunos0"); + assertNotNull(response); + logger.info("testAAIVserver test result is " + (response == null ? "null" : "not null")); + } catch (Exception e) { + logger.error("testAAIVserver Exception: ", e); + fail(e.getMessage()); + } + } + + @Test + public void testIsClosedLoopDisabled() { + // + // Load up the policy + // + final Util.Pair<ControlLoopPolicy, String> pair = Util.loadYaml("src/test/resources/test.yaml"); + onset.setClosedLoopControlName(pair.key.getControlLoop().getControlLoopName()); + + try { + logger.info("testIsClosedLoopDisabled --"); + AAIGETVnfResponse response = getQueryByVnfId2( + PolicyEngine.manager.getEnvironmentProperty("aai.url") + + "/aai/v11/network/generic-vnfs/generic-vnf/", + PolicyEngine.manager.getEnvironmentProperty("aai.username"), + PolicyEngine.manager.getEnvironmentProperty("aai.password"), UUID.randomUUID(), + "5e49ca06-2972-4532-9ed4-6d071588d792"); + assertNotNull(response); + + // 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); + // 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); + // 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 { + 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()); + + + 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()); + } + + @Test + public void subsequentOnsetTest() { + 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()); + 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()); + } + + /** + * 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"); + response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb"); + response.setOrchestrationStatus("Created"); + response.setInMaint("false"); + response.setIsClosedLoopDisabled("false"); + response.setResourceVersion("1494001988835"); + response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa"); + + final RelationshipList relationshipList = new RelationshipList(); + final 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; + } + + /** + * Simulate a 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"); + response.setServiceId("a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb"); + response.setOrchestrationStatus("Created"); + response.setInMaint("false"); + response.setIsClosedLoopDisabled("false"); + response.setResourceVersion("1494001988835"); + response.setModelInvariantId("f18be3cd-d446-456e-9109-121d9b62feaa"); + + final RelationshipList relationshipList = new RelationshipList(); + final 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; + } + + /** + * Simulate a 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"); + response.setVserverSelflink( + "https://aai-ext1.test.att.com:8443/aai/v7/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/tenants/tenant/USMSO1SX7NJ0103UJZZ01%3A%3AuCPE-VMS/vservers/vserver/d0668d4f-c25e-4a1b-87c4-83845c01efd8"); + response.setInMaint("false"); + response.setIsClosedLoopDisabled("false"); + response.setResourceVersion("1494001931513"); + + final RelationshipList relationshipList = new RelationshipList(); + final 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")); + final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + + InputStream isBad = new FileInputStream(new File("src/test/resources/notutf8.yaml")); + final 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")); + final 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")); + final 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")); + final String yamlString = IOUtils.toString(is, StandardCharsets.UTF_8); + + InputStream isStd = new FileInputStream(new File("src/test/resources/test.yaml")); + final 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")); + final 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")); + final 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")); + final 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"); + } +} |