|
@@ -284,8 +284,9 @@ func TestClientGetAllSecrets(t *testing.T) {
|
|
|
|
|
|
|
|
func TestClientGetSecret(t *testing.T) {
|
|
func TestClientGetSecret(t *testing.T) {
|
|
|
type fields struct {
|
|
type fields struct {
|
|
|
- ksmClient SecurityClient
|
|
|
|
|
- folderID string
|
|
|
|
|
|
|
+ ksmClient SecurityClient
|
|
|
|
|
+ folderID string
|
|
|
|
|
+ getByTitleFallback bool
|
|
|
}
|
|
}
|
|
|
type args struct {
|
|
type args struct {
|
|
|
ctx context.Context
|
|
ctx context.Context
|
|
@@ -306,7 +307,8 @@ func TestClientGetSecret(t *testing.T) {
|
|
|
return []*ksm.Record{generateRecords()[0]}, nil
|
|
return []*ksm.Record{generateRecords()[0]}, nil
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
|
- folderID: folderID,
|
|
|
|
|
|
|
+ folderID: folderID,
|
|
|
|
|
+ getByTitleFallback: false,
|
|
|
},
|
|
},
|
|
|
args: args{
|
|
args: args{
|
|
|
ctx: context.Background(),
|
|
ctx: context.Background(),
|
|
@@ -326,7 +328,8 @@ func TestClientGetSecret(t *testing.T) {
|
|
|
return []*ksm.Record{generateRecords()[0]}, nil
|
|
return []*ksm.Record{generateRecords()[0]}, nil
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
|
- folderID: folderID,
|
|
|
|
|
|
|
+ folderID: folderID,
|
|
|
|
|
+ getByTitleFallback: false,
|
|
|
},
|
|
},
|
|
|
args: args{
|
|
args: args{
|
|
|
ctx: context.Background(),
|
|
ctx: context.Background(),
|
|
@@ -345,7 +348,8 @@ func TestClientGetSecret(t *testing.T) {
|
|
|
return []*ksm.Record{generateRecordWithLabels()}, nil
|
|
return []*ksm.Record{generateRecordWithLabels()}, nil
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
|
- folderID: folderID,
|
|
|
|
|
|
|
+ folderID: folderID,
|
|
|
|
|
+ getByTitleFallback: false,
|
|
|
},
|
|
},
|
|
|
args: args{
|
|
args: args{
|
|
|
ctx: context.Background(),
|
|
ctx: context.Background(),
|
|
@@ -365,7 +369,8 @@ func TestClientGetSecret(t *testing.T) {
|
|
|
return []*ksm.Record{generateRecordWithLabels()}, nil
|
|
return []*ksm.Record{generateRecordWithLabels()}, nil
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
|
- folderID: folderID,
|
|
|
|
|
|
|
+ folderID: folderID,
|
|
|
|
|
+ getByTitleFallback: false,
|
|
|
},
|
|
},
|
|
|
args: args{
|
|
args: args{
|
|
|
ctx: context.Background(),
|
|
ctx: context.Background(),
|
|
@@ -384,7 +389,8 @@ func TestClientGetSecret(t *testing.T) {
|
|
|
return []*ksm.Record{generateRecordWithLabels()}, nil
|
|
return []*ksm.Record{generateRecordWithLabels()}, nil
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
|
- folderID: folderID,
|
|
|
|
|
|
|
+ folderID: folderID,
|
|
|
|
|
+ getByTitleFallback: false,
|
|
|
},
|
|
},
|
|
|
args: args{
|
|
args: args{
|
|
|
ctx: context.Background(),
|
|
ctx: context.Background(),
|
|
@@ -403,7 +409,8 @@ func TestClientGetSecret(t *testing.T) {
|
|
|
return []*ksm.Record{generateRecords()[0], generateRecords()[0]}, nil
|
|
return []*ksm.Record{generateRecords()[0], generateRecords()[0]}, nil
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
|
- folderID: folderID,
|
|
|
|
|
|
|
+ folderID: folderID,
|
|
|
|
|
+ getByTitleFallback: false,
|
|
|
},
|
|
},
|
|
|
args: args{
|
|
args: args{
|
|
|
ctx: context.Background(),
|
|
ctx: context.Background(),
|
|
@@ -415,14 +422,96 @@ func TestClientGetSecret(t *testing.T) {
|
|
|
wantErr: false,
|
|
wantErr: false,
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
- name: "Get non existing secret",
|
|
|
|
|
|
|
+ name: "Get secret by ID",
|
|
|
|
|
+ fields: fields{
|
|
|
|
|
+ ksmClient: &fake.MockKeeperClient{
|
|
|
|
|
+ GetSecretsFn: func(filter []string) ([]*ksm.Record, error) {
|
|
|
|
|
+ return []*ksm.Record{generateRecords()[0], generateRecords()[0]}, nil
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ folderID: folderID,
|
|
|
|
|
+ getByTitleFallback: false,
|
|
|
|
|
+ },
|
|
|
|
|
+ args: args{
|
|
|
|
|
+ ctx: context.Background(),
|
|
|
|
|
+ ref: esv1.ExternalSecretDataRemoteRef{
|
|
|
|
|
+ Key: record0,
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ want: []byte(outputRecord0),
|
|
|
|
|
+ wantErr: false,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ name: "Get secret by ID (with fallback)",
|
|
|
|
|
+ fields: fields{
|
|
|
|
|
+ ksmClient: &fake.MockKeeperClient{
|
|
|
|
|
+ GetSecretsFn: func(filter []string) ([]*ksm.Record, error) {
|
|
|
|
|
+ return []*ksm.Record{generateRecords()[0], generateRecords()[0]}, nil
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ folderID: folderID,
|
|
|
|
|
+ getByTitleFallback: true,
|
|
|
|
|
+ },
|
|
|
|
|
+ args: args{
|
|
|
|
|
+ ctx: context.Background(),
|
|
|
|
|
+ ref: esv1.ExternalSecretDataRemoteRef{
|
|
|
|
|
+ Key: record0,
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ want: []byte(outputRecord0),
|
|
|
|
|
+ wantErr: false,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ name: "Get non existing secret with client error",
|
|
|
fields: fields{
|
|
fields: fields{
|
|
|
ksmClient: &fake.MockKeeperClient{
|
|
ksmClient: &fake.MockKeeperClient{
|
|
|
GetSecretsFn: func(filter []string) ([]*ksm.Record, error) {
|
|
GetSecretsFn: func(filter []string) ([]*ksm.Record, error) {
|
|
|
return nil, errors.New("not found")
|
|
return nil, errors.New("not found")
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
|
- folderID: folderID,
|
|
|
|
|
|
|
+ folderID: folderID,
|
|
|
|
|
+ getByTitleFallback: false,
|
|
|
|
|
+ },
|
|
|
|
|
+ args: args{
|
|
|
|
|
+ ctx: context.Background(),
|
|
|
|
|
+ ref: esv1.ExternalSecretDataRemoteRef{
|
|
|
|
|
+ Key: "record5",
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ wantErr: true,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ name: "Get non existing secret",
|
|
|
|
|
+ fields: fields{
|
|
|
|
|
+ ksmClient: &fake.MockKeeperClient{
|
|
|
|
|
+ GetSecretsFn: func(filter []string) ([]*ksm.Record, error) {
|
|
|
|
|
+ return []*ksm.Record{}, nil
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ folderID: folderID,
|
|
|
|
|
+ getByTitleFallback: false,
|
|
|
|
|
+ },
|
|
|
|
|
+ args: args{
|
|
|
|
|
+ ctx: context.Background(),
|
|
|
|
|
+ ref: esv1.ExternalSecretDataRemoteRef{
|
|
|
|
|
+ Key: "record5",
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ wantErr: true,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ name: "Get non existing secret with fallback",
|
|
|
|
|
+ fields: fields{
|
|
|
|
|
+ ksmClient: &fake.MockKeeperClient{
|
|
|
|
|
+ GetSecretsFn: func(filter []string) ([]*ksm.Record, error) {
|
|
|
|
|
+ return []*ksm.Record{}, nil
|
|
|
|
|
+ },
|
|
|
|
|
+ GetSecretsByTitleFn: func(recordTitle string) ([]*ksm.Record, error) {
|
|
|
|
|
+ return []*ksm.Record{}, nil
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ folderID: folderID,
|
|
|
|
|
+ getByTitleFallback: true,
|
|
|
},
|
|
},
|
|
|
args: args{
|
|
args: args{
|
|
|
ctx: context.Background(),
|
|
ctx: context.Background(),
|
|
@@ -440,7 +529,8 @@ func TestClientGetSecret(t *testing.T) {
|
|
|
return []*ksm.Record{generateRecords()[0]}, nil
|
|
return []*ksm.Record{generateRecords()[0]}, nil
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
|
- folderID: folderID,
|
|
|
|
|
|
|
+ folderID: folderID,
|
|
|
|
|
+ getByTitleFallback: false,
|
|
|
},
|
|
},
|
|
|
args: args{
|
|
args: args{
|
|
|
ctx: context.Background(),
|
|
ctx: context.Background(),
|
|
@@ -451,12 +541,60 @@ func TestClientGetSecret(t *testing.T) {
|
|
|
},
|
|
},
|
|
|
wantErr: true,
|
|
wantErr: true,
|
|
|
},
|
|
},
|
|
|
|
|
+ {
|
|
|
|
|
+ name: "Get secret by name",
|
|
|
|
|
+ fields: fields{
|
|
|
|
|
+ ksmClient: &fake.MockKeeperClient{
|
|
|
|
|
+ GetSecretsFn: func(filter []string) ([]*ksm.Record, error) {
|
|
|
|
|
+ // Return empty list to trigger name lookup
|
|
|
|
|
+ return []*ksm.Record{}, nil
|
|
|
|
|
+ },
|
|
|
|
|
+ GetSecretsByTitleFn: func(recordTitle string) ([]*ksm.Record, error) {
|
|
|
|
|
+ return []*ksm.Record{generateRecords()[0]}, nil
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ folderID: folderID,
|
|
|
|
|
+ getByTitleFallback: true,
|
|
|
|
|
+ },
|
|
|
|
|
+ args: args{
|
|
|
|
|
+ ctx: context.Background(),
|
|
|
|
|
+ ref: esv1.ExternalSecretDataRemoteRef{
|
|
|
|
|
+ Key: record0,
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ want: []byte(outputRecord0),
|
|
|
|
|
+ wantErr: false,
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ name: "Get secret by name with multiple matches",
|
|
|
|
|
+ fields: fields{
|
|
|
|
|
+ ksmClient: &fake.MockKeeperClient{
|
|
|
|
|
+ GetSecretsFn: func(filter []string) ([]*ksm.Record, error) {
|
|
|
|
|
+ // Return empty list to trigger name lookup
|
|
|
|
|
+ return []*ksm.Record{}, nil
|
|
|
|
|
+ },
|
|
|
|
|
+ GetSecretsByTitleFn: func(recordTitle string) ([]*ksm.Record, error) {
|
|
|
|
|
+ return []*ksm.Record{generateRecords()[0], generateRecords()[0]}, nil
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ folderID: folderID,
|
|
|
|
|
+ getByTitleFallback: true,
|
|
|
|
|
+ },
|
|
|
|
|
+ args: args{
|
|
|
|
|
+ ctx: context.Background(),
|
|
|
|
|
+ ref: esv1.ExternalSecretDataRemoteRef{
|
|
|
|
|
+ Key: record0,
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ wantErr: true,
|
|
|
|
|
+ },
|
|
|
}
|
|
}
|
|
|
for _, tt := range tests {
|
|
for _, tt := range tests {
|
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
|
c := &Client{
|
|
c := &Client{
|
|
|
- ksmClient: tt.fields.ksmClient,
|
|
|
|
|
- folderID: tt.fields.folderID,
|
|
|
|
|
|
|
+ ksmClient: tt.fields.ksmClient,
|
|
|
|
|
+ folderID: tt.fields.folderID,
|
|
|
|
|
+ getByTitleFallback: tt.fields.getByTitleFallback,
|
|
|
}
|
|
}
|
|
|
got, err := c.GetSecret(tt.args.ctx, tt.args.ref)
|
|
got, err := c.GetSecret(tt.args.ctx, tt.args.ref)
|
|
|
if (err != nil) != tt.wantErr {
|
|
if (err != nil) != tt.wantErr {
|
|
@@ -581,7 +719,7 @@ func TestClientGetSecretMap(t *testing.T) {
|
|
|
fields: fields{
|
|
fields: fields{
|
|
|
ksmClient: &fake.MockKeeperClient{
|
|
ksmClient: &fake.MockKeeperClient{
|
|
|
GetSecretsFn: func(filter []string) ([]*ksm.Record, error) {
|
|
GetSecretsFn: func(filter []string) ([]*ksm.Record, error) {
|
|
|
- return nil, errors.New("not found")
|
|
|
|
|
|
|
+ return nil, errors.New(errKeeperSecurityNoSecretsFound)
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
|
folderID: folderID,
|
|
folderID: folderID,
|