diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/dcm/api/logicalCloudHandler.go | 13 | ||||
-rw-r--r-- | src/dcm/pkg/module/apply.go | 12 | ||||
-rw-r--r-- | src/dcm/pkg/module/cluster.go | 13 | ||||
-rw-r--r-- | src/dcm/pkg/module/logicalcloud.go | 18 | ||||
-rw-r--r-- | src/dcm/pkg/module/logicalcloud_test.go | 33 | ||||
-rw-r--r-- | src/orchestrator/api/composite_app_handler.go | 7 |
6 files changed, 55 insertions, 41 deletions
diff --git a/src/dcm/api/logicalCloudHandler.go b/src/dcm/api/logicalCloudHandler.go index b305b202..ad9a3807 100644 --- a/src/dcm/api/logicalCloudHandler.go +++ b/src/dcm/api/logicalCloudHandler.go @@ -26,7 +26,6 @@ import ( "github.com/gorilla/mux" "github.com/onap/multicloud-k8s/src/dcm/pkg/module" orch "github.com/onap/multicloud-k8s/src/orchestrator/pkg/module" - pkgerrors "github.com/pkg/errors" ) // logicalCloudHandler is used to store backend implementations objects @@ -266,13 +265,6 @@ func (h logicalCloudHandler) terminateHandler(w http.ResponseWriter, r *http.Req return } - _, ctxVal, err := h.client.GetLogicalCloudContext(project, name) - if ctxVal == "" { - err = pkgerrors.New("Logical Cloud hasn't been applied yet") - http.Error(w, err.Error(), http.StatusConflict) - return - } - // Get Clusters clusters, err := h.clusterClient.GetAllClusters(project, name) @@ -291,8 +283,11 @@ func (h logicalCloudHandler) terminateHandler(w http.ResponseWriter, r *http.Req // Terminate the Logical Cloud err = module.Terminate(project, lc, clusters, quotas) if err != nil { + if err.Error() == "Logical Cloud doesn't seem applied: "+name { + http.Error(w, err.Error(), http.StatusConflict) + return + } http.Error(w, err.Error(), http.StatusInternalServerError) - return } return diff --git a/src/dcm/pkg/module/apply.go b/src/dcm/pkg/module/apply.go index c3378ab8..0eaa75ab 100644 --- a/src/dcm/pkg/module/apply.go +++ b/src/dcm/pkg/module/apply.go @@ -342,11 +342,11 @@ func Apply(project string, logicalcloud LogicalCloud, clusterList []Cluster, } // Check if there was a previous context for this logical cloud - ac, cid, err := lcclient.GetLogicalCloudContext(project, logicalCloudName) + ac, cid, err := lcclient.util.GetLogicalCloudContext(lcclient.storeName, lckey, lcclient.tagMeta, project, logicalCloudName) if cid != "" { // Make sure rsync status for this logical cloud is Terminated, // otherwise we can't re-apply logical cloud yet - acStatus, _ := getAppContextStatus(ac) + acStatus, _ := lcclient.util.GetAppContextStatus(ac) switch acStatus.Status { case appcontext.AppContextStatusEnum.Terminated: // We now know Logical Cloud has terminated, so let's update the entry before we process the apply @@ -544,8 +544,12 @@ func Terminate(project string, logicalcloud LogicalCloud, clusterList []Cluster, logicalCloudName := logicalcloud.MetaData.LogicalCloudName lcclient := NewLogicalCloudClient() + lckey := LogicalCloudKey{ + LogicalCloudName: logicalcloud.MetaData.LogicalCloudName, + Project: project, + } - ac, cid, err := lcclient.GetLogicalCloudContext(project, logicalCloudName) + ac, cid, err := lcclient.util.GetLogicalCloudContext(lcclient.storeName, lckey, lcclient.tagMeta, project, logicalCloudName) if err != nil { return pkgerrors.Wrapf(err, "Logical Cloud doesn't seem applied: %v", logicalCloudName) } @@ -554,7 +558,7 @@ func Terminate(project string, logicalcloud LogicalCloud, clusterList []Cluster, if cid != "" { // Make sure rsync status for this logical cloud is Terminated, // otherwise we can't re-apply logical cloud yet - acStatus, _ := getAppContextStatus(ac) + acStatus, _ := lcclient.util.GetAppContextStatus(ac) switch acStatus.Status { case appcontext.AppContextStatusEnum.Terminated: return pkgerrors.New("The Logical Cloud has already been terminated: " + logicalCloudName) diff --git a/src/dcm/pkg/module/cluster.go b/src/dcm/pkg/module/cluster.go index 33de7acf..6ad46404 100644 --- a/src/dcm/pkg/module/cluster.go +++ b/src/dcm/pkg/module/cluster.go @@ -59,7 +59,7 @@ type KubeConfig struct { Kind string `yaml:"kind"` Clusters []KubeCluster `yaml:"clusters"` Contexts []KubeContext `yaml:"contexts"` - CurrentContext string `yaml:"current-context` + CurrentContext string `yaml:"current-context"` Preferences map[string]string `yaml:"preferences"` Users []KubeUser `yaml:"users"` } @@ -260,7 +260,11 @@ func (v *ClusterClient) UpdateCluster(project, logicalCloud, clusterReference st // Get returns Cluster's kubeconfig for corresponding cluster reference func (v *ClusterClient) GetClusterConfig(project, logicalCloud, clusterReference string) (string, error) { lcClient := NewLogicalCloudClient() - context, ctxVal, err := lcClient.GetLogicalCloudContext(project, logicalCloud) + lckey := LogicalCloudKey{ + Project: project, + LogicalCloudName: logicalCloud, + } + context, ctxVal, err := lcClient.util.GetLogicalCloudContext(lcClient.storeName, lckey, lcClient.tagMeta, project, logicalCloud) if err != nil { return "", pkgerrors.Wrap(err, "Error getting logical cloud context.") } @@ -268,11 +272,6 @@ func (v *ClusterClient) GetClusterConfig(project, logicalCloud, clusterReference return "", pkgerrors.New("Logical Cloud hasn't been applied yet") } - // private key comes from logical cloud - lckey := LogicalCloudKey{ - Project: project, - LogicalCloudName: logicalCloud, - } // get logical cloud resource lc, err := lcClient.Get(project, logicalCloud) if err != nil { diff --git a/src/dcm/pkg/module/logicalcloud.go b/src/dcm/pkg/module/logicalcloud.go index 580e9022..3fe981b8 100644 --- a/src/dcm/pkg/module/logicalcloud.go +++ b/src/dcm/pkg/module/logicalcloud.go @@ -75,7 +75,6 @@ type LogicalCloudManager interface { GetAll(project string) ([]LogicalCloud, error) Delete(project, name string) error Update(project, name string, c LogicalCloud) (LogicalCloud, error) - GetLogicalCloudContext(project string, name string) (appcontext.AppContext, string, error) } // Interface facilitates unit testing by mocking functions @@ -86,6 +85,8 @@ type Utility interface { DBRemove(storeName string, key db.Key) error CheckProject(project string) error CheckLogicalCloud(project, logicalCloud string) error + GetLogicalCloudContext(storeName string, key db.Key, meta string, project string, name string) (appcontext.AppContext, string, error) + GetAppContextStatus(ac appcontext.AppContext) (*appcontext.AppContextStatus, error) } // LogicalCloudClient implements the LogicalCloudManager @@ -208,7 +209,7 @@ func (v *LogicalCloudClient) Delete(project, logicalCloudName string) error { return pkgerrors.New("Logical Cloud does not exist") } - context, _, err := v.GetLogicalCloudContext(project, logicalCloudName) + context, _, err := v.util.GetLogicalCloudContext(v.storeName, key, v.tagMeta, project, logicalCloudName) // If there's no context for Logical Cloud, just go ahead and delete it now if err != nil { err = v.util.DBRemove(v.storeName, key) @@ -220,7 +221,7 @@ func (v *LogicalCloudClient) Delete(project, logicalCloudName string) error { // Make sure rsync status for this logical cloud is Terminated, // otherwise we can't remove appcontext yet - acStatus, _ := getAppContextStatus(context) + acStatus, _ := v.util.GetAppContextStatus(context) switch acStatus.Status { case appcontext.AppContextStatusEnum.Terminated: // remove the appcontext @@ -267,14 +268,9 @@ func (v *LogicalCloudClient) Update(project, logicalCloudName string, c LogicalC } // GetLogicalCloudContext returns the AppContext for corresponding provider and name -func (v *LogicalCloudClient) GetLogicalCloudContext(project string, name string) (appcontext.AppContext, string, error) { - //Construct key and tag to select the entry - key := LogicalCloudKey{ - LogicalCloudName: name, - Project: project, - } +func (d DBService) GetLogicalCloudContext(storeName string, key db.Key, meta string, project string, name string) (appcontext.AppContext, string, error) { - value, err := v.util.DBFind(v.storeName, key, v.tagContext) + value, err := d.DBFind(storeName, key, meta) if err != nil { return appcontext.AppContext{}, "", pkgerrors.Wrap(err, "Get Logical Cloud Context") } @@ -353,7 +349,7 @@ func (d DBService) CheckLogicalCloud(project, logicalCloud string) error { return nil } -func getAppContextStatus(ac appcontext.AppContext) (*appcontext.AppContextStatus, error) { +func (d DBService) GetAppContextStatus(ac appcontext.AppContext) (*appcontext.AppContextStatus, error) { h, err := ac.GetCompositeAppHandle() if err != nil { diff --git a/src/dcm/pkg/module/logicalcloud_test.go b/src/dcm/pkg/module/logicalcloud_test.go index efce568f..cbdc1304 100644 --- a/src/dcm/pkg/module/logicalcloud_test.go +++ b/src/dcm/pkg/module/logicalcloud_test.go @@ -4,6 +4,7 @@ import ( "fmt" "testing" + "github.com/onap/multicloud-k8s/src/orchestrator/pkg/appcontext" "github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/db" "github.com/pkg/errors" "github.com/stretchr/testify/mock" @@ -55,6 +56,20 @@ func (m *mockValues) CheckLogicalCloud(project, logicalCloud string) error { return args.Error(0) } +func (m *mockValues) GetLogicalCloudContext(name string, key db.Key, meta string, project, logicalCloud string) (appcontext.AppContext, string, error) { + fmt.Println("Mocked Get Logical Cloud Context") + args := m.Called(name, key, meta, project, logicalCloud) + + return appcontext.AppContext{}, "", args.Error(2) +} + +func (m *mockValues) GetAppContextStatus(ac appcontext.AppContext) (*appcontext.AppContextStatus, error) { + fmt.Println("Mocked GetAppContextStatus") + args := m.Called(ac) + + return &appcontext.AppContextStatus{}, args.Error(1) +} + func TestCreateLogicalCloud(t *testing.T) { mData := MetaDataList{ @@ -110,7 +125,7 @@ func TestGetLogicalCloud(t *testing.T) { } } -func TestDeleteLogicalCloud(t *testing.T) { +func TestDeleteLogicalCloudWithSuccess(t *testing.T) { key := LogicalCloudKey{ Project: "test_project", @@ -128,14 +143,14 @@ func TestDeleteLogicalCloud(t *testing.T) { myMocks.On("DBFind", "test_dcm", key, "test_meta").Return(data1, nil) myMocks.On("DBUnmarshal", data2).Return(nil) myMocks.On("DBFind", "test_dcm", key, "test_context").Return(data1, nil) - // TODO also test for when the logical cloud doesn't exist - - // TODO: fix Etcd-related test crash - // lcClient := LogicalCloudClient{"test_dcm", "test_meta", "test_context", myMocks} - // err := lcClient.Delete("test_project", "test_asdf") - // if err != nil { - // t.Errorf("Some error occured!") - // } + myMocks.On("GetLogicalCloudContext", "test_dcm", key, "test_meta", "test_project", "test_asdf").Return(appcontext.AppContext{}, "", nil) + myMocks.On("GetAppContextStatus", appcontext.AppContext{}).Return(&appcontext.AppContextStatus{}, nil) + + lcClient := LogicalCloudClient{"test_dcm", "test_meta", "test_context", myMocks} + err := lcClient.Delete("test_project", "test_asdf") + if err.Error() != "The Logical Cloud can't be deleted yet at this point." { + t.Errorf("Some unexpected error occurred!") + } } func TestUpdateLogicalCloud(t *testing.T) { diff --git a/src/orchestrator/api/composite_app_handler.go b/src/orchestrator/api/composite_app_handler.go index d531b28d..761d60b9 100644 --- a/src/orchestrator/api/composite_app_handler.go +++ b/src/orchestrator/api/composite_app_handler.go @@ -130,7 +130,12 @@ func (h compositeAppHandler) deleteHandler(w http.ResponseWriter, r *http.Reques version := vars["version"] projectName := vars["project-name"] - err := h.client.DeleteCompositeApp(name, version, projectName) + _, err := h.client.GetCompositeApp(name, version, projectName) + if err != nil { + http.Error(w, err.Error(), http.StatusNotFound) + return + } + err = h.client.DeleteCompositeApp(name, version, projectName) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return |