Skip to content

Commit 6c6d867

Browse files
committed
Move to async get
1 parent 392f4a6 commit 6c6d867

File tree

4 files changed

+36
-25
lines changed

4 files changed

+36
-25
lines changed

examples/secrets/secrets.test.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
// k6 run --secret-source=file=file.secret secrets.test.js
22
import secrets from "k6/secrets";
33

4-
export default () => {
5-
const my_secret = secrets.get("cool"); // get secret from a source with the provided identifier
4+
export default async () => {
5+
const my_secret = await secrets.get("cool"); // get secret from a source with the provided identifier
66
console.log(my_secret);
7-
secrets.get("else"); // get secret from a source with the provided identifier
7+
await secrets.get("else"); // get secret from a source with the provided identifier
88
console.log(my_secret);
99
}

internal/cmd/tests/cmd_run_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2409,10 +2409,10 @@ func TestBasicSecrets(t *testing.T) {
24092409
mainScript := `
24102410
import secrets from "k6/secrets";
24112411
2412-
export default () => {
2413-
const my_secret = secrets.get("cool"); // get secret from a source with the provided identifier
2412+
export default async () => {
2413+
const my_secret = await secrets.get("cool"); // get secret from a source with the provided identifier
24142414
console.log(my_secret);
2415-
secrets.get("else"); // get secret from a source with the provided identifier
2415+
await secrets.get("else"); // get secret from a source with the provided identifier
24162416
console.log(my_secret);
24172417
}
24182418
`
@@ -2437,17 +2437,17 @@ func TestMultipleSecretSources(t *testing.T) {
24372437
mainScript := `
24382438
import secrets from "k6/secrets";
24392439
2440-
export default () => {
2441-
const my_secret = secrets.source("first").get("cool");
2440+
export default async () => {
2441+
const my_secret = await secrets.source("first").get("cool");
24422442
console.log(my_secret);
2443-
secrets.source("second").get("else");
2443+
await secrets.source("second").get("else");
24442444
console.log(my_secret);
24452445
try {
2446-
secrets.source("second").get("unkwown");
2446+
await secrets.source("second").get("unkwown");
24472447
} catch {
24482448
console.log("trigger exception on wrong key")
24492449
}
2450-
secrets.get("else"); // testing default setting
2450+
await secrets.get("else"); // testing default setting
24512451
}
24522452
`
24532453

internal/js/modules/k6/secrets/secrets.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
"go.k6.io/k6/js/common"
88
"go.k6.io/k6/js/modules"
9+
"go.k6.io/k6/js/promises"
910
"go.k6.io/k6/secretsource"
1011
)
1112

@@ -50,13 +51,13 @@ func (mi *Secrets) Exports() modules.Exports {
5051
}
5152

5253
func (mi *Secrets) secrets() (*sobek.Object, error) {
53-
obj, err := secretSourceObjectForSourceName(mi.vu.Runtime(), mi.secretsManager, secretsource.DefaultSourceName)
54+
obj, err := secretSourceObjectForSourceName(mi.vu, mi.secretsManager, secretsource.DefaultSourceName)
5455
if err != nil {
5556
return nil, err
5657
}
5758

5859
err = obj.Set("source", func(sourceName string) (*sobek.Object, error) {
59-
return secretSourceObjectForSourceName(mi.vu.Runtime(), mi.secretsManager, sourceName)
60+
return secretSourceObjectForSourceName(mi.vu, mi.secretsManager, sourceName)
6061
})
6162
if err != nil {
6263
return nil, err
@@ -66,11 +67,20 @@ func (mi *Secrets) secrets() (*sobek.Object, error) {
6667
}
6768

6869
func secretSourceObjectForSourceName(
69-
rt *sobek.Runtime, manager *secretsource.Manager, sourceName string,
70+
vu modules.VU, manager *secretsource.Manager, sourceName string,
7071
) (*sobek.Object, error) {
71-
obj := rt.NewObject()
72-
err := obj.Set("get", func(key string) (string, error) {
73-
return manager.Get(sourceName, key)
72+
obj := vu.Runtime().NewObject()
73+
err := obj.Set("get", func(key string) *sobek.Promise {
74+
p, resolve, reject := promises.New(vu)
75+
go func() {
76+
res, err := manager.Get(sourceName, key)
77+
if err != nil {
78+
reject(err)
79+
return
80+
}
81+
resolve(res)
82+
}()
83+
return p
7484
})
7585
if err != nil {
7686
return nil, err

internal/js/modules/k6/secrets/secrets_test.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func TestSecrets(t *testing.T) {
4141
"secret": "value",
4242
}),
4343
},
44-
script: "secrets.get('secret')",
44+
script: "await secrets.get('secret')",
4545
expectedValue: "value",
4646
},
4747
"error": {
@@ -50,7 +50,7 @@ func TestSecrets(t *testing.T) {
5050
"secret": "value",
5151
}),
5252
},
53-
script: "secrets.get('not_secret')",
53+
script: "await secrets.get('not_secret')",
5454
expectedError: "no value",
5555
},
5656
"multiple": {
@@ -62,7 +62,7 @@ func TestSecrets(t *testing.T) {
6262
"secret2": "value2",
6363
}),
6464
},
65-
script: "secrets.get('secret')",
65+
script: "await secrets.get('secret')",
6666
expectedValue: "value",
6767
},
6868
"multiple get default": {
@@ -74,7 +74,7 @@ func TestSecrets(t *testing.T) {
7474
"secret2": "value2",
7575
}),
7676
},
77-
script: "secrets.source('default').get('secret')",
77+
script: "await secrets.source('default').get('secret')",
7878
expectedValue: "value",
7979
},
8080
"multiple get not default": {
@@ -86,12 +86,12 @@ func TestSecrets(t *testing.T) {
8686
"secret2": "value2",
8787
}),
8888
},
89-
script: "secrets.source('second').get('secret2')",
89+
script: "await secrets.source('second').get('secret2')",
9090
expectedValue: "value2",
9191
},
9292
"get secret without source": {
9393
secretsources: map[string]secretsource.Source{},
94-
script: "secrets.get('secret')",
94+
script: "await secrets.get('secret')",
9595
expectedError: "no source with name default",
9696
},
9797
"get none existing source": {
@@ -100,7 +100,7 @@ func TestSecrets(t *testing.T) {
100100
"secret": "value",
101101
}),
102102
},
103-
script: "secrets.source('second') != undefined",
103+
script: "(await secrets.source('second')) != undefined",
104104
expectedValue: true,
105105
},
106106
}
@@ -110,12 +110,13 @@ func TestSecrets(t *testing.T) {
110110
t.Parallel()
111111
testruntime := testRuntimeWithSecrets(t, testCase.secretsources)
112112

113-
v, err := testruntime.RunOnEventLoop(testCase.script)
113+
_, err := testruntime.RunOnEventLoop("(async ()=>{globalThis.result = " + testCase.script + "})()")
114114
if testCase.expectedError != "" {
115115
require.ErrorContains(t, err, testCase.expectedError)
116116
return
117117
}
118118
require.NoError(t, err)
119+
v := testruntime.VU.Runtime().GlobalObject().Get("result")
119120
assert.Equal(t, testCase.expectedValue, v.Export())
120121
})
121122
}

0 commit comments

Comments
 (0)