package services import ( "context" "encoding/json" "testing" "time" "edge-infra.dev/pkg/edge/api/graph/model" "edge-infra.dev/pkg/edge/api/mocks" workloadApi "edge-infra.dev/pkg/edge/constants/api/workload" secretMgrApi "edge-infra.dev/pkg/lib/gcp/secretmanager" "github.com/golang/mock/gomock" assertapi "github.com/stretchr/testify/assert" ) // Unit tests for getSecretName func TestGetSecretName(t *testing.T) { val := "name/testString" result := getSecretName(val) expected := "testString" if result != expected { t.Fatalf(`result = %q want match for %q`, result, expected) } } func TestGCPService_AddSecret(t *testing.T) { assert := assertapi.New(t) ctx := context.Background() keyValues := []*model.KeyValues{{Key: "name", Value: "john"}} name := "keep-it-a-secret" workload := "edge-helm" owner := "tenant" _type := "helm-repository" mockCtrl := gomock.NewController(t) mockGCP := mocks.NewMockGcpClientService(mockCtrl) mockSecretManager := mocks.NewMockSecretManagerService(mockCtrl) mockGCP.EXPECT().GetSecretClient(gomock.Any(), gomock.Any()).Return(mockSecretManager, nil).AnyTimes() service := NewGcpService(mockGCP, "top-level-project", nil) // workload not nil mockSecretManager.EXPECT().AddSecret(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()). DoAndReturn(func(_ context.Context, secretID string, secretValue []byte, labels map[string]string, _ bool, _ *time.Time, _ string) error { assert.Equal(name, secretID) m := make(map[string]string) assert.NoError(json.Unmarshal(secretValue, &m)) for _, keyValue := range keyValues { assert.Equal(keyValue.Value, m[keyValue.Key]) } assert.Equal(name, secretID) // assert for labels assert.Len(labels, 4) assert.Equal(labels[secretMgrApi.SecretLabel], string(workloadApi.Tenant)) assert.Equal(labels[secretMgrApi.SecretTypeLabel], _type) assert.Equal(labels[secretMgrApi.SecretOwnerLabel], owner) assert.Equal(labels[secretMgrApi.SecretNamespaceSelectorLabel], workload) return nil }) assert.Nil(service.AddSecret(ctx, name, owner, _type, keyValues, projectID, &workload, nil)) // workload is nil mockSecretManager.EXPECT().AddSecret(gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any(), gomock.Any()). DoAndReturn(func(_ context.Context, secretID string, secretValue []byte, labels map[string]string, _ bool, _ *time.Time, _ string) error { assert.Equal(name, secretID) m := make(map[string]string) assert.NoError(json.Unmarshal(secretValue, &m)) for _, keyValue := range keyValues { assert.Equal(keyValue.Value, m[keyValue.Key]) } assert.Equal(name, secretID) // assert for labels assert.Len(labels, 3) assert.Equal(labels[secretMgrApi.SecretLabel], string(workloadApi.Tenant)) assert.Equal(labels[secretMgrApi.SecretTypeLabel], _type) assert.Equal(labels[secretMgrApi.SecretOwnerLabel], owner) return nil }) assert.Nil(service.AddSecret(ctx, name, owner, _type, keyValues, projectID, nil, nil)) } func TestMapSecretManagerToModelEmptySecret(t *testing.T) { ctx := context.Background() assert := assertapi.New(t) result, err := mapSecretManagerToModel(ctx, nil, true, nil) assert.NoError(err) assert.Equal([]*model.SecretManagerResponse{}, result) }