@x5e/gink
Version:
an eventually consistent database
158 lines • 8.05 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("../implementation/utils");
const jstreemap_1 = require("jstreemap");
it("shorterHash", async function () {
(0, utils_1.ensure)(utils_1.safeMask.toString(16).match(/^f{13}$/));
await utils_1.librariesReady;
const result1 = (0, utils_1.shorterHash)(utils_1.emptyBytes);
(0, utils_1.ensure)(result1, result1.toString());
const bytes11 = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]);
const result11 = (0, utils_1.shorterHash)(bytes11);
(0, utils_1.ensure)(result11, result11.toString());
});
it("generate", async function () {
await utils_1.librariesReady;
const pair = (0, utils_1.createKeyPair)();
(0, utils_1.ensure)(pair.secretKey.length == 64);
(0, utils_1.ensure)(pair.publicKey.length == 32);
const secretHex = (0, utils_1.bytesToHex)(pair.secretKey);
const publicHex = (0, utils_1.bytesToHex)(pair.publicKey);
if (false) {
console.log(`${secretHex}\n${publicHex}`);
}
});
it("merge", async function () {
const a = new Uint8Array([94, 154]);
const b = new Uint8Array([10, 255]);
const c = (0, utils_1.mergeBytes)(a, b);
const d = new Uint8Array([94, 154, 10, 255]);
(0, utils_1.ensure)((0, utils_1.sameData)(c, d));
});
it("getSig", async function () {
const sig1 = (0, utils_1.getSig)(new Uint8Array([3, 4]));
(0, utils_1.ensure)(sig1 == 7);
const sig2 = (0, utils_1.getSig)(new Uint8Array([7, 2]));
(0, utils_1.ensure)(sig2 == 5);
});
it("document", async function () {
for (const wrapped of [
(0, utils_1.wrapValue)(new Map().set("fee", "parking").set("cost", 1000)),
(0, utils_1.wrapValue)({ fee: "parking", cost: 1000 }),
]) {
const unwrapped = (0, utils_1.unwrapValue)(wrapped);
if (unwrapped instanceof Map) {
const keys = Array.from(unwrapped.keys()).sort();
(0, utils_1.ensure)((0, utils_1.matches)(keys, ["cost", "fee"]), keys.toString());
(0, utils_1.ensure)(unwrapped.get("fee") === "parking");
(0, utils_1.ensure)(unwrapped.get("cost") === 1000);
}
else {
throw new Error("wrap/unwrap failed");
}
}
});
it("canonical string representation of muids", async () => {
const muidTuple = [
1642579230975519, 555027746660010, 11,
];
const muidTupleAsString = (0, utils_1.muidTupleToString)(muidTuple);
(0, utils_1.ensure)(muidTupleAsString === "05D5EAC793E61F-1F8CB77AE1EAA-0000B");
const tupleFromString = (0, utils_1.strToMuid)(muidTupleAsString);
(0, utils_1.ensure)(tupleFromString.timestamp === muidTuple[0], `Timestamp: ${tupleFromString.timestamp} should be ${muidTuple[0]}`);
(0, utils_1.ensure)(tupleFromString.medallion === muidTuple[1], `Medallion: ${tupleFromString.medallion} should be ${muidTuple[1]}`);
(0, utils_1.ensure)(tupleFromString.offset === muidTuple[2], `Offset: ${tupleFromString.offset} should be ${muidTuple[2]}`);
const muid = {
timestamp: 1642579230975519,
medallion: 555027746660010,
offset: 11,
};
const muid1String = (0, utils_1.muidToString)(muid);
(0, utils_1.ensure)(muid1String === "05D5EAC793E61F-1F8CB77AE1EAA-0000B");
const muid1FromString = (0, utils_1.strToMuid)(muid1String);
(0, utils_1.ensure)(muid1FromString.timestamp === muid.timestamp, `Timestamp: ${muid1FromString.timestamp} should be ${muid.timestamp}`);
(0, utils_1.ensure)(muid1FromString.medallion === muid.medallion, `Medallion: ${muid1FromString.medallion} should be ${muid.medallion}`);
(0, utils_1.ensure)(muid1FromString.offset === muid.offset, `Offset: ${muid1FromString.offset} should be ${muid.offset}`);
const muid2 = {
timestamp: -1,
medallion: -1,
offset: 4,
};
const muid2String = (0, utils_1.muidToString)(muid2);
(0, utils_1.ensure)(muid2String === "FFFFFFFFFFFFFF-FFFFFFFFFFFFF-00004");
const muid2FromString = (0, utils_1.strToMuid)(muid2String);
(0, utils_1.ensure)(muid2FromString.timestamp === muid2.timestamp, `Timestamp: ${muid2FromString.timestamp} should be ${muid2.timestamp}`);
(0, utils_1.ensure)(muid2FromString.medallion === muid2.medallion, `Medallion: ${muid2FromString.medallion} should be ${muid2.medallion}`);
(0, utils_1.ensure)(muid2FromString.offset === muid2.offset, `Offset: ${muid2FromString.offset} should be ${muid2.offset}`);
const muid3 = {
timestamp: -15,
medallion: -2,
offset: -5,
};
const muid3String = (0, utils_1.muidToString)(muid3);
(0, utils_1.ensure)(muid3String === "FFFFFFFFFFFFF1-FFFFFFFFFFFFE-FFFFB");
const muid3FromString = (0, utils_1.strToMuid)(muid3String);
(0, utils_1.ensure)(muid3FromString.timestamp === muid3.timestamp, `Timestamp: ${muid3FromString.timestamp} should be ${muid3.timestamp}`);
(0, utils_1.ensure)(muid3FromString.medallion === muid3.medallion, `Medallion: ${muid3FromString.medallion} should be ${muid3.medallion}`);
(0, utils_1.ensure)(muid3FromString.offset === muid3.offset, `Offset: ${muid3FromString.offset} should be ${muid3.offset}`);
});
it("tuple", async function () {
const wrapped = (0, utils_1.wrapValue)([
"yes",
32,
null,
new Map().set("cheese", "fries"),
[],
]);
const unwrapped = (0, utils_1.unwrapValue)(wrapped);
var asJson = (0, utils_1.valueToJson)(unwrapped);
(0, utils_1.ensure)(asJson === `["yes",32,null,{"cheese":"fries"},[]]`, asJson);
});
it("timestamp", async function () {
const example = new Date(1665892249196);
const wrapped = (0, utils_1.wrapValue)(example);
const unwrapped = (0, utils_1.unwrapValue)(wrapped);
if (unwrapped instanceof Date) {
(0, utils_1.ensure)(unwrapped.toISOString() === "2022-10-16T03:50:49.196Z");
}
else {
throw new Error("date conversion failed");
}
});
it("isPathDangerous", function () {
(0, utils_1.ensure)((0, utils_1.isPathDangerous)("/") === true);
(0, utils_1.ensure)((0, utils_1.isPathDangerous)("/../foo") === true);
(0, utils_1.ensure)((0, utils_1.isPathDangerous)("/foo/.bar") === true);
(0, utils_1.ensure)((0, utils_1.isPathDangerous)("/user123@example.com/some.file") === false);
(0, utils_1.ensure)((0, utils_1.isPathDangerous)("/normal-file-1234") === false);
});
it("encodeToken and decodeToken", function () {
const token = "adjhbajhfbajb21j4b4b5b5jkn5kj1n5kjn1";
const asHex = (0, utils_1.encodeToken)(token);
const backToToken = (0, utils_1.decodeToken)(asHex);
(0, utils_1.ensure)(backToToken.includes("token "));
(0, utils_1.ensure)(token === backToToken.substring(7), `original: '${token}' | fromHex: '${backToToken.substring(7)}'`);
});
it("toLastWithPrefixBeforeSuffix", function () {
const map = new jstreemap_1.TreeMap();
const result1 = (0, utils_1.toLastWithPrefixBeforeSuffix)(map, "foo", "bar");
(0, utils_1.ensure)(!result1);
const result2 = (0, utils_1.toLastWithPrefixBeforeSuffix)(map, "foo");
(0, utils_1.ensure)(!result2);
map.set("goo", "bar");
const result3 = (0, utils_1.toLastWithPrefixBeforeSuffix)(map, "foo");
(0, utils_1.ensure)(!result3);
const result4 = (0, utils_1.toLastWithPrefixBeforeSuffix)(map, "zoo");
(0, utils_1.ensure)(!result4);
const result5 = (0, utils_1.toLastWithPrefixBeforeSuffix)(map, "go");
(0, utils_1.ensure)(!!result5 && result5.key === "goo" && result5.value == "bar");
map.set("gool", "bat");
const result6 = (0, utils_1.toLastWithPrefixBeforeSuffix)(map, "goo");
(0, utils_1.ensure)(!!result6 && result6.value === "bat");
map.set("goz", "zzz");
const result7 = (0, utils_1.toLastWithPrefixBeforeSuffix)(map, "goo");
(0, utils_1.ensure)(!!result7 && result7.value === "bat");
const result8 = (0, utils_1.toLastWithPrefixBeforeSuffix)(map, "goo", "f");
(0, utils_1.ensure)(!!result8 && result8.key === "goo");
});
//# sourceMappingURL=utils.test.js.map