Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
2 changes: 1 addition & 1 deletion .github/workflows/e2e-project-cleanup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ name: E2E Project Cleanup
on:
workflow_dispatch:
schedule:
- cron: "0 3 * * *" # Run at 3am each day
- cron: "0 */2 * * *" # Run every 2 hours

permissions:
contents: read
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const execOptions = {
} as const;
const remoteWorkerName = `tmp-e2e-worker-test-remote-bindings-${randomUUID().split("-")[0]}`;
const remoteStagingWorkerName = `tmp-e2e-staging-worker-test-remote-bindings-${randomUUID().split("-")[0]}`;
const remoteKvName = `tmp-e2e-remote-kv-test-remote-bindings-${randomUUID().split("-")[0]}`;
const remoteKvName = `tmp-e2e-kv${Date.now()}-test-remote-bindings-${randomUUID().split("-")[0]}`;

if (auth) {
describe("getPlatformProxy - remote bindings", { timeout: 50_000 }, () => {
Expand Down
38 changes: 20 additions & 18 deletions packages/wrangler/e2e/__snapshots__/dev.test.ts.snap
Original file line number Diff line number Diff line change
@@ -1,37 +1,39 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html

exports[`basic js dev: 'wrangler dev --remote' > --test-scheduled works with wrangler dev --remote > custom build 1`] = `"Ran scheduled event"`;
exports[`basic js dev: 'wrangler dev --port=0' > --test-scheduled works with wrangler dev --port=0 > custom build 1`] = `"Ran scheduled event"`;

exports[`basic js dev: 'wrangler dev --remote' > --test-scheduled works with wrangler dev --remote > no custom build 1`] = `"Ran scheduled event"`;
exports[`basic js dev: 'wrangler dev --port=0' > --test-scheduled works with wrangler dev --port=0 > no custom build 1`] = `"Ran scheduled event"`;

exports[`basic js dev: 'wrangler dev --remote' > Workers + Assets > can modify User Worker during wrangler dev --remote 1`] = `"Hello World!"`;
exports[`basic js dev: 'wrangler dev --port=0' > Workers + Assets > can modify User Worker during wrangler dev --port=0 1`] = `"Hello World!"`;

exports[`basic js dev: 'wrangler dev --remote' > Workers + Assets > can modify User Worker during wrangler dev --remote 2`] = `"Updated Worker!"`;
exports[`basic js dev: 'wrangler dev --port=0' > Workers + Assets > can modify User Worker during wrangler dev --port=0 2`] = `"Updated Worker!"`;

exports[`basic js dev: 'wrangler dev --remote' > Workers + Assets > can modify assets during wrangler dev --remote 1`] = `"Hello World!"`;
exports[`basic js dev: 'wrangler dev --port=0' > Workers + Assets > can modify assets during wrangler dev --port=0 1`] = `"Hello World!"`;

exports[`basic js dev: 'wrangler dev --remote' > Workers + Assets > can modify assets during wrangler dev --remote 2`] = `"Hello World!"`;
exports[`basic js dev: 'wrangler dev --port=0' > Workers + Assets > can modify assets during wrangler dev --port=0 2`] = `"Hello World!"`;

exports[`basic js dev: 'wrangler dev --remote' > can modify Worker during wrangler dev --remote 1`] = `"Hello World!"`;
exports[`basic js dev: 'wrangler dev --port=0' > can modify Worker during wrangler dev --port=0 1`] = `"Hello World!"`;

exports[`basic js dev: 'wrangler dev --remote' > can modify Worker during wrangler dev --remote 2`] = `"Updated Worker! value"`;
exports[`basic js dev: 'wrangler dev --port=0' > can modify Worker during wrangler dev --port=0 2`] = `"Updated Worker! value"`;

exports[`basic js dev: 'wrangler dev --remote' > hotkeys can be disabled with wrangler dev --remote 1`] = `"Hello World!"`;
exports[`basic js dev: 'wrangler dev --port=0' > hotkeys can be disabled with wrangler dev --port=0 1`] = `"Hello World!"`;

exports[`basic js dev: 'wrangler dev' > --test-scheduled works with wrangler dev > custom build 1`] = `"Ran scheduled event"`;
exports[`basic js dev: 'wrangler dev --remote' > --test-scheduled works with wrangler dev --remote > custom build 1`] = `"Ran scheduled event"`;

exports[`basic js dev: 'wrangler dev' > --test-scheduled works with wrangler dev > no custom build 1`] = `"Ran scheduled event"`;
exports[`basic js dev: 'wrangler dev --remote' > --test-scheduled works with wrangler dev --remote > no custom build 1`] = `"Ran scheduled event"`;

exports[`basic js dev: 'wrangler dev' > Workers + Assets > can modify User Worker during wrangler dev 1`] = `"Hello World!"`;
exports[`basic js dev: 'wrangler dev --remote' > Workers + Assets > can modify User Worker during wrangler dev --remote 1`] = `"Hello World!"`;

exports[`basic js dev: 'wrangler dev' > Workers + Assets > can modify User Worker during wrangler dev 2`] = `"Updated Worker!"`;
exports[`basic js dev: 'wrangler dev --remote' > Workers + Assets > can modify User Worker during wrangler dev --remote 2`] = `"Updated Worker!"`;

exports[`basic js dev: 'wrangler dev' > Workers + Assets > can modify assets during wrangler dev 1`] = `"Hello World!"`;
exports[`basic js dev: 'wrangler dev --remote' > Workers + Assets > can modify assets during wrangler dev --remote 1`] = `"Hello World!"`;

exports[`basic js dev: 'wrangler dev' > Workers + Assets > can modify assets during wrangler dev 2`] = `"Hello World!"`;
exports[`basic js dev: 'wrangler dev --remote' > Workers + Assets > can modify assets during wrangler dev --remote 2`] = `"Hello World!"`;

exports[`basic js dev: 'wrangler dev' > can modify Worker during wrangler dev 1`] = `"Hello World!"`;
exports[`basic js dev: 'wrangler dev --remote' > Workers + Assets > can modify assets during wrangler dev --remote 3`] = `"Hello World!"`;

exports[`basic js dev: 'wrangler dev' > can modify Worker during wrangler dev 2`] = `"Updated Worker! value"`;
exports[`basic js dev: 'wrangler dev --remote' > can modify Worker during wrangler dev --remote 1`] = `"Hello World!"`;

exports[`basic js dev: 'wrangler dev --remote' > can modify Worker during wrangler dev --remote 2`] = `"Updated Worker! value"`;

exports[`basic js dev: 'wrangler dev' > hotkeys can be disabled with wrangler dev 1`] = `"Hello World!"`;
exports[`basic js dev: 'wrangler dev --remote' > hotkeys can be disabled with wrangler dev --remote 1`] = `"Hello World!"`;
4 changes: 2 additions & 2 deletions packages/wrangler/e2e/cert.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ describe.skipIf(!CLOUDFLARE_ACCOUNT_ID)("cert", () => {
"? Are you sure you want to delete certificate 00000000-0000-0000-0000-000000000000 (tmp-e2e-mtls-cert-00000000-0000-0000-0000-000000000000)?
🤖 Using fallback value in non-interactive context: yes
Deleted certificate 00000000-0000-0000-0000-000000000000 (tmp-e2e-mtls-cert-00000000-0000-0000-0000-000000000000) successfully"
`
`
);
});

Expand All @@ -86,7 +86,7 @@ describe.skipIf(!CLOUDFLARE_ACCOUNT_ID)("cert", () => {
"? Are you sure you want to delete certificate 00000000-0000-0000-0000-000000000000 (tmp-e2e-ca-cert-00000000-0000-0000-0000-000000000000)?
🤖 Using fallback value in non-interactive context: yes
Deleted certificate 00000000-0000-0000-0000-000000000000 (tmp-e2e-ca-cert-00000000-0000-0000-0000-000000000000) successfully"
`
`
);
});
});
166 changes: 83 additions & 83 deletions packages/wrangler/e2e/deployments.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,15 +79,15 @@ describe.skipIf(!CLOUDFLARE_ACCOUNT_ID)(
const output = await helper.run(`wrangler deployments list`);

expect(normalize(output.stdout)).toMatchInlineSnapshot(`
"Created: TIMESTAMP
Author: [email protected]
Source: Upload
Message: Automatic deployment on upload.
Version(s): (100%) 00000000-0000-0000-0000-000000000000
Created: TIMESTAMP
Tag: -
Message: -"
`);
"Created: TIMESTAMP
Author: [email protected]
Source: Upload
Message: Automatic deployment on upload.
Version(s): (100%) 00000000-0000-0000-0000-000000000000
Created: TIMESTAMP
Tag: -
Message: -"
`);
});

it("modifies & deploys a Worker", async () => {
Expand Down Expand Up @@ -117,92 +117,92 @@ describe.skipIf(!CLOUDFLARE_ACCOUNT_ID)(
it("lists 2 deployments", async () => {
const dep = await helper.run(`wrangler deployments list`);
expect(normalize(dep.stdout)).toMatchInlineSnapshot(`
"Created: TIMESTAMP
Author: [email protected]
Source: Upload
Message: Automatic deployment on upload.
Version(s): (100%) 00000000-0000-0000-0000-000000000000
Created: TIMESTAMP
Tag: -
Message: -
Created: TIMESTAMP
Author: [email protected]
Source: Unknown (deployment)
Message: -
Version(s): (100%) 00000000-0000-0000-0000-000000000000
Created: TIMESTAMP
Tag: -
Message: -"
`);
"Created: TIMESTAMP
Author: [email protected]
Source: Upload
Message: Automatic deployment on upload.
Version(s): (100%) 00000000-0000-0000-0000-000000000000
Created: TIMESTAMP
Tag: -
Message: -
Created: TIMESTAMP
Author: [email protected]
Source: Unknown (deployment)
Message: -
Version(s): (100%) 00000000-0000-0000-0000-000000000000
Created: TIMESTAMP
Tag: -
Message: -"
`);
});

