Provide proper response message/code in delete rapp instance
Fixes the delete rApp instance response messages.
Issue-ID: NONRTRIC-913
Signed-off-by: aravind.est <aravindhan.a@est.tech>
Change-Id: I5782dfcef343d50e1e4a72ab49ab82f1d54b6aca
diff --git a/rapp-manager-application/src/main/java/com/oransc/rappmanager/rest/RappInstanceController.java b/rapp-manager-application/src/main/java/com/oransc/rappmanager/rest/RappInstanceController.java
index 9566364..a6e83dc 100755
--- a/rapp-manager-application/src/main/java/com/oransc/rappmanager/rest/RappInstanceController.java
+++ b/rapp-manager-application/src/main/java/com/oransc/rappmanager/rest/RappInstanceController.java
@@ -24,7 +24,6 @@
import com.oransc.rappmanager.models.rappinstance.DeployOrder;
import com.oransc.rappmanager.models.rappinstance.RappInstance;
import com.oransc.rappmanager.models.rappinstance.RappInstanceDeployOrder;
-import com.oransc.rappmanager.models.rappinstance.RappInstanceState;
import com.oransc.rappmanager.models.statemachine.RappInstanceStateMachine;
import com.oransc.rappmanager.service.RappService;
import java.util.Map;
@@ -80,7 +79,7 @@
rappInstance.setState(rappInstanceStateMachine.getRappInstanceState(rappInstanceId));
return rappInstance;
}).map(ResponseEntity::ok).orElseThrow(() -> new RappHandlerException(HttpStatus.NOT_FOUND,
- String.format(RAPP_INSTANCE_NOT_FOUND, rappId)));
+ String.format(RAPP_INSTANCE_NOT_FOUND, rappInstanceId)));
}
@PutMapping("{rapp_instance_id}")
@@ -103,18 +102,10 @@
@DeleteMapping("{rapp_instance_id}")
public ResponseEntity<Object> deleteRappInstance(@PathVariable("rapp_id") String rappId,
@PathVariable("rapp_instance_id") UUID rappInstanceId) {
- return rappCacheService.getRapp(rappId).map(rapp -> Pair.of(rapp, rapp.getRappInstances()))
- .filter(rappPair -> rappPair.getRight().containsKey(rappInstanceId) && rappPair.getRight()
- .get(rappInstanceId)
- .getState()
- .equals(RappInstanceState.UNDEPLOYED))
- .map(rappPair -> {
- rappInstanceStateMachine.deleteRappInstance(
- rappPair.getLeft().getRappInstances().get(rappInstanceId));
- rappPair.getLeft().getRappInstances().remove(rappInstanceId);
- return ResponseEntity.noContent().build();
- }).orElseThrow(() -> new RappHandlerException(HttpStatus.NOT_FOUND,
- String.format(RAPP_INSTANCE_NOT_FOUND, rappId)));
+ return rappCacheService.getRapp(rappId).filter(rApp -> rApp.getRappInstances().containsKey(rappInstanceId))
+ .map(rApp -> rappService.deleteRappInstance(rApp, rappInstanceId)).orElseThrow(
+ () -> new RappHandlerException(HttpStatus.NOT_FOUND,
+ String.format(RAPP_INSTANCE_NOT_FOUND, rappId)));
}
}
diff --git a/rapp-manager-application/src/main/java/com/oransc/rappmanager/service/RappService.java b/rapp-manager-application/src/main/java/com/oransc/rappmanager/service/RappService.java
index 6df12d4..9ddcd8b 100755
--- a/rapp-manager-application/src/main/java/com/oransc/rappmanager/service/RappService.java
+++ b/rapp-manager-application/src/main/java/com/oransc/rappmanager/service/RappService.java
@@ -21,6 +21,7 @@
import com.oransc.rappmanager.acm.service.AcmDeployer;
import com.oransc.rappmanager.dme.service.DmeDeployer;
import com.oransc.rappmanager.models.cache.RappCacheService;
+import com.oransc.rappmanager.models.exception.RappHandlerException;
import com.oransc.rappmanager.models.rapp.Rapp;
import com.oransc.rappmanager.models.rapp.RappEvent;
import com.oransc.rappmanager.models.rapp.RappState;
@@ -28,6 +29,7 @@
import com.oransc.rappmanager.models.rappinstance.RappInstanceState;
import com.oransc.rappmanager.models.statemachine.RappInstanceStateMachine;
import com.oransc.rappmanager.sme.service.SmeDeployer;
+import java.util.UUID;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -131,6 +133,16 @@
}
}
+ public ResponseEntity<Object> deleteRappInstance(Rapp rApp, UUID rappInstanceId) {
+ if (rApp.getRappInstances().get(rappInstanceId).getState().equals(RappInstanceState.UNDEPLOYED)) {
+ rappInstanceStateMachine.deleteRappInstance(rApp.getRappInstances().get(rappInstanceId));
+ rApp.getRappInstances().remove(rappInstanceId);
+ return ResponseEntity.noContent().build();
+ }
+ throw new RappHandlerException(HttpStatus.BAD_REQUEST,
+ String.format("Unable to delete rApp instance %s as it is not in UNDEPLOYED state", rappInstanceId));
+ }
+
public void updateRappInstanceState(Rapp rapp, RappInstance rappInstance) {
acmDeployer.syncRappInstanceStatus(rapp.getCompositionId(), rappInstance);
}
diff --git a/rapp-manager-application/src/test/java/com/oransc/rappmanager/service/RappServiceTest.java b/rapp-manager-application/src/test/java/com/oransc/rappmanager/service/RappServiceTest.java
index 6652dba..ea9d3d0 100755
--- a/rapp-manager-application/src/test/java/com/oransc/rappmanager/service/RappServiceTest.java
+++ b/rapp-manager-application/src/test/java/com/oransc/rappmanager/service/RappServiceTest.java
@@ -1,11 +1,13 @@
package com.oransc.rappmanager.service;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;
import com.oransc.rappmanager.acm.service.AcmDeployer;
import com.oransc.rappmanager.dme.service.DmeDeployer;
+import com.oransc.rappmanager.models.exception.RappHandlerException;
import com.oransc.rappmanager.models.rapp.Rapp;
import com.oransc.rappmanager.models.rapp.RappState;
import com.oransc.rappmanager.models.rappinstance.RappInstance;
@@ -13,6 +15,7 @@
import com.oransc.rappmanager.models.statemachine.RappInstanceStateMachine;
import com.oransc.rappmanager.sme.service.SmeDeployer;
import com.oransc.rappmanager.sme.service.SmeLifecycleManager;
+import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import org.junit.jupiter.api.Test;
@@ -238,6 +241,34 @@
}
@Test
+ void testDeleteRappInstance() {
+ Rapp rapp = Rapp.builder().rappId(UUID.randomUUID()).name("").packageName(validRappFile)
+ .packageLocation(validCsarFileLocation).state(RappState.PRIMED).build();
+ RappInstance rappInstance = new RappInstance();
+ rappInstance.setState(RappInstanceState.UNDEPLOYED);
+ HashMap<UUID, RappInstance> rAppInstanceMap = new HashMap<>();
+ rAppInstanceMap.put(rappInstance.getRappInstanceId(), rappInstance);
+ rapp.setRappInstances(rAppInstanceMap);
+ rappInstanceStateMachine.onboardRappInstance(rappInstance.getRappInstanceId());
+ assertEquals(HttpStatus.NO_CONTENT,
+ rappService.deleteRappInstance(rapp, rappInstance.getRappInstanceId()).getStatusCode());
+ }
+
+ @Test
+ void testDeleteRappInstanceFailure() {
+ Rapp rapp = Rapp.builder().rappId(UUID.randomUUID()).name("").packageName(validRappFile)
+ .packageLocation(validCsarFileLocation).state(RappState.PRIMED).build();
+ RappInstance rappInstance = new RappInstance();
+ rappInstance.setState(RappInstanceState.DEPLOYED);
+ HashMap<UUID, RappInstance> rAppInstanceMap = new HashMap<>();
+ rAppInstanceMap.put(rappInstance.getRappInstanceId(), rappInstance);
+ rapp.setRappInstances(rAppInstanceMap);
+ rappInstanceStateMachine.onboardRappInstance(rappInstance.getRappInstanceId());
+ assertThrows(RappHandlerException.class,
+ () -> rappService.deleteRappInstance(rapp, rappInstance.getRappInstanceId()));
+ }
+
+ @Test
void testDeleteRappSuccess() {
Rapp rApp = Rapp.builder().rappId(UUID.randomUUID()).name("").packageName(validRappFile)
.packageLocation(validCsarFileLocation).state(RappState.COMMISSIONED).build();