X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=rapp-manager-acm%2Fsrc%2Ftest%2Fjava%2Fcom%2Foransc%2Frappmanager%2Facm%2Fservice%2FAcmDeployerTest.java;h=5f6b509ef624ea7fa05ed9df72bb2c4f684881e8;hb=HEAD;hp=b4dd2957cce6b0fc60527948f038d41108efa214;hpb=b003e76b2113c20cd4d15e545af9a8c0118571ea;p=nonrtric%2Fplt%2Frappmanager.git diff --git a/rapp-manager-acm/src/test/java/com/oransc/rappmanager/acm/service/AcmDeployerTest.java b/rapp-manager-acm/src/test/java/com/oransc/rappmanager/acm/service/AcmDeployerTest.java deleted file mode 100755 index b4dd295..0000000 --- a/rapp-manager-acm/src/test/java/com/oransc/rappmanager/acm/service/AcmDeployerTest.java +++ /dev/null @@ -1,400 +0,0 @@ -/*- - * ============LICENSE_START====================================================================== - * Copyright (C) 2023 Nordix Foundation. All rights reserved. - * =============================================================================================== - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END======================================================================== - */ - -package com.oransc.rappmanager.acm.service; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.springframework.test.web.client.match.MockRestRequestMatchers.method; -import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo; -import static org.springframework.test.web.client.response.MockRestResponseCreators.withStatus; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.oransc.rappmanager.acm.configuration.ACMConfiguration; -import com.oransc.rappmanager.models.cache.RappCacheService; -import com.oransc.rappmanager.models.csar.RappCsarConfigurationHandler; -import com.oransc.rappmanager.models.rapp.Rapp; -import com.oransc.rappmanager.models.rapp.RappEvent; -import com.oransc.rappmanager.models.rapp.RappResourceBuilder; -import com.oransc.rappmanager.models.rapp.RappResources; -import com.oransc.rappmanager.models.rapp.RappState; -import com.oransc.rappmanager.models.rappinstance.RappInstance; -import com.oransc.rappmanager.models.statemachine.RappInstanceStateMachine; -import com.oransc.rappmanager.models.statemachine.RappInstanceStateMachineConfig; -import java.io.IOException; -import java.util.UUID; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.TestInstance; -import org.onap.policy.clamp.models.acm.concepts.AutomationComposition; -import org.onap.policy.clamp.models.acm.concepts.DeployState; -import org.onap.policy.clamp.models.acm.concepts.LockState; -import org.onap.policy.clamp.models.acm.messages.rest.commissioning.CommissioningResponse; -import org.onap.policy.clamp.models.acm.messages.rest.commissioning.PrimeOrder; -import org.onap.policy.clamp.models.acm.messages.rest.instantiation.InstantiationResponse; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.SpyBean; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.test.web.client.ExpectedCount; -import org.springframework.test.web.client.MockRestServiceServer; -import org.springframework.web.client.RestTemplate; - -@SpringBootTest(classes = {BeanTestConfiguration.class, ACMConfiguration.class, AcmDeployer.class, - RappCsarConfigurationHandler.class, RappCacheService.class, RappInstanceStateMachineConfig.class, - RappInstanceStateMachine.class}) -@TestInstance(TestInstance.Lifecycle.PER_CLASS) -@AutoConfigureMockMvc -class AcmDeployerTest { - - MockRestServiceServer mockServer; - @SpyBean - AcmDeployer acmDeployer; - @Autowired - RestTemplate restTemplate; - @Autowired - ACMConfiguration acmConfiguration; - @SpyBean - RappInstanceStateMachine rappInstanceStateMachine; - @Autowired - RappCsarConfigurationHandler rappCsarConfigurationHandler; - - RappResourceBuilder rappResourceBuilder = new RappResourceBuilder(); - private final String validRappFile = "valid-rapp-package.csar"; - String validCsarFileLocation = "src/test/resources/"; - ObjectMapper objectMapper = new ObjectMapper(); - String URI_ACM_COMPOSITIONS, URI_ACM_COMPOSITION, URI_ACM_INSTANCES, URI_ACM_INSTANCE; - - @BeforeAll - void initACMURI() { - URI_ACM_COMPOSITIONS = acmConfiguration.getBaseUrl() + "compositions"; - URI_ACM_COMPOSITION = acmConfiguration.getBaseUrl() + "compositions/%s"; - URI_ACM_INSTANCES = acmConfiguration.getBaseUrl() + "compositions/%s/instances"; - URI_ACM_INSTANCE = acmConfiguration.getBaseUrl() + "compositions/%s/instances/%s"; - } - - @BeforeEach - public void init() { - mockServer = MockRestServiceServer.createServer(restTemplate); - } - - @Test - void testCreateComposition() throws IOException { - RappResources rappResources = rappResourceBuilder.getResources(); - Rapp rapp = Rapp.builder().rappId(UUID.randomUUID()).name("").packageName(validRappFile) - .packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED) - .rappResources(rappResources).build(); - - String compositionPayload = rappCsarConfigurationHandler.getAcmCompositionPayload(rapp); - - CommissioningResponse commissioningResponseExpected = new CommissioningResponse(); - commissioningResponseExpected.setCompositionId(UUID.randomUUID()); - mockServer.expect(ExpectedCount.once(), requestTo(URI_ACM_COMPOSITIONS)).andExpect(method(HttpMethod.POST)) - .andRespond(withStatus(HttpStatus.OK).contentType(MediaType.APPLICATION_JSON) - .body(objectMapper.writeValueAsString(commissioningResponseExpected))); - CommissioningResponse commissioningResponseActual = acmDeployer.createComposition(compositionPayload); - mockServer.verify(); - assertEquals(commissioningResponseActual.getCompositionId(), commissioningResponseExpected.getCompositionId()); - } - - @Test - void testCreateCompositionFailure() { - RappResources rappResources = rappResourceBuilder.getResources(); - Rapp rapp = Rapp.builder().rappId(UUID.randomUUID()).name("").packageName(validRappFile) - .packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED) - .rappResources(rappResources).build(); - String compositionPayload = rappCsarConfigurationHandler.getAcmCompositionPayload(rapp); - mockServer.expect(ExpectedCount.once(), requestTo(URI_ACM_COMPOSITIONS)).andExpect(method(HttpMethod.POST)) - .andRespond(withStatus(HttpStatus.BAD_GATEWAY)); - CommissioningResponse commissioningResponseActual = acmDeployer.createComposition(compositionPayload); - mockServer.verify(); - assertNull(commissioningResponseActual); - } - - @Test - void testCompositionPriming() { - UUID compositionId = UUID.randomUUID(); - mockServer.expect(ExpectedCount.once(), requestTo(String.format(URI_ACM_COMPOSITION, compositionId))) - .andExpect(method(HttpMethod.PUT)).andRespond(withStatus(HttpStatus.ACCEPTED)); - - acmDeployer.primeACMComposition(compositionId, PrimeOrder.PRIME); - mockServer.verify(); - } - - @Test - void testDeployRappInstance() throws Exception { - - UUID compositionId = UUID.randomUUID(); - UUID rappId = UUID.randomUUID(); - UUID instanceId = UUID.randomUUID(); - Rapp rapp = Rapp.builder().name(rappId.toString()).packageName(validRappFile).compositionId(compositionId) - .packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED).build(); - InstantiationResponse instantiationResponse = new InstantiationResponse(); - instantiationResponse.setInstanceId(instanceId); - mockServer.expect(ExpectedCount.once(), requestTo(String.format(URI_ACM_INSTANCES, compositionId))) - .andExpect(method(HttpMethod.POST)).andRespond( - withStatus(HttpStatus.ACCEPTED).contentType(MediaType.APPLICATION_JSON) - .body(objectMapper.writeValueAsString(instantiationResponse))); - mockServer.expect(ExpectedCount.once(), - requestTo(acmConfiguration.getBaseUrl() + "compositions/" + compositionId + "/instances/" + instanceId)) - .andExpect(method(HttpMethod.PUT)).andRespond(withStatus(HttpStatus.ACCEPTED)); - boolean rappDeployStateActual = acmDeployer.deployRappInstance(rapp, rappResourceBuilder.getRappInstance()); - assertTrue(rappDeployStateActual); - mockServer.verify(); - } - - @Test - void testDeployRappInstanceFailure() throws Exception { - UUID compositionId = UUID.randomUUID(); - UUID rappId = UUID.randomUUID(); - UUID instanceId = UUID.randomUUID(); - Rapp rapp = Rapp.builder().name(rappId.toString()).packageName(validRappFile).compositionId(compositionId) - .packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED).build(); - InstantiationResponse instantiationResponse = new InstantiationResponse(); - instantiationResponse.setInstanceId(instanceId); - mockServer.expect(ExpectedCount.once(), requestTo(String.format(URI_ACM_INSTANCES, compositionId))) - .andExpect(method(HttpMethod.POST)).andRespond(withStatus(HttpStatus.BAD_GATEWAY)); - - boolean rappDeployStateActual = acmDeployer.deployRappInstance(rapp, rappResourceBuilder.getRappInstance()); - mockServer.verify(); - assertFalse(rappDeployStateActual); - } - - @Test - void testUndeployRappInstance() throws JsonProcessingException { - UUID compositionId = UUID.randomUUID(); - UUID rappId = UUID.randomUUID(); - UUID instanceId = UUID.randomUUID(); - Rapp rapp = Rapp.builder().rappId(rappId).name("").packageName(validRappFile).compositionId(compositionId) - .state(RappState.PRIMED).build(); - - expectAcmGetInstanceToReturnState(compositionId, instanceId, DeployState.DEPLOYED, LockState.LOCKED, - ExpectedCount.once()); - - mockServer.expect(ExpectedCount.once(), requestTo(String.format(URI_ACM_INSTANCE, compositionId, instanceId))) - .andExpect(method(HttpMethod.PUT)).andRespond(withStatus(HttpStatus.ACCEPTED)); - - expectAcmGetInstanceToReturnState(compositionId, instanceId, DeployState.UNDEPLOYED, LockState.UNLOCKED, - ExpectedCount.once()); - - mockServer.expect(ExpectedCount.once(), requestTo(String.format(URI_ACM_INSTANCE, compositionId, instanceId))) - .andExpect(method(HttpMethod.DELETE)).andRespond(withStatus(HttpStatus.NO_CONTENT)); - - RappInstance rappInstance = rappResourceBuilder.getRappInstance(); - rappInstance.getAcm().setAcmInstanceId(instanceId); - rappInstanceStateMachine.onboardRappInstance(rappInstance.getRappInstanceId()); - boolean rappUndeployStateActual = acmDeployer.undeployRappInstance(rapp, rappInstance); - mockServer.verify(); - assertTrue(rappUndeployStateActual); - } - - @Test - void testUndeployRappInstanceFailure() throws JsonProcessingException { - UUID compositionId = UUID.randomUUID(); - UUID rappId = UUID.randomUUID(); - UUID instanceId = UUID.randomUUID(); - Rapp rapp = Rapp.builder().name(rappId.toString()).packageName(validRappFile).compositionId(compositionId) - .state(RappState.PRIMED).build(); - - expectAcmGetInstanceToReturnState(compositionId, instanceId, DeployState.DEPLOYED, LockState.LOCKED, - ExpectedCount.once()); - - mockServer.expect(ExpectedCount.once(), requestTo(String.format(URI_ACM_INSTANCE, compositionId, instanceId))) - .andExpect(method(HttpMethod.PUT)).andRespond(withStatus(HttpStatus.ACCEPTED)); - - expectAcmGetInstanceToReturnState(compositionId, instanceId, DeployState.UNDEPLOYING, LockState.UNLOCKING, - ExpectedCount.manyTimes()); - - RappInstance rappInstance = rappResourceBuilder.getRappInstance(); - rappInstance.getAcm().setAcmInstanceId(instanceId); - rappInstanceStateMachine.onboardRappInstance(rappInstance.getRappInstanceId()); - boolean rappUndeployStateActual = acmDeployer.undeployRappInstance(rapp, rappInstance); - mockServer.verify(); - assertFalse(rappUndeployStateActual); - } - - @Test - void testSyncRappInstanceStatus() throws JsonProcessingException { - UUID compositionId = UUID.randomUUID(); - UUID instanceId = UUID.randomUUID(); - expectAcmGetInstanceToReturnState(compositionId, instanceId, DeployState.UNDEPLOYING, LockState.UNLOCKING, - ExpectedCount.once()); - RappInstance rappInstance = rappResourceBuilder.getRappInstance(); - rappInstance.getAcm().setAcmInstanceId(instanceId); - rappInstanceStateMachine.onboardRappInstance(rappInstance.getRappInstanceId()); - acmDeployer.syncRappInstanceStatus(compositionId, rappInstance); - mockServer.verify(); - verify(rappInstanceStateMachine, times(1)).sendRappInstanceEvent(rappInstance, RappEvent.UNDEPLOYING); - } - - @Test - void testSyncRappStatusFailure() { - UUID compositionId = UUID.randomUUID(); - UUID instanceId = UUID.randomUUID(); - - mockServer.expect(ExpectedCount.once(), requestTo(String.format(URI_ACM_INSTANCE, compositionId, instanceId))) - .andExpect(method(HttpMethod.GET)).andRespond(withStatus(HttpStatus.BAD_GATEWAY)); - - RappInstance rappInstance = rappResourceBuilder.getRappInstance(); - rappInstance.getAcm().setAcmInstanceId(instanceId); - rappInstanceStateMachine.onboardRappInstance(rappInstance.getRappInstanceId()); - acmDeployer.syncRappInstanceStatus(compositionId, rappInstance); - mockServer.verify(); - verify(rappInstanceStateMachine, never()).sendRappInstanceEvent(any(), any()); - } - - @Test - void testPrimeRapp() throws JsonProcessingException { - UUID compositionId = UUID.randomUUID(); - RappResources rappResources = rappResourceBuilder.getResources(); - Rapp rapp = Rapp.builder().rappId(UUID.randomUUID()).name("").packageName(validRappFile) - .packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED) - .compositionId(compositionId).rappResources(rappResources).build(); - - CommissioningResponse commissioningResponseExpected = new CommissioningResponse(); - commissioningResponseExpected.setCompositionId(compositionId); - mockServer.expect(ExpectedCount.once(), requestTo(URI_ACM_COMPOSITIONS)).andExpect(method(HttpMethod.POST)) - .andRespond(withStatus(HttpStatus.OK).contentType(MediaType.APPLICATION_JSON) - .body(objectMapper.writeValueAsString(commissioningResponseExpected))); - mockServer.expect(ExpectedCount.once(), requestTo(String.format(URI_ACM_COMPOSITION, compositionId))) - .andExpect(method(HttpMethod.PUT)).andRespond(withStatus(HttpStatus.ACCEPTED)); - boolean primeRapp = acmDeployer.primeRapp(rapp); - mockServer.verify(); - assertTrue(primeRapp); - } - - @Test - void testPrimeRappFailure() throws JsonProcessingException { - UUID compositionId = UUID.randomUUID(); - RappResources rappResources = rappResourceBuilder.getResources(); - Rapp rapp = Rapp.builder().rappId(UUID.randomUUID()).name("").packageName(validRappFile) - .packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED) - .compositionId(compositionId).rappResources(rappResources).build(); - - CommissioningResponse commissioningResponseExpected = new CommissioningResponse(); - commissioningResponseExpected.setCompositionId(compositionId); - mockServer.expect(ExpectedCount.once(), requestTo(URI_ACM_COMPOSITIONS)).andExpect(method(HttpMethod.POST)) - .andRespond(withStatus(HttpStatus.OK).contentType(MediaType.APPLICATION_JSON) - .body(objectMapper.writeValueAsString(commissioningResponseExpected))); - mockServer.expect(ExpectedCount.once(), requestTo(String.format(URI_ACM_COMPOSITION, compositionId))) - .andExpect(method(HttpMethod.PUT)).andRespond(withStatus(HttpStatus.INTERNAL_SERVER_ERROR)); - boolean primeRapp = acmDeployer.primeRapp(rapp); - mockServer.verify(); - assertFalse(primeRapp); - assertEquals(RappState.COMMISSIONED, rapp.getState()); - } - - @Test - void testDeprimeRapp() throws JsonProcessingException { - UUID compositionId = UUID.randomUUID(); - RappResources rappResources = rappResourceBuilder.getResources(); - Rapp rapp = Rapp.builder().rappId(UUID.randomUUID()).name("").packageName(validRappFile) - .packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED) - .compositionId(compositionId).rappResources(rappResources).build(); - - CommissioningResponse commissioningResponseExpected = new CommissioningResponse(); - commissioningResponseExpected.setCompositionId(compositionId); - mockServer.expect(ExpectedCount.once(), requestTo(String.format(URI_ACM_COMPOSITION, compositionId))) - .andExpect(method(HttpMethod.PUT)).andRespond(withStatus(HttpStatus.OK)); - mockServer.expect(ExpectedCount.once(), requestTo(String.format(URI_ACM_COMPOSITION, compositionId))) - .andExpect(method(HttpMethod.DELETE)).andRespond( - withStatus(HttpStatus.OK).contentType(MediaType.APPLICATION_JSON) - .body(objectMapper.writeValueAsString(commissioningResponseExpected))); - - boolean deprimeRapp = acmDeployer.deprimeRapp(rapp); - mockServer.verify(); - assertTrue(deprimeRapp); - } - - @Test - void testDeprimeFailureRapp() { - UUID compositionId = UUID.randomUUID(); - RappResources rappResources = rappResourceBuilder.getResources(); - Rapp rapp = Rapp.builder().rappId(UUID.randomUUID()).name("").packageName(validRappFile) - .packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED) - .compositionId(compositionId).rappResources(rappResources).build(); - - mockServer.expect(ExpectedCount.once(), requestTo(String.format(URI_ACM_COMPOSITION, compositionId))) - .andExpect(method(HttpMethod.PUT)).andRespond(withStatus(HttpStatus.OK)); - mockServer.expect(ExpectedCount.once(), requestTo(String.format(URI_ACM_COMPOSITION, compositionId))) - .andExpect(method(HttpMethod.DELETE)).andRespond(withStatus(HttpStatus.INTERNAL_SERVER_ERROR)); - - boolean deprimeRapp = acmDeployer.deprimeRapp(rapp); - mockServer.verify(); - assertFalse(deprimeRapp); - } - - @Test - void testDeprimeExceptionRapp() { - Rapp rapp = Rapp.builder().rappId(UUID.randomUUID()).name("").packageName(validRappFile) - .packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED).build(); - boolean deprimeRapp = acmDeployer.deprimeRapp(rapp); - assertFalse(deprimeRapp); - } - - @Test - void testDeleteComposition() throws JsonProcessingException { - UUID compositionId = UUID.randomUUID(); - CommissioningResponse commissioningResponseExpected = new CommissioningResponse(); - commissioningResponseExpected.setCompositionId(compositionId); - mockServer.expect(ExpectedCount.once(), requestTo(String.format(URI_ACM_COMPOSITION, compositionId))) - .andExpect(method(HttpMethod.DELETE)).andRespond( - withStatus(HttpStatus.OK).contentType(MediaType.APPLICATION_JSON) - .body(objectMapper.writeValueAsString(commissioningResponseExpected))); - CommissioningResponse commissioningResponse = acmDeployer.deleteComposition(compositionId); - mockServer.verify(); - assertEquals(commissioningResponse.getCompositionId(), compositionId); - } - - @Test - void testDeleteCompositionFailure() { - UUID compositionId = UUID.randomUUID(); - CommissioningResponse commissioningResponseExpected = new CommissioningResponse(); - commissioningResponseExpected.setCompositionId(compositionId); - mockServer.expect(ExpectedCount.once(), requestTo(String.format(URI_ACM_COMPOSITION, compositionId))) - .andExpect(method(HttpMethod.DELETE)).andRespond(withStatus(HttpStatus.INTERNAL_SERVER_ERROR)); - CommissioningResponse commissioningResponse = acmDeployer.deleteComposition(compositionId); - mockServer.verify(); - assertNull(commissioningResponse); - } - - void expectAcmGetInstanceToReturnState(UUID compositionId, UUID instanceId, DeployState deployState, - LockState lockState, ExpectedCount expectedCount) throws JsonProcessingException { - AutomationComposition automationCompositionDeployed = new AutomationComposition(); - automationCompositionDeployed.setCompositionId(compositionId); - automationCompositionDeployed.setInstanceId(instanceId); - automationCompositionDeployed.setDeployState(deployState); - automationCompositionDeployed.setLockState(lockState); - - mockServer.expect(expectedCount, requestTo(String.format(URI_ACM_INSTANCE, compositionId, instanceId))) - .andExpect(method(HttpMethod.GET)).andRespond( - withStatus(HttpStatus.OK).contentType(MediaType.APPLICATION_JSON) - .body(objectMapper.writeValueAsString(automationCompositionDeployed))); - } -}