it("rolls back", async () => {
const output = await helper.run(
`wrangler rollback --message "A test message"`
);
expect(normalize(output.stdout)).toMatchInlineSnapshot(`
"├ Fetching latest deployment
├ Your current deployment has 1 version(s):
│ (100%) 00000000-0000-0000-0000-000000000000
│ Created: TIMESTAMP
│ Tag: -
│ Message: -
├ Finding latest stable Worker Version to rollback to
? Please provide an optional message for this rollback (120 characters max)
🤖 Using default value in non-interactive context: A test message
├ WARNING You are about to rollback to Worker Version 00000000-0000-0000-0000-000000000000.
│ This will immediately replace the current deployment and become the active deployment across all your deployed triggers.
│ However, your local development environment will not be affected by this rollback.
│ Rolling back to a previous deployment will not rollback any of the bound resources (Durable Object, D1, R2, KV, etc).
│ (100%) 00000000-0000-0000-0000-000000000000
│ Created: TIMESTAMP
│ Tag: -
│ Message: -
? Are you sure you want to deploy this Worker Version to 100% of traffic?
🤖 Using fallback value in non-interactive context: yes
Performing rollback...
╰ SUCCESS Worker Version 00000000-0000-0000-0000-000000000000 has been deployed to 100% of traffic.
Current Version ID: 00000000-0000-0000-0000-000000000000"
`);
"├ Fetching latest deployment
├ Your current deployment has 1 version(s):
│ (100%) 00000000-0000-0000-0000-000000000000
│ Created: TIMESTAMP
│ Tag: -
│ Message: -
├ Finding latest stable Worker Version to rollback to
? Please provide an optional message for this rollback (120 characters max)
🤖 Using default value in non-interactive context: A test message
├ WARNING You are about to rollback to Worker Version 00000000-0000-0000-0000-000000000000.
│ This will immediately replace the current deployment and become the active deployment across all your deployed triggers.
│ However, your local development environment will not be affected by this rollback.
│ Rolling back to a previous deployment will not rollback any of the bound resources (Durable Object, D1, R2, KV, etc).
│ (100%) 00000000-0000-0000-0000-000000000000
│ Created: TIMESTAMP
│ Tag: -
│ Message: -
? Are you sure you want to deploy this Worker Version to 100% of traffic?
🤖 Using fallback value in non-interactive context: yes
Performing rollback...
╰ SUCCESS Worker Version 00000000-0000-0000-0000-000000000000 has been deployed to 100% of traffic.
Current Version ID: 00000000-0000-0000-0000-000000000000"
`);
});

it("lists deployments", async () => {
const dep = await helper.run(`wrangler deployments list`);
expect(normalize(dep.stdout)).toMatchInlineSnapshot(`
"Created: TIMESTAMP
Author: [email protected]
Source: Upload
Message: Automatic deployment on upload.
Version(s): (100%) 00000000-0000-0000-0000-000000000000
Created: TIMESTAMP
Tag: -
Message: -
Created: TIMESTAMP
Author: [email protected]
Source: Unknown (deployment)
Message: -
Version(s): (100%) 00000000-0000-0000-0000-000000000000
Created: TIMESTAMP
Tag: -
Message: -
Created: TIMESTAMP
Author: [email protected]
Source: Unknown (deployment)
Message: A test message
Version(s): (100%) 00000000-0000-0000-0000-000000000000
Created: TIMESTAMP
Tag: -
Message: -"
`);
"Created: TIMESTAMP
Author: [email protected]
Source: Upload
Message: Automatic deployment on upload.
Version(s): (100%) 00000000-0000-0000-0000-000000000000
Created: TIMESTAMP
Tag: -
Message: -
Created: TIMESTAMP
Author: [email protected]
Source: Unknown (deployment)
Message: -
Version(s): (100%) 00000000-0000-0000-0000-000000000000
Created: TIMESTAMP
Tag: -
Message: -
Created: TIMESTAMP
Author: [email protected]
Source: Unknown (deployment)
Message: A test message
Version(s): (100%) 00000000-0000-0000-0000-000000000000
Created: TIMESTAMP
Tag: -
Message: -"
`);
});
}
);
Expand Down
23 changes: 13 additions & 10 deletions packages/wrangler/e2e/dev-with-resources.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -686,11 +686,13 @@ describe.sequential.each(RUNTIMES)("Bindings: $flags", ({ runtime, flags }) => {
);
});

