Add a couple of sanity checks in DCM 05/113205/1
authorIgor D.C <igor.duarte.cardoso@intel.com>
Sat, 26 Sep 2020 01:55:04 +0000 (01:55 +0000)
committerIgor D.C <igor.duarte.cardoso@intel.com>
Sat, 26 Sep 2020 01:56:19 +0000 (01:56 +0000)
When applying, check whether logical cloud is already applied.
When deleting logical cloud, check if it exists.

Issue-ID: MULTICLOUD-1143
Change-Id: I6aa11d8921db76e3d9e9632f915b55fe7ab8efab
Signed-off-by: Igor D.C <igor.duarte.cardoso@intel.com>
src/dcm/api/logicalCloudHandler.go
src/dcm/pkg/module/logicalcloud.go
src/dcm/pkg/module/logicalcloud_test.go

index 2e1811b..fb0f0c6 100644 (file)
@@ -186,6 +186,13 @@ func (h logicalCloudHandler) applyHandler(w http.ResponseWriter, r *http.Request
                return
        }
 
+       _, ctxVal, err := h.client.GetLogicalCloudContext(name)
+       if ctxVal != "" {
+               err = pkgerrors.New("Logical Cloud already applied")
+               http.Error(w, err.Error(), http.StatusConflict)
+               return
+       }
+
        // Get Clusters
        clusters, err := h.clusterClient.GetAllClusters(project, name)
 
index 9b8ff70..61d7b7a 100644 (file)
@@ -199,7 +199,12 @@ func (v *LogicalCloudClient) Delete(project, logicalCloudName string) error {
                Project:          project,
                LogicalCloudName: logicalCloudName,
        }
-       err := v.util.DBRemove(v.storeName, key)
+       //Check if this Logical Cloud exists
+       _, err := v.Get(project, logicalCloudName)
+       if err != nil {
+               return pkgerrors.New("Logical Cloud does not exist")
+       }
+       err = v.util.DBRemove(v.storeName, key)
        if err != nil {
                return pkgerrors.Wrap(err, "Delete Logical Cloud")
        }
index 0a0e2f5..4700eff 100644 (file)
@@ -117,7 +117,15 @@ func TestDeleteLogicalCloud(t *testing.T) {
 
        myMocks := new(mockValues)
 
+       data1 := [][]byte{
+               []byte("abc"),
+       }
+       data2 := []byte("abc")
+
        myMocks.On("DBRemove", "test_dcm", key).Return(nil)
+       myMocks.On("DBFind", "test_dcm", key, "test_meta").Return(data1, nil)
+       myMocks.On("DBUnmarshal", data2).Return(nil)
+       // TODO also test for when the logical cloud doesn't exist
 
        lcClient := LogicalCloudClient{"test_dcm", "test_meta", "test_context", myMocks}
        err := lcClient.Delete("test_project", "test_asdf")