diff --git a/js/modules/k6/grpc/client_test.go b/js/modules/k6/grpc/client_test.go index 7ccfffdec3c9..e42ae188841b 100644 --- a/js/modules/k6/grpc/client_test.go +++ b/js/modules/k6/grpc/client_test.go @@ -61,36 +61,16 @@ func TestClient(t *testing.T) { t.Parallel() type testState struct { - rt *goja.Runtime - vuState *lib.State - env *common.InitEnvironment + *modulestest.Runtime httpBin *httpmultibin.HTTPMultiBin samples chan metrics.SampleContainer } setup := func(t *testing.T) testState { t.Helper() - root, err := lib.NewGroup("", nil) - require.NoError(t, err) tb := httpmultibin.NewHTTPMultiBin(t) samples := make(chan metrics.SampleContainer, 1000) - state := &lib.State{ - Group: root, - Dialer: tb.Dialer, - TLSConfig: tb.TLSClientConfig, - Samples: samples, - Options: lib.Options{ - SystemTags: metrics.NewSystemTagSet( - metrics.TagName, - metrics.TagURL, - ), - UserAgent: null.StringFrom("k6-test"), - }, - BuiltinMetrics: metrics.RegisterBuiltinMetrics( - metrics.NewRegistry(), - ), - Tags: lib.NewTagMap(nil), - } + testRuntime := modulestest.NewRuntime(t) cwd, err := os.Getwd() require.NoError(t, err) @@ -105,15 +85,14 @@ func TestClient(t *testing.T) { "file": fs, }, } + testRuntime.InitContext(initEnv) rt := goja.New() rt.SetFieldNameMapper(common.FieldNameMapper{}) return testState{ - rt: rt, + Runtime: testRuntime, httpBin: tb, - vuState: state, - env: initEnv, samples: samples, } } @@ -716,17 +695,9 @@ func TestClient(t *testing.T) { ts := setup(t) - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() - mvu := &modulestest.VU{ - RuntimeField: ts.rt, - InitEnvField: ts.env, - CtxField: ctx, - } - - m, ok := New().NewModuleInstance(mvu).(*ModuleInstance) + m, ok := New().NewModuleInstance(ts.VU).(*ModuleInstance) require.True(t, ok) - require.NoError(t, ts.rt.Set("grpc", m.Exports().Named)) + require.NoError(t, ts.VU.Runtime().Set("grpc", m.Exports().Named)) // setup necessary environment if needed by a test if tt.setup != nil { @@ -734,13 +705,32 @@ func TestClient(t *testing.T) { } replace := func(code string) (goja.Value, error) { - return ts.rt.RunString(ts.httpBin.Replacer.Replace(code)) + return ts.VU.Runtime().RunString(ts.httpBin.Replacer.Replace(code)) } val, err := replace(tt.initString.code) assertResponse(t, tt.initString, err, val, ts) - mvu.StateField = ts.vuState + root, err := lib.NewGroup("", nil) + require.NoError(t, err) + state := &lib.State{ + Group: root, + Dialer: ts.httpBin.Dialer, + TLSConfig: ts.httpBin.TLSClientConfig, + Samples: ts.samples, + Options: lib.Options{ + SystemTags: metrics.NewSystemTagSet( + metrics.TagName, + metrics.TagURL, + ), + UserAgent: null.StringFrom("k6-test"), + }, + BuiltinMetrics: metrics.RegisterBuiltinMetrics( + metrics.NewRegistry(), + ), + Tags: lib.NewTagMap(nil), + } + ts.MoveToVUContext(state) val, err = replace(tt.vuString.code) assertResponse(t, tt.vuString, err, val, ts) }) diff --git a/js/modules/k6/ws/ws_test.go b/js/modules/k6/ws/ws_test.go index 98b3dbcd0498..84ca4fa0aebf 100644 --- a/js/modules/k6/ws/ws_test.go +++ b/js/modules/k6/ws/ws_test.go @@ -94,24 +94,20 @@ func assertMetricEmittedCount(t *testing.T, metricName string, sampleContainers } type testState struct { - ctxPtr *context.Context - rt *goja.Runtime + *modulestest.Runtime tb *httpmultibin.HTTPMultiBin - state *lib.State samples chan metrics.SampleContainer } func newTestState(t testing.TB) testState { tb := httpmultibin.NewHTTPMultiBin(t) + testRuntime := modulestest.NewRuntime(t) + samples := make(chan metrics.SampleContainer, 1000) + root, err := lib.NewGroup("", nil) require.NoError(t, err) - rt := goja.New() - rt.SetFieldNameMapper(common.FieldNameMapper{}) - - samples := make(chan metrics.SampleContainer, 1000) - state := &lib.State{ Group: root, Dialer: tb.Dialer, @@ -130,18 +126,13 @@ func newTestState(t testing.TB) testState { Tags: lib.NewTagMap(nil), } - m := New().NewModuleInstance(&modulestest.VU{ - CtxField: tb.Context, - InitEnvField: &common.InitEnvironment{}, - RuntimeField: rt, - StateField: state, - }) - require.NoError(t, rt.Set("ws", m.Exports().Default)) + m := New().NewModuleInstance(testRuntime.VU) + require.NoError(t, testRuntime.VU.RuntimeField.Set("ws", m.Exports().Default)) + testRuntime.MoveToVUContext(state) return testState{ - rt: rt, + Runtime: testRuntime, tb: tb, - state: state, samples: samples, } } @@ -1045,7 +1036,7 @@ func TestCompression(t *testing.T) { } })) - _, err := ts.rt.RunString(sr(` + _, err := ts.VU.Runtime().RunString(sr(` // if client supports compression, it has to send the header // 'Sec-Websocket-Extensions:permessage-deflate; server_no_context_takeover; client_no_context_takeover' to server. // if compression is negotiated successfully, server will reply with header @@ -1127,7 +1118,7 @@ func TestCompression(t *testing.T) { } })) - _, err := ts.rt.RunString(sr(` + _, err := ts.VU.Runtime().RunString(sr(` var res = ws.connect("WSBIN_URL/ws-compression-param", {"compression":"` + testCase.compression + `"}, function(socket){ socket.close() }); @@ -1210,14 +1201,14 @@ func BenchmarkCompression(b *testing.B) { b.ResetTimer() b.Run("compression-enabled", func(b *testing.B) { for i := 0; i < b.N; i++ { - if _, err := ts.rt.RunString(testCodes[0]); err != nil { + if _, err := ts.VU.Runtime().RunString(testCodes[0]); err != nil { b.Error(err) } } }) b.Run("compression-disabled", func(b *testing.B) { for i := 0; i < b.N; i++ { - if _, err := ts.rt.RunString(testCodes[1]); err != nil { + if _, err := ts.VU.Runtime().RunString(testCodes[1]); err != nil { b.Error(err) } } @@ -1246,17 +1237,11 @@ func TestCookieJar(t *testing.T) { } })) - mii := &modulestest.VU{ - RuntimeField: ts.rt, - InitEnvField: &common.InitEnvironment{Registry: metrics.NewRegistry()}, - CtxField: context.Background(), - StateField: ts.state, - } - err := ts.rt.Set("http", httpModule.New().NewModuleInstance(mii).Exports().Default) + err := ts.VU.Runtime().Set("http", httpModule.New().NewModuleInstance(ts.VU).Exports().Default) require.NoError(t, err) - ts.state.CookieJar, _ = cookiejar.New(nil) + ts.VU.State().CookieJar, _ = cookiejar.New(nil) - _, err = ts.rt.RunString(sr(` + _, err = ts.VU.Runtime().RunString(sr(` var res = ws.connect("WSBIN_URL/ws-echo-someheader", function(socket){ socket.close() })