Unit test cases for SVNFM Simulator 23/96323/3
authorAndrewLamb <andrew.a.lamb@est.tech>
Thu, 19 Sep 2019 12:43:32 +0000 (13:43 +0100)
committerAndrewLamb <andrew.a.lamb@est.tech>
Fri, 27 Sep 2019 10:47:07 +0000 (11:47 +0100)
Change-Id: Ibc6e4d47007fb14dbcad97b27d47cdd808251c9d
Issue-ID: SO-1853
Signed-off-by: AndrewLamb <andrew.a.lamb@est.tech>
pom.xml
vnfm-simulator/vnfm-service/src/test/java/org/onap/svnfm/simulator/controllers/TestSvnfmController.java
vnfm-simulator/vnfm-service/src/test/java/org/onap/svnfm/simulator/services/InstantiateOperatorProgressorTest.java
vnfm-simulator/vnfm-service/src/test/java/org/onap/svnfm/simulator/services/SvnfmServiceTest.java
vnfm-simulator/vnfm-service/src/test/java/org/onap/svnfm/simulator/services/TerminateOperationProgressorTest.java [new file with mode: 0644]

diff --git a/pom.xml b/pom.xml
index 8757193..ac9126b 100644 (file)
--- a/pom.xml
+++ b/pom.xml
     <dependency>
       <groupId>org.onap.logging-analytics</groupId>
       <artifactId>logging-slf4j</artifactId>
-      <version>1.5.0-SNAPSHOT</version>
+      <version>1.5.0</version>
     </dependency>
     <dependency>
       <groupId>org.onap.logging-analytics</groupId>
       <artifactId>logging-filter-base</artifactId>
-      <version>1.5.0-SNAPSHOT</version>
+      <version>1.5.0</version>
     </dependency>
     <dependency>
       <groupId>org.onap.logging-analytics</groupId>
       <artifactId>logging-filter-spring</artifactId>
-      <version>1.5.0-SNAPSHOT</version>
+      <version>1.5.0</version>
     </dependency>
     <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
index 9cb0702..0818ea3 100644 (file)
 
 package org.onap.svnfm.simulator.controllers;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.when;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
@@ -35,18 +38,35 @@ import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 import org.mockito.junit.MockitoJUnitRunner;
 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.CreateVnfRequest;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse200;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse200.OperationEnum;
 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.LccnSubscriptionRequest;
 import org.onap.svnfm.simulator.constants.Constant;
 import org.onap.svnfm.simulator.controller.SvnfmController;
 import org.onap.svnfm.simulator.repository.VnfmCacheRepository;
 import org.onap.svnfm.simulator.services.SvnfmService;
 import org.springframework.http.MediaType;
 import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.MvcResult;
