@x5e/gink
Version:
an eventually consistent database
76 lines • 2.77 kB
JavaScript
;
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