diff options
Diffstat (limited to 'runtime-acm/src/test')
4 files changed, 195 insertions, 180 deletions
diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/CommissioningControllerTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/CommissioningControllerTest.java index d1c26e002..d99bf2df6 100644 --- a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/CommissioningControllerTest.java +++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/commissioning/rest/CommissioningControllerTest.java @@ -31,15 +31,11 @@ import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVIC import java.util.HashMap; import java.util.UUID; import javax.ws.rs.client.Entity; -import javax.ws.rs.client.Invocation; import javax.ws.rs.core.Response; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import org.onap.policy.clamp.acm.runtime.instantiation.InstantiationUtils; import org.onap.policy.clamp.acm.runtime.util.rest.CommonRestController; import org.onap.policy.clamp.models.acm.messages.rest.commissioning.CommissioningResponse; @@ -57,12 +53,10 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; @ExtendWith(SpringExtension.class) @SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT) @ActiveProfiles("test") -@Execution(ExecutionMode.SAME_THREAD) class CommissioningControllerTest extends CommonRestController { private static final String COMMISSIONING_ENDPOINT = "compositions"; private static ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate(); - private UUID compositionId; @Autowired private AcDefinitionProvider acDefinitionProvider; @@ -83,11 +77,6 @@ class CommissioningControllerTest extends CommonRestController { super.setHttpPrefix(randomServerPort); } - @AfterEach - public void cleanDatabase() throws Exception { - deleteEntryInDB(); - } - @Test void testSwagger() { super.testSwagger(COMMISSIONING_ENDPOINT); @@ -110,27 +99,29 @@ class CommissioningControllerTest extends CommonRestController { @Test void testCreateBadRequest() { - Invocation.Builder invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT); - Response resp = invocationBuilder.post(Entity.json("NotToscaServiceTempalte")); + var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT); + var resp = invocationBuilder.post(Entity.json("NotToscaServiceTempalte")); assertThat(Response.Status.BAD_REQUEST.getStatusCode()).isEqualTo(resp.getStatus()); - CommissioningResponse commissioningResponse = resp.readEntity(CommissioningResponse.class); + var commissioningResponse = resp.readEntity(CommissioningResponse.class); assertThat(commissioningResponse.getErrorDetails()).isNotNull(); assertThat(commissioningResponse.getAffectedAutomationCompositionDefinitions()).isNull(); } @Test void testCreate() { - Invocation.Builder invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT); - Response resp = invocationBuilder.post(Entity.json(serviceTemplate)); + var serviceTemplateCreate = new ToscaServiceTemplate(serviceTemplate); + serviceTemplateCreate.setName("Create"); + + var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT); + var resp = invocationBuilder.post(Entity.json(serviceTemplateCreate)); assertEquals(Response.Status.CREATED.getStatusCode(), resp.getStatus()); - CommissioningResponse commissioningResponse = resp.readEntity(CommissioningResponse.class); - compositionId = commissioningResponse.getCompositionId(); + var commissioningResponse = resp.readEntity(CommissioningResponse.class); assertNotNull(commissioningResponse); assertNull(commissioningResponse.getErrorDetails()); // Response should return the number of node templates present in the service template assertThat(commissioningResponse.getAffectedAutomationCompositionDefinitions()).hasSize(7); - for (String nodeTemplateName : serviceTemplate.getToscaTopologyTemplate().getNodeTemplates().keySet()) { + for (var nodeTemplateName : serviceTemplateCreate.getToscaTopologyTemplate().getNodeTemplates().keySet()) { assertTrue(commissioningResponse.getAffectedAutomationCompositionDefinitions().stream() .anyMatch(ac -> ac.getName().equals(nodeTemplateName))); } @@ -138,12 +129,6 @@ class CommissioningControllerTest extends CommonRestController { @Test void testUpdate() { - var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT); - var resp = invocationBuilder.post(Entity.json(serviceTemplate)); - assertEquals(Response.Status.CREATED.getStatusCode(), resp.getStatus()); - var commissioningResponse = resp.readEntity(CommissioningResponse.class); - compositionId = commissioningResponse.getCompositionId(); - var toscaDataType = new ToscaDataType(); toscaDataType.setName("org.onap.datatypes.policy.clamp.Configuration"); toscaDataType.setDerivedFrom("tosca.datatypes.Root"); @@ -153,17 +138,18 @@ class CommissioningControllerTest extends CommonRestController { toscaProperty.setType("onap.datatypes.ToscaConceptIdentifier"); toscaDataType.getProperties().put(toscaProperty.getName(), toscaProperty); + var compositionId = createEntryInDB("forUpdate"); var serviceTemplateUpdate = new ToscaServiceTemplate(serviceTemplate); serviceTemplateUpdate.getDataTypes().put(toscaDataType.getName(), toscaDataType); - invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + "/" + compositionId); - resp = invocationBuilder.put(Entity.json(serviceTemplateUpdate)); + var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + "/" + compositionId); + var resp = invocationBuilder.put(Entity.json(serviceTemplateUpdate)); assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus()); - commissioningResponse = resp.readEntity(CommissioningResponse.class); + var commissioningResponse = resp.readEntity(CommissioningResponse.class); assertNotNull(commissioningResponse); assertNull(commissioningResponse.getErrorDetails()); // Response should return the number of node templates present in the service template assertThat(commissioningResponse.getAffectedAutomationCompositionDefinitions()).hasSize(7); - for (String nodeTemplateName : serviceTemplate.getToscaTopologyTemplate().getNodeTemplates().keySet()) { + for (var nodeTemplateName : serviceTemplateUpdate.getToscaTopologyTemplate().getNodeTemplates().keySet()) { assertTrue(commissioningResponse.getAffectedAutomationCompositionDefinitions().stream() .anyMatch(ac -> ac.getName().equals(nodeTemplateName))); } @@ -176,61 +162,52 @@ class CommissioningControllerTest extends CommonRestController { } @Test - void testQuery_NoResultWithThisName() throws Exception { - createEntryInDB(); - - Invocation.Builder invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + "?name=noResultWithThisName"); - Response rawresp = invocationBuilder.buildGet().invoke(); + void testQuery_NoResultWithThisName() { + var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + "?name=noResultWithThisName"); + var rawresp = invocationBuilder.buildGet().invoke(); assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus()); var entityList = rawresp.readEntity(ToscaServiceTemplate.class); assertThat(entityList.getNodeTypes()).isNull(); } @Test - void testQuery() throws Exception { - createEntryInDB(); + void testQuery() { + createEntryInDB("forQuery"); - Invocation.Builder invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT); - Response rawresp = invocationBuilder.buildGet().invoke(); + var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT); + var rawresp = invocationBuilder.buildGet().invoke(); assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus()); var entityList = rawresp.readEntity(ToscaServiceTemplate.class); assertNotNull(entityList); } @Test - void testDeleteBadRequest() throws Exception { - createEntryInDB(); + void testDeleteBadRequest() { + createEntryInDB("DeleteBadRequest"); - Invocation.Builder invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + "/" + UUID.randomUUID()); + var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + "/" + UUID.randomUUID()); // Call delete with no info - Response resp = invocationBuilder.delete(); + var resp = invocationBuilder.delete(); assertEquals(Response.Status.NOT_FOUND.getStatusCode(), resp.getStatus()); } @Test - void testDelete() throws Exception { - createEntryInDB(); + void testDelete() { + var compositionId = createEntryInDB("forDelete"); - Invocation.Builder invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + "/" + compositionId); + var invocationBuilder = super.sendRequest(COMMISSIONING_ENDPOINT + "/" + compositionId); // Call delete with no info - Response resp = invocationBuilder.delete(); + var resp = invocationBuilder.delete(); assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus()); - var templatesInDB = acDefinitionProvider.getAllAcDefinitions(); + var templatesInDB = acDefinitionProvider.findAcDefinition(compositionId); assertThat(templatesInDB).isEmpty(); } - private synchronized void createEntryInDB() throws Exception { - deleteEntryInDB(); - var acmDefinition = acDefinitionProvider.createAutomationCompositionDefinition(serviceTemplate); - compositionId = acmDefinition.getCompositionId(); - } - - // Delete entries from the DB after relevant tests - private synchronized void deleteEntryInDB() throws Exception { - var list = acDefinitionProvider.getAllAcDefinitions(); - if (!list.isEmpty()) { - acDefinitionProvider.deleteAcDefintion(compositionId); - } + private UUID createEntryInDB(String name) { + var serviceTemplateCreate = new ToscaServiceTemplate(serviceTemplate); + serviceTemplateCreate.setName(name); + var acmDefinition = acDefinitionProvider.createAutomationCompositionDefinition(serviceTemplateCreate); + return acmDefinition.getCompositionId(); } } diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProviderTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProviderTest.java index 115adcb50..0657c7e0c 100644 --- a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProviderTest.java +++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/AutomationCompositionInstantiationProviderTest.java @@ -37,15 +37,14 @@ import org.mockito.Mockito; import org.onap.policy.clamp.acm.runtime.supervision.SupervisionHandler; import org.onap.policy.clamp.acm.runtime.util.CommonTestData; import org.onap.policy.clamp.common.acm.exception.AutomationCompositionException; -import org.onap.policy.clamp.common.acm.exception.AutomationCompositionRuntimeException; import org.onap.policy.clamp.models.acm.concepts.AutomationComposition; import org.onap.policy.clamp.models.acm.concepts.AutomationCompositionState; import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationCommand; +import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationUpdate; import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider; import org.onap.policy.clamp.models.acm.persistence.provider.AutomationCompositionProvider; import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider; import org.onap.policy.clamp.models.acm.persistence.provider.ProviderUtils; -import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate; @@ -62,7 +61,6 @@ class AutomationCompositionInstantiationProviderTest { "src/test/resources/rest/acm/AutomationCompositionElementsNotFound.json"; private static final String AC_INSTANTIATION_AC_DEFINITION_NOT_FOUND_JSON = "src/test/resources/rest/acm/AutomationCompositionNotFound.json"; - private static final String AUTOMATION_COMPOSITION_NOT_FOUND = "Automation composition not found"; private static final String DELETE_BAD_REQUEST = "Automation composition state is still %s"; private static final String ORDERED_STATE_INVALID = "ordered state invalid or not specified on command"; private static final String AC_ELEMENT_NAME_NOT_FOUND = @@ -74,6 +72,7 @@ class AutomationCompositionInstantiationProviderTest { private static final String AC_DEFINITION_NOT_FOUND = "\"AutomationComposition\" INVALID, item has status INVALID\n" + " item \"ServiceTemplate\" value \"\" INVALID," + " Commissioned automation composition definition not found\n"; + private static final String DO_NOT_MATCH = " do not match with "; private static ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate(); @@ -104,7 +103,8 @@ class AutomationCompositionInstantiationProviderTest { when(acProvider.createAutomationComposition(automationCompositionCreate)) .thenReturn(automationCompositionCreate); - var instantiationResponse = instantiationProvider.createAutomationComposition(automationCompositionCreate); + var instantiationResponse = instantiationProvider.createAutomationComposition( + automationCompositionCreate.getCompositionId(), automationCompositionCreate); InstantiationUtils.assertInstantiationResponse(instantiationResponse, automationCompositionCreate); verify(acProvider).createAutomationComposition(automationCompositionCreate); @@ -117,33 +117,41 @@ class AutomationCompositionInstantiationProviderTest { assertThat(automationCompositionCreate) .isEqualTo(automationCompositionsGet.getAutomationCompositionList().get(0)); + var instanceUpdate = new InstantiationUpdate(); var automationCompositionUpdate = InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_UPDATE_JSON, "Crud"); automationCompositionUpdate.setCompositionId(compositionId); + instanceUpdate.setElements(automationCompositionUpdate.getElements()); + when(acProvider.getAutomationComposition(automationCompositionUpdate.getInstanceId())) + .thenReturn(automationCompositionUpdate); + when(acProvider.updateAutomationComposition(automationCompositionUpdate)) + .thenReturn(automationCompositionUpdate); - instantiationResponse = instantiationProvider.updateAutomationComposition(automationCompositionUpdate); + instantiationResponse = + instantiationProvider.updateAutomationComposition(automationCompositionUpdate.getCompositionId(), + automationCompositionUpdate.getInstanceId(), instanceUpdate); InstantiationUtils.assertInstantiationResponse(instantiationResponse, automationCompositionUpdate); verify(acProvider).updateAutomationComposition(automationCompositionUpdate); - when(acProvider.findAutomationComposition(automationCompositionUpdate.getKey().asIdentifier())) - .thenReturn(Optional.of(automationCompositionUpdate)); - when(acProvider.deleteAutomationComposition(automationCompositionUpdate.getInstanceId())) - .thenReturn(automationCompositionUpdate); - + var instanceUpdateCommand = new InstantiationUpdate(); var instantiationCommand = - InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Crud"); - instantiationResponse = instantiationProvider.issueAutomationCompositionCommand(instantiationCommand); - InstantiationUtils.assertInstantiationResponse(instantiationResponse, instantiationCommand); + InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON); + instanceUpdateCommand.setInstantiationCommand(instantiationCommand); + instantiationResponse = + instantiationProvider.updateAutomationComposition(automationCompositionUpdate.getCompositionId(), + automationCompositionUpdate.getInstanceId(), instanceUpdateCommand); + InstantiationUtils.assertInstantiationResponse(instantiationResponse, automationCompositionUpdate); verify(supervisionHandler).triggerAutomationCompositionSupervision(automationCompositionUpdate); // in order to delete a automationComposition the state must be UNINITIALISED automationCompositionCreate.setState(AutomationCompositionState.UNINITIALISED); - instantiationProvider.updateAutomationComposition(automationCompositionCreate); - instantiationProvider.deleteAutomationComposition(automationCompositionCreate.getName(), - automationCompositionCreate.getVersion()); + when(acProvider.deleteAutomationComposition(automationCompositionUpdate.getInstanceId())) + .thenReturn(automationCompositionUpdate); + instantiationProvider.deleteAutomationComposition(automationCompositionCreate.getCompositionId(), + automationCompositionCreate.getInstanceId()); verify(acProvider).deleteAutomationComposition(automationCompositionCreate.getInstanceId()); } @@ -161,8 +169,14 @@ class AutomationCompositionInstantiationProviderTest { var instantiationProvider = new AutomationCompositionInstantiationProvider(acProvider, supervisionHandler, participantProvider, acDefinitionProvider); - assertThatThrownBy(() -> instantiationProvider.deleteAutomationComposition(automationComposition.getName(), - automationComposition.getVersion())).hasMessageMatching(AUTOMATION_COMPOSITION_NOT_FOUND); + when(acProvider.getAutomationComposition(automationComposition.getInstanceId())) + .thenReturn(automationComposition); + + var wrongCompositionId = UUID.randomUUID(); + var instanceId = automationComposition.getInstanceId(); + var compositionId = automationComposition.getCompositionId(); + assertThatThrownBy(() -> instantiationProvider.deleteAutomationComposition(wrongCompositionId, instanceId)) + .hasMessageMatching(compositionId + DO_NOT_MATCH + wrongCompositionId); for (var state : AutomationCompositionState.values()) { if (!AutomationCompositionState.UNINITIALISED.equals(state)) { @@ -170,16 +184,9 @@ class AutomationCompositionInstantiationProviderTest { } } automationComposition.setState(AutomationCompositionState.UNINITIALISED); - automationComposition.setInstanceId(UUID.randomUUID()); - - when(acProvider.findAutomationComposition( - new ToscaConceptIdentifier(automationComposition.getName(), automationComposition.getVersion()))) - .thenReturn(Optional.of(automationComposition)); - when(acProvider.deleteAutomationComposition(automationComposition.getInstanceId())) - .thenReturn(automationComposition); + when(acProvider.deleteAutomationComposition(instanceId)).thenReturn(automationComposition); - instantiationProvider.deleteAutomationComposition(automationComposition.getName(), - automationComposition.getVersion()); + instantiationProvider.deleteAutomationComposition(compositionId, instanceId); } private void assertThatDeleteThrownBy(AutomationComposition automationComposition, @@ -193,11 +200,13 @@ class AutomationCompositionInstantiationProviderTest { var instantiationProvider = new AutomationCompositionInstantiationProvider(acProvider, supervisionHandler, participantProvider, acDefinitionProvider); - var key = new ToscaConceptIdentifier(automationComposition.getName(), automationComposition.getVersion()); - when(acProvider.findAutomationComposition(key)).thenReturn(Optional.of(automationComposition)); + when(acProvider.getAutomationComposition(automationComposition.getInstanceId())) + .thenReturn(automationComposition); - assertThatThrownBy(() -> instantiationProvider.deleteAutomationComposition(automationComposition.getName(), - automationComposition.getVersion())).hasMessageMatching(String.format(DELETE_BAD_REQUEST, state)); + var compositionId = automationComposition.getCompositionId(); + var instanceId = automationComposition.getInstanceId(); + assertThatThrownBy(() -> instantiationProvider.deleteAutomationComposition(compositionId, instanceId)) + .hasMessageMatching(String.format(DELETE_BAD_REQUEST, state)); } @Test @@ -221,14 +230,16 @@ class AutomationCompositionInstantiationProviderTest { var instantiationProvider = new AutomationCompositionInstantiationProvider(acProvider, supervisionHandler, participantProvider, acDefinitionProvider); - var instantiationResponse = instantiationProvider.createAutomationComposition(automationCompositionCreate); + var instantiationResponse = instantiationProvider.createAutomationComposition( + automationCompositionCreate.getCompositionId(), automationCompositionCreate); InstantiationUtils.assertInstantiationResponse(instantiationResponse, automationCompositionCreate); when(acProvider.findAutomationComposition(automationCompositionCreate.getKey().asIdentifier())) .thenReturn(Optional.of(automationCompositionCreate)); - assertThatThrownBy(() -> instantiationProvider.createAutomationComposition(automationCompositionCreate)) - .hasMessageMatching(automationCompositionCreate.getKey().asIdentifier() + " already defined"); + assertThatThrownBy( + () -> instantiationProvider.createAutomationComposition(compositionId, automationCompositionCreate)) + .hasMessageMatching(automationCompositionCreate.getKey().asIdentifier() + " already defined"); } @Test @@ -246,41 +257,70 @@ class AutomationCompositionInstantiationProviderTest { var provider = new AutomationCompositionInstantiationProvider(acProvider, supervisionHandler, participantProvider, acDefinitionProvider); - assertThatThrownBy(() -> provider.createAutomationComposition(automationComposition)) + assertThatThrownBy(() -> provider.createAutomationComposition(compositionId, automationComposition)) .hasMessageMatching(AC_ELEMENT_NAME_NOT_FOUND); - assertThatThrownBy(() -> provider.updateAutomationComposition(automationComposition)) + when(acProvider.getAutomationComposition(automationComposition.getInstanceId())) + .thenReturn(automationComposition); + var instanceUpdate = new InstantiationUpdate(); + instanceUpdate.setElements(automationComposition.getElements()); + + var instanceId = automationComposition.getInstanceId(); + assertThatThrownBy(() -> provider.updateAutomationComposition(compositionId, instanceId, instanceUpdate)) .hasMessageMatching(AC_ELEMENT_NAME_NOT_FOUND); } @Test - void testCreateAutomationCompositions_CommissionedAcNotFound() throws Exception { + void testCreateAutomationCompositions_CommissionedAcNotFound() { var automationComposition = InstantiationUtils .getAutomationCompositionFromResource(AC_INSTANTIATION_AC_DEFINITION_NOT_FOUND_JSON, "AcNotFound"); var participantProvider = Mockito.mock(ParticipantProvider.class); var acProvider = mock(AutomationCompositionProvider.class); + when(acProvider.getAutomationComposition(automationComposition.getInstanceId())) + .thenReturn(automationComposition); var supervisionHandler = mock(SupervisionHandler.class); var acDefinitionProvider = mock(AcDefinitionProvider.class); var provider = new AutomationCompositionInstantiationProvider(acProvider, supervisionHandler, participantProvider, acDefinitionProvider); - assertThatThrownBy(() -> provider.createAutomationComposition(automationComposition)) + var compositionId = automationComposition.getCompositionId(); + assertThatThrownBy(() -> provider.createAutomationComposition(compositionId, automationComposition)) .hasMessageMatching(AC_DEFINITION_NOT_FOUND); - assertThatThrownBy(() -> provider.updateAutomationComposition(automationComposition)) + var instanceUpdate = new InstantiationUpdate(); + instanceUpdate.setElements(automationComposition.getElements()); + var instanceId = automationComposition.getInstanceId(); + assertThatThrownBy(() -> provider.updateAutomationComposition(compositionId, instanceId, instanceUpdate)) .hasMessageMatching(AC_DEFINITION_NOT_FOUND); + + var wrongCompositionId = UUID.randomUUID(); + assertThatThrownBy(() -> provider.createAutomationComposition(wrongCompositionId, automationComposition)) + .hasMessageMatching(compositionId + DO_NOT_MATCH + wrongCompositionId); + + assertThatThrownBy(() -> provider.updateAutomationComposition(wrongCompositionId, instanceId, instanceUpdate)) + .hasMessageMatching(compositionId + DO_NOT_MATCH + wrongCompositionId); } @Test - void testIssueAutomationCompositionCommand_OrderedStateInvalid() throws AutomationCompositionRuntimeException { + void testIssueAutomationCompositionCommand_OrderedStateInvalid() { var participantProvider = Mockito.mock(ParticipantProvider.class); var acProvider = mock(AutomationCompositionProvider.class); var supervisionHandler = mock(SupervisionHandler.class); var acDefinitionProvider = mock(AcDefinitionProvider.class); var instantiationProvider = new AutomationCompositionInstantiationProvider(acProvider, supervisionHandler, participantProvider, acDefinitionProvider); - assertThatThrownBy(() -> instantiationProvider.issueAutomationCompositionCommand(new InstantiationCommand())) - .hasMessageMatching(ORDERED_STATE_INVALID); + var instanceUpdate = new InstantiationUpdate(); + instanceUpdate.setInstantiationCommand(new InstantiationCommand()); + var automationComposition = InstantiationUtils + .getAutomationCompositionFromResource(AC_INSTANTIATION_AC_DEFINITION_NOT_FOUND_JSON, "AcNotFound"); + when(acProvider.getAutomationComposition(automationComposition.getInstanceId())) + .thenReturn(automationComposition); + + var compositionId = automationComposition.getCompositionId(); + var instanceId = automationComposition.getInstanceId(); + assertThatThrownBy( + () -> instantiationProvider.updateAutomationComposition(compositionId, instanceId, instanceUpdate)) + .hasMessageMatching(ORDERED_STATE_INVALID); } } diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/InstantiationUtils.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/InstantiationUtils.java index 8b0ccd74e..a5ffacc6a 100644 --- a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/InstantiationUtils.java +++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/InstantiationUtils.java @@ -33,6 +33,7 @@ import org.onap.policy.common.utils.coder.CoderException; import org.onap.policy.common.utils.coder.StandardCoder; import org.onap.policy.common.utils.coder.StandardYamlCoder; import org.onap.policy.common.utils.resources.ResourceUtils; +import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier; import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate; /** @@ -67,17 +68,11 @@ public class InstantiationUtils { * Gets InstantiationCommand from Resource. * * @param path path of the resource - * @param suffix suffix to add to all names in AutomationCompositions * @return the InstantiationCommand */ - public static InstantiationCommand getInstantiationCommandFromResource(final String path, final String suffix) { + public static InstantiationCommand getInstantiationCommandFromResource(final String path) { try { - var instantiationCommand = CODER.decode(new File(path), InstantiationCommand.class); - - // add suffix to the name - var id = instantiationCommand.getAutomationCompositionIdentifier(); - id.setName(id.getName() + suffix); - return instantiationCommand; + return CODER.decode(new File(path), InstantiationCommand.class); } catch (CoderException e) { fail("Cannot read or decode " + path); return null; @@ -88,11 +83,12 @@ public class InstantiationUtils { * Assert that Instantiation Response contains proper AutomationCompositions. * * @param response InstantiationResponse - * @param command InstantiationCommand + * @param affectedAutomationComposition ToscaConceptIdentifier */ - public static void assertInstantiationResponse(InstantiationResponse response, InstantiationCommand command) { + public static void assertInstantiationResponse(InstantiationResponse response, + ToscaConceptIdentifier affectedAutomationComposition) { assertThat(response).isNotNull(); - assertEquals(response.getAffectedAutomationComposition(), command.getAutomationCompositionIdentifier()); + assertEquals(response.getAffectedAutomationComposition(), affectedAutomationComposition); } /** diff --git a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java index 9c364b2db..b93d214cb 100644 --- a/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java +++ b/runtime-acm/src/test/java/org/onap/policy/clamp/acm/runtime/instantiation/rest/InstantiationControllerTest.java @@ -30,7 +30,6 @@ import static org.onap.policy.clamp.acm.runtime.util.CommonTestData.TOSCA_SERVIC import java.util.UUID; import javax.ws.rs.client.Entity; import javax.ws.rs.core.Response; -import org.junit.Ignore; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; @@ -44,6 +43,7 @@ import org.onap.policy.clamp.acm.runtime.util.rest.CommonRestController; import org.onap.policy.clamp.models.acm.concepts.AutomationCompositions; import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationCommand; import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationResponse; +import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationUpdate; import org.onap.policy.clamp.models.acm.persistence.provider.AcDefinitionProvider; import org.onap.policy.clamp.models.acm.persistence.provider.ParticipantProvider; import org.onap.policy.clamp.models.acm.persistence.repository.AutomationCompositionRepository; @@ -65,19 +65,17 @@ import org.springframework.test.context.junit.jupiter.SpringExtension; @ActiveProfiles("test") class InstantiationControllerTest extends CommonRestController { - private static final String AC_INSTANTIATION_CREATE_JSON = - "src/test/resources/rest/acm/AutomationComposition.json"; + private static final String AC_INSTANTIATION_CREATE_JSON = "src/test/resources/rest/acm/AutomationComposition.json"; private static final String AC_INSTANTIATION_UPDATE_JSON = "src/test/resources/rest/acm/AutomationCompositionUpdate.json"; private static final String AC_INSTANTIATION_CHANGE_STATE_JSON = "src/test/resources/rest/acm/PassiveCommand.json"; - private static final String INSTANTIATION_ENDPOINT = "instantiation"; - private static final String INSTANTIATION_COMMAND_ENDPOINT = "instantiation/command"; + private static final String INSTANTIATION_ENDPOINT = "compositions/%s/instances"; private static ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate(); - private UUID compositionId; + private UUID compositionId = UUID.randomUUID(); @Autowired private AutomationCompositionRepository automationCompositionRepository; @@ -100,7 +98,7 @@ class InstantiationControllerTest extends CommonRestController { } @BeforeEach - public void populateDb() throws Exception { + public void populateDb() { createEntryInDB(); } @@ -110,15 +108,21 @@ class InstantiationControllerTest extends CommonRestController { } @AfterEach - public void cleanDatabase() throws Exception { + public void cleanDatabase() { deleteEntryInDB(); } - @Ignore + private String getInstanceEndPoint() { + return String.format(INSTANTIATION_ENDPOINT, compositionId.toString()); + } + + private String getInstanceEndPoint(UUID instanceId) { + return String.format(INSTANTIATION_ENDPOINT, compositionId.toString()) + "/" + instanceId; + } + @Test void testSwagger() { - // TODO: Reimplement using springdoc when Impelmentation endpoint is refactored - super.testSwagger(INSTANTIATION_ENDPOINT); + super.testSwagger(String.format(INSTANTIATION_ENDPOINT, "{compositionId}")); } @Test @@ -126,33 +130,25 @@ class InstantiationControllerTest extends CommonRestController { var automationComposition = InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Unauthorized"); - assertUnauthorizedPost(INSTANTIATION_ENDPOINT, Entity.json(automationComposition)); + assertUnauthorizedPost(getInstanceEndPoint(), Entity.json(automationComposition)); } @Test void testQuery_Unauthorized() { - assertUnauthorizedGet(INSTANTIATION_ENDPOINT); + assertUnauthorizedGet(getInstanceEndPoint()); } @Test - void testUpdate_Unauthorized() throws Exception { + void testUpdate_Unauthorized() { var automationComposition = InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_UPDATE_JSON, "Unauthorized"); - assertUnauthorizedPut(INSTANTIATION_ENDPOINT, Entity.json(automationComposition)); + assertUnauthorizedPut(getInstanceEndPoint(), Entity.json(automationComposition)); } @Test void testDelete_Unauthorized() { - assertUnauthorizedDelete(INSTANTIATION_ENDPOINT); - } - - @Test - void testCommand_Unauthorized() { - var instantiationCommand = InstantiationUtils - .getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Unauthorized"); - - assertUnauthorizedPut(INSTANTIATION_COMMAND_ENDPOINT, Entity.json(instantiationCommand)); + assertUnauthorizedDelete(getInstanceEndPoint()); } @Test @@ -161,19 +157,18 @@ class InstantiationControllerTest extends CommonRestController { InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Create"); automationCompositionFromRsc.setCompositionId(compositionId); - var invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT); + var invocationBuilder = super.sendRequest(getInstanceEndPoint()); var resp = invocationBuilder.post(Entity.json(automationCompositionFromRsc)); - assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus()); + assertEquals(Response.Status.CREATED.getStatusCode(), resp.getStatus()); var instResponse = resp.readEntity(InstantiationResponse.class); InstantiationUtils.assertInstantiationResponse(instResponse, automationCompositionFromRsc); automationCompositionFromRsc.setInstanceId(instResponse.getInstanceId()); - var automationCompositionsFromDb = instantiationProvider.getAutomationCompositions( - automationCompositionFromRsc.getKey().getName(), automationCompositionFromRsc.getKey().getVersion()); + var automationCompositionFromDb = + instantiationProvider.getAutomationComposition(compositionId, instResponse.getInstanceId()); - assertNotNull(automationCompositionsFromDb); - assertThat(automationCompositionsFromDb.getAutomationCompositionList()).hasSize(1); - assertEquals(automationCompositionFromRsc, automationCompositionsFromDb.getAutomationCompositionList().get(0)); + assertNotNull(automationCompositionFromDb); + assertEquals(automationCompositionFromRsc, automationCompositionFromDb); } @@ -183,9 +178,9 @@ class InstantiationControllerTest extends CommonRestController { .getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "CreateBadRequest"); automationCompositionFromRsc.setCompositionId(compositionId); - var invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT); + var invocationBuilder = super.sendRequest(getInstanceEndPoint()); var resp = invocationBuilder.post(Entity.json(automationCompositionFromRsc)); - assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus()); + assertEquals(Response.Status.CREATED.getStatusCode(), resp.getStatus()); // testing Bad Request: AC already defined resp = invocationBuilder.post(Entity.json(automationCompositionFromRsc)); @@ -197,7 +192,7 @@ class InstantiationControllerTest extends CommonRestController { @Test void testQuery_NoResultWithThisName() { - var invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT + "?name=noResultWithThisName"); + var invocationBuilder = super.sendRequest(getInstanceEndPoint() + "?name=noResultWithThisName"); var rawresp = invocationBuilder.buildGet().invoke(); assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus()); var resp = rawresp.readEntity(AutomationCompositions.class); @@ -210,10 +205,10 @@ class InstantiationControllerTest extends CommonRestController { InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Query"); automationComposition.setCompositionId(compositionId); - instantiationProvider.createAutomationComposition(automationComposition); + instantiationProvider.createAutomationComposition(compositionId, automationComposition); var invocationBuilder = - super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + automationComposition.getKey().getName()); + super.sendRequest(getInstanceEndPoint() + "?name=" + automationComposition.getKey().getName()); var rawresp = invocationBuilder.buildGet().invoke(); assertEquals(Response.Status.OK.getStatusCode(), rawresp.getStatus()); var automationCompositionsQuery = rawresp.readEntity(AutomationCompositions.class); @@ -228,13 +223,15 @@ class InstantiationControllerTest extends CommonRestController { InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Update"); automationCompositionCreate.setCompositionId(compositionId); - var response = instantiationProvider.createAutomationComposition(automationCompositionCreate); + var response = instantiationProvider.createAutomationComposition(compositionId, automationCompositionCreate); - var invocationBuilder = super.sendRequest(INSTANTIATION_ENDPOINT); var automationComposition = InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_UPDATE_JSON, "Update"); automationComposition.setCompositionId(compositionId); automationComposition.setInstanceId(response.getInstanceId()); + var instantiationUpdate = new InstantiationUpdate(); + instantiationUpdate.setElements(automationComposition.getElements()); + var invocationBuilder = super.sendRequest(getInstanceEndPoint(response.getInstanceId())); var resp = invocationBuilder.put(Entity.json(automationComposition)); assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus()); @@ -255,14 +252,13 @@ class InstantiationControllerTest extends CommonRestController { InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Delete"); automationCompositionFromRsc.setCompositionId(compositionId); - instantiationProvider.createAutomationComposition(automationCompositionFromRsc); + var instResponse = + instantiationProvider.createAutomationComposition(compositionId, automationCompositionFromRsc); - var invocationBuilder = - super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + automationCompositionFromRsc.getKey().getName() - + "&version=" + automationCompositionFromRsc.getKey().getVersion()); + var invocationBuilder = super.sendRequest(getInstanceEndPoint(instResponse.getInstanceId())); var resp = invocationBuilder.delete(); assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus()); - var instResponse = resp.readEntity(InstantiationResponse.class); + instResponse = resp.readEntity(InstantiationResponse.class); InstantiationUtils.assertInstantiationResponse(instResponse, automationCompositionFromRsc); var automationCompositionsFromDb = instantiationProvider.getAutomationCompositions( @@ -271,33 +267,38 @@ class InstantiationControllerTest extends CommonRestController { } @Test - void testDeleteBadRequest() { + void testDeleteNotFound() { var automationCompositionFromRsc = - InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "DelBadRequest"); + InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "DelNotFound"); automationCompositionFromRsc.setCompositionId(compositionId); - instantiationProvider.createAutomationComposition(automationCompositionFromRsc); + instantiationProvider.createAutomationComposition(compositionId, automationCompositionFromRsc); - var invocationBuilder = - super.sendRequest(INSTANTIATION_ENDPOINT + "?name=" + automationCompositionFromRsc.getKey().getName()); + var invocationBuilder = super.sendRequest(getInstanceEndPoint(UUID.randomUUID())); var resp = invocationBuilder.delete(); - assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus()); + assertEquals(Response.Status.NOT_FOUND.getStatusCode(), resp.getStatus()); } @Test void testCommand_NotFound1() { - var invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT); - var resp = invocationBuilder.put(Entity.json(new InstantiationCommand())); - assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus()); + var invocationBuilder = super.sendRequest(getInstanceEndPoint(UUID.randomUUID())); + var resp = invocationBuilder.put(Entity.json(new InstantiationUpdate())); + assertEquals(Response.Status.NOT_FOUND.getStatusCode(), resp.getStatus()); } @Test void testCommand_NotFound2() { - var command = - InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Command"); - command.setOrderedState(null); + var acFromRsc = + InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "DelNotFound"); + acFromRsc.setCompositionId(compositionId); + + var instResponse = instantiationProvider.createAutomationComposition(compositionId, acFromRsc); + + var command = new InstantiationUpdate(); + command.setInstantiationCommand(new InstantiationCommand()); + command.getInstantiationCommand().setOrderedState(null); - var invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT); + var invocationBuilder = super.sendRequest(getInstanceEndPoint(instResponse.getInstanceId())); var resp = invocationBuilder.put(Entity.json(command)); assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), resp.getStatus()); } @@ -307,24 +308,25 @@ class InstantiationControllerTest extends CommonRestController { var automationComposition = InstantiationUtils.getAutomationCompositionFromResource(AC_INSTANTIATION_CREATE_JSON, "Command"); automationComposition.setCompositionId(compositionId); - instantiationProvider.createAutomationComposition(automationComposition); + var instResponse = instantiationProvider.createAutomationComposition(compositionId, automationComposition); var participants = CommonTestData.createParticipants(); for (var participant : participants) { participantProvider.saveParticipant(participant); } - var command = - InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON, "Command"); + var instantiationUpdate = new InstantiationUpdate(); + var command = InstantiationUtils.getInstantiationCommandFromResource(AC_INSTANTIATION_CHANGE_STATE_JSON); + instantiationUpdate.setInstantiationCommand(command); - var invocationBuilder = super.sendRequest(INSTANTIATION_COMMAND_ENDPOINT); - var resp = invocationBuilder.put(Entity.json(command)); - assertEquals(Response.Status.ACCEPTED.getStatusCode(), resp.getStatus()); - InstantiationResponse instResponse = resp.readEntity(InstantiationResponse.class); - InstantiationUtils.assertInstantiationResponse(instResponse, command); + var invocationBuilder = super.sendRequest(getInstanceEndPoint(instResponse.getInstanceId())); + var resp = invocationBuilder.put(Entity.json(instantiationUpdate)); + assertEquals(Response.Status.OK.getStatusCode(), resp.getStatus()); + instResponse = resp.readEntity(InstantiationResponse.class); + InstantiationUtils.assertInstantiationResponse(instResponse, automationComposition); // check passive state on DB - var toscaConceptIdentifier = command.getAutomationCompositionIdentifier(); + var toscaConceptIdentifier = instResponse.getAffectedAutomationComposition(); var automationCompositionsGet = instantiationProvider .getAutomationCompositions(toscaConceptIdentifier.getName(), toscaConceptIdentifier.getVersion()); assertThat(automationCompositionsGet.getAutomationCompositionList()).hasSize(1); @@ -332,15 +334,15 @@ class InstantiationControllerTest extends CommonRestController { automationCompositionsGet.getAutomationCompositionList().get(0).getOrderedState()); } - private synchronized void deleteEntryInDB() throws Exception { + private synchronized void deleteEntryInDB() { automationCompositionRepository.deleteAll(); - var list = acDefinitionProvider.getAllAcDefinitions(); + var list = acDefinitionProvider.findAcDefinition(compositionId); if (!list.isEmpty()) { acDefinitionProvider.deleteAcDefintion(compositionId); } } - private synchronized void createEntryInDB() throws Exception { + private synchronized void createEntryInDB() { deleteEntryInDB(); var acmDefinition = acDefinitionProvider.createAutomationCompositionDefinition(serviceTemplate); compositionId = acmDefinition.getCompositionId(); |