feat: prepare 2.6.1-rc5 shared databases and build SSE
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
import { expect, test } from "bun:test";
|
||||
import { createApp, execProblem } from "../../server/app";
|
||||
import { hashToken, MemoryAuthStore } from "../../server/auth";
|
||||
import { MemoryWorkspaceStore } from "../../server/workspace-store";
|
||||
import type { LogService } from "../../server/log-service";
|
||||
import { KUBER_VERSION, KUBER_VERSION_HEADER } from "../../shared/version";
|
||||
|
||||
test("returns the bundled version on success, errors, preflight, empty and streaming responses", async () => {
|
||||
const store = new MemoryAuthStore();
|
||||
await store.putUser({
|
||||
username: "viewer",
|
||||
passwordHash: "hash",
|
||||
roles: ["viewer"],
|
||||
});
|
||||
await store.putSession({
|
||||
tokenHash: hashToken("token"),
|
||||
username: "viewer",
|
||||
authVersion: 1,
|
||||
expiresAt: "2030-01-01T00:00:00.000Z",
|
||||
});
|
||||
const workspaceStore = new MemoryWorkspaceStore({
|
||||
uid: () => "workspace-uid",
|
||||
});
|
||||
await workspaceStore.create({
|
||||
id: "demo",
|
||||
source: { uri: "oci://example/demo", digest: "sha256:abc" },
|
||||
});
|
||||
const logs = {
|
||||
async collect() {
|
||||
return [{ type: "log", message: "hello" }];
|
||||
},
|
||||
} as unknown as LogService;
|
||||
const app = createApp({ store, workspaceStore, logs });
|
||||
const request = (path: string, init: RequestInit = {}) =>
|
||||
new Request(`https://kuber.astrxl.dev${path}`, init);
|
||||
const authenticated = (path: string, init: RequestInit = {}) =>
|
||||
request(path, {
|
||||
...init,
|
||||
headers: {
|
||||
authorization: "Bearer token",
|
||||
...Object.fromEntries(new Headers(init.headers)),
|
||||
},
|
||||
});
|
||||
|
||||
const success = await app(request("/api/v2/health"));
|
||||
const error = await app(request("/api/v2/me"));
|
||||
const preflight = await app(
|
||||
request("/api/v2/health", {
|
||||
method: "OPTIONS",
|
||||
headers: { origin: "https://kuber.astrxl.dev" },
|
||||
}),
|
||||
);
|
||||
const stream = await app(authenticated("/api/v2/workspaces/demo/logs"));
|
||||
const empty = await app(authenticated("/api/v2/logout", { method: "POST" }));
|
||||
|
||||
for (const response of [success, error, preflight, empty, stream]) {
|
||||
expect(response.headers.get(KUBER_VERSION_HEADER)).toBe(KUBER_VERSION);
|
||||
}
|
||||
expect([
|
||||
success.status,
|
||||
error.status,
|
||||
preflight.status,
|
||||
empty.status,
|
||||
stream.status,
|
||||
]).toEqual([200, 401, 204, 204, 200]);
|
||||
expect(stream.headers.get("content-type")).toContain("application/x-ndjson");
|
||||
expect(await stream.text()).toContain("hello");
|
||||
});
|
||||
|
||||
test("includes the version on exec upgrade errors outside the ordinary API router", () => {
|
||||
const response = execProblem(new Error("upgrade failed"), "request-id");
|
||||
expect(response.status).toBe(500);
|
||||
expect(response.headers.get(KUBER_VERSION_HEADER)).toBe(KUBER_VERSION);
|
||||
});
|
||||
Reference in New Issue
Block a user