Skip to content

Commit 9eefc10

Browse files
authored
Use a shared Vectorize index for the Vectorize E2E tests (#8492)
* shared resource * address comments
1 parent 7322bf1 commit 9eefc10

File tree

2 files changed

+44
-35
lines changed

2 files changed

+44
-35
lines changed

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

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

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

524530
await helper.seed({
525531
"wrangler.toml": dedent`
@@ -530,39 +536,37 @@ describe.sequential.each(RUNTIMES)("Bindings: $flags", ({ runtime, flags }) => {
530536
binding = "VECTORIZE"
531537
index_name = "${name}"
532538
`,
533-
"src/index.ts": dedent`
539+
"src/index.ts": dedent/*javascript*/ `
534540
export interface Env {
535541
VECTORIZE: Vectorize;
536542
}
537543
538-
async function waitForMutation(env: Env, mutationId: string) {
539-
while((await env.VECTORIZE.describe()).processedUpToMutation != mutationId) {
540-
await new Promise(resolve => setTimeout(resolve, 2000));
541-
}
542-
}
543-
544544
export default {
545545
async fetch(request: Request, env: Env, ctx: any) {
546-
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"}}]);
547-
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"}}]);
548-
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);
549-
550-
let response = "";
551-
response += JSON.stringify(await env.VECTORIZE.getByIds(["a44706aa-a366-48bc-8cc1-3feffd87d548"]));
552-
553-
const queryVector: Array<number> = [
554-
0.13, 0.25, 0.44, 0.53, 0.62, 0.41, 0.59, 0.68, 0.29, 0.82, 0.37, 0.5,
555-
0.74, 0.46, 0.57, 0.64, 0.28, 0.61, 0.73, 0.35, 0.78, 0.58, 0.42, 0.32,
556-
0.77, 0.65, 0.49, 0.54, 0.31, 0.29, 0.71, 0.57,
557-
]; // vector of dimension 32
558-
const matches = await env.VECTORIZE.query(queryVector, {
559-
topK: 3,
560-
returnValues: true,
561-
returnMetadata: "all",
562-
});
563-
response += " " + matches.count;
546+
const url = new URL(request.url)
547+
if(url.pathname === "/insert") {
548+
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"}}]);
549+
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"}}]);
550+
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"}}]);
551+
return new Response("inserted")
552+
}
553+
if(url.pathname === "/query") {
554+
let response = "";
555+
response += JSON.stringify(await env.VECTORIZE.getByIds(["a44706aa-a366-48bc-8cc1-3feffd87d548"]));
556+
557+
const queryVector: Array<number> = [
558+
0.13, 0.25, 0.44, 0.53, 0.62, 0.41, 0.59, 0.68, 0.29, 0.82, 0.37, 0.5,
559+
0.74, 0.46, 0.57, 0.64, 0.28, 0.61, 0.73, 0.35, 0.78, 0.58, 0.42, 0.32,
560+
0.77, 0.65, 0.49, 0.54, 0.31, 0.29, 0.71, 0.57,
561+
]; // vector of dimension 32
562+
const matches = await env.VECTORIZE.query(queryVector, {
563+
topK: 3,
564+
returnValues: true,
565+
returnMetadata: "all",
566+
});
564567
565-
return new Response(response);
568+
return new Response(response);
569+
}
566570
}
567571
}
568572
`,
@@ -572,10 +576,11 @@ describe.sequential.each(RUNTIMES)("Bindings: $flags", ({ runtime, flags }) => {
572576
`wrangler dev ${flags} --port ${port} --inspector-port ${inspectorPort} --experimental-vectorize-bind-to-prod`
573577
);
574578
const { url } = await worker.waitForReady();
575-
const res = await fetch(url);
579+
await fetch(`${url}/insert`);
580+
const res = await fetch(`${url}/query`);
576581

577582
await expect(res.text()).resolves.toBe(
578-
`[{"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`
583+
`[{"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]}]`
579584
);
580585
});
581586

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;

0 commit comments

Comments
 (0)