it.skipIf(isLocal)("exposes Hyperdrive bindings", async () => {
const { id } = await helper.hyperdrive(isLocal);
it.skipIf(isLocal || !process.env.HYPERDRIVE_DATABASE_URL)(
"exposes Hyperdrive bindings",
async () => {
const { id } = await helper.hyperdrive(isLocal);

await helper.seed({
"wrangler.toml": dedent`
await helper.seed({
"wrangler.toml": dedent`
name = "${workerName}"
main = "src/index.ts"
compatibility_date = "2023-10-25"
Expand All @@ -699,7 +701,7 @@ describe.sequential.each(RUNTIMES)("Bindings: $flags", ({ runtime, flags }) => {
binding = "HYPERDRIVE"
id = "${id}"
`,
"src/index.ts": dedent`
"src/index.ts": dedent`
export default {
async fetch(request, env) {
if (request.url.includes("connect")) {
Expand All @@ -708,12 +710,13 @@ describe.sequential.each(RUNTIMES)("Bindings: $flags", ({ runtime, flags }) => {
return new Response(env.HYPERDRIVE?.connectionString ?? "no")
}
}`,
});
});

const worker = helper.runLongLived(`wrangler dev ${flags}`);
const { url } = await worker.waitForReady();
await fetch(`${url}/connect`);
});
const worker = helper.runLongLived(`wrangler dev ${flags}`);
const { url } = await worker.waitForReady();
await fetch(`${url}/connect`);
}
);

