mirror of
https://github.com/AikidoSec/safe-chain.git
synced 2026-05-26 12:10:49 +00:00
56 lines
1.5 KiB
JavaScript
56 lines
1.5 KiB
JavaScript
import { describe, it, after } from "node:test";
|
|
import assert from "node:assert";
|
|
import { tmpdir } from "node:os";
|
|
import { join } from "node:path";
|
|
import { unlinkSync, writeFileSync } from "node:fs";
|
|
import { createHash } from "node:crypto";
|
|
import {
|
|
DOWNLOAD_URLS,
|
|
verifyChecksum,
|
|
} from "./downloadAgent.js";
|
|
|
|
describe("downloadAgent", () => {
|
|
const tempFiles = [];
|
|
|
|
after(() => {
|
|
for (const file of tempFiles) {
|
|
try {
|
|
unlinkSync(file);
|
|
} catch {
|
|
// ignore cleanup errors
|
|
}
|
|
}
|
|
});
|
|
|
|
for (const [platform, architectures] of Object.entries(DOWNLOAD_URLS)) {
|
|
for (const [arch, { url, checksum }] of Object.entries(architectures)) {
|
|
it(`${platform}/${arch} has a valid download definition`, () => {
|
|
assert.match(
|
|
url,
|
|
/^https:\/\/github\.com\/AikidoSec\/safechain-internals\/releases\/download\/v\d+\.\d+\.\d+\/.+/,
|
|
);
|
|
assert.match(checksum, /^sha256:[a-f0-9]{64}$/);
|
|
});
|
|
}
|
|
}
|
|
|
|
it("verifies checksum for a local file", async () => {
|
|
const destPath = join(tmpdir(), `safe-chain-test-${Date.now()}`);
|
|
tempFiles.push(destPath);
|
|
|
|
writeFileSync(destPath, "safe-chain-test");
|
|
|
|
const expectedHash = createHash("sha256")
|
|
.update("safe-chain-test")
|
|
.digest("hex");
|
|
|
|
assert.equal(
|
|
await verifyChecksum(destPath, `sha256:${expectedHash}`),
|
|
true,
|
|
);
|
|
assert.equal(
|
|
await verifyChecksum(destPath, `sha256:${"0".repeat(64)}`),
|
|
false,
|
|
);
|
|
});
|
|
});
|