Make updates atomic again

This commit is contained in:
Fedor Indutny 2022-03-03 14:34:51 -08:00 committed by GitHub
parent c87cb59676
commit 26100ea562
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 162 additions and 94 deletions

View file

@ -68,12 +68,21 @@ describe('updater/signatures', () => {
const { publicKey, privateKey } = keyPair();
await writeHexToPath(privateKeyPath, privateKey);
await writeSignature(updatePath, version, privateKeyPath);
const signature = await writeSignature(
updatePath,
version,
privateKeyPath
);
const signaturePath = getSignaturePath(updatePath);
assert.strictEqual(existsSync(signaturePath), true);
const verified = await verifySignature(updatePath, version, publicKey);
const verified = await verifySignature(
updatePath,
version,
signature,
publicKey
);
assert.strictEqual(verified, true);
} finally {
if (tempDir) {
@ -99,11 +108,16 @@ describe('updater/signatures', () => {
const { publicKey, privateKey } = keyPair();
await writeHexToPath(privateKeyPath, privateKey);
await writeSignature(updatePath, version, privateKeyPath);
const signature = await writeSignature(
updatePath,
version,
privateKeyPath
);
const verified = await verifySignature(
updatePath,
brokenVersion,
signature,
publicKey
);
assert.strictEqual(verified, false);
@ -130,14 +144,19 @@ describe('updater/signatures', () => {
const { publicKey, privateKey } = keyPair();
await writeHexToPath(privateKeyPath, privateKey);
await writeSignature(updatePath, version, privateKeyPath);
const signaturePath = getSignaturePath(updatePath);
const signature = Buffer.from(await loadHexFromPath(signaturePath));
const signature = await writeSignature(
updatePath,
version,
privateKeyPath
);
signature[4] += 3;
await writeHexToPath(signaturePath, signature);
const verified = await verifySignature(updatePath, version, publicKey);
const verified = await verifySignature(
updatePath,
version,
signature,
publicKey
);
assert.strictEqual(verified, false);
} finally {
if (tempDir) {
@ -162,7 +181,11 @@ describe('updater/signatures', () => {
const { publicKey, privateKey } = keyPair();
await writeHexToPath(privateKeyPath, privateKey);
await writeSignature(updatePath, version, privateKeyPath);
const signature = await writeSignature(
updatePath,
version,
privateKeyPath
);
const brokenSourcePath = join(
__dirname,
@ -170,7 +193,12 @@ describe('updater/signatures', () => {
);
await copy(brokenSourcePath, updatePath);
const verified = await verifySignature(updatePath, version, publicKey);
const verified = await verifySignature(
updatePath,
version,
signature,
publicKey
);
assert.strictEqual(verified, false);
} finally {
if (tempDir) {
@ -196,9 +224,18 @@ describe('updater/signatures', () => {
const { privateKey } = keyPair();
await writeHexToPath(privateKeyPath, privateKey);
await writeSignature(updatePath, version, privateKeyPath);
const signature = await writeSignature(
updatePath,
version,
privateKeyPath
);
const verified = await verifySignature(updatePath, version, publicKey);
const verified = await verifySignature(
updatePath,
version,
signature,
publicKey
);
assert.strictEqual(verified, false);
} finally {
if (tempDir) {