aboutsummaryrefslogtreecommitdiffstats
path: root/src/orchestrator/pkg/module
diff options
context:
space:
mode:
Diffstat (limited to 'src/orchestrator/pkg/module')
-rw-r--r--src/orchestrator/pkg/module/project.go45
-rw-r--r--src/orchestrator/pkg/module/project_test.go36
2 files changed, 57 insertions, 24 deletions
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\"}"+
+ "}"),
},
},
},