94 lines
2.8 KiB
TypeScript
94 lines
2.8 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import { resolve } from "node:path";
|
|
import { randomUUID } from "node:crypto";
|
|
import { ServerControl } from "../deterministic-tests/src/server-control";
|
|
import { Logger } from "sync-client";
|
|
import { SyncClient } from "../sync-client/src/sync-client";
|
|
import { MemoryDisk, MemoryPersistence } from "./storage";
|
|
const root = resolve(__dirname, "../..");
|
|
const token = "test-token-change-me";
|
|
export const bytes = (s: string) => new TextEncoder().encode(s);
|
|
const headers = {
|
|
Authorization: `Bearer ${token}`,
|
|
"Content-Type": "application/json",
|
|
"Device-Id": "audit"
|
|
};
|
|
export async function fixture() {
|
|
const server = new ServerControl(
|
|
root + "/sync-server/target/release/sync_server",
|
|
root + "/sync-server/config-e2e.yml",
|
|
new Logger()
|
|
);
|
|
await server.start();
|
|
const vault = randomUUID(),
|
|
url = server.remoteUri + "/vaults/" + vault;
|
|
const put = async (path: string, data: unknown) => {
|
|
const r = await fetch(url + path, {
|
|
method: "PUT",
|
|
headers,
|
|
body: JSON.stringify(data)
|
|
});
|
|
assert(r.ok, await r.clone().text());
|
|
return r.json();
|
|
};
|
|
const get = async (path: string) => {
|
|
const r = await fetch(url + path, { headers });
|
|
assert(r.ok);
|
|
return r.json();
|
|
};
|
|
const disk = new MemoryDisk();
|
|
const store = new MemoryPersistence({
|
|
settings: {
|
|
remoteUri: server.remoteUri,
|
|
vaultName: vault,
|
|
token,
|
|
isSyncEnabled: true,
|
|
syncIntervalMs: 0,
|
|
networkRetryIntervalMs: 0,
|
|
requestTimeoutMs: 5000
|
|
}
|
|
});
|
|
let fetchHook: typeof fetch | undefined;
|
|
const createClient = () =>
|
|
SyncClient.create({
|
|
fs: disk,
|
|
persistence: store,
|
|
fetch: (...args) =>
|
|
fetchHook ? fetchHook(...args) : fetch(...args)
|
|
});
|
|
let client = await createClient();
|
|
const content = (text: string, parentVersionId: number | null = null) => ({
|
|
requestId: randomUUID(),
|
|
parentVersionId,
|
|
content: {
|
|
type: "Snapshot",
|
|
value: Buffer.from(text).toString("base64")
|
|
}
|
|
});
|
|
return {
|
|
server,
|
|
disk,
|
|
store,
|
|
get client() {
|
|
return client;
|
|
},
|
|
reopenClient: async () => {
|
|
await client.destroy();
|
|
client = await createClient();
|
|
},
|
|
url,
|
|
headers,
|
|
put,
|
|
get,
|
|
content,
|
|
setFetchHook: (hook: typeof fetch) => {
|
|
fetchHook = hook;
|
|
},
|
|
dispose: async () => {
|
|
await client.destroy();
|
|
await server.stop();
|
|
}
|
|
};
|
|
}
|
|
|
|
export { randomUUID };
|