Skip to content

Commit

Permalink
[breadboard/remote] Add proxy end-to-end test.
Browse files Browse the repository at this point in the history
  • Loading branch information
dglazkov committed Nov 24, 2023
1 parent a656cd8 commit 28b27fb
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 37 deletions.
12 changes: 12 additions & 0 deletions seeds/breadboard/tests/helpers/_test-kit.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,4 +66,16 @@ export const TestKit = new KitBuilder({

return await runnableBoard.runOnce(args, context);
},
/**
* Reverses provided string inputs. Will crash if provided non-string inputs.
* @param inputs InputValues
*/
reverser: async (inputs) => {
return Object.fromEntries(
Object.entries(inputs).map(([key, value]) => [
key,
(inputs[key] = [...(value as string)].reverse().join("")),
])
);
},
});
69 changes: 69 additions & 0 deletions seeds/breadboard/tests/remote/proxy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/**
* @license
* Copyright 2023 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/

import test from "ava";
import { MockHTTPConnection } from "../helpers/_test-transport.js";
import { ProxyClient, ProxyServer } from "../../src/remote/proxy.js";
import {
HTTPClientTransport,
HTTPServerTransport,
} from "../../src/remote/http.js";
import {
AnyProxyRequestMessage,
AnyProxyResponseMessage,
} from "../../src/remote/protocol.js";
import { Board } from "../../src/board.js";
import { TestKit } from "../helpers/_test-kit.js";

test("ProxyServer can use HTTPServerTransport", async (t) => {
const board = new Board();
board.addKit(TestKit);

const request = {
body: [
"proxy",
{ node: { id: "id", type: "noop" }, inputs: { hello: "world" } },
] as AnyProxyRequestMessage,
};
const response = {
write: (response: unknown) => {
const data = JSON.parse(response as string);
t.deepEqual(data, ["proxy", { outputs: { hello: "world" } }]);
return true;
},
end: () => {
t.pass();
},
};
const transport = new HTTPServerTransport(request, response);
const server = new ProxyServer(transport);
await server.serve(board);
});

test("End-to-end proxy works with HTTP transports", async (t) => {
const connection = new MockHTTPConnection<AnyProxyRequestMessage>();
connection.onRequest(async (request, response) => {
const serverBoard = new Board();
serverBoard.addKit(TestKit);

const serverTransport = new HTTPServerTransport<
AnyProxyRequestMessage,
AnyProxyResponseMessage
>(request, response);
const server = new ProxyServer(serverTransport);
await server.serve(serverBoard);
});
const clientTransport = new HTTPClientTransport<
AnyProxyRequestMessage,
AnyProxyResponseMessage
>("http://example.com", { fetch: connection.fetch });
const client = new ProxyClient(clientTransport);
const result = await client.proxy(
{ id: "id", type: "reverser" },
{ hello: "world" }
);
t.deepEqual(result, { hello: "dlrow" });
});
37 changes: 0 additions & 37 deletions seeds/breadboard/tests/remote/server.ts

This file was deleted.

0 comments on commit 28b27fb

Please sign in to comment.