diff --git a/scaletest/dashboard/config.go b/scaletest/dashboard/config.go index 2bd72ccdf6cbc..91d9ae3a5abbd 100644 --- a/scaletest/dashboard/config.go +++ b/scaletest/dashboard/config.go @@ -2,6 +2,7 @@ package dashboard import ( "context" + "net/url" "time" "cdr.dev/slog" @@ -28,6 +29,8 @@ type Config struct { Screenshot func(ctx context.Context, filename string) (string, error) // RandIntn is a function that returns a random number between 0 and n-1. RandIntn func(int) int `json:"-"` + // InitChromeDPCtx is a function that initializes ChromeDP into the given context.Context. + InitChromeDPCtx func(ctx context.Context, log slog.Logger, u *url.URL, sessionToken string, headless bool) (context.Context, context.CancelFunc, error) `json:"-"` } func (c Config) Validate() error { diff --git a/scaletest/dashboard/run.go b/scaletest/dashboard/run.go index 0c80d98d59e1b..5625e25a46c76 100644 --- a/scaletest/dashboard/run.go +++ b/scaletest/dashboard/run.go @@ -39,6 +39,9 @@ func NewRunner(client *codersdk.Client, metrics Metrics, cfg Config) *Runner { if cfg.RandIntn == nil { cfg.RandIntn = rand.Intn } + if cfg.InitChromeDPCtx == nil { + cfg.InitChromeDPCtx = initChromeDPCtx + } return &Runner{ client: client, cfg: cfg, @@ -70,7 +73,7 @@ func (r *Runner) runUntilDeadlineExceeded(ctx context.Context) error { return xerrors.Errorf("user has no organizations") } - cdpCtx, cdpCancel, err := initChromeDPCtx(ctx, r.cfg.Logger, r.client.URL, r.client.SessionToken(), r.cfg.Headless) + cdpCtx, cdpCancel, err := r.cfg.InitChromeDPCtx(ctx, r.cfg.Logger, r.client.URL, r.client.SessionToken(), r.cfg.Headless) if err != nil { return xerrors.Errorf("init chromedp ctx: %w", err) } diff --git a/scaletest/dashboard/run_test.go b/scaletest/dashboard/run_test.go index af9725e201085..bd25e0f60a335 100644 --- a/scaletest/dashboard/run_test.go +++ b/scaletest/dashboard/run_test.go @@ -3,6 +3,7 @@ package dashboard_test import ( "context" "math/rand" + "net/url" "runtime" "sync" "sync/atomic" @@ -52,6 +53,7 @@ func Test_Run(t *testing.T) { waitLoadedCalled atomic.Bool screenshotCalled atomic.Bool ) + cancelDone := make(chan struct{}) cfg := dashboard.Config{ Interval: 500 * time.Millisecond, Jitter: 100 * time.Millisecond, @@ -72,6 +74,9 @@ func Test_Run(t *testing.T) { return "/fake/path/to/" + name + ".png", nil }, RandIntn: rg.Intn, + InitChromeDPCtx: func(ctx context.Context, _ slog.Logger, _ *url.URL, _ string, _ bool) (context.Context, context.CancelFunc, error) { + return ctx, func() { close(cancelDone) }, nil + }, } r := dashboard.NewRunner(client, m, cfg) ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort) @@ -84,6 +89,8 @@ func Test_Run(t *testing.T) { err, ok := <-done assert.True(t, ok) require.NoError(t, err) + _, ok = <-cancelDone + require.False(t, ok, "cancel should have been called") for _, dur := range m.ObservedDurations["succeeds"] { assert.NotZero(t, dur)
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: