From fa5ed6110874415349cee8026afcb3576dcbdd79 Mon Sep 17 00:00:00 2001 From: Rafael Garcia Date: Thu, 30 Apr 2026 12:17:32 -0400 Subject: [PATCH] Stabilize browser e2e setup Made-with: Cursor --- server/e2e/e2e_chromium_test.go | 14 ++++++++++++++ server/e2e/e2e_zip_transfer_bench_test.go | 22 ++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/server/e2e/e2e_chromium_test.go b/server/e2e/e2e_chromium_test.go index bfea5443..95e186ea 100644 --- a/server/e2e/e2e_chromium_test.go +++ b/server/e2e/e2e_chromium_test.go @@ -72,13 +72,27 @@ func ensurePlaywrightDeps(t *testing.T) { playwrightDepsOnce.Do(func() { nodeModulesPath := getPlaywrightPath() + "/node_modules" + tsxPath := getPlaywrightPath() + "/node_modules/tsx/dist/cli.mjs" if _, err := os.Stat(nodeModulesPath); os.IsNotExist(err) { + t.Log("Installing playwright dependencies...") cmd := exec.Command("pnpm", "install") cmd.Dir = getPlaywrightPath() output, err := cmd.CombinedOutput() if err != nil { playwrightDepsErr = fmt.Errorf("failed to install playwright dependencies: %w\noutput: %s", err, string(output)) + return } + t.Log("Playwright dependencies installed successfully") + } else if _, err := os.Stat(tsxPath); os.IsNotExist(err) { + t.Log("Installing playwright dependencies...") + cmd := exec.Command("pnpm", "install") + cmd.Dir = getPlaywrightPath() + output, err := cmd.CombinedOutput() + if err != nil { + playwrightDepsErr = fmt.Errorf("failed to install playwright dependencies: %w\noutput: %s", err, string(output)) + return + } + t.Log("Playwright dependencies installed successfully") } }) diff --git a/server/e2e/e2e_zip_transfer_bench_test.go b/server/e2e/e2e_zip_transfer_bench_test.go index 298e39be..299337d5 100644 --- a/server/e2e/e2e_zip_transfer_bench_test.go +++ b/server/e2e/e2e_zip_transfer_bench_test.go @@ -54,6 +54,7 @@ func TestZipTransferTiming(t *testing.T) { err = populateUserData(ctx, client) require.NoError(t, err, "failed to populate user-data") t.Logf("User-data population took %dms", time.Since(populateStart).Milliseconds()) + stopChromiumForStableUserData(t, ctx, client) // Get initial directory size for reference dirSize, fileCount, err := getDirStats(ctx, client, "/home/kernel/user-data") @@ -139,6 +140,25 @@ func populateUserData(ctx context.Context, client *instanceoapi.ClientWithRespon return nil } +func stopChromiumForStableUserData(t *testing.T, ctx context.Context, client *instanceoapi.ClientWithResponses) { + t.Helper() + + args := []string{"-c", "/etc/supervisor/supervisord.conf", "stop", "chromium"} + req := instanceoapi.ProcessExecJSONRequestBody{ + Command: "supervisorctl", + Args: &args, + } + rsp, err := client.ProcessExecWithResponse(ctx, req) + require.NoError(t, err, "failed to stop chromium before reading user-data") + require.Equal(t, http.StatusOK, rsp.StatusCode(), "unexpected status stopping chromium: %s body=%s", rsp.Status(), string(rsp.Body)) + if rsp.JSON200 != nil && rsp.JSON200.ExitCode != nil { + require.Equal(t, 0, *rsp.JSON200.ExitCode, "supervisorctl stop chromium failed") + } + + // Give Chromium's profile databases a brief moment to settle after shutdown. + time.Sleep(500 * time.Millisecond) +} + // getDirStats returns approximate size and file count of a directory func getDirStats(ctx context.Context, client *instanceoapi.ClientWithResponses, path string) (int64, int, error) { // Use du command via process exec to get accurate size @@ -286,6 +306,7 @@ func TestZstdTransferTiming(t *testing.T) { err = populateUserData(ctx, client) require.NoError(t, err, "failed to populate user-data") t.Logf("User-data population took %dms", time.Since(populateStart).Milliseconds()) + stopChromiumForStableUserData(t, ctx, client) // Get directory stats for reference dirSize, fileCount, err := getDirStats(ctx, client, "/home/kernel/user-data") @@ -436,6 +457,7 @@ func TestZipVsZstdComparison(t *testing.T) { t.Logf("Populating user-data by browsing...") err = populateUserData(ctx, client) require.NoError(t, err, "failed to populate user-data") + stopChromiumForStableUserData(t, ctx, client) // Get directory stats dirSize, fileCount, err := getDirStats(ctx, client, "/home/kernel/user-data")