Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Disable playwright tests for legacy crypto #12662

Merged
merged 6 commits into from
Jun 24, 2024
Merged
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 1 addition & 13 deletions playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,9 @@ limitations under the License.

import { defineConfig } from "@playwright/test";

import { TestOptions } from "./playwright/element-web-test";

const baseURL = process.env["BASE_URL"] ?? "http://localhost:8080";

export default defineConfig<TestOptions>({
export default defineConfig({
use: {
viewport: { width: 1280, height: 720 },
ignoreHTTPSErrors: true,
Expand All @@ -42,16 +40,6 @@ export default defineConfig<TestOptions>({
workers: 1,
retries: process.env.CI ? 2 : 0,
reporter: process.env.CI ? [["blob"], ["github"]] : [["html", { outputFolder: "playwright/html-report" }]],
projects: [
{
name: "Legacy Crypto",
use: { cryptoBackend: "legacy" },
},
{
name: "Rust Crypto",
use: { cryptoBackend: "rust" },
},
],
snapshotDir: "playwright/snapshots",
snapshotPathTemplate: "{snapshotDir}/{testFilePath}/{arg}-{platform}{ext}",
});
28 changes: 2 additions & 26 deletions playwright/e2e/crypto/crypto.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -322,13 +322,7 @@ test.describe("Cryptography", function () {
});
});

test("should show the correct shield on e2e events", async ({
page,
app,
bot: bob,
homeserver,
cryptoBackend,
}) => {
test("should show the correct shield on e2e events", async ({ page, app, bot: bob, homeserver }) => {
// Bob has a second, not cross-signed, device
const bobSecondDevice = new Bot(page, homeserver, {
bootstrapSecretStorage: false,
Expand Down Expand Up @@ -432,14 +426,8 @@ test.describe("Cryptography", function () {
await app.viewRoomByName("Bob");
await app.viewRoomByName("TestRoom");

// some debate over whether this should have a red or a grey shield. Legacy crypto shows a grey shield,
// Rust crypto a red one.
await expect(last).toContainText("test encrypted from unverified");
if (cryptoBackend === "rust") {
await expect(lastE2eIcon).toHaveClass(/mx_EventTile_e2eIcon_warning/);
} else {
await expect(lastE2eIcon).toHaveClass(/mx_EventTile_e2eIcon_normal/);
}
await expect(lastE2eIcon).toHaveClass(/mx_EventTile_e2eIcon_warning/);
await lastE2eIcon.focus();
await expect(page.getByRole("tooltip")).toContainText("Encrypted by an unknown or deleted device.");
});
Expand Down Expand Up @@ -549,9 +537,7 @@ test.describe("Cryptography", function () {
app,
credentials,
user,
cryptoBackend,
}) => {
test.skip(cryptoBackend === "legacy", "Not implemented for legacy crypto");
test.setTimeout(60000);

// Start with a logged-in session, without key backup, and send a message.
Expand Down Expand Up @@ -615,11 +601,8 @@ test.describe("Cryptography", function () {
app,
credentials: aliceCredentials,
user: alice,
cryptoBackend,
bot: bob,
}) => {
test.skip(cryptoBackend === "legacy", "Not implemented for legacy crypto");

// Bob creates an encrypted room and sends a message to it. He then invites Alice
const roomId = await bob.evaluate(
async (client, { alice }) => {
Expand Down Expand Up @@ -723,15 +706,8 @@ test.describe("Cryptography", function () {
app,
credentials: aliceCredentials,
user: alice,
cryptoBackend,
bot: bob,
}) => {
// The old pre-join UTD hiding code would hide events sent
// before our latest join event, even if the event that we're
// jumping to was decryptable. We test that this no longer happens.

test.skip(cryptoBackend === "legacy", "Not implemented for legacy crypto");

// Bob:
// - creates an encrypted room,
// - invites Alice,
Expand Down
3 changes: 0 additions & 3 deletions playwright/e2e/crypto/verification.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -303,10 +303,7 @@ test.describe("User verification", () => {
user: aliceCredentials,
toasts,
room: { roomId: dmRoomId },
cryptoBackend,
}) => {
test.skip(cryptoBackend === "legacy", "Not implemented for legacy crypto");

// once Alice has joined, Bob starts the verification
const bobVerificationRequest = await bob.evaluateHandle(
async (client, { dmRoomId, aliceCredentials }) => {
Expand Down
2 changes: 0 additions & 2 deletions playwright/e2e/read-receipts/high-level.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,6 @@ test.describe("Read receipts", () => {
});

test("Paging up to find old threads that were never read keeps the room unread", async ({
cryptoBackend,
roomAlpha: room1,
roomBeta: room2,
util,
Expand Down Expand Up @@ -338,7 +337,6 @@ test.describe("Read receipts", () => {
});

test("After marking room as read, paging up to find old threads that were never read leaves the room read", async ({
cryptoBackend,
roomAlpha: room1,
roomBeta: room2,
util,
Expand Down
4 changes: 2 additions & 2 deletions playwright/e2e/timeline/timeline.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -568,9 +568,9 @@ test.describe("Timeline", () => {
);
});

test("should set inline start padding to a hidden event line", async ({ page, app, room, cryptoBackend }) => {
test("should set inline start padding to a hidden event line", async ({ page, app, room }) => {
test.skip(
cryptoBackend === "rust",
true,
"Disabled due to screenshot test being flaky - https://github.com/element-hq/element-web/issues/26890",
);
await sendEvent(app.client, room.roomId);
Expand Down
143 changes: 66 additions & 77 deletions playwright/element-web-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -63,84 +63,77 @@ const CONFIG_JSON: Partial<IConfigOptions> = {
},
};

export type TestOptions = {
cryptoBackend: "legacy" | "rust";
};

interface CredentialsWithDisplayName extends Credentials {
displayName: string;
}

export const test = base.extend<
TestOptions & {
axe: AxeBuilder;
checkA11y: () => Promise<void>;

/**
* The contents of the config.json to send when the client requests it.
*/
config: typeof CONFIG_JSON;

/**
* The options with which to run the {@link #homeserver} fixture.
*/
startHomeserverOpts: StartHomeserverOpts | string;

homeserver: HomeserverInstance;
oAuthServer: { port: number };

/**
* The displayname to use for the user registered in {@link #credentials}.
*
* To set it, call `test.use({ displayName: "myDisplayName" })` in the test file or `describe` block.
* See {@link https://playwright.dev/docs/api/class-test#test-use}.
*/
displayName?: string;

/**
* A test fixture which registers a test user on the {@link #homeserver} and supplies the details
* of the registered user.
*/
credentials: CredentialsWithDisplayName;

/**
* The same as {@link https://playwright.dev/docs/api/class-fixtures#fixtures-page|`page`},
* but adds an initScript which will populate localStorage with the user's details from
* {@link #credentials} and {@link #homeserver}.
*
* Similar to {@link #user}, but doesn't load the app.
*/
pageWithCredentials: Page;

/**
* A (rather poorly-named) test fixture which registers a user per {@link #credentials}, stores
* the credentials into localStorage per {@link #homeserver}, and then loads the front page of the
* app.
*/
user: CredentialsWithDisplayName;

/**
* The same as {@link https://playwright.dev/docs/api/class-fixtures#fixtures-page|`page`},
* but wraps the returned `Page` in a class of utilities for interacting with the Element-Web UI,
* {@link ElementAppPage}.
*/
app: ElementAppPage;

mailhog: { api: mailhog.API; instance: Instance };
crypto: Crypto;
room?: { roomId: string };
toasts: Toasts;
uut?: Locator; // Unit Under Test, useful place to refer a prepared locator
botCreateOpts: CreateBotOpts;
bot: Bot;
slidingSyncProxy: ProxyInstance;
labsFlags: string[];
webserver: Webserver;
}
>({
cryptoBackend: ["legacy", { option: true }],
export const test = base.extend<{
axe: AxeBuilder;
checkA11y: () => Promise<void>;

/**
* The contents of the config.json to send when the client requests it.
*/
config: typeof CONFIG_JSON;

/**
* The options with which to run the {@link #homeserver} fixture.
*/
startHomeserverOpts: StartHomeserverOpts | string;

homeserver: HomeserverInstance;
oAuthServer: { port: number };

/**
* The displayname to use for the user registered in {@link #credentials}.
*
* To set it, call `test.use({ displayName: "myDisplayName" })` in the test file or `describe` block.
* See {@link https://playwright.dev/docs/api/class-test#test-use}.
*/
displayName?: string;

/**
* A test fixture which registers a test user on the {@link #homeserver} and supplies the details
* of the registered user.
*/
credentials: CredentialsWithDisplayName;

/**
* The same as {@link https://playwright.dev/docs/api/class-fixtures#fixtures-page|`page`},
* but adds an initScript which will populate localStorage with the user's details from
* {@link #credentials} and {@link #homeserver}.
*
* Similar to {@link #user}, but doesn't load the app.
*/
pageWithCredentials: Page;

/**
* A (rather poorly-named) test fixture which registers a user per {@link #credentials}, stores
* the credentials into localStorage per {@link #homeserver}, and then loads the front page of the
* app.
*/
user: CredentialsWithDisplayName;

/**
* The same as {@link https://playwright.dev/docs/api/class-fixtures#fixtures-page|`page`},
* but wraps the returned `Page` in a class of utilities for interacting with the Element-Web UI,
* {@link ElementAppPage}.
*/
app: ElementAppPage;

mailhog: { api: mailhog.API; instance: Instance };
crypto: Crypto;
room?: { roomId: string };
toasts: Toasts;
uut?: Locator; // Unit Under Test, useful place to refer a prepared locator
botCreateOpts: CreateBotOpts;
bot: Bot;
slidingSyncProxy: ProxyInstance;
labsFlags: string[];
webserver: Webserver;
}>({
config: CONFIG_JSON,
page: async ({ context, page, config, cryptoBackend, labsFlags }, use) => {
page: async ({ context, page, config, labsFlags }, use) => {
await context.route(`http://localhost:8080/config.json*`, async (route) => {
const json = { ...CONFIG_JSON, ...config };
json["features"] = {
Expand All @@ -151,10 +144,6 @@ export const test = base.extend<
return obj;
}, {}),
};
// the default is to use rust now, so set to `false` if on legacy backend
if (cryptoBackend === "legacy") {
json.features.feature_rust_crypto = false;
}
await route.fulfill({ json });
});
await use(page);
Expand Down
Loading