mirror of
https://github.com/Drop-OSS/droplet.git
synced 2025-11-10 04:22:16 +10:00
131 lines
3.5 KiB
JavaScript
131 lines
3.5 KiB
JavaScript
import test from "ava";
|
|
import fs from "node:fs";
|
|
import path from "path";
|
|
|
|
import droplet, { DropletHandler, generateManifest } from "../index.js";
|
|
|
|
test("check alt thread util", async (t) => {
|
|
let endtime1, endtime2;
|
|
|
|
droplet.callAltThreadFunc(async () => {
|
|
await new Promise((r) => setTimeout(r, 100));
|
|
endtime1 = Date.now();
|
|
});
|
|
|
|
await new Promise((r) => setTimeout(r, 500));
|
|
endtime2 = Date.now();
|
|
|
|
const difference = endtime2 - endtime1;
|
|
if (difference >= 600) {
|
|
t.fail("likely isn't multithreaded, difference: " + difference);
|
|
}
|
|
|
|
t.pass();
|
|
});
|
|
|
|
test("list files", async (t) => {
|
|
const dirName = "./.listfiles";
|
|
if (fs.existsSync(dirName)) fs.rmSync(dirName, { recursive: true });
|
|
fs.mkdirSync(dirName, { recursive: true });
|
|
fs.mkdirSync(dirName + "/subdir", { recursive: true });
|
|
fs.mkdirSync(dirName + "/subddir", { recursive: true });
|
|
|
|
fs.writeFileSync(dirName + "/root.txt", "root");
|
|
fs.writeFileSync(dirName + "/subdir/one.txt", "the first subdir");
|
|
fs.writeFileSync(dirName + "/subddir/two.txt", "the second");
|
|
|
|
const dropletHandler = new DropletHandler();
|
|
const files = dropletHandler.listFiles(dirName);
|
|
|
|
t.assert(
|
|
files.sort().join("\n"),
|
|
["root.txt", "subddir/two.txt", "subdir/one.txt"].join("\n")
|
|
);
|
|
|
|
fs.rmSync(dirName, { recursive: true });
|
|
});
|
|
|
|
test("read file", async (t) => {
|
|
const dirName = "./.test2";
|
|
if (fs.existsSync(dirName)) fs.rmSync(dirName, { recursive: true });
|
|
fs.mkdirSync(dirName, { recursive: true });
|
|
|
|
const testString = "g'day what's up my koala bros\n".repeat(1000);
|
|
|
|
fs.writeFileSync(dirName + "/TESTFILE", testString);
|
|
|
|
const dropletHandler = new DropletHandler();
|
|
|
|
const stream = dropletHandler.readFile(dirName, "TESTFILE");
|
|
|
|
let finalString = "";
|
|
|
|
for await (const chunk of stream.getStream()) {
|
|
// Do something with each 'chunk'
|
|
finalString += String.fromCharCode.apply(null, chunk);
|
|
}
|
|
|
|
t.assert(finalString == testString, "file strings don't match");
|
|
fs.rmSync(dirName, { recursive: true });
|
|
});
|
|
|
|
test("read file offset", async (t) => {
|
|
const dirName = "./.test3";
|
|
if (fs.existsSync(dirName)) fs.rmSync(dirName, { recursive: true });
|
|
fs.mkdirSync(dirName, { recursive: true });
|
|
|
|
const testString = "0123456789";
|
|
fs.writeFileSync(dirName + "/TESTFILE", testString);
|
|
|
|
const dropletHandler = new DropletHandler();
|
|
const stream = dropletHandler.readFile(dirName, "TESTFILE", BigInt(1), BigInt(4));
|
|
|
|
let finalString = "";
|
|
|
|
for await (const chunk of stream.getStream()) {
|
|
// Do something with each 'chunk'
|
|
finalString += String.fromCharCode.apply(null, chunk);
|
|
}
|
|
|
|
const expectedString = testString.slice(1, 4);
|
|
|
|
t.assert(
|
|
finalString == expectedString,
|
|
`file strings don't match: ${finalString} vs ${expectedString}`
|
|
);
|
|
fs.rmSync(dirName, { recursive: true });
|
|
});
|
|
|
|
test("zip file reader", async (t) => {
|
|
t.timeout(10_000);
|
|
const dropletHandler = new DropletHandler();
|
|
const manifest = JSON.parse(
|
|
await new Promise((r, e) =>
|
|
generateManifest(
|
|
dropletHandler,
|
|
"./assets/TheGame.zip",
|
|
(_, __) => {},
|
|
(_, __) => {},
|
|
(err, manifest) => (err ? e(err) : r(manifest))
|
|
)
|
|
)
|
|
);
|
|
|
|
const stream = dropletHandler.readFile(
|
|
"./assets/TheGame.zip",
|
|
"setup.exe",
|
|
BigInt(10),
|
|
BigInt(20)
|
|
);
|
|
|
|
|
|
let finalString = "";
|
|
for await (const chunk of stream.getStream()) {
|
|
// Do something with each 'chunk'
|
|
finalString = String.fromCharCode.apply(null, chunk);
|
|
if(finalString.length > 100) break;
|
|
}
|
|
|
|
t.pass();
|
|
});
|