it("exposes Pipelines bindings", async () => {
await helper.seed({
Expand Down
4 changes: 2 additions & 2 deletions packages/wrangler/e2e/dev.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import { getStartedWorkerdProcesses } from "./helpers/workerd-processes";
const workerName = generateResourceName();

describe.each([
{ cmd: "wrangler dev" },
{ cmd: "wrangler dev --port=0" },
...(CLOUDFLARE_ACCOUNT_ID ? [{ cmd: "wrangler dev --remote" }] : []),
])("basic js dev: $cmd", ({ cmd }) => {
it(`can modify Worker during ${cmd}`, async () => {
Expand Down Expand Up @@ -703,7 +703,7 @@ describe("hyperdrive dev tests", () => {
await socketMsgPromise;
});

it.skipIf(!CLOUDFLARE_ACCOUNT_ID)(
it.skipIf(!CLOUDFLARE_ACCOUNT_ID || !process.env.HYPERDRIVE_DATABASE_URL)(
"does not require local connection string when running `wrangler dev --remote`",
async () => {
const helper = new WranglerE2ETestHelper();
Expand Down
6 changes: 3 additions & 3 deletions packages/wrangler/e2e/helpers/cert.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { randomUUID } from "node:crypto";
import * as forge from "node-forge";
import { generateResourceName } from "./generate-resource-name";

// Generate X509 self signed root key pair and certificate
export function generateRootCertificate() {
Expand Down Expand Up @@ -109,9 +109,9 @@ export function generateRootCaCert() {
}

export function generateMtlsCertName() {
return `tmp-e2e-mtls-cert-${randomUUID()}`;
return generateResourceName("mtls-cert");
}

export function generateCaCertName() {
return `tmp-e2e-ca-cert-${randomUUID()}`;
return generateResourceName("ca-cert");
}
1 change: 1 addition & 0 deletions packages/wrangler/e2e/helpers/command.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ export function runCommand(
{ cwd, env, timeout = DEFAULT_TIMEOUT }: CommandOptions = {}
) {
try {
console.log(`Running command: ${command}`);
const { status, stdout, stderr, output } = spawnSync(command, [], {
shell: true,
cwd,
Expand Down
7 changes: 6 additions & 1 deletion packages/wrangler/e2e/helpers/e2e-wrangler-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ export class WranglerE2ETestHelper {
}

async kv(isLocal: boolean) {
const name = generateResourceName("kv").replaceAll("-", "_");
const name = generateResourceName("kv" + Date.now()).replaceAll("-", "_");
if (isLocal) {
return name;
}
Expand Down Expand Up @@ -164,6 +164,11 @@ export class WranglerE2ETestHelper {
return { id: crypto.randomUUID(), name };
}

assert(
process.env.HYPERDRIVE_DATABASE_URL,
"HYPERDRIVE_DATABASE_URL must be set in order to create a Hyperdrive resource for this test"
);

const result = await this.run(
`wrangler hyperdrive create ${name} --connection-string="${process.env.HYPERDRIVE_DATABASE_URL}"`
);
Expand Down
Loading
Loading