Skip to content

Commit 392f4a6

Browse files
committed
Move parsing of name and defaults out of each secret source + integration tests
1 parent 3e9acf0 commit 392f4a6

File tree

7 files changed

+32
-23
lines changed

7 files changed

+32
-23
lines changed

internal/cmd/root.go

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -335,18 +335,24 @@ func createSecretSources(gs *state.GlobalState) (map[string]secretsource.Source,
335335
}
336336
c := found.Module.(secretsource.Constructor) //nolint:forcetypeassert
337337
params := baseParams
338+
name, isDefault, config := extractNameAndDefault(config)
338339
params.ConfigArgument = config
339340

340341
secretSource, err := c(params)
341342
if err != nil {
342343
return nil, err
343344
}
344-
name := secretSource.Name()
345345
_, alreadRegistered := result[name]
346346
if alreadRegistered {
347347
return nil, fmt.Errorf("secret source for name %q already registered before configuration %q", t, line)
348348
}
349349
result[name] = secretSource
350+
if isDefault {
351+
if _, ok := result["default"]; ok {
352+
return nil, fmt.Errorf("can't have two secret sources that are default ones, second one was %q", config)
353+
}
354+
result["default"] = secretSource
355+
}
350356
}
351357

352358
if len(result) == 1 {
@@ -357,3 +363,21 @@ func createSecretSources(gs *state.GlobalState) (map[string]secretsource.Source,
357363

358364
return result, nil
359365
}
366+
367+
func extractNameAndDefault(config string) (name string, isDefault bool, remaining string) {
368+
list := strings.Split(config, ",")
369+
remainingArray := make([]string, 0, len(list))
370+
for _, kv := range list {
371+
if kv == "default" {
372+
isDefault = true
373+
continue
374+
}
375+
k, v, _ := strings.Cut(kv, "=")
376+
if k == "name" {
377+
name = v
378+
continue
379+
}
380+
remainingArray = append(remainingArray, kv)
381+
}
382+
return name, isDefault, strings.Join(remainingArray, ",")
383+
}

internal/cmd/tests/cmd_run_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2447,6 +2447,7 @@ func TestMultipleSecretSources(t *testing.T) {
24472447
} catch {
24482448
console.log("trigger exception on wrong key")
24492449
}
2450+
secrets.get("else"); // testing default setting
24502451
}
24512452
`
24522453

@@ -2456,7 +2457,7 @@ func TestMultipleSecretSources(t *testing.T) {
24562457
ts.CmdArgs = []string{
24572458
"k6", "run",
24582459
"--secret-source=mock=name=first,cool=something",
2459-
"--secret-source=mock=name=second,else=source", "secrets.js",
2460+
"--secret-source=mock=name=second,else=source,default", "secrets.js",
24602461
}
24612462

24622463
cmd.ExecuteWithGlobalState(ts.GlobalState)

internal/secretsource/file/file.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ func (fss *fileSecretSource) parseArg(config string) error {
5050
switch k {
5151
case "filename":
5252
fss.filename = v
53-
case "name":
54-
fss.name = v
5553
default:
5654
return fmt.Errorf("unknown configuration key for file secret source %q", k)
5755
}
@@ -62,14 +60,9 @@ func (fss *fileSecretSource) parseArg(config string) error {
6260

6361
type fileSecretSource struct {
6462
internal map[string]string
65-
name string
6663
filename string
6764
}
6865

69-
func (fss *fileSecretSource) Name() string {
70-
return fss.name
71-
}
72-
7366
func (fss *fileSecretSource) Description() string {
7467
return fmt.Sprintf("file source from %s", fss.filename)
7568
}

internal/secretsource/file/file_test.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,23 @@ func TestParseArg(t *testing.T) {
1010
t.Parallel()
1111
testCases := map[string]struct {
1212
input string
13-
expectedName string
1413
expectedFilename string
1514
expectedError string
1615
}{
1716
"simple": {
1817
input: "something.secret",
19-
expectedName: "",
2018
expectedFilename: "something.secret",
2119
},
2220
"filename": {
2321
input: "filename=something.secret",
24-
expectedName: "",
2522
expectedFilename: "something.secret",
2623
},
2724
"filename and name": {
28-
input: "filename=something.secret,name=cool",
29-
expectedName: "cool",
25+
input: "filename=something.secret",
3026
expectedFilename: "something.secret",
3127
},
3228
"unknownfiled": {
33-
input: "filename=something.secret,name=cool,random=bad",
29+
input: "filename=something.secret,random=bad",
3430
expectedError: "unknown configuration key for file secret source \"random\"",
3531
},
3632
}
@@ -46,7 +42,6 @@ func TestParseArg(t *testing.T) {
4642
}
4743
require.NoError(t, err)
4844
require.Equal(t, testCase.expectedFilename, fss.filename)
49-
require.Equal(t, testCase.expectedName, fss.name)
5045
})
5146
}
5247
}

internal/secretsource/mock/mock.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,6 @@ func init() {
1919
if !ok {
2020
return nil, fmt.Errorf("parsing %q, needs =", kv)
2121
}
22-
if k == "name" {
23-
name = v
24-
continue
25-
}
2622

2723
secrets[k] = v
2824
}

secretsource/interface.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package secretsource
22

33
// Source is the interface a secret source needs to implement
44
type Source interface {
5-
// A name to be used when k6 has multiple sources
6-
Name() string
75
// Human readable description to be printed on the cli
86
Description() string
97
Get(key string) (value string, err error)

secretsource/manager.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ func NewManager(sources map[string]Source) (*Manager, logrus.Hook, error) {
2828
}, hook, nil
2929
}
3030
defaultSource := sources["default"]
31-
cache["default"] = new(sync.Map)
31+
if defaultSource != nil {
32+
cache["default"] = new(sync.Map)
33+
}
3234
for k, source := range sources {
3335
if k == "default" {
3436
continue

0 commit comments

Comments
 (0)