Deduplicate artifact bytes and deliver files by authenticated hash
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import { putFileBlob } from '../../src/lib/server/db/file-blobs.js';
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import Database from 'better-sqlite3';
|
||||
import { existsSync } from 'node:fs';
|
||||
@@ -35,13 +36,13 @@ describe('reviewed beta promotion', () => {
|
||||
it('upgrades existing campaign history without marking known snapshots pending', async () => {
|
||||
const { db, closeDb } = await import('../../src/lib/server/db/index.js');
|
||||
db().prepare("INSERT INTO deployments (id, action, started_at) VALUES ('legacy', 'promote', ?)").run(new Date().toISOString());
|
||||
db().prepare("INSERT INTO deployment_files (deployment_id, server, verb, rel_path, content_before) VALUES ('legacy', ?, 'updated', 'old.gsc', ?)")
|
||||
.run(servers[0], Buffer.from('original'));
|
||||
db().prepare("INSERT INTO deployment_files (deployment_id, server, verb, rel_path, content_before_hash) VALUES ('legacy', ?, 'updated', 'old.gsc', ?)")
|
||||
.run(servers[0], putFileBlob(Buffer.from('original'), db()));
|
||||
closeDb();
|
||||
const legacy = new Database(fixture.dbPath);
|
||||
try { legacy.exec('ALTER TABLE deployment_files DROP COLUMN snapshot_pending'); }
|
||||
finally { legacy.close(); }
|
||||
expect(db().prepare('SELECT snapshot_pending, content_before FROM deployment_files').get())
|
||||
expect(db().prepare('SELECT snapshot_pending, (SELECT content FROM file_blobs WHERE sha256=content_before_hash) AS content_before FROM deployment_files').get())
|
||||
.toEqual({ snapshot_pending: 0, content_before: Buffer.from('original') });
|
||||
});
|
||||
it.each(['script', 'baseline'] as const)('queues %s promotion without contacting additional host agents', async kind => {
|
||||
@@ -82,7 +83,7 @@ describe('reviewed beta promotion', () => {
|
||||
await writeFile(path, before);
|
||||
}
|
||||
await activateFiles('campaign', result.deploymentId);
|
||||
expect(db().prepare('SELECT snapshot_pending, verb, content_before FROM deployment_files WHERE id = ?').get(file.id))
|
||||
expect(db().prepare('SELECT snapshot_pending, verb, (SELECT content FROM file_blobs WHERE sha256=content_before_hash) AS content_before FROM deployment_files WHERE id = ?').get(file.id))
|
||||
.toEqual({ snapshot_pending: 0, verb: before === null ? 'added' : 'updated', content_before: before === null ? null : Buffer.from(before) });
|
||||
expect(db().prepare('SELECT message FROM campaign_events WHERE deployment_id = ?').all(result.deploymentId))
|
||||
.toContainEqual({ message: `${servers[1]}: captured rollback snapshot for ${kind === 'script' ? 'review.gsc' : configFileOf(servers[1])}` });
|
||||
|
||||
Reference in New Issue
Block a user