UNPKG

@x5e/gink

Version:

an eventually consistent database

76 lines 2.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const main_1 = require("../implementation/main"); const Store_test_1 = require("./Store.test"); const fs_1 = require("fs"); function createMaker(reset, testFile = "/tmp/test.store") { return async function () { if (reset && (0, fs_1.existsSync)(testFile)) { (0, fs_1.unlinkSync)(testFile); } const new_store = new main_1.LogBackedStore(testFile, true); await new_store.ready; return new_store; }; } (0, Store_test_1.testStore)("LogBackedStore", createMaker(true), createMaker(false)); it("test locks", async () => { const TEST_FILE_FOR_LOCKS = "/tmp/test_file_for_locks.store"; if ((0, fs_1.existsSync)(TEST_FILE_FOR_LOCKS)) { (0, fs_1.unlinkSync)(TEST_FILE_FOR_LOCKS); } const lbs1 = new main_1.LogBackedStore(TEST_FILE_FOR_LOCKS, true); await lbs1.ready; const lbs2 = new main_1.LogBackedStore(TEST_FILE_FOR_LOCKS, true); let result = "unknown"; await lbs2.ready .then(() => { result = "acquired"; }) .catch(() => { result = "barfed"; lbs2.close(); }); if (result !== "barfed") { throw new Error("locking broken"); } await lbs1.close(); }); it("test automatic data pulling & callbacks", async () => { const testFile = "/tmp/basic_test.store"; if ((0, fs_1.existsSync)(testFile)) { (0, fs_1.unlinkSync)(testFile); } const store1 = new main_1.LogBackedStore(testFile); const store2 = new main_1.LogBackedStore(testFile); const cb = (bundle) => { cb.calledTimes++; return Promise.resolve(); }; cb.calledTimes = 0; store2.addFoundBundleCallBack(cb); const instance1 = new main_1.Database(store1); await instance1.ready; const globalDir1 = instance1.getGlobalDirectory(); await globalDir1.set("key", "value", "test bundle"); await new Promise((r) => setTimeout(r, 100)); expect(cb.calledTimes > 0).toBe(true); expect((await store2.getAllEntries()).length).toBeTruthy(); await store1.close(); await store2.close(); }); it("test magic", async () => { const fn = "/tmp/testMagic.bin"; const store1 = await createMaker(true, fn)(); const instance1 = new main_1.Database(store1); await instance1.ready; const globalDir1 = instance1.getGlobalDirectory(); await globalDir1.set("key", "value"); await store1.close(); const contents = (0, fs_1.readFileSync)(fn); (0, main_1.ensure)(contents[1] === 71); // G (0, main_1.ensure)(contents[2] === 73); // I (0, main_1.ensure)(contents[3] === 78); // N (0, main_1.ensure)(contents[4] === 75); // K }); //# sourceMappingURL=LogBackedStore.test.js.map