+import org.springframework.test.web.servlet.ResultActions;
 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
 
 @RunWith(MockitoJUnitRunner.class)
 public class TestSvnfmController {
 
+    private static final String VNF_INSTANCES_URL = "/vnf_instances/";
+    private static final String VNFD_ID = "vnfdId";
+    private static final String VNF_INSTANCE_NAME = "vnfInstanceName";
+    private static final String VNF_INSTANCE_DESCRIPTION = "vnfInstanceDescription";
+    private static final String VNF_INSTANCE_ID = "vnfInstanceId";
+    private static final String VNF_OPERATION_ID = "vnfOperationId";
+    private static final String VNF_INSTANTIATE_URL = "/instantiate";
+    private static final String VNF_TERMINATE_URL = "/terminate";
+    private static final String VNF_LCM_OP_OCC_ID = "vnfLcmOpOccId";
+    private static final String VNF_OPERATION_STATUS_URL = "/vnf_lcm_op_occs/";
+    private static final String SUBSCRIPTIONS_URL = "/subscriptions";
+
     @InjectMocks
     private SvnfmController svnfmController;
 
@@ -68,18 +88,96 @@ public class TestSvnfmController {
     public void createVnfInstanceTest() throws Exception {
         final CreateVnfRequest createVnfRequest = new CreateVnfRequest();
 
-        createVnfRequest.setVnfdId("123456798");
-        createVnfRequest.setVnfInstanceName("createVnfInstanceTest");
-        createVnfRequest.setVnfInstanceDescription("createVnfInstanceTest");
+        createVnfRequest.setVnfdId(VNFD_ID);
+        createVnfRequest.setVnfInstanceName(VNF_INSTANCE_NAME);
+        createVnfRequest.setVnfInstanceDescription(VNF_INSTANCE_DESCRIPTION);
 
         when(vnfmCacheRepository.createVnf(eq(createVnfRequest), anyString())).thenReturn(new InlineResponse201());
 
         final String body = (new ObjectMapper()).valueToTree(createVnfRequest).toString();
         this.mockMvc
-                .perform(post(Constant.BASE_URL + "/vnf_instances").content(body)
+                .perform(post(Constant.BASE_URL + VNF_INSTANCES_URL).content(body)
                         .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
                 .andExpect(status().isCreated()).andExpect(content().contentType(MediaType.APPLICATION_JSON));
     }
-}
 
+    @Test
+    public void test_getVnf_usingValidVnfInstanceId_vnfInstanceRetrievedSuccessfully() throws Exception {
+        final InlineResponse201 inlineResponse201 = new InlineResponse201();
+        inlineResponse201.setId(VNF_INSTANCE_ID);
+        inlineResponse201.setVnfInstanceName(VNF_INSTANCE_NAME);
+
+        when(vnfmCacheRepository.getVnf(VNF_INSTANCE_ID)).thenReturn(inlineResponse201);
+
+        final ResultActions resultActions = this.mockMvc
+                .perform(get(Constant.BASE_URL + VNF_INSTANCES_URL + VNF_INSTANCE_ID)
+                        .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
+                .andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8));
+
+        final MvcResult result = resultActions.andReturn();
+        final String content = result.getResponse().getContentAsString();
+        final InlineResponse201 response201 = new ObjectMapper().readValue(content, InlineResponse201.class);
+        assertThat(response201.getId()).isEqualTo(VNF_INSTANCE_ID);
+        assertThat(response201.getVnfInstanceName()).isEqualTo(VNF_INSTANCE_NAME);
+    }
+
+    @Test
+    public void test_instantiateVnf_usingValidVnfInstanceId_returnsHttpStatusAccepted() throws Exception {
+        when(svnfmService.instantiateVnf(VNF_INSTANCE_ID)).thenReturn(VNF_OPERATION_ID);
+
+        this.mockMvc
+                .perform(post(Constant.BASE_URL + VNF_INSTANCES_URL + VNF_INSTANCE_ID + VNF_INSTANTIATE_URL)
+                        .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
+                .andExpect(status().isAccepted()).andExpect(content().contentType(MediaType.APPLICATION_JSON));
+    }
+
+    @Test
+    public void test_deleteVnf_usingValidVnfInstanceId_returnsHttpStatusNoContent() throws Exception {
+        this.mockMvc
+                .perform(delete(Constant.BASE_URL + VNF_INSTANCES_URL + VNF_INSTANCE_ID)
+                        .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
+                .andExpect(status().isNoContent()).andExpect(content().contentType(MediaType.APPLICATION_JSON));
+    }
 
+    @Test
+    public void test_terminateVnf_usingValidVnfInstanceId_returnsHttpStatusIsAccepted() throws Exception {
+        when(svnfmService.terminateVnf(VNF_INSTANCE_ID)).thenReturn(VNF_OPERATION_ID);
+
+        this.mockMvc
+                .perform(post(Constant.BASE_URL + VNF_INSTANCES_URL + VNF_INSTANCE_ID + VNF_TERMINATE_URL)
+                        .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
+                .andExpect(status().isAccepted()).andExpect(content().contentType(MediaType.APPLICATION_JSON));
+    }
+
+    @Test
+    public void test_getOperationStatus_usingValidOperationId_operationStatusRetrievedSuccessfully() throws Exception {
+        final InlineResponse200 inlineResponse200 = new InlineResponse200();
+        inlineResponse200.setId(VNF_LCM_OP_OCC_ID);
+        inlineResponse200.setOperation(OperationEnum.INSTANTIATE);
+
+        when(svnfmService.getOperationStatus(VNF_LCM_OP_OCC_ID)).thenReturn(inlineResponse200);
+
+        final ResultActions resultActions = this.mockMvc
+                .perform(get(Constant.BASE_URL + VNF_OPERATION_STATUS_URL + VNF_LCM_OP_OCC_ID)
+                        .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
+                .andExpect(content().contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk());
+
+        final MvcResult result = resultActions.andReturn();
+        final String content = result.getResponse().getContentAsString();
+        final InlineResponse200 response200 = new ObjectMapper().readValue(content, InlineResponse200.class);
+        assertThat(response200.getId()).isEqualTo(VNF_LCM_OP_OCC_ID);
+        assertThat(response200.getOperation()).isEqualTo(OperationEnum.INSTANTIATE);
+    }
+
+    @Test
+    public void test_subscribeForNotifications_usingValidSubscriptionRequest_returnsHttpStatusCreated()
+            throws Exception {
+        final LccnSubscriptionRequest lccnSubscriptionRequest = new LccnSubscriptionRequest();
+        final String body = (new ObjectMapper()).valueToTree(lccnSubscriptionRequest).toString();
+
+        this.mockMvc
+                .perform(post(Constant.BASE_URL + SUBSCRIPTIONS_URL).content(body)
+                        .contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
+                .andExpect(status().isCreated()).andExpect(content().contentType(MediaType.APPLICATION_JSON));
+    }
+}
index 46030e9..b74cd68 100644 (file)
 package org.onap.svnfm.simulator.services;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 import java.util.ArrayList;
 import java.util.List;
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.Mockito;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.GrantRequest;
 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.GrantsAddResources;
 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.InlineResponse201;
 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.InlineResponse201AddResources;
 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.InlineResponse201VimConnections;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse200.OperationEnum;
 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201InstantiatedVnfInfoVnfcResourceInfo;
 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.LccnSubscriptionRequest;
 import org.onap.svnfm.simulator.config.ApplicationConfig;
@@ -60,6 +64,7 @@ public class InstantiateOperatorProgressorTest {
         svnfmServiceMock = mock(SvnfmService.class);
         VnfOperation vnfOperation = new VnfOperation();
         vnfOperation.setVnfInstanceId(VNF_INSTANCE_ID);
+        vnfOperation.setOperation(OperationEnum.OPERATE);
         testedObject = new InstantiateOperationProgressor(vnfOperation, svnfmServiceMock, null, new ApplicationConfig(),
                 createVnfds(), createSubscriptionService());
     }
@@ -117,6 +122,13 @@ public class InstantiateOperatorProgressorTest {
         assertThat(testedObject.getRemoveResources("anyVnfId")).isEmpty();
     }
 
+    @Test
+    public void test_buildGrantRequest_usingValidVnfInstanceId_grantRequestRetrievedSuccessfully() {
+        when(svnfmServiceMock.getVnf(Mockito.eq(VNF_INSTANCE_ID))).thenReturn(createInlineResponse201());
+        GrantRequest grantRequest = testedObject.buildGrantRequest();
+        assertThat(grantRequest.getVnfdId().equals(VNF_ID));
+    }
+
     private Vnfds createVnfds() {
         Vnfd vnfd = new Vnfd();
         vnfd.setVnfdId(VNF_ID);
index ed77775..2eca37b 100644 (file)
 package org.onap.svnfm.simulator.services;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertNull;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
+import java.util.ArrayList;
+import java.util.List;
 import org.junit.Before;
 import org.junit.Test;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.CreateVnfRequest;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse200;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse200.OperationEnum;
 import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201;
 import org.onap.svnfm.simulator.config.ApplicationConfig;
 import org.onap.svnfm.simulator.constants.Constant;
+import org.onap.svnfm.simulator.model.VnfInstance;
+import org.onap.svnfm.simulator.model.VnfOperation;
 import org.onap.svnfm.simulator.model.Vnfds;
 import org.onap.svnfm.simulator.repository.VnfOperationRepository;
 import org.onap.svnfm.simulator.repository.VnfmRepository;
@@ -37,14 +45,21 @@ import org.springframework.cache.support.SimpleValueWrapper;
 
 public class SvnfmServiceTest {
 
+    private static final String VNFD_ID = "vnfdId";
+    private static final String VNF_INSTANCE_NAME = "vnfInstanceName";
+    private static final String VNF_INSTANCE_ID = "vnfInstanceId";
+    private static final String OPERATION_ID = "operationId";
     private SvnfmService testedObject;
     private CacheManager cacheManagerMock;
+    private VnfmHelper vnfmHelperMock;
+    private VnfmRepository vnfmRepositoryMock;
+    private VnfOperationRepository vnfOperationRepositoryMock;
 
     @Before
     public void setup() {
-        VnfmRepository vnfmRepositoryMock = mock(VnfmRepository.class);
-        VnfOperationRepository vnfOperationRepositoryMock = mock(VnfOperationRepository.class);
-        VnfmHelper vnfmHelperMock = mock(VnfmHelper.class);
+        vnfmRepositoryMock = mock(VnfmRepository.class);
+        vnfOperationRepositoryMock = mock(VnfOperationRepository.class);
+        vnfmHelperMock = mock(VnfmHelper.class);
         ApplicationConfig applicationConfigMock = mock(ApplicationConfig.class);
         cacheManagerMock = mock(CacheManager.class);
         Vnfds vnfdsMock = mock(Vnfds.class);
@@ -57,18 +72,16 @@ public class SvnfmServiceTest {
     @Test
     public void getVnfSuccessful() {
         // given
-        String vnfId = "vnfId";
-        String vnfInstanceName = "testVnf";
         Cache cacheMock = mock(Cache.class);
         SimpleValueWrapper simpleValueWrapperMock = mock(SimpleValueWrapper.class);
         when(cacheManagerMock.getCache(Constant.IN_LINE_RESPONSE_201_CACHE)).thenReturn(cacheMock);
-        when(cacheMock.get(vnfId)).thenReturn(simpleValueWrapperMock);
-        when(simpleValueWrapperMock.get()).thenReturn(prepareInlineResponse(vnfId, vnfInstanceName));
+        when(cacheMock.get(VNF_INSTANCE_ID)).thenReturn(simpleValueWrapperMock);
+        when(simpleValueWrapperMock.get()).thenReturn(getInlineResponse(VNFD_ID, VNF_INSTANCE_NAME));
         // when
-        InlineResponse201 result = testedObject.getVnf(vnfId);
+        InlineResponse201 result = testedObject.getVnf(VNF_INSTANCE_ID);
         // then
-        assertThat(result.getVnfdId()).isEqualTo(vnfId);
-        assertThat(result.getVnfInstanceName()).isEqualTo(vnfInstanceName);
+        assertThat(result.getVnfdId()).isEqualTo(VNFD_ID);
+        assertThat(result.getVnfInstanceName()).isEqualTo(VNF_INSTANCE_NAME);
     }
 
     @Test
@@ -82,31 +95,109 @@ public class SvnfmServiceTest {
     @Test
     public void getVnf_ifWrapperNullThenReturnNull() {
         // given
-        String vnfId = "vnfId";
         Cache cacheMock = mock(Cache.class);
         when(cacheManagerMock.getCache(Constant.IN_LINE_RESPONSE_201_CACHE)).thenReturn(cacheMock);
-        when(cacheMock.get(vnfId)).thenReturn(null);
+        when(cacheMock.get(VNF_INSTANCE_ID)).thenReturn(null);
         // then
-        assertThat(testedObject.getVnf(vnfId)).isNull();
+        assertThat(testedObject.getVnf(VNF_INSTANCE_ID)).isNull();
     }
 
     @Test
     public void getVnf_ifResultIsNullThenReturnNull() {
         // when
-        String vnfId = "vnfId";
         Cache cacheMock = mock(Cache.class);
         SimpleValueWrapper simpleValueWrapperMock = mock(SimpleValueWrapper.class);
         when(cacheManagerMock.getCache(Constant.IN_LINE_RESPONSE_201_CACHE)).thenReturn(cacheMock);
-        when(cacheMock.get(vnfId)).thenReturn(simpleValueWrapperMock);
+        when(cacheMock.get(VNF_INSTANCE_ID)).thenReturn(simpleValueWrapperMock);
         when(simpleValueWrapperMock.get()).thenReturn(null);
         // then
-        assertThat(testedObject.getVnf(vnfId)).isNull();
+        assertThat(testedObject.getVnf(VNF_INSTANCE_ID)).isNull();
     }
 
-    private InlineResponse201 prepareInlineResponse(String vnfId, String vnfInstanceName) {
+    @Test
+    public void test_createVnf_usingValidCreateVnfRequest_vnfInstanceCreatedSuccessfully() throws Exception {
+        // given
+        final CreateVnfRequest createVnfRequest = getCreateVnfRequest();
+        final VnfInstance vnfInstance = getVnfInstance();
+        final InlineResponse201 inlineResponse201 = getInlineResponse(VNFD_ID, VNF_INSTANCE_NAME);
+        when(vnfmHelperMock.createVnfInstance(createVnfRequest, VNF_INSTANCE_ID)).thenReturn(vnfInstance);
+        when(vnfmRepositoryMock.save(vnfInstance)).thenReturn(vnfInstance);
+        when(vnfmHelperMock.getInlineResponse201(vnfInstance)).thenReturn(inlineResponse201);
+        // when
+        final InlineResponse201 result = testedObject.createVnf(createVnfRequest, VNF_INSTANCE_ID);
+        // then
+        assertThat(result.getVnfdId()).isEqualTo(VNFD_ID);
+        assertThat(result.getVnfInstanceName()).isEqualTo(VNF_INSTANCE_NAME);
+    }
+
+    @Test
+    public void test_createVnf_illegalAccessExceptionThrown_returnsNull() throws Exception {
+        // given
+        final CreateVnfRequest createVnfRequest = getCreateVnfRequest();
+        final VnfInstance vnfInstance = getVnfInstance();
+        when(vnfmHelperMock.createVnfInstance(createVnfRequest, VNF_INSTANCE_ID)).thenReturn(vnfInstance);
+        when(vnfmRepositoryMock.save(vnfInstance)).thenReturn(vnfInstance);
+        when(vnfmHelperMock.getInlineResponse201(vnfInstance)).thenThrow(new IllegalAccessException());
+        // when
+        final InlineResponse201 result = testedObject.createVnf(createVnfRequest, VNF_INSTANCE_ID);
+        // then
+        assertNull(result);
+    }
+
+    @Test
+    public void test_getOperationStatus_usingValidOperationId_operationStatusRetrievedSuccessfully() {
+        // given
+        final OperationEnum operationEnum = OperationEnum.OPERATE;
+        final VnfOperation vnfOperation = getVnfOperation(OPERATION_ID, operationEnum);
+        final List<VnfOperation> vnfOperations = new ArrayList<>();
+        vnfOperations.add(vnfOperation);
+        when(vnfOperationRepositoryMock.findAll()).thenReturn(vnfOperations);
+        // when
+        final InlineResponse200 result = testedObject.getOperationStatus(OPERATION_ID);
+        // then
+        assertThat(result.getId()).isEqualTo(OPERATION_ID);
+        assertThat(result.getOperation()).isEqualTo(operationEnum);
+    }
+
+    @Test
+    public void test_getOperationStatus_usingInvalidOperationId_returnsNull() {
+        // given
+        final OperationEnum operationEnum = OperationEnum.OPERATE;
+        final VnfOperation vnfOperation = getVnfOperation(OPERATION_ID, operationEnum);
+        final List<VnfOperation> vnfOperations = new ArrayList<>();
+        vnfOperations.add(vnfOperation);
+        when(vnfOperationRepositoryMock.findAll()).thenReturn(vnfOperations);
+        // when
+        InlineResponse200 result = testedObject.getOperationStatus("invalidOperationId");
+        // then
+        assertNull(result);
+    }
+
+    private InlineResponse201 getInlineResponse(String vnfdId, String vnfInstanceName) {
         InlineResponse201 response201 = new InlineResponse201();
-        response201.setVnfdId(vnfId);
+        response201.setVnfdId(vnfdId);
         response201.vnfInstanceName(vnfInstanceName);
         return response201;
     }
+
+    private CreateVnfRequest getCreateVnfRequest() {
+        final CreateVnfRequest createVnfRequest = new CreateVnfRequest();
+        createVnfRequest.setVnfdId(VNFD_ID);
+        createVnfRequest.setVnfInstanceName(VNF_INSTANCE_NAME);
+        return createVnfRequest;
+    }
+
+    private VnfInstance getVnfInstance() {
+        final VnfInstance vnfInstance = new VnfInstance();
+        vnfInstance.setVnfdId(VNFD_ID);
+        vnfInstance.setVnfInstanceName(VNF_INSTANCE_NAME);
+        return vnfInstance;
+    }
+
+    private VnfOperation getVnfOperation(String operationId, OperationEnum operationEnum) {
+        final VnfOperation vnfOperation = new VnfOperation();
+        vnfOperation.setId(operationId);
+        vnfOperation.setOperation(operationEnum);
+        return vnfOperation;
+    }
 }
diff --git a/vnfm-simulator/vnfm-service/src/test/java/org/onap/svnfm/simulator/services/TerminateOperationProgressorTest.java b/vnfm-simulator/vnfm-service/src/test/java/org/onap/svnfm/simulator/services/TerminateOperationProgressorTest.java
new file mode 100644 (file)
index 0000000..c7237a8
--- /dev/null
@@ -0,0 +1,157 @@
+/*-
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.svnfm.simulator.services;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.grant.model.GrantsAddResources;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse200.OperationEnum;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201InstantiatedVnfInfo;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201InstantiatedVnfInfoResourceHandle;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.InlineResponse201InstantiatedVnfInfoVnfcResourceInfo;
+import org.onap.so.adapters.vnfmadapter.extclients.vnfm.model.LccnSubscriptionRequest;
+import org.onap.svnfm.simulator.config.ApplicationConfig;
+import org.onap.svnfm.simulator.model.VnfOperation;
+import org.onap.svnfm.simulator.model.Vnfds;
+import org.onap.svnfm.simulator.model.Vnfds.Vnfc;
+import org.onap.svnfm.simulator.model.Vnfds.Vnfd;
+
+public class TerminateOperationProgressorTest {
+
+    private static final String VNFD_ID = "vnfdId";
+    private static final String VNFC_TYPE = "COMPUTE";
+    private static final String VDU_ID = "vduId";
+    private static final String VNF_INSTANCE_ID = "vnfInstanceId";
+
+    @Mock
+    private SvnfmService svnfmService;
+
+    private TerminateOperationProgressor testedObject;
+
+    @Before
+    public void setup() {
+        svnfmService = mock(SvnfmService.class);
+        VnfOperation vnfOperation = new VnfOperation();
+        vnfOperation.setVnfInstanceId(VNF_INSTANCE_ID);
+        vnfOperation.setOperation(OperationEnum.OPERATE);
+        testedObject = new TerminateOperationProgressor(vnfOperation, svnfmService, null, new ApplicationConfig(),
+                createVnfds(), createSubscriptionService());
+    }
+
+    @Test
+    public void test_getAddResources_usingValidVnfdId_returnsEmptyList() {
+        List<GrantsAddResources> results = testedObject.getAddResources(VNFD_ID);
+        assertThat(results.isEmpty());
+    }
+
+    @Test
+    public void test_getRemoveResources_usingValidVnfdId_retrievesGrantsAddResourcesSuccessfully() {
+        // given
+        InlineResponse201 inlineResponse201 = createInlineResponse201();
+        InlineResponse201InstantiatedVnfInfo inlineResponse201InstantiatedVnfInfo =
+                setupInlineResponseInstantiatedVnfInfo();
+        inlineResponse201.setInstantiatedVnfInfo(inlineResponse201InstantiatedVnfInfo);
+
+        when(svnfmService.getVnf(VNF_INSTANCE_ID)).thenReturn(inlineResponse201);
+
+        // when
+        List<GrantsAddResources> result = testedObject.getRemoveResources(VNFD_ID);
+
+        // then
+        assertThat(result).hasSize(1);
+        GrantsAddResources grantsAddResourcesResult = result.get(0);
+        assertThat(grantsAddResourcesResult.getType()).hasToString(VNFC_TYPE);
+        assertThat(grantsAddResourcesResult.getVduId()).isEqualTo(VDU_ID);
+    }
+
+    @Test
+    public void test_getVnfcChangeType_isEnumRemoved() {
+        assertThat(testedObject.getVnfcChangeType().getValue()).isEqualTo("REMOVED");
+    }
+
+    private Vnfds createVnfds() {
+        Vnfd vnfd = new Vnfd();
+        vnfd.setVnfdId(VNFD_ID);
+        List<Vnfc> vnfcList = new ArrayList<>();
+        vnfcList.add(createVnfc());
+        vnfd.setVnfcList(vnfcList);
+        List<Vnfd> vnfdList = new ArrayList<>();
+        vnfdList.add(vnfd);
+
+        Vnfds vnfds = new Vnfds();
+        vnfds.setVnfdList(vnfdList);
+        return vnfds;
+    }
+
+    private Vnfc createVnfc() {
+        Vnfc vnfc = new Vnfc();
+        String vnfcId = "vnfcId";
+        vnfc.setVnfcId(vnfcId);
+        vnfc.setType(VNFC_TYPE);
+        String resourceTemplateId = "resTempId";
+        vnfc.setResourceTemplateId(resourceTemplateId);
+        vnfc.setVduId(VDU_ID);
+        String resourceDefinitionId = "resourceDefinitionId";
+        vnfc.setGrantResourceId(resourceDefinitionId);
+        return vnfc;
+    }
+
+    private SubscriptionService createSubscriptionService() {
+        SubscriptionService subscriptionService = new SubscriptionService();
+        LccnSubscriptionRequest lccnSubscriptionRequest = new LccnSubscriptionRequest();
+        String callbackUri = "/lcn/uriest";
+        lccnSubscriptionRequest.setCallbackUri(callbackUri);
+        subscriptionService.registerSubscription(lccnSubscriptionRequest);
+        return subscriptionService;
+    }
+
+    private InlineResponse201 createInlineResponse201() {
+        InlineResponse201 inlineResponse201 = new InlineResponse201();
+        inlineResponse201.setVnfdId(VNFD_ID);
+        return inlineResponse201;
+    }
+
+    private InlineResponse201InstantiatedVnfInfo setupInlineResponseInstantiatedVnfInfo() {
+        InlineResponse201InstantiatedVnfInfo inlineResponse201InstantiatedVnfInfo =
+                new InlineResponse201InstantiatedVnfInfo();
+        List<InlineResponse201InstantiatedVnfInfoVnfcResourceInfo> resultList = new ArrayList<>();
+        InlineResponse201InstantiatedVnfInfoVnfcResourceInfo resourceInfo =
+                new InlineResponse201InstantiatedVnfInfoVnfcResourceInfo();
+        String resourceInfoId = "resourceInfoId";
+        resourceInfo.setId(resourceInfoId);
+        resourceInfo.setVduId((VDU_ID));
+        InlineResponse201InstantiatedVnfInfoResourceHandle resourceHandle =
+                new InlineResponse201InstantiatedVnfInfoResourceHandle();
+        resourceInfo.setComputeResource(resourceHandle);
+        resultList.add(resourceInfo);
+        inlineResponse201InstantiatedVnfInfo.setVnfcResourceInfo(resultList);
+        String flavourId = "flavourId";
+        inlineResponse201InstantiatedVnfInfo.setFlavourId(flavourId);
+        return inlineResponse201InstantiatedVnfInfo;
+    }
+}