Files
NetMesh/scripts/electron-builder-retry.test.cjs

42 lines
1.4 KiB
JavaScript
Raw Permalink Normal View History

const test = require("node:test");
const assert = require("node:assert/strict");
const { createRequire } = require("node:module");
test("electron-builder classifies Fetch API 5xx responses as retryable", async () => {
const modulePath = require.resolve("app-builder-lib/out/util/electronGet.js");
const localRequire = createRequire(modulePath);
const runtime = localRequire("builder-util-runtime");
const retryDescriptor = Object.getOwnPropertyDescriptor(runtime, "retry");
let retryOptions;
Object.defineProperty(runtime, "retry", {
configurable: true,
value: async (_task, options) => {
retryOptions = options;
throw new Error("retry-probe");
},
});
delete require.cache[modulePath];
try {
const electronGet = require(modulePath);
await assert.rejects(
electronGet.downloadElectronArtifactZip({
version: "99.99.99",
platformName: "darwin",
arch: "x64",
artifactName: "electron-retry-probe",
}),
/retry-probe/,
);
assert.equal(retryOptions.shouldRetry({ response: { status: 504 } }), true);
assert.equal(retryOptions.shouldRetry({ response: { statusCode: 503 } }), true);
assert.equal(retryOptions.shouldRetry({ response: { status: 404 } }), false);
assert.equal(retryOptions.shouldRetry({ code: "ECONNRESET" }), true);
} finally {
Object.defineProperty(runtime, "retry", retryDescriptor);
delete require.cache[modulePath];
}
});