1 package services
2
3 import (
4 "context"
5 "encoding/json"
6 "testing"
7 "time"
8
9 "edge-infra.dev/pkg/edge/api/graph/model"
10 "edge-infra.dev/pkg/edge/api/mocks"
11 workloadApi "edge-infra.dev/pkg/edge/constants/api/workload"
12 secretMgrApi "edge-infra.dev/pkg/lib/gcp/secretmanager"
13
14 "github.com/golang/mock/gomock"
15 assertapi "github.com/stretchr/testify/assert"
16 )
17
18
19 func TestGetSecretName(t *testing.T) {
20 val := "name/testString"
21 result := getSecretName(val)
22 expected := "testString"
23 if result != expected {
24 t.Fatalf(`result = %q want match for %q`, result, expected)
25 }
26 }
27
28 func TestGCPService_AddSecret(t *testing.T) {
29 assert := assertapi.New(t)
30 ctx := context.Background()
31
32 keyValues := []*model.KeyValues{{Key: "name", Value: "john"}}
33 name := "keep-it-a-secret"
34 workload := "edge-helm"
35 owner := "tenant"
36 _type := "helm-repository"
37
38 mockCtrl := gomock.NewController(t)
39 mockGCP := mocks.NewMockGcpClientService(mockCtrl)
40 mockSecretManager := mocks.NewMockSecretManagerService(mockCtrl)
41
42 mockGCP.EXPECT().GetSecretClient(gomock.Any(), gomock.Any()).Return(mockSecretManager, nil).AnyTimes()
43 service := NewGcpService(mockGCP, "top-level-project", nil)
44
45
46 mockSecretManager.EXPECT().AddSecret(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).
47 DoAndReturn(func(_ context.Context, secretID string, secretValue []byte, labels map[string]string, _ bool, _ *time.Time, _ string) error {
48 assert.Equal(name, secretID)
49 m := make(map[string]string)
50 assert.NoError(json.Unmarshal(secretValue, &m))
51 for _, keyValue := range keyValues {
52 assert.Equal(keyValue.Value, m[keyValue.Key])
53 }
54 assert.Equal(name, secretID)
55
56 assert.Len(labels, 4)
57 assert.Equal(labels[secretMgrApi.SecretLabel], string(workloadApi.Tenant))
58 assert.Equal(labels[secretMgrApi.SecretTypeLabel], _type)
59 assert.Equal(labels[secretMgrApi.SecretOwnerLabel], owner)
60 assert.Equal(labels[secretMgrApi.SecretNamespaceSelectorLabel], workload)
61 return nil
62 })
63 assert.Nil(service.AddSecret(ctx, name, owner, _type, keyValues, projectID, &workload, nil))
64
65
66 mockSecretManager.EXPECT().AddSecret(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()).
67 DoAndReturn(func(_ context.Context, secretID string, secretValue []byte, labels map[string]string, _ bool, _ *time.Time, _ string) error {
68 assert.Equal(name, secretID)
69 m := make(map[string]string)
70 assert.NoError(json.Unmarshal(secretValue, &m))
71 for _, keyValue := range keyValues {
72 assert.Equal(keyValue.Value, m[keyValue.Key])
73 }
74 assert.Equal(name, secretID)
75
76 assert.Len(labels, 3)
77 assert.Equal(labels[secretMgrApi.SecretLabel], string(workloadApi.Tenant))
78 assert.Equal(labels[secretMgrApi.SecretTypeLabel], _type)
79 assert.Equal(labels[secretMgrApi.SecretOwnerLabel], owner)
80 return nil
81 })
82 assert.Nil(service.AddSecret(ctx, name, owner, _type, keyValues, projectID, nil, nil))
83 }
84
85 func TestMapSecretManagerToModelEmptySecret(t *testing.T) {
86 ctx := context.Background()
87 assert := assertapi.New(t)
88 result, err := mapSecretManagerToModel(ctx, nil, true, nil)
89 assert.NoError(err)
90 assert.Equal([]*model.SecretManagerResponse{}, result)
91 }
92
View as plain text