aboutsummaryrefslogtreecommitdiffstats
path: root/src/k8splugin/rb
diff options
context:
space:
mode:
authorVictor Morales <victor.morales@intel.com>2019-01-24 17:46:43 -0800
committerVictor Morales <victor.morales@intel.com>2019-01-25 16:52:38 -0800
commit083465d10c8fdeaffa89aa7daa93def3eca77df1 (patch)
tree23135a724a1628e986f9c6748b82f275763cdf10 /src/k8splugin/rb
parent5c4e91705457dc4bdb5526e6f5210fa879ab659d (diff)
Use a standard Go project layout
This project wasn't following some Standard Go Project Layout guidelines(https://github.com/golang-standards/project-layout). This change pretends to organize the source code and following those guidelines. Change-Id: I61085ac20f28069cede013f83034bed06892d87c Signed-off-by: Victor Morales <victor.morales@intel.com> Issue-ID: MULTICLOUD-301
Diffstat (limited to 'src/k8splugin/rb')
-rw-r--r--src/k8splugin/rb/archive.go65
-rw-r--r--src/k8splugin/rb/archive_test.go66
-rw-r--r--src/k8splugin/rb/definition.go164
-rw-r--r--src/k8splugin/rb/definition_test.go420
-rw-r--r--src/k8splugin/rb/profile.go185
-rw-r--r--src/k8splugin/rb/profile_test.go426
6 files changed, 0 insertions, 1326 deletions
diff --git a/src/k8splugin/rb/archive.go b/src/k8splugin/rb/archive.go
deleted file mode 100644
index 8eb0fbed..00000000
--- a/src/k8splugin/rb/archive.go
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2018 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package rb
-
-import (
- "archive/tar"
- "compress/gzip"
- pkgerrors "github.com/pkg/errors"
- "io"
-)
-
-func isTarGz(r io.Reader) error {
- //Check if it is a valid gz
- gzf, err := gzip.NewReader(r)
- if err != nil {
- return pkgerrors.Errorf("Invalid gz format %s", err.Error())
- }
-
- //Check if it is a valid tar file
- //Unfortunately this can only be done by inspecting all the tar contents
- tarR := tar.NewReader(gzf)
- first := true
-
- for true {
- header, err := tarR.Next()
-
- if err == io.EOF {
- //Check if we have just a gzip file without a tar archive inside
- if first {
- return pkgerrors.New("Empty or non-existant Tar file found")
- }
- //End of archive
- break
- }
-
- if err != nil {
- return pkgerrors.Errorf("Error reading tar file %s", err.Error())
- }
-
- //Check if files are of type directory and regular file
- if header.Typeflag != tar.TypeDir &&
- header.Typeflag != tar.TypeReg {
- return pkgerrors.Errorf("Unknown header in tar %s, %s",
- header.Name, string(header.Typeflag))
- }
-
- first = false
- }
-
- return nil
-}
diff --git a/src/k8splugin/rb/archive_test.go b/src/k8splugin/rb/archive_test.go
deleted file mode 100644
index a327dfd4..00000000
--- a/src/k8splugin/rb/archive_test.go
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2018 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package rb
-
-import (
- "bytes"
- "testing"
-)
-
-func TestIsTarGz(t *testing.T) {
-
- t.Run("Valid tar.gz", func(t *testing.T) {
- content := []byte{
- 0x1f, 0x8b, 0x08, 0x08, 0xb0, 0x6b, 0xf4, 0x5b,
- 0x00, 0x03, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x74,
- 0x61, 0x72, 0x00, 0xed, 0xce, 0x41, 0x0a, 0xc2,
- 0x30, 0x10, 0x85, 0xe1, 0xac, 0x3d, 0x45, 0x4e,
- 0x50, 0x12, 0xd2, 0xc4, 0xe3, 0x48, 0xa0, 0x01,
- 0x4b, 0x52, 0x0b, 0xed, 0x88, 0x1e, 0xdf, 0x48,
- 0x11, 0x5c, 0x08, 0xa5, 0x8b, 0x52, 0x84, 0xff,
- 0xdb, 0xbc, 0x61, 0x66, 0x16, 0x4f, 0xd2, 0x2c,
- 0x8d, 0x3c, 0x45, 0xed, 0xc8, 0x54, 0x21, 0xb4,
- 0xef, 0xb4, 0x67, 0x6f, 0xbe, 0x73, 0x61, 0x9d,
- 0xb2, 0xce, 0xd5, 0x55, 0xf0, 0xde, 0xd7, 0x3f,
- 0xdb, 0xd6, 0x49, 0x69, 0xb3, 0x67, 0xa9, 0x8f,
- 0xfb, 0x2c, 0x71, 0xd2, 0x5a, 0xc5, 0xee, 0x92,
- 0x73, 0x8e, 0x43, 0x7f, 0x4b, 0x3f, 0xff, 0xd6,
- 0xee, 0x7f, 0xea, 0x9a, 0x4a, 0x19, 0x1f, 0xe3,
- 0x54, 0xba, 0xd3, 0xd1, 0x55, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1b, 0xbc, 0x00, 0xb5, 0xe8,
- 0x4a, 0xf9, 0x00, 0x28, 0x00, 0x00,
- }
-
- err := isTarGz(bytes.NewBuffer(content))
- if err != nil {
- t.Errorf("Error reading valid Zip file %s", err.Error())
- }
- })
-
- t.Run("Invalid tar.gz", func(t *testing.T) {
- content := []byte{
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xff, 0xf2, 0x48, 0xcd,
- }
-
- err := isTarGz(bytes.NewBuffer(content))
- if err == nil {
- t.Errorf("Error should NOT be nil")
- }
- })
-}
diff --git a/src/k8splugin/rb/definition.go b/src/k8splugin/rb/definition.go
deleted file mode 100644
index 084abe7b..00000000
--- a/src/k8splugin/rb/definition.go
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright 2018 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package rb
-
-import (
- "bytes"
- "encoding/base64"
- "k8splugin/db"
- "log"
-
- uuid "github.com/hashicorp/go-uuid"
- pkgerrors "github.com/pkg/errors"
-)
-
-// Definition contains the parameters needed for resource bundle (rb) definitions
-// It implements the interface for managing the definitions
-type Definition struct {
- UUID string `json:"uuid,omitempty"`
- Name string `json:"name"`
- ChartName string `json:"chart-name"`
- Description string `json:"description"`
- ServiceType string `json:"service-type"`
-}
-
-// DefinitionManager is an interface exposes the resource bundle definition functionality
-type DefinitionManager interface {
- Create(def Definition) (Definition, error)
- List() ([]Definition, error)
- Get(resID string) (Definition, error)
- Delete(resID string) error
- Upload(resID string, inp []byte) error
-}
-
-// DefinitionClient implements the DefinitionManager
-// It will also be used to maintain some localized state
-type DefinitionClient struct {
- storeName string
- tagMeta, tagContent string
-}
-
-// NewDefinitionClient returns an instance of the DefinitionClient
-// which implements the DefinitionManager
-// Uses rbdef collection in underlying db
-func NewDefinitionClient() *DefinitionClient {
- return &DefinitionClient{
- storeName: "rbdef",
- tagMeta: "metadata",
- tagContent: "content",
- }
-}
-
-// Create an entry for the resource in the database
-func (v *DefinitionClient) Create(def Definition) (Definition, error) {
- // If UUID is empty, we will generate one
- if def.UUID == "" {
- def.UUID, _ = uuid.GenerateUUID()
- }
- key := def.UUID
-
- err := db.DBconn.Create(v.storeName, key, v.tagMeta, def)
- if err != nil {
- return Definition{}, pkgerrors.Wrap(err, "Creating DB Entry")
- }
-
- return def, nil
-}
-
-// List all resource entries in the database
-func (v *DefinitionClient) List() ([]Definition, error) {
- res, err := db.DBconn.ReadAll(v.storeName, v.tagMeta)
- if err != nil || len(res) == 0 {
- return []Definition{}, pkgerrors.Wrap(err, "Listing Resource Bundle Definitions")
- }
-
- var results []Definition
- for key, value := range res {
- //value is a byte array
- if len(value) > 0 {
- def := Definition{}
- err = db.DBconn.Unmarshal(value, &def)
- if err != nil {
- log.Printf("[Definition] Error Unmarshaling value for: %s", key)
- continue
- }
- results = append(results, def)
- }
- }
-
- return results, nil
-}
-
-// Get returns the Resource Bundle Definition for corresponding ID
-func (v *DefinitionClient) Get(id string) (Definition, error) {
- value, err := db.DBconn.Read(v.storeName, id, v.tagMeta)
- if err != nil {
- return Definition{}, pkgerrors.Wrap(err, "Get Resource Bundle definition")
- }
-
- //value is a byte array
- if value != nil {
- def := Definition{}
- err = db.DBconn.Unmarshal(value, &def)
- if err != nil {
- return Definition{}, pkgerrors.Wrap(err, "Unmarshaling Value")
- }
- return def, nil
- }
-
- return Definition{}, pkgerrors.New("Error getting Resource Bundle Definition")
-}
-
-// Delete the Resource Bundle definition from database
-func (v *DefinitionClient) Delete(id string) error {
- err := db.DBconn.Delete(v.storeName, id, v.tagMeta)
- if err != nil {
- return pkgerrors.Wrap(err, "Delete Resource Bundle Definition")
- }
-
- //Delete the content when the delete operation happens
- err = db.DBconn.Delete(v.storeName, id, v.tagContent)
- if err != nil {
- return pkgerrors.Wrap(err, "Delete Resource Bundle Definition Content")
- }
-
- return nil
-}
-
-// Upload the contents of resource bundle into database
-func (v *DefinitionClient) Upload(id string, inp []byte) error {
-
- //ignore the returned data here
- _, err := v.Get(id)
- if err != nil {
- return pkgerrors.Errorf("Invalid Definition ID provided: %s", err.Error())
- }
-
- err = isTarGz(bytes.NewBuffer(inp))
- if err != nil {
- return pkgerrors.Errorf("Error in file format: %s", err.Error())
- }
-
- //Encode given byte stream to text for storage
- encodedStr := base64.StdEncoding.EncodeToString(inp)
- err = db.DBconn.Create(v.storeName, id, v.tagContent, encodedStr)
- if err != nil {
- return pkgerrors.Errorf("Error uploading data to db: %s", err.Error())
- }
-
- return nil
-}
diff --git a/src/k8splugin/rb/definition_test.go b/src/k8splugin/rb/definition_test.go
deleted file mode 100644
index f1ec18ee..00000000
--- a/src/k8splugin/rb/definition_test.go
+++ /dev/null
@@ -1,420 +0,0 @@
-// +build unit
-
-/*
- * Copyright 2018 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package rb
-
-import (
- "k8splugin/db"
- "reflect"
- "sort"
- "strings"
- "testing"
-
- pkgerrors "github.com/pkg/errors"
-)
-
-func TestCreateDefinition(t *testing.T) {
- testCases := []struct {
- label string
- inp Definition
- expectedError string
- mockdb *db.MockDB
- expected Definition
- }{
- {
- label: "Create Resource Bundle Definition",
- inp: Definition{
- UUID: "123e4567-e89b-12d3-a456-426655440000",
- Name: "testresourcebundle",
- Description: "testresourcebundle",
- ServiceType: "firewall",
- },
- expected: Definition{
- UUID: "123e4567-e89b-12d3-a456-426655440000",
- Name: "testresourcebundle",
- Description: "testresourcebundle",
- ServiceType: "firewall",
- },
- expectedError: "",
- mockdb: &db.MockDB{},
- },
- {
- label: "Failed Create Resource Bundle Definition",
- expectedError: "Error Creating Definition",
- mockdb: &db.MockDB{
- Err: pkgerrors.New("Error Creating Definition"),
- },
- },
- }
-
- for _, testCase := range testCases {
- t.Run(testCase.label, func(t *testing.T) {
- db.DBconn = testCase.mockdb
- impl := NewDefinitionClient()
- got, err := impl.Create(testCase.inp)
- if err != nil {
- if testCase.expectedError == "" {
- t.Fatalf("Create returned an unexpected error %s", err)
- }
- if strings.Contains(err.Error(), testCase.expectedError) == false {
- t.Fatalf("Create returned an unexpected error %s", err)
- }
- } else {
- if reflect.DeepEqual(testCase.expected, got) == false {
- t.Errorf("Create Resource Bundle returned unexpected body: got %v;"+
- " expected %v", got, testCase.expected)
- }
- }
- })
- }
-}
-
-func TestListDefinition(t *testing.T) {
-
- testCases := []struct {
- label string
- expectedError string
- mockdb *db.MockDB
- expected []Definition
- }{
- {
- label: "List Resource Bundle Definition",
- expected: []Definition{
- {
- UUID: "123e4567-e89b-12d3-a456-426655440000",
- Name: "testresourcebundle",
- Description: "testresourcebundle",
- ServiceType: "firewall",
- },
- {
- UUID: "123e4567-e89b-12d3-a456-426655441111",
- Name: "testresourcebundle2",
- Description: "testresourcebundle2",
- ServiceType: "dns",
- },
- },
- expectedError: "",
- mockdb: &db.MockDB{
- Items: map[string]map[string][]byte{
- "123e4567-e89b-12d3-a456-426655440000": {
- "metadata": []byte(
- "{\"name\":\"testresourcebundle\"," +
- "\"description\":\"testresourcebundle\"," +
- "\"uuid\":\"123e4567-e89b-12d3-a456-426655440000\"," +
- "\"service-type\":\"firewall\"}"),
- },
- "123e4567-e89b-12d3-a456-426655441111": {
- "metadata": []byte(
- "{\"name\":\"testresourcebundle2\"," +
- "\"description\":\"testresourcebundle2\"," +
- "\"uuid\":\"123e4567-e89b-12d3-a456-426655441111\"," +
- "\"service-type\":\"dns\"}"),
- },
- },
- },
- },
- {
- label: "List Error",
- expectedError: "DB Error",
- mockdb: &db.MockDB{
- Err: pkgerrors.New("DB Error"),
- },
- },
- }
-
- for _, testCase := range testCases {
- t.Run(testCase.label, func(t *testing.T) {
- db.DBconn = testCase.mockdb
- impl := NewDefinitionClient()
- got, err := impl.List()
- if err != nil {
- if testCase.expectedError == "" {
- t.Fatalf("List returned an unexpected error %s", err)
- }
- if strings.Contains(err.Error(), testCase.expectedError) == false {
- t.Fatalf("List returned an unexpected error %s", err)
- }
- } else {
- // Since the order of returned slice is not guaranteed
- // Check both and return error if both don't match
- sort.Slice(got, func(i, j int) bool {
- return got[i].UUID < got[j].UUID
- })
- // Sort both as it is not expected that testCase.expected
- // is sorted
- sort.Slice(testCase.expected, func(i, j int) bool {
- return testCase.expected[i].UUID < testCase.expected[j].UUID
- })
-
- if reflect.DeepEqual(testCase.expected, got) == false {
- t.Errorf("List Resource Bundle returned unexpected body: got %v;"+
- " expected %v", got, testCase.expected)
- }
- }
- })
- }
-}
-
-func TestGetDefinition(t *testing.T) {
-
- testCases := []struct {
- label string
- expectedError string
- mockdb *db.MockDB
- inp string
- expected Definition
- }{
- {
- label: "Get Resource Bundle Definition",
- inp: "123e4567-e89b-12d3-a456-426655440000",
- expected: Definition{
- UUID: "123e4567-e89b-12d3-a456-426655440000",
- Name: "testresourcebundle",
- Description: "testresourcebundle",
- ServiceType: "firewall",
- },
- expectedError: "",
- mockdb: &db.MockDB{
- Items: map[string]map[string][]byte{
- "123e4567-e89b-12d3-a456-426655440000": {
- "metadata": []byte(
- "{\"name\":\"testresourcebundle\"," +
- "\"description\":\"testresourcebundle\"," +
- "\"uuid\":\"123e4567-e89b-12d3-a456-426655440000\"," +
- "\"service-type\":\"firewall\"}"),
- },
- },
- },
- },
- {
- label: "Get Error",
- expectedError: "DB Error",
- mockdb: &db.MockDB{
- Err: pkgerrors.New("DB Error"),
- },
- },
- }
-
- for _, testCase := range testCases {
- t.Run(testCase.label, func(t *testing.T) {
- db.DBconn = testCase.mockdb
- impl := NewDefinitionClient()
- got, err := impl.Get(testCase.inp)
- if err != nil {
- if testCase.expectedError == "" {
- t.Fatalf("Get returned an unexpected error %s", err)
- }
- if strings.Contains(err.Error(), testCase.expectedError) == false {
- t.Fatalf("Get returned an unexpected error %s", err)
- }
- } else {
- if reflect.DeepEqual(testCase.expected, got) == false {
- t.Errorf("Get Resource Bundle returned unexpected body: got %v;"+
- " expected %v", got, testCase.expected)
- }
- }
- })
- }
-}
-
-func TestDeleteDefinition(t *testing.T) {
-
- testCases := []struct {
- label string
- inp string
- expectedError string
- mockdb *db.MockDB
- }{
- {
- label: "Delete Resource Bundle Definition",
- inp: "123e4567-e89b-12d3-a456-426655440000",
- mockdb: &db.MockDB{},
- },
- {
- label: "Delete Error",
- expectedError: "DB Error",
- mockdb: &db.MockDB{
- Err: pkgerrors.New("DB Error"),
- },
- },
- }
-
- for _, testCase := range testCases {
- t.Run(testCase.label, func(t *testing.T) {
- db.DBconn = testCase.mockdb
- impl := NewDefinitionClient()
- err := impl.Delete(testCase.inp)
- if err != nil {
- if testCase.expectedError == "" {
- t.Fatalf("Delete returned an unexpected error %s", err)
- }
- if strings.Contains(err.Error(), testCase.expectedError) == false {
- t.Fatalf("Delete returned an unexpected error %s", err)
- }
- }
- })
- }
-}
-
-func TestUploadDefinition(t *testing.T) {
- testCases := []struct {
- label string
- inp string
- content []byte
- expectedError string
- mockdb *db.MockDB
- }{
- {
- label: "Upload Resource Bundle Definition",
- inp: "123e4567-e89b-12d3-a456-426655440000",
- content: []byte{
- 0x1f, 0x8b, 0x08, 0x08, 0xb0, 0x6b, 0xf4, 0x5b,
- 0x00, 0x03, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x74,
- 0x61, 0x72, 0x00, 0xed, 0xce, 0x41, 0x0a, 0xc2,
- 0x30, 0x10, 0x85, 0xe1, 0xac, 0x3d, 0x45, 0x4e,
- 0x50, 0x12, 0xd2, 0xc4, 0xe3, 0x48, 0xa0, 0x01,
- 0x4b, 0x52, 0x0b, 0xed, 0x88, 0x1e, 0xdf, 0x48,
- 0x11, 0x5c, 0x08, 0xa5, 0x8b, 0x52, 0x84, 0xff,
- 0xdb, 0xbc, 0x61, 0x66, 0x16, 0x4f, 0xd2, 0x2c,
- 0x8d, 0x3c, 0x45, 0xed, 0xc8, 0x54, 0x21, 0xb4,
- 0xef, 0xb4, 0x67, 0x6f, 0xbe, 0x73, 0x61, 0x9d,
- 0xb2, 0xce, 0xd5, 0x55, 0xf0, 0xde, 0xd7, 0x3f,
- 0xdb, 0xd6, 0x49, 0x69, 0xb3, 0x67, 0xa9, 0x8f,
- 0xfb, 0x2c, 0x71, 0xd2, 0x5a, 0xc5, 0xee, 0x92,
- 0x73, 0x8e, 0x43, 0x7f, 0x4b, 0x3f, 0xff, 0xd6,
- 0xee, 0x7f, 0xea, 0x9a, 0x4a, 0x19, 0x1f, 0xe3,
- 0x54, 0xba, 0xd3, 0xd1, 0x55, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1b, 0xbc, 0x00, 0xb5, 0xe8,
- 0x4a, 0xf9, 0x00, 0x28, 0x00, 0x00,
- },
- mockdb: &db.MockDB{
- Items: map[string]map[string][]byte{
- "123e4567-e89b-12d3-a456-426655440000": {
- "metadata": []byte(
- "{\"name\":\"testresourcebundle\"," +
- "\"description\":\"testresourcebundle\"," +
- "\"uuid\":\"123e4567-e89b-12d3-a456-426655440000\"," +
- "\"service-type\":\"firewall\"}"),
- },
- },
- },
- },
- {
- label: "Upload with an Invalid Resource Bundle Definition",
- inp: "123e4567-e89b-12d3-a456-426655440000",
- expectedError: "Invalid Definition ID provided",
- content: []byte{
- 0x1f, 0x8b, 0x08, 0x08, 0xb0, 0x6b, 0xf4, 0x5b,
- 0x00, 0x03, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x74,
- 0x61, 0x72, 0x00, 0xed, 0xce, 0x41, 0x0a, 0xc2,
- 0x30, 0x10, 0x85, 0xe1, 0xac, 0x3d, 0x45, 0x4e,
- 0x50, 0x12, 0xd2, 0xc4, 0xe3, 0x48, 0xa0, 0x01,
- 0x4b, 0x52, 0x0b, 0xed, 0x88, 0x1e, 0xdf, 0x48,
- 0x11, 0x5c, 0x08, 0xa5, 0x8b, 0x52, 0x84, 0xff,
- 0xdb, 0xbc, 0x61, 0x66, 0x16, 0x4f, 0xd2, 0x2c,
- 0x8d, 0x3c, 0x45, 0xed, 0xc8, 0x54, 0x21, 0xb4,
- 0xef, 0xb4, 0x67, 0x6f, 0xbe, 0x73, 0x61, 0x9d,
- 0xb2, 0xce, 0xd5, 0x55, 0xf0, 0xde, 0xd7, 0x3f,
- 0xdb, 0xd6, 0x49, 0x69, 0xb3, 0x67, 0xa9, 0x8f,
- 0xfb, 0x2c, 0x71, 0xd2, 0x5a, 0xc5, 0xee, 0x92,
- 0x73, 0x8e, 0x43, 0x7f, 0x4b, 0x3f, 0xff, 0xd6,
- 0xee, 0x7f, 0xea, 0x9a, 0x4a, 0x19, 0x1f, 0xe3,
- 0x54, 0xba, 0xd3, 0xd1, 0x55, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1b, 0xbc, 0x00, 0xb5, 0xe8,
- 0x4a, 0xf9, 0x00, 0x28, 0x00, 0x00,
- },
- mockdb: &db.MockDB{
- Items: map[string]map[string][]byte{
- "123e4567-e89b-12d3-a456-426655441111": {
- "metadata": []byte(
- "{\"name\":\"testresourcebundle\"," +
- "\"description\":\"testresourcebundle\"," +
- "\"uuid\":\"123e4567-e89b-12d3-a456-426655441111\"," +
- "\"service-type\":\"firewall\"}"),
- },
- },
- },
- },
- {
- label: "Invalid File Format Error",
- inp: "123e4567-e89b-12d3-a456-426655440000",
- expectedError: "Error in file format",
- content: []byte{
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xff, 0xf2, 0x48, 0xcd,
- },
- mockdb: &db.MockDB{
- Items: map[string]map[string][]byte{
- "123e4567-e89b-12d3-a456-426655440000": {
- "metadata": []byte(
- "{\"name\":\"testresourcebundle\"," +
- "\"description\":\"testresourcebundle\"," +
- "\"uuid\":\"123e4567-e89b-12d3-a456-426655440000\"," +
- "\"service-type\":\"firewall\"}"),
- },
- },
- },
- },
- {
- label: "Upload Error",
- expectedError: "DB Error",
- content: []byte{
- 0x1f, 0x8b, 0x08, 0x08, 0xb0, 0x6b, 0xf4, 0x5b,
- 0x00, 0x03, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x74,
- 0x61, 0x72, 0x00, 0xed, 0xce, 0x41, 0x0a, 0xc2,
- 0x30, 0x10, 0x85, 0xe1, 0xac, 0x3d, 0x45, 0x4e,
- 0x50, 0x12, 0xd2, 0xc4, 0xe3, 0x48, 0xa0, 0x01,
- 0x4b, 0x52, 0x0b, 0xed, 0x88, 0x1e, 0xdf, 0x48,
- 0x11, 0x5c, 0x08, 0xa5, 0x8b, 0x52, 0x84, 0xff,
- 0xdb, 0xbc, 0x61, 0x66, 0x16, 0x4f, 0xd2, 0x2c,
- 0x8d, 0x3c, 0x45, 0xed, 0xc8, 0x54, 0x21, 0xb4,
- 0xef, 0xb4, 0x67, 0x6f, 0xbe, 0x73, 0x61, 0x9d,
- 0xb2, 0xce, 0xd5, 0x55, 0xf0, 0xde, 0xd7, 0x3f,
- 0xdb, 0xd6, 0x49, 0x69, 0xb3, 0x67, 0xa9, 0x8f,
- 0xfb, 0x2c, 0x71, 0xd2, 0x5a, 0xc5, 0xee, 0x92,
- 0x73, 0x8e, 0x43, 0x7f, 0x4b, 0x3f, 0xff, 0xd6,
- 0xee, 0x7f, 0xea, 0x9a, 0x4a, 0x19, 0x1f, 0xe3,
- 0x54, 0xba, 0xd3, 0xd1, 0x55, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1b, 0xbc, 0x00, 0xb5, 0xe8,
- 0x4a, 0xf9, 0x00, 0x28, 0x00, 0x00,
- },
- mockdb: &db.MockDB{
- Err: pkgerrors.New("DB Error"),
- },
- },
- }
-
- for _, testCase := range testCases {
- t.Run(testCase.label, func(t *testing.T) {
- db.DBconn = testCase.mockdb
- impl := NewDefinitionClient()
- err := impl.Upload(testCase.inp, testCase.content)
- if err != nil {
- if testCase.expectedError == "" {
- t.Errorf("Upload returned an unexpected error %s", err)
- }
- if strings.Contains(err.Error(), testCase.expectedError) == false {
- t.Errorf("Upload returned an unexpected error %s", err)
- }
- }
- })
- }
-}
diff --git a/src/k8splugin/rb/profile.go b/src/k8splugin/rb/profile.go
deleted file mode 100644
index bbd43fea..00000000
--- a/src/k8splugin/rb/profile.go
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Copyright 2018 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package rb
-
-import (
- "bytes"
- "encoding/base64"
- "k8splugin/db"
- "log"
-
- uuid "github.com/hashicorp/go-uuid"
- pkgerrors "github.com/pkg/errors"
-)
-
-// Profile contains the parameters needed for resource bundle (rb) profiles
-// It implements the interface for managing the profiles
-type Profile struct {
- UUID string `json:"uuid,omitempty"`
- RBDID string `json:"rbdid"`
- Name string `json:"name"`
- Namespace string `json:"namespace"`
- KubernetesVersion string `json:"kubernetesversion"`
-}
-
-// ProfileManager is an interface exposes the resource bundle profile functionality
-type ProfileManager interface {
- Create(def Profile) (Profile, error)
- List() ([]Profile, error)
- Get(resID string) (Profile, error)
- Help() map[string]string
- Delete(resID string) error
- Upload(resID string, inp []byte) error
-}
-
-// ProfileClient implements the ProfileManager
-// It will also be used to maintain some localized state
-type ProfileClient struct {
- storeName string
- tagMeta, tagContent string
-}
-
-// NewProfileClient returns an instance of the ProfileClient
-// which implements the ProfileManager
-// Uses rb/def prefix
-func NewProfileClient() *ProfileClient {
- return &ProfileClient{
- storeName: "rbprofile",
- tagMeta: "metadata",
- tagContent: "content",
- }
-}
-
-// Help returns some information on how to create the content
-// for the profile in the form of html formatted page
-func (v *ProfileClient) Help() map[string]string {
- ret := make(map[string]string)
-
- return ret
-}
-
-// Create an entry for the resource bundle profile in the database
-func (v *ProfileClient) Create(p Profile) (Profile, error) {
-
- //Check if provided RBID is a valid resource bundle
- _, err := NewDefinitionClient().Get(p.RBDID)
- if err != nil {
- return Profile{}, pkgerrors.Errorf("Invalid Resource Bundle ID provided: %s", err.Error())
- }
-
- // Name is required
- if p.Name == "" {
- return Profile{}, pkgerrors.New("Name is required for Resource Bundle Profile")
- }
-
- // If UUID is empty, we will generate one
- if p.UUID == "" {
- p.UUID, _ = uuid.GenerateUUID()
- }
- key := p.UUID
-
- err = db.DBconn.Create(v.storeName, key, v.tagMeta, p)
- if err != nil {
- return Profile{}, pkgerrors.Wrap(err, "Creating Profile DB Entry")
- }
-
- return p, nil
-}
-
-// List all resource entries in the database
-func (v *ProfileClient) List() ([]Profile, error) {
- res, err := db.DBconn.ReadAll(v.storeName, v.tagMeta)
- if err != nil || len(res) == 0 {
- return []Profile{}, pkgerrors.Wrap(err, "Listing Resource Bundle Profiles")
- }
-
- var retData []Profile
-
- for key, value := range res {
- //value is a byte array
- if len(value) > 0 {
- pr := Profile{}
- err = db.DBconn.Unmarshal(value, &pr)
- if err != nil {
- log.Printf("[Profile] Error Unmarshaling value for: %s", key)
- continue
- }
- retData = append(retData, pr)
- }
- }
-
- return retData, nil
-}
-
-// Get returns the Resource Bundle Profile for corresponding ID
-func (v *ProfileClient) Get(id string) (Profile, error) {
- value, err := db.DBconn.Read(v.storeName, id, v.tagMeta)
- if err != nil {
- return Profile{}, pkgerrors.Wrap(err, "Get Resource Bundle Profile")
- }
-
- //value is a byte array
- if value != nil {
- pr := Profile{}
- err = db.DBconn.Unmarshal(value, &pr)
- if err != nil {
- return Profile{}, pkgerrors.Wrap(err, "Unmarshaling Profile Value")
- }
- return pr, nil
- }
-
- return Profile{}, pkgerrors.New("Error getting Resource Bundle Profile")
-}
-
-// Delete the Resource Bundle Profile from database
-func (v *ProfileClient) Delete(id string) error {
- err := db.DBconn.Delete(v.storeName, id, v.tagMeta)
- if err != nil {
- return pkgerrors.Wrap(err, "Delete Resource Bundle Profile")
- }
-
- err = db.DBconn.Delete(v.storeName, id, v.tagContent)
- if err != nil {
- return pkgerrors.Wrap(err, "Delete Resource Bundle Profile Content")
- }
-
- return nil
-}
-
-// Upload the contents of resource bundle into database
-func (v *ProfileClient) Upload(id string, inp []byte) error {
-
- //ignore the returned data here.
- _, err := v.Get(id)
- if err != nil {
- return pkgerrors.Errorf("Invalid Profile ID provided %s", err.Error())
- }
-
- err = isTarGz(bytes.NewBuffer(inp))
- if err != nil {
- return pkgerrors.Errorf("Error in file format %s", err.Error())
- }
-
- //Encode given byte stream to text for storage
- encodedStr := base64.StdEncoding.EncodeToString(inp)
- err = db.DBconn.Create(v.storeName, id, v.tagContent, encodedStr)
- if err != nil {
- return pkgerrors.Errorf("Error uploading data to db %s", err.Error())
- }
-
- return nil
-}
diff --git a/src/k8splugin/rb/profile_test.go b/src/k8splugin/rb/profile_test.go
deleted file mode 100644
index 2540d3ca..00000000
--- a/src/k8splugin/rb/profile_test.go
+++ /dev/null
@@ -1,426 +0,0 @@
-// +build unit
-
-/*
- * Copyright 2018 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package rb
-
-import (
- "k8splugin/db"
- "reflect"
- "sort"
- "strings"
- "testing"
-
- pkgerrors "github.com/pkg/errors"
-)
-
-func TestCreateProfile(t *testing.T) {
- testCases := []struct {
- label string
- inp Profile
- expectedError string
- mockdb *db.MockDB
- expected Profile
- }{
- {
- label: "Create Resource Bundle Profile",
- inp: Profile{
- UUID: "123e4567-e89b-12d3-a456-426655440000",
- RBDID: "abcde123-e89b-8888-a456-986655447236",
- Name: "testresourcebundle",
- Namespace: "default",
- KubernetesVersion: "1.12.3",
- },
- expected: Profile{
- UUID: "123e4567-e89b-12d3-a456-426655440000",
- RBDID: "abcde123-e89b-8888-a456-986655447236",
- Name: "testresourcebundle",
- Namespace: "default",
- KubernetesVersion: "1.12.3",
- },
- expectedError: "",
- mockdb: &db.MockDB{
- Items: map[string]map[string][]byte{
- "abcde123-e89b-8888-a456-986655447236": {
- "metadata": []byte(
- "{\"name\":\"testresourcebundle\"," +
- "\"namespace\":\"default\"," +
- "\"uuid\":\"123e4567-e89b-12d3-a456-426655440000\"," +
- "\"kubernetesversion\":\"1.12.3\"}"),
- },
- },
- },
- },
- {
- label: "Failed Create Resource Bundle Profile",
- expectedError: "Error Creating Profile",
- mockdb: &db.MockDB{
- Err: pkgerrors.New("Error Creating Profile"),
- },
- },
- }
-
- for _, testCase := range testCases {
- t.Run(testCase.label, func(t *testing.T) {
- db.DBconn = testCase.mockdb
- impl := NewProfileClient()
- got, err := impl.Create(testCase.inp)
- if err != nil {
- if testCase.expectedError == "" {
- t.Fatalf("Create returned an unexpected error %s", err)
- }
- if strings.Contains(err.Error(), testCase.expectedError) == false {
- t.Fatalf("Create returned an unexpected error %s", err)
- }
- } else {
- if reflect.DeepEqual(testCase.expected, got) == false {
- t.Errorf("Create Resource Bundle returned unexpected body: got %v;"+
- " expected %v", got, testCase.expected)
- }
- }
- })
- }
-}
-
-func TestListProfiles(t *testing.T) {
-
- testCases := []struct {
- label string
- expectedError string
- mockdb *db.MockDB
- expected []Profile
- }{
- {
- label: "List Resource Bundle Profile",
- expected: []Profile{
- {
- UUID: "123e4567-e89b-12d3-a456-426655440000",
- RBDID: "abcde123-e89b-8888-a456-986655447236",
- Name: "testresourcebundle",
- Namespace: "default",
- KubernetesVersion: "1.12.3",
- },
- },
- expectedError: "",
- mockdb: &db.MockDB{
- Items: map[string]map[string][]byte{
- "123e4567-e89b-12d3-a456-426655440000": {
- "metadata": []byte(
- "{\"name\":\"testresourcebundle\"," +
- "\"namespace\":\"default\"," +
- "\"uuid\":\"123e4567-e89b-12d3-a456-426655440000\"," +
- "\"rbdid\":\"abcde123-e89b-8888-a456-986655447236\"," +
- "\"kubernetesversion\":\"1.12.3\"}"),
- },
- },
- },
- },
- {
- label: "List Error",
- expectedError: "DB Error",
- mockdb: &db.MockDB{
- Err: pkgerrors.New("DB Error"),
- },
- },
- }
-
- for _, testCase := range testCases {
- t.Run(testCase.label, func(t *testing.T) {
- db.DBconn = testCase.mockdb
- impl := NewProfileClient()
- got, err := impl.List()
- if err != nil {
- if testCase.expectedError == "" {
- t.Fatalf("List returned an unexpected error %s", err)
- }
- if strings.Contains(err.Error(), testCase.expectedError) == false {
- t.Fatalf("List returned an unexpected error %s", err)
- }
- } else {
- // Since the order of returned slice is not guaranteed
- // Check both and return error if both don't match
- sort.Slice(got, func(i, j int) bool {
- return got[i].UUID < got[j].UUID
- })
- // Sort both as it is not expected that testCase.expected
- // is sorted
- sort.Slice(testCase.expected, func(i, j int) bool {
- return testCase.expected[i].UUID < testCase.expected[j].UUID
- })
-
- if reflect.DeepEqual(testCase.expected, got) == false {
- t.Errorf("List Resource Bundle returned unexpected body: got %v;"+
- " expected %v", got, testCase.expected)
- }
- }
- })
- }
-}
-
-func TestGetProfile(t *testing.T) {
-
- testCases := []struct {
- label string
- expectedError string
- mockdb *db.MockDB
- inp string
- expected Profile
- }{
- {
- label: "Get Resource Bundle Profile",
- inp: "123e4567-e89b-12d3-a456-426655440000",
- expected: Profile{
- UUID: "123e4567-e89b-12d3-a456-426655440000",
- RBDID: "abcde123-e89b-8888-a456-986655447236",
- Name: "testresourcebundle",
- Namespace: "default",
- KubernetesVersion: "1.12.3",
- },
- expectedError: "",
- mockdb: &db.MockDB{
- Items: map[string]map[string][]byte{
- "123e4567-e89b-12d3-a456-426655440000": {
- "metadata": []byte(
- "{\"name\":\"testresourcebundle\"," +
- "\"namespace\":\"default\"," +
- "\"uuid\":\"123e4567-e89b-12d3-a456-426655440000\"," +
- "\"rbdid\":\"abcde123-e89b-8888-a456-986655447236\"," +
- "\"kubernetesversion\":\"1.12.3\"}"),
- },
- },
- },
- },
- {
- label: "Get Error",
- expectedError: "DB Error",
- mockdb: &db.MockDB{
- Err: pkgerrors.New("DB Error"),
- },
- },
- }
-
- for _, testCase := range testCases {
- t.Run(testCase.label, func(t *testing.T) {
- db.DBconn = testCase.mockdb
- impl := NewProfileClient()
- got, err := impl.Get(testCase.inp)
- if err != nil {
- if testCase.expectedError == "" {
- t.Fatalf("Get returned an unexpected error %s", err)
- }
- if strings.Contains(err.Error(), testCase.expectedError) == false {
- t.Fatalf("Get returned an unexpected error %s", err)
- }
- } else {
- if reflect.DeepEqual(testCase.expected, got) == false {
- t.Errorf("Get Resource Bundle returned unexpected body: got %v;"+
- " expected %v", got, testCase.expected)
- }
- }
- })
- }
-}
-
-func TestDeleteProfile(t *testing.T) {
-
- testCases := []struct {
- label string
- inp string
- expectedError string
- mockdb *db.MockDB
- }{
- {
- label: "Delete Resource Bundle Profile",
- inp: "123e4567-e89b-12d3-a456-426655440000",
- mockdb: &db.MockDB{},
- },
- {
- label: "Delete Error",
- expectedError: "DB Error",
- mockdb: &db.MockDB{
- Err: pkgerrors.New("DB Error"),
- },
- },
- }
-
- for _, testCase := range testCases {
- t.Run(testCase.label, func(t *testing.T) {
- db.DBconn = testCase.mockdb
- impl := NewProfileClient()
- err := impl.Delete(testCase.inp)
- if err != nil {
- if testCase.expectedError == "" {
- t.Fatalf("Delete returned an unexpected error %s", err)
- }
- if strings.Contains(err.Error(), testCase.expectedError) == false {
- t.Fatalf("Delete returned an unexpected error %s", err)
- }
- }
- })
- }
-}
-
-func TestUploadProfile(t *testing.T) {
- testCases := []struct {
- label string
- inp string
- content []byte
- expectedError string
- mockdb *db.MockDB
- }{
- {
- label: "Upload Resource Bundle Profile",
- inp: "123e4567-e89b-12d3-a456-426655440000",
- content: []byte{
- 0x1f, 0x8b, 0x08, 0x08, 0xb0, 0x6b, 0xf4, 0x5b,
- 0x00, 0x03, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x74,
- 0x61, 0x72, 0x00, 0xed, 0xce, 0x41, 0x0a, 0xc2,
- 0x30, 0x10, 0x85, 0xe1, 0xac, 0x3d, 0x45, 0x4e,
- 0x50, 0x12, 0xd2, 0xc4, 0xe3, 0x48, 0xa0, 0x01,
- 0x4b, 0x52, 0x0b, 0xed, 0x88, 0x1e, 0xdf, 0x48,
- 0x11, 0x5c, 0x08, 0xa5, 0x8b, 0x52, 0x84, 0xff,
- 0xdb, 0xbc, 0x61, 0x66, 0x16, 0x4f, 0xd2, 0x2c,
- 0x8d, 0x3c, 0x45, 0xed, 0xc8, 0x54, 0x21, 0xb4,
- 0xef, 0xb4, 0x67, 0x6f, 0xbe, 0x73, 0x61, 0x9d,
- 0xb2, 0xce, 0xd5, 0x55, 0xf0, 0xde, 0xd7, 0x3f,
- 0xdb, 0xd6, 0x49, 0x69, 0xb3, 0x67, 0xa9, 0x8f,
- 0xfb, 0x2c, 0x71, 0xd2, 0x5a, 0xc5, 0xee, 0x92,
- 0x73, 0x8e, 0x43, 0x7f, 0x4b, 0x3f, 0xff, 0xd6,
- 0xee, 0x7f, 0xea, 0x9a, 0x4a, 0x19, 0x1f, 0xe3,
- 0x54, 0xba, 0xd3, 0xd1, 0x55, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1b, 0xbc, 0x00, 0xb5, 0xe8,
- 0x4a, 0xf9, 0x00, 0x28, 0x00, 0x00,
- },
- mockdb: &db.MockDB{
- Items: map[string]map[string][]byte{
- "123e4567-e89b-12d3-a456-426655440000": {
- "metadata": []byte(
- "{\"name\":\"testresourcebundle\"," +
- "\"namespace\":\"default\"," +
- "\"uuid\":\"123e4567-e89b-12d3-a456-426655440000\"," +
- "\"rbdid\":\"abcde123-e89b-8888-a456-986655447236\"," +
- "\"kubernetesversion\":\"1.12.3\"}"),
- },
- },
- },
- },
- {
- label: "Upload with an Invalid Resource Bundle Profile",
- inp: "123e4567-e89b-12d3-a456-426655440000",
- expectedError: "Invalid Profile ID provided",
- content: []byte{
- 0x1f, 0x8b, 0x08, 0x08, 0xb0, 0x6b, 0xf4, 0x5b,
- 0x00, 0x03, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x74,
- 0x61, 0x72, 0x00, 0xed, 0xce, 0x41, 0x0a, 0xc2,
- 0x30, 0x10, 0x85, 0xe1, 0xac, 0x3d, 0x45, 0x4e,
- 0x50, 0x12, 0xd2, 0xc4, 0xe3, 0x48, 0xa0, 0x01,
- 0x4b, 0x52, 0x0b, 0xed, 0x88, 0x1e, 0xdf, 0x48,
- 0x11, 0x5c, 0x08, 0xa5, 0x8b, 0x52, 0x84, 0xff,
- 0xdb, 0xbc, 0x61, 0x66, 0x16, 0x4f, 0xd2, 0x2c,
- 0x8d, 0x3c, 0x45, 0xed, 0xc8, 0x54, 0x21, 0xb4,
- 0xef, 0xb4, 0x67, 0x6f, 0xbe, 0x73, 0x61, 0x9d,
- 0xb2, 0xce, 0xd5, 0x55, 0xf0, 0xde, 0xd7, 0x3f,
- 0xdb, 0xd6, 0x49, 0x69, 0xb3, 0x67, 0xa9, 0x8f,
- 0xfb, 0x2c, 0x71, 0xd2, 0x5a, 0xc5, 0xee, 0x92,
- 0x73, 0x8e, 0x43, 0x7f, 0x4b, 0x3f, 0xff, 0xd6,
- 0xee, 0x7f, 0xea, 0x9a, 0x4a, 0x19, 0x1f, 0xe3,
- 0x54, 0xba, 0xd3, 0xd1, 0x55, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1b, 0xbc, 0x00, 0xb5, 0xe8,
- 0x4a, 0xf9, 0x00, 0x28, 0x00, 0x00,
- },
- mockdb: &db.MockDB{
- Items: map[string]map[string][]byte{
- "123e4567-e89b-12d3-a456-426655441111": {
- "metadata": []byte(
- "{\"name\":\"testresourcebundle\"," +
- "\"namespace\":\"default\"," +
- "\"uuid\":\"123e4567-e89b-12d3-a456-426655441111\"," +
- "\"rbdid\":\"abcde123-e89b-8888-a456-986655447236\"," +
- "\"kubernetesversion\":\"1.12.3\"}"),
- },
- },
- },
- },
- {
- label: "Invalid File Format Error",
- inp: "123e4567-e89b-12d3-a456-426655440000",
- expectedError: "Error in file format",
- content: []byte{
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xff, 0xf2, 0x48, 0xcd,
- },
- mockdb: &db.MockDB{
- Items: map[string]map[string][]byte{
- "123e4567-e89b-12d3-a456-426655440000": {
- "metadata": []byte(
- "{\"name\":\"testresourcebundle\"," +
- "\"namespace\":\"default\"," +
- "\"uuid\":\"123e4567-e89b-12d3-a456-426655440000\"," +
- "\"rbdid\":\"abcde123-e89b-8888-a456-986655447236\"," +
- "\"kubernetesversion\":\"1.12.3\"}"),
- },
- },
- },
- },
- {
- label: "Upload Error",
- expectedError: "DB Error",
- content: []byte{
- 0x1f, 0x8b, 0x08, 0x08, 0xb0, 0x6b, 0xf4, 0x5b,
- 0x00, 0x03, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x74,
- 0x61, 0x72, 0x00, 0xed, 0xce, 0x41, 0x0a, 0xc2,
- 0x30, 0x10, 0x85, 0xe1, 0xac, 0x3d, 0x45, 0x4e,
- 0x50, 0x12, 0xd2, 0xc4, 0xe3, 0x48, 0xa0, 0x01,
- 0x4b, 0x52, 0x0b, 0xed, 0x88, 0x1e, 0xdf, 0x48,
- 0x11, 0x5c, 0x08, 0xa5, 0x8b, 0x52, 0x84, 0xff,
- 0xdb, 0xbc, 0x61, 0x66, 0x16, 0x4f, 0xd2, 0x2c,
- 0x8d, 0x3c, 0x45, 0xed, 0xc8, 0x54, 0x21, 0xb4,
- 0xef, 0xb4, 0x67, 0x6f, 0xbe, 0x73, 0x61, 0x9d,
- 0xb2, 0xce, 0xd5, 0x55, 0xf0, 0xde, 0xd7, 0x3f,
- 0xdb, 0xd6, 0x49, 0x69, 0xb3, 0x67, 0xa9, 0x8f,
- 0xfb, 0x2c, 0x71, 0xd2, 0x5a, 0xc5, 0xee, 0x92,
- 0x73, 0x8e, 0x43, 0x7f, 0x4b, 0x3f, 0xff, 0xd6,
- 0xee, 0x7f, 0xea, 0x9a, 0x4a, 0x19, 0x1f, 0xe3,
- 0x54, 0xba, 0xd3, 0xd1, 0x55, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x1b, 0xbc, 0x00, 0xb5, 0xe8,
- 0x4a, 0xf9, 0x00, 0x28, 0x00, 0x00,
- },
- mockdb: &db.MockDB{
- Err: pkgerrors.New("DB Error"),
- },
- },
- }
-
- for _, testCase := range testCases {
- t.Run(testCase.label, func(t *testing.T) {
- db.DBconn = testCase.mockdb
- impl := NewProfileClient()
- err := impl.Upload(testCase.inp, testCase.content)
- if err != nil {
- if testCase.expectedError == "" {
- t.Errorf("Upload returned an unexpected error %s", err)
- }
- if strings.Contains(err.Error(), testCase.expectedError) == false {
- t.Errorf("Upload returned an unexpected error %s", err)
- }
- }
- })
- }
-}