summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRajamohan Raj <rajamohan.raj@intel.com>2020-02-19 19:35:38 +0000
committerRajamohan Raj <rajamohan.raj@intel.com>2020-02-19 20:54:37 +0000
commit260be59a550c865ce5be6b127e198c40fb45714d (patch)
tree1b0c97fbb528a9a309edd0d438b7939a70847116
parent8af74ae61508a3fbfd54c25d1cfe037f3ad08ca5 (diff)
Made changes to the Project API.
Issue-ID: MULTICLOUD-875 Signed-off-by: Rajamohan Raj <rajamohan.raj@intel.com> Change-Id: Ie1e9404069dae883ece8c6b1ca5eb07d284f96c0
-rw-r--r--src/orchestrator/api/projecthandler.go4
-rw-r--r--src/orchestrator/api/projecthandler_test.go52
-rw-r--r--src/orchestrator/examples/example_module.go2
-rw-r--r--src/orchestrator/pkg/module/project.go45
-rw-r--r--src/orchestrator/pkg/module/project_test.go36
5 files changed, 96 insertions, 43 deletions
diff --git a/src/orchestrator/api/projecthandler.go b/src/orchestrator/api/projecthandler.go
index 1830b91d..1e78c676 100644
--- a/src/orchestrator/api/projecthandler.go
+++ b/src/orchestrator/api/projecthandler.go
@@ -49,7 +49,7 @@ func (h projectHandler) createHandler(w http.ResponseWriter, r *http.Request) {
}
// Name is required.
- if p.ProjectName == "" {
+ if p.MetaData.Name == "" {
http.Error(w, "Missing name in POST request", http.StatusBadRequest)
return
}
@@ -70,7 +70,7 @@ func (h projectHandler) createHandler(w http.ResponseWriter, r *http.Request) {
}
// Get handles GET operations on a particular Project Name
-// Returns a rb.Project
+// Returns a Project
func (h projectHandler) getHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
name := vars["project-name"]
diff --git a/src/orchestrator/api/projecthandler_test.go b/src/orchestrator/api/projecthandler_test.go
index 41f515d0..ee6ed358 100644
--- a/src/orchestrator/api/projecthandler_test.go
+++ b/src/orchestrator/api/projecthandler_test.go
@@ -1,5 +1,5 @@
/*
- * Copyright 2018 Intel Corporation, Inc
+ * Copyright 2020 Intel Corporation, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -77,20 +77,32 @@ func TestProjectCreateHandler(t *testing.T) {
label: "Create Project",
expectedCode: http.StatusCreated,
reader: bytes.NewBuffer([]byte(`{
- "project-name":"testProject",
- "description":"Test Project used for unit testing"
- }`)),
+ "metadata" : {
+ "name": "testProject",
+ "description": "Test Project used for unit testing",
+ "userData1": "data1",
+ "userData2": "data2"
+ }
+ }`)),
expected: moduleLib.Project{
- ProjectName: "testProject",
- Description: "Test Project used for unit testing",
+ MetaData: moduleLib.ProjectMetaData{
+ Name: "testProject",
+ Description: "Test Project used for unit testing",
+ UserData1: "data1",
+ UserData2: "data2",
+ },
},
projectClient: &mockProjectManager{
//Items that will be returned by the mocked Client
Items: []moduleLib.Project{
- {
- ProjectName: "testProject",
- Description: "Test Project used for unit testing",
- },
+ moduleLib.Project{
+ MetaData: moduleLib.ProjectMetaData{
+ Name: "testProject",
+ Description: "Test Project used for unit testing",
+ UserData1: "data1",
+ UserData2: "data2",
+ },
+ },
},
},
},
@@ -141,16 +153,24 @@ func TestProjectGetHandler(t *testing.T) {
label: "Get Project",
expectedCode: http.StatusOK,
expected: moduleLib.Project{
- ProjectName: "testProject",
- Description: "A Test project for unit testing",
+ MetaData: moduleLib.ProjectMetaData{
+ Name: "testProject",
+ Description: "Test Project used for unit testing",
+ UserData1: "data1",
+ UserData2: "data2",
+ },
},
name: "testProject",
projectClient: &mockProjectManager{
Items: []moduleLib.Project{
- {
- ProjectName: "testProject",
- Description: "A Test project for unit testing",
- },
+ moduleLib.Project{
+ MetaData: moduleLib.ProjectMetaData{
+ Name: "testProject",
+ Description: "Test Project used for unit testing",
+ UserData1: "data1",
+ UserData2: "data2",
+ },
+ },
},
},
},
diff --git a/src/orchestrator/examples/example_module.go b/src/orchestrator/examples/example_module.go
index 29ecdc23..9138b085 100644
--- a/src/orchestrator/examples/example_module.go
+++ b/src/orchestrator/examples/example_module.go
@@ -31,7 +31,7 @@ func ExampleClient_Project() {
return
}
// Perform operations on Project Module
- _, err := c.Project.CreateProject(moduleLib.Project{ProjectName: "test"})
+ _, err := c.Project.CreateProject(moduleLib.Project{MetaData: moduleLib.ProjectMetaData{Name: "test", Description: "test", UserData1: "userData1", UserData2: "userData2"}})
if err != nil {
log.Println(err)
return
diff --git a/src/orchestrator/pkg/module/project.go b/src/orchestrator/pkg/module/project.go
index e44164f9..796e9e99 100644
--- a/src/orchestrator/pkg/module/project.go
+++ b/src/orchestrator/pkg/module/project.go
@@ -1,5 +1,5 @@
/*
- * Copyright 2019 Intel Corporation, Inc
+ * Copyright 2020 Intel Corporation, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,22 +18,30 @@ package module
import (
"encoding/json"
-
"github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/db"
pkgerrors "github.com/pkg/errors"
)
-// Project contains the parameters needed for Projects
-// It implements the interface for managing the Projects
+
+// Project contains the metaData for Projects
type Project struct {
- ProjectName string `json:"project-name"`
+ MetaData ProjectMetaData`json:"metadata"`
+}
+
+
+// ProjectMetaData contains the parameters for creating a project
+type ProjectMetaData struct {
+ Name string `json:"name"`
Description string `json:"description"`
+ UserData1 string `userData1:"userData1"`
+ UserData2 string `userData2:"userData2"`
}
+
// ProjectKey is the key structure that is used in the database
type ProjectKey struct {
- ProjectName string `json:"rb-name"`
+ ProjectName string `json:"project"`
}
// We will use json marshalling to convert to string to
@@ -47,43 +55,48 @@ func (pk ProjectKey) String() string {
return string(out)
}
-// Manager is an interface exposes the Project functionality
+
+// ProjectManager is an interface exposes the Project functionality
type ProjectManager interface {
CreateProject(pr Project) (Project, error)
GetProject(name string) (Project, error)
DeleteProject(name string) error
}
-// ProjectClient implements the Manager
+
+// ProjectClient implements the ProjectManager
// It will also be used to maintain some localized state
type ProjectClient struct {
storeName string
tagMeta, tagContent string
}
+
// NewProjectClient returns an instance of the ProjectClient
-// which implements the Manager
+// which implements the ProjectManager
func NewProjectClient() *ProjectClient {
return &ProjectClient{
+ storeName: "orchestrator",
tagMeta: "projectmetadata",
}
}
+
// CreateProject a new collection based on the project
func (v *ProjectClient) CreateProject(p Project) (Project, error) {
//Construct the composite key to select the entry
key := ProjectKey{
- ProjectName: p.ProjectName,
+ ProjectName: p.MetaData.Name,
}
//Check if this Project already exists
- _, err := v.GetProject(p.ProjectName)
+ _, err := v.GetProject(p.MetaData.Name)
if err == nil {
return Project{}, pkgerrors.New("Project already exists")
}
- err = db.DBconn.Create(p.ProjectName, key, v.tagMeta, p)
+ err = db.DBconn.Create(v.storeName, key, v.tagMeta, p)
if err != nil {
return Project{}, pkgerrors.Wrap(err, "Creating DB Entry")
}
@@ -91,6 +104,7 @@ func (v *ProjectClient) CreateProject(p Project) (Project, error) {
return p, nil
}
+
// GetProject returns the Project for corresponding name
func (v *ProjectClient) GetProject(name string) (Project, error) {
@@ -98,7 +112,7 @@ func (v *ProjectClient) GetProject(name string) (Project, error) {
key := ProjectKey{
ProjectName: name,
}
- value, err := db.DBconn.Read(name, key, v.tagMeta)
+ value, err := db.DBconn.Read(v.storeName, key, v.tagMeta)
if err != nil {
return Project{}, pkgerrors.Wrap(err, "Get Project")
}
@@ -116,6 +130,7 @@ func (v *ProjectClient) GetProject(name string) (Project, error) {
return Project{}, pkgerrors.New("Error getting Project")
}
+
// DeleteProject the Project from database
func (v *ProjectClient) DeleteProject(name string) error {
@@ -123,11 +138,11 @@ func (v *ProjectClient) DeleteProject(name string) error {
key := ProjectKey{
ProjectName: name,
}
- err := db.DBconn.Delete(name, key, v.tagMeta)
+ err := db.DBconn.Delete(v.storeName, key, v.tagMeta)
if err != nil {
return pkgerrors.Wrap(err, "Delete Project Entry;")
}
//TODO: Delete the collection when the project is deleted
return nil
-}
+} \ No newline at end of file
diff --git a/src/orchestrator/pkg/module/project_test.go b/src/orchestrator/pkg/module/project_test.go
index 7f4d9b3e..90fe30bc 100644
--- a/src/orchestrator/pkg/module/project_test.go
+++ b/src/orchestrator/pkg/module/project_test.go
@@ -1,5 +1,5 @@
/*
- * Copyright 2018 Intel Corporation, Inc
+ * Copyright 2020 Intel Corporation, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -23,6 +23,7 @@ import (
"github.com/onap/multicloud-k8s/src/orchestrator/pkg/infra/db"
+
pkgerrors "github.com/pkg/errors"
)
@@ -37,12 +38,20 @@ func TestCreateProject(t *testing.T) {
{
label: "Create Project",
inp: Project{
- ProjectName: "testProject",
- Description: "A sample Project used for unit testing",
+ MetaData: ProjectMetaData{
+ Name: "testProject",
+ Description: "A sample Project used for unit testing",
+ UserData1: "data1",
+ UserData2: "data2",
+ },
},
expected: Project{
- ProjectName: "testProject",
- Description: "A sample Project used for unit testing",
+ MetaData: ProjectMetaData{
+ Name:"testProject",
+ Description: "A sample Project used for unit testing",
+ UserData1: "data1",
+ UserData2: "data2",
+ },
},
expectedError: "",
mockdb: &db.MockDB{},
@@ -92,16 +101,25 @@ func TestGetProject(t *testing.T) {
label: "Get Project",
name: "testProject",
expected: Project{
- ProjectName: "testProject",
- Description: "Test project for unit testing",
+ MetaData: ProjectMetaData{
+ Name: "testProject",
+ Description: "Test project for unit testing",
+ UserData1: "userData1",
+ UserData2: "userData2",
+ },
},
expectedError: "",
mockdb: &db.MockDB{
Items: map[string]map[string][]byte{
ProjectKey{ProjectName: "testProject"}.String(): {
"projectmetadata": []byte(
- "{\"project-name\":\"testProject\"," +
- "\"description\":\"Test project for unit testing\"}"),
+ "{" +
+ "\"metadata\" : {"+
+ "\"Name\":\"testProject\"," +
+ "\"Description\":\"Test project for unit testing\"," +
+ "\"UserData1\": \"userData1\","+
+ "\"UserData2\":\"userData2\"}"+
+ "}"),
},
},
},