mirror of
https://github.com/AikidoSec/safe-chain.git
synced 2026-05-26 12:10:49 +00:00
52 lines
1.5 KiB
JavaScript
52 lines
1.5 KiB
JavaScript
import { describe, it, before, beforeEach, afterEach } from "node:test";
|
|
import { DockerTestContainer } from "./DockerTestContainer.js";
|
|
import assert from "node:assert";
|
|
|
|
describe("E2E: DNS failure resilience", () => {
|
|
let container;
|
|
|
|
before(async () => {
|
|
DockerTestContainer.buildImage();
|
|
});
|
|
|
|
beforeEach(async () => {
|
|
container = new DockerTestContainer();
|
|
await container.start();
|
|
|
|
const installationShell = await container.openShell("zsh");
|
|
await installationShell.runCommand("safe-chain setup");
|
|
});
|
|
|
|
afterEach(async () => {
|
|
if (container) {
|
|
await container.stop();
|
|
container = null;
|
|
}
|
|
});
|
|
|
|
it("should not crash when the malware database is unreachable", async () => {
|
|
const shell = await container.openShell("zsh");
|
|
|
|
// Make the malware database domain unreachable
|
|
// This forces fetchMalwareDatabase to fail
|
|
await shell.runCommand(
|
|
'echo "127.0.0.1 malware-list.aikido.dev" >> /etc/hosts'
|
|
);
|
|
|
|
const result = await shell.runCommand(
|
|
"npm install lodash --safe-chain-logging=verbose"
|
|
);
|
|
|
|
assert.ok(
|
|
result.output.includes("Safe-chain: Error handling request"),
|
|
`Output did not include expected error handling message. Output was:\n${result.output}`
|
|
);
|
|
|
|
// Ensure it did NOT crash with Unhandled Promise Rejection
|
|
assert.strictEqual(
|
|
result.output.includes("Unhandled promise rejection"),
|
|
false,
|
|
`Output indicates process crash (Unhandled promise rejection). Output was:\n${result.output}`
|
|
);
|
|
});
|
|
});
|