power loss
This commit is contained in:
parent
0f6b618c0b
commit
d56084e4bc
1 changed files with 18667 additions and 3902 deletions
94
frontend/test-support/sync-server-fixture.ts
Normal file
94
frontend/test-support/sync-server-fixture.ts
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
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 };
|
||||
Loading…
Reference in a new issue