Skip to content

Commit fe790b9

Browse files
emily-shenpenalosa
andauthored
backport vectorize e2e changes (#8520)
* Use a shared Vectorize index for the Vectorize E2E tests (#8492) * shared resource * address comments * maybe trigger action? * remove v3 warning * normalise types e2e output --------- Co-authored-by: Somhairle MacLeòid <[email protected]>
1 parent 80bbee3 commit fe790b9

File tree

5 files changed

+67
-36
lines changed

5 files changed

+67
-36
lines changed

.github/workflows/test-and-check.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,17 @@ name: CI
22

33
on:
44
pull_request:
5+
types:
6+
[
7+
opened,
8+
synchronize,
9+
reopened,
10+
labeled,
11+
unlabeled,
12+
edited,
13+
ready_for_review,
14+
converted_to_draft,
15+
]
516

617
jobs:
718
add-to-project:

packages/wrangler/e2e/dev-with-resources.test.ts

Lines changed: 34 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -519,8 +519,14 @@ describe.sequential.each(RUNTIMES)("Bindings: $flags", ({ runtime, flags }) => {
519519
}
520520
});
521521

522+
// Refer to https://github.com/cloudflare/workers-sdk/pull/8492 for full context on why this test does different things to the others.
523+
// In particular, it uses a shared resource across test runs
522524
it("exposes Vectorize bindings", async () => {
523-
const name = await helper.vectorize(32, "euclidean");
525+
const name = await helper.vectorize(
526+
32,
527+
"euclidean",
528+
"well-known-vectorize"
529+
);
524530

525531
await helper.seed({
526532
"wrangler.toml": dedent`
@@ -531,39 +537,37 @@ describe.sequential.each(RUNTIMES)("Bindings: $flags", ({ runtime, flags }) => {
531537
binding = "VECTORIZE"
532538
index_name = "${name}"
533539
`,
534-
"src/index.ts": dedent`
540+
"src/index.ts": dedent/*javascript*/ `
535541
export interface Env {
536542
VECTORIZE: Vectorize;
537543
}
538544
539-
async function waitForMutation(env: Env, mutationId: string) {
540-
while((await env.VECTORIZE.describe()).processedUpToMutation != mutationId) {
541-
await new Promise(resolve => setTimeout(resolve, 2000));
542-
}
543-
}
544-
545545
export default {
546546
async fetch(request: Request, env: Env, ctx: any) {
547-
await env.VECTORIZE.insert([{"id":"a44706aa-a366-48bc-8cc1-3feffd87d548","values":[0.2321,0.8121,0.6315,0.6151,0.4121,0.1512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"metadata":{"text":"Peter Piper picked a peck of pickled peppers"}}]);
548-
await env.VECTORIZE.insert([{"id":"b0daca4a-ffd8-4865-926b-e24800af2a2d","values":[0.2331,1.0125,0.6131,0.9421,0.9661,0.8121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"metadata":{"text":"She sells seashells by the sea"}}]);
549-
await waitForMutation(env, (await env.VECTORIZE.upsert([{"id":"b0daca4a-ffd8-4865-926b-e24800af2a2d","values":[0.2331,1.0125,0.6131,0.9421,0.9661,0.8121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"metadata":{"text":"She sells seashells by the seashore"}}])).mutationId);
550-
551-
let response = "";
552-
response += JSON.stringify(await env.VECTORIZE.getByIds(["a44706aa-a366-48bc-8cc1-3feffd87d548"]));
553-
554-
const queryVector: Array<number> = [
555-
0.13, 0.25, 0.44, 0.53, 0.62, 0.41, 0.59, 0.68, 0.29, 0.82, 0.37, 0.5,
556-
0.74, 0.46, 0.57, 0.64, 0.28, 0.61, 0.73, 0.35, 0.78, 0.58, 0.42, 0.32,
557-
0.77, 0.65, 0.49, 0.54, 0.31, 0.29, 0.71, 0.57,
558-
]; // vector of dimension 32
559-
const matches = await env.VECTORIZE.query(queryVector, {
560-
topK: 3,
561-
returnValues: true,
562-
returnMetadata: "all",
563-
});
564-
response += " " + matches.count;
547+
const url = new URL(request.url)
548+
if(url.pathname === "/insert") {
549+
await env.VECTORIZE.insert([{"id":"a44706aa-a366-48bc-8cc1-3feffd87d548","values":[0.2321,0.8121,0.6315,0.6151,0.4121,0.1512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"metadata":{"text":"Peter Piper picked a peck of pickled peppers"}}]);
550+
await env.VECTORIZE.insert([{"id":"b0daca4a-ffd8-4865-926b-e24800af2a2d","values":[0.2331,1.0125,0.6131,0.9421,0.9661,0.8121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"metadata":{"text":"She sells seashells by the sea"}}]);
551+
await env.VECTORIZE.upsert([{"id":"b0daca4a-ffd8-4865-926b-e24800af2a2d","values":[0.2331,1.0125,0.6131,0.9421,0.9661,0.8121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"metadata":{"text":"She sells seashells by the seashore"}}]);
552+
return new Response("inserted")
553+
}
554+
if(url.pathname === "/query") {
555+
let response = "";
556+
response += JSON.stringify(await env.VECTORIZE.getByIds(["a44706aa-a366-48bc-8cc1-3feffd87d548"]));
557+
558+
const queryVector: Array<number> = [
559+
0.13, 0.25, 0.44, 0.53, 0.62, 0.41, 0.59, 0.68, 0.29, 0.82, 0.37, 0.5,
560+
0.74, 0.46, 0.57, 0.64, 0.28, 0.61, 0.73, 0.35, 0.78, 0.58, 0.42, 0.32,
561+
0.77, 0.65, 0.49, 0.54, 0.31, 0.29, 0.71, 0.57,
562+
]; // vector of dimension 32
563+
const matches = await env.VECTORIZE.query(queryVector, {
564+
topK: 3,
565+
returnValues: true,
566+
returnMetadata: "all",
567+
});
565568
566-
return new Response(response);
569+
return new Response(response);
570+
}
567571
}
568572
}
569573
`,
@@ -573,10 +577,11 @@ describe.sequential.each(RUNTIMES)("Bindings: $flags", ({ runtime, flags }) => {
573577
`wrangler dev ${flags} --port ${port} --inspector-port ${inspectorPort} --experimental-vectorize-bind-to-prod`
574578
);
575579
const { url } = await worker.waitForReady();
576-
const res = await fetch(url);
580+
await fetch(`${url}/insert`);
581+
const res = await fetch(`${url}/query`);
577582

578583
await expect(res.text()).resolves.toBe(
579-
`[{"id":"a44706aa-a366-48bc-8cc1-3feffd87d548","namespace":null,"metadata":{"text":"Peter Piper picked a peck of pickled peppers"},"values":[0.2321,0.8121,0.6315,0.6151,0.4121,0.1512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}] 2`
584+
`[{"id":"a44706aa-a366-48bc-8cc1-3feffd87d548","namespace":null,"metadata":{"text":"Peter Piper picked a peck of pickled peppers"},"values":[0.2321,0.8121,0.6315,0.6151,0.4121,0.1512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}]`
580585
);
581586
});
582587

packages/wrangler/e2e/helpers/e2e-wrangler-test.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,18 @@ export class WranglerE2ETestHelper {
112112
return { id, name };
113113
}
114114

115-
async vectorize(dimensions: number, metric: string) {
115+
async vectorize(dimensions: number, metric: string, resourceName?: string) {
116116
// vectorize does not have a local dev mode yet, so we don't yet support the isLocal flag here
117-
const name = generateResourceName("vectorize");
118-
await this.run(
119-
`wrangler vectorize create ${name} --dimensions ${dimensions} --metric ${metric}`
120-
);
117+
const name = resourceName ?? generateResourceName("vectorize");
118+
if (!resourceName) {
119+
await this.run(
120+
`wrangler vectorize create ${name} --dimensions ${dimensions} --metric ${metric}`
121+
);
122+
}
121123
onTestFinished(async () => {
122-
await this.run(`wrangler vectorize delete ${name}`);
124+
if (!resourceName) {
125+
await this.run(`wrangler vectorize delete ${name}`);
126+
}
123127
});
124128

125129
return name;

packages/wrangler/e2e/helpers/normalize.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export function normalizeOutput(
2626
normalizeDebugLogFilepath,
2727
removeLocalPort,
2828
removeZeroWidthSpaces,
29+
removeV3Warning,
2930
];
3031
for (const f of functions) {
3132
stdout = f(stdout);
@@ -94,6 +95,15 @@ function removeVersionHeader(str: string): string {
9495
}
9596
}
9697

98+
/**
99+
* Remove the Wrangler v3 out of date warning
100+
*/
101+
function removeV3Warning(str: string): string {
102+
return str.replace(
103+
/\s* \[WARNING\] The version of Wrangler you are using is now out-of-date.\s*Please update to the latest version to prevent critical errors.\s*Run `npm install --save-dev wrangler@4` to update to the latest version.\s*After installation, run Wrangler with `npx wrangler`./,
104+
""
105+
);
106+
}
97107
/**
98108
* Normalize error `X` markers.
99109
*

packages/wrangler/e2e/types.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import path from "node:path";
44
import { describe, expect, it } from "vitest";
55
import { dedent } from "../src/utils/dedent";
66
import { WranglerE2ETestHelper } from "./helpers/e2e-wrangler-test";
7+
import { normalizeOutput } from "./helpers/normalize";
78

89
const seed = {
910
"wrangler.toml": dedent`
@@ -147,7 +148,7 @@ describe("types", () => {
147148
`wrangler types --x-include-runtime="./types.d.ts"`
148149
);
149150

150-
expect(output.stderr).toBe("");
151+
expect(normalizeOutput(output.stderr)).toBe("");
151152
expect(output.status).toBe(0);
152153
});
153154
it("should include header with version information in the generated types", async () => {

0 commit comments

Comments
 (0)