From b14f9e047aa0bfc5d282f1be44f84603fef4fd82 Mon Sep 17 00:00:00 2001 From: Joe Previte Date: Fri, 19 Aug 2022 15:14:57 -0700 Subject: [PATCH 01/10] fix(e2e): update test extension - add new info message when extension loads - prefix vscode_proxy_uri message with "proxyUri:" to make it easier to find in e2e test - activate extension onStartupFinished --- test/e2e/extensions/test-extension/extension.ts | 3 ++- test/e2e/extensions/test-extension/package.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/test/e2e/extensions/test-extension/extension.ts b/test/e2e/extensions/test-extension/extension.ts index dcbd6dde7bc0..ea962efbdd84 100644 --- a/test/e2e/extensions/test-extension/extension.ts +++ b/test/e2e/extensions/test-extension/extension.ts @@ -1,10 +1,11 @@ import * as vscode from "vscode" export function activate(context: vscode.ExtensionContext) { + vscode.window.showInformationMessage("test extension loaded") context.subscriptions.push( vscode.commands.registerCommand("codeServerTest.proxyUri", () => { if (process.env.VSCODE_PROXY_URI) { - vscode.window.showInformationMessage(process.env.VSCODE_PROXY_URI) + vscode.window.showInformationMessage(`proxyUri: ${process.env.VSCODE_PROXY_URI}`) } else { vscode.window.showErrorMessage("No proxy URI was set") } diff --git a/test/e2e/extensions/test-extension/package.json b/test/e2e/extensions/test-extension/package.json index 5d32de7ac65b..4a9db00d5d47 100644 --- a/test/e2e/extensions/test-extension/package.json +++ b/test/e2e/extensions/test-extension/package.json @@ -4,7 +4,7 @@ "version": "0.0.1", "publisher": "coder", "activationEvents": [ - "onCommand:codeServerTest.proxyUri" + "onStartupFinished" ], "engines": { "vscode": "^1.56.0" From d8ab7d7845153f7e3feb240eaf4dfd51f5c70e80 Mon Sep 17 00:00:00 2001 From: Joe Previte Date: Fri, 19 Aug 2022 15:19:36 -0700 Subject: [PATCH 02/10] feat(e2e): add test extension methods to model This adds two new methods to assist with testing the test extension in our e2e tests, namely these two methods: - isTestExtensionLoaded - reloadUntilTestExtensionIsLoaded Sometimes code-server loads without loading the test extension. These methods allow us to reload and guarantee it's loaded. --- test/e2e/models/CodeServer.ts | 41 +++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/test/e2e/models/CodeServer.ts b/test/e2e/models/CodeServer.ts index f2450009858a..04df8b8ff811 100644 --- a/test/e2e/models/CodeServer.ts +++ b/test/e2e/models/CodeServer.ts @@ -282,6 +282,32 @@ export class CodeServerPage { this.codeServer.logger.debug("Editor is ready!") } + /** + * Checks if the test extension has loaded + * + * Reload until both checks pass + */ + async reloadUntilTestExtensionIsLoaded() { + this.codeServer.logger.debug("Waiting for test extenion to load...") + + const extensionIsLoaded = await this.isTestExtensionLoaded() + let reloadCount = 0 + + while (!extensionIsLoaded) { + await this.page.waitForLoadState("load") + // Give it an extra second just in case it's feeling extra slow + await this.page.waitForTimeout(1000) + reloadCount += 1 + if (await this.isTestExtensionLoaded()) { + this.codeServer.logger.debug(`test extension loaded after ${reloadCount} reloads`) + break + } + await this.reloadUntilEditorIsReady() + } + + this.codeServer.logger.debug("Test extenion has loaded!") + } + /** * Checks if the editor is visible */ @@ -296,6 +322,21 @@ export class CodeServerPage { return visible } + /** + * Checks if the test extension loaded + */ + async isTestExtensionLoaded() { + const selector = "text=test extension loaded" + this.codeServer.logger.debug("Waiting for test extension to load...") + + await this.page.waitForLoadState("load") + const loaded = await this.page.isVisible(selector) + + this.codeServer.logger.debug(`Test extension has ${loaded ? "" : "not"} loaded`) + + return loaded + } + /** * Focuses the integrated terminal by navigating through the command palette. * From 1be591c88e2cf0e51d74a9c13d3b2e758ea5c8f0 Mon Sep 17 00:00:00 2001 From: Joe Previte Date: Fri, 19 Aug 2022 15:21:37 -0700 Subject: [PATCH 03/10] fix(e2e): update extension tests This modifies the test extension using our new methods to reduce flakiness by ensuring the test extension has loaded before proceeding with the test. --- test/e2e/extensions.test.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/e2e/extensions.test.ts b/test/e2e/extensions.test.ts index 5f42cbb5c9aa..cb1d81b4a64c 100644 --- a/test/e2e/extensions.test.ts +++ b/test/e2e/extensions.test.ts @@ -8,12 +8,14 @@ function runTestExtensionTests() { test("should have access to VSCODE_PROXY_URI", async ({ codeServerPage }) => { const address = await getMaybeProxiedCodeServer(codeServerPage) + await codeServerPage.reloadUntilTestExtensionIsLoaded() await codeServerPage.executeCommandViaMenus("code-server: Get proxy URI") - const text = await codeServerPage.page.locator(".notification-list-item-message").textContent() + await codeServerPage.page.waitForSelector("text=proxyUri", { timeout: 3000 }) + const text = await codeServerPage.page.locator("text=proxyUri").first().textContent() // Remove end slash in address const normalizedAddress = address.replace(/\/+$/, "") - expect(text).toBe(`${normalizedAddress}/proxy/{{port}}`) + expect(text).toBe(`Info: proxyUri: ${normalizedAddress}/proxy/{{port}}`) }) } From d136b133e5edee39938f8b7ae6aad19abcc7e7d6 Mon Sep 17 00:00:00 2001 From: Joe Previte Date: Mon, 22 Aug 2022 09:56:04 -0700 Subject: [PATCH 04/10] Update test/e2e/models/CodeServer.ts Co-authored-by: Asher --- test/e2e/models/CodeServer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/models/CodeServer.ts b/test/e2e/models/CodeServer.ts index 04df8b8ff811..f79104e79c83 100644 --- a/test/e2e/models/CodeServer.ts +++ b/test/e2e/models/CodeServer.ts @@ -288,7 +288,7 @@ export class CodeServerPage { * Reload until both checks pass */ async reloadUntilTestExtensionIsLoaded() { - this.codeServer.logger.debug("Waiting for test extenion to load...") + this.codeServer.logger.debug("Waiting for test extension to load...") const extensionIsLoaded = await this.isTestExtensionLoaded() let reloadCount = 0 From 4dc187a1dc52de4b741f075f3348750d258cca06 Mon Sep 17 00:00:00 2001 From: Joe Previte Date: Mon, 22 Aug 2022 09:59:27 -0700 Subject: [PATCH 05/10] Update test/e2e/models/CodeServer.ts Co-authored-by: Asher --- test/e2e/models/CodeServer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/models/CodeServer.ts b/test/e2e/models/CodeServer.ts index f79104e79c83..0933afb2d6b1 100644 --- a/test/e2e/models/CodeServer.ts +++ b/test/e2e/models/CodeServer.ts @@ -305,7 +305,7 @@ export class CodeServerPage { await this.reloadUntilEditorIsReady() } - this.codeServer.logger.debug("Test extenion has loaded!") + this.codeServer.logger.debug("Test extension has loaded!") } /** From e36a8762ef1430c5fce8da81489c1a9291413c4c Mon Sep 17 00:00:00 2001 From: Joe Previte Date: Mon, 22 Aug 2022 10:18:30 -0700 Subject: [PATCH 06/10] fixup --- test/e2e/models/CodeServer.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/test/e2e/models/CodeServer.ts b/test/e2e/models/CodeServer.ts index 0933afb2d6b1..195a9737bf34 100644 --- a/test/e2e/models/CodeServer.ts +++ b/test/e2e/models/CodeServer.ts @@ -329,7 +329,6 @@ export class CodeServerPage { const selector = "text=test extension loaded" this.codeServer.logger.debug("Waiting for test extension to load...") - await this.page.waitForLoadState("load") const loaded = await this.page.isVisible(selector) this.codeServer.logger.debug(`Test extension has ${loaded ? "" : "not"} loaded`) From 7906ebfa085866ad71174976776e2029b73a96c1 Mon Sep 17 00:00:00 2001 From: Joe Previte Date: Mon, 22 Aug 2022 10:26:49 -0700 Subject: [PATCH 07/10] try asher approach --- test/e2e/extensions.test.ts | 3 ++- test/e2e/models/CodeServer.ts | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/test/e2e/extensions.test.ts b/test/e2e/extensions.test.ts index cb1d81b4a64c..f08792f66da9 100644 --- a/test/e2e/extensions.test.ts +++ b/test/e2e/extensions.test.ts @@ -8,7 +8,8 @@ function runTestExtensionTests() { test("should have access to VSCODE_PROXY_URI", async ({ codeServerPage }) => { const address = await getMaybeProxiedCodeServer(codeServerPage) - await codeServerPage.reloadUntilTestExtensionIsLoaded() + // await codeServerPage.reloadUntilTestExtensionIsLoaded() + await codeServerPage.waitForTestExtensionLoaded() await codeServerPage.executeCommandViaMenus("code-server: Get proxy URI") await codeServerPage.page.waitForSelector("text=proxyUri", { timeout: 3000 }) diff --git a/test/e2e/models/CodeServer.ts b/test/e2e/models/CodeServer.ts index 195a9737bf34..95ab98b536b9 100644 --- a/test/e2e/models/CodeServer.ts +++ b/test/e2e/models/CodeServer.ts @@ -336,6 +336,16 @@ export class CodeServerPage { return loaded } + /** + * Checks if the test extension loaded + */ + async waitForTestExtensionLoaded(): Promise { + const selector = "text=test extension loaded" + this.codeServer.logger.debug("Waiting for test extension to load...") + + await this.page.waitForSelector(selector) + } + /** * Focuses the integrated terminal by navigating through the command palette. * From 9c71a39fcd6a5902422070d4ff601641f9d5824c Mon Sep 17 00:00:00 2001 From: Joe Previte Date: Mon, 22 Aug 2022 11:31:26 -0700 Subject: [PATCH 08/10] fixup: refactor and delete old methods --- test/e2e/extensions.test.ts | 1 - test/e2e/models/CodeServer.ts | 40 ----------------------------------- 2 files changed, 41 deletions(-) diff --git a/test/e2e/extensions.test.ts b/test/e2e/extensions.test.ts index f08792f66da9..1460e29101db 100644 --- a/test/e2e/extensions.test.ts +++ b/test/e2e/extensions.test.ts @@ -8,7 +8,6 @@ function runTestExtensionTests() { test("should have access to VSCODE_PROXY_URI", async ({ codeServerPage }) => { const address = await getMaybeProxiedCodeServer(codeServerPage) - // await codeServerPage.reloadUntilTestExtensionIsLoaded() await codeServerPage.waitForTestExtensionLoaded() await codeServerPage.executeCommandViaMenus("code-server: Get proxy URI") diff --git a/test/e2e/models/CodeServer.ts b/test/e2e/models/CodeServer.ts index 95ab98b536b9..d5c00b96e6a7 100644 --- a/test/e2e/models/CodeServer.ts +++ b/test/e2e/models/CodeServer.ts @@ -282,32 +282,6 @@ export class CodeServerPage { this.codeServer.logger.debug("Editor is ready!") } - /** - * Checks if the test extension has loaded - * - * Reload until both checks pass - */ - async reloadUntilTestExtensionIsLoaded() { - this.codeServer.logger.debug("Waiting for test extension to load...") - - const extensionIsLoaded = await this.isTestExtensionLoaded() - let reloadCount = 0 - - while (!extensionIsLoaded) { - await this.page.waitForLoadState("load") - // Give it an extra second just in case it's feeling extra slow - await this.page.waitForTimeout(1000) - reloadCount += 1 - if (await this.isTestExtensionLoaded()) { - this.codeServer.logger.debug(`test extension loaded after ${reloadCount} reloads`) - break - } - await this.reloadUntilEditorIsReady() - } - - this.codeServer.logger.debug("Test extension has loaded!") - } - /** * Checks if the editor is visible */ @@ -322,20 +296,6 @@ export class CodeServerPage { return visible } - /** - * Checks if the test extension loaded - */ - async isTestExtensionLoaded() { - const selector = "text=test extension loaded" - this.codeServer.logger.debug("Waiting for test extension to load...") - - const loaded = await this.page.isVisible(selector) - - this.codeServer.logger.debug(`Test extension has ${loaded ? "" : "not"} loaded`) - - return loaded - } - /** * Checks if the test extension loaded */ From aea4c56856ff84cc9e92d81d338d526b0612a178 Mon Sep 17 00:00:00 2001 From: Joe Previte Date: Mon, 22 Aug 2022 11:35:17 -0700 Subject: [PATCH 09/10] try again joe --- test/e2e/extensions.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/test/e2e/extensions.test.ts b/test/e2e/extensions.test.ts index 1460e29101db..2b4b3a802b26 100644 --- a/test/e2e/extensions.test.ts +++ b/test/e2e/extensions.test.ts @@ -5,6 +5,7 @@ import { describe, test, expect } from "./baseFixture" function runTestExtensionTests() { // This will only work if the test extension is loaded into code-server. + // fake commit test("should have access to VSCODE_PROXY_URI", async ({ codeServerPage }) => { const address = await getMaybeProxiedCodeServer(codeServerPage) From 567eb83c38bd274e8a2d7fa58ff94111227eca52 Mon Sep 17 00:00:00 2001 From: Joe Previte Date: Mon, 22 Aug 2022 11:35:49 -0700 Subject: [PATCH 10/10] Update test/e2e/extensions.test.ts --- test/e2e/extensions.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/test/e2e/extensions.test.ts b/test/e2e/extensions.test.ts index 2b4b3a802b26..1460e29101db 100644 --- a/test/e2e/extensions.test.ts +++ b/test/e2e/extensions.test.ts @@ -5,7 +5,6 @@ import { describe, test, expect } from "./baseFixture" function runTestExtensionTests() { // This will only work if the test extension is loaded into code-server. - // fake commit test("should have access to VSCODE_PROXY_URI", async ({ codeServerPage }) => { const address = await getMaybeProxiedCodeServer(codeServerPage)