Files
BetterDesk/web-nodejs/tests/agentBuildWorker.rebuild.test.js
T
UNITRONIX 2eec0d2ceb feat(update): use commit-bound Go server artifacts
Prefer verified GitHub Actions or exact Release binaries during native updates, with checksum validation and local compilation fallback. Defer Support Agent source synchronization and rebuild queueing until after the console restart.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-23 20:56:45 +02:00

70 lines
2.6 KiB
JavaScript

'use strict';
const fs = require('fs');
const os = require('os');
const path = require('path');
describe('agentBuildWorker pending rebuild flag', () => {
let dataDir;
let origDataDir;
beforeEach(() => {
dataDir = fs.mkdtempSync(path.join(os.tmpdir(), 'bd-agent-rebuild-'));
origDataDir = process.env.DATA_DIR;
process.env.DATA_DIR = dataDir;
delete require.cache[require.resolve('../config/config')];
delete require.cache[require.resolve('../services/agentBuildWorker')];
});
afterEach(() => {
process.env.DATA_DIR = origDataDir;
delete require.cache[require.resolve('../config/config')];
delete require.cache[require.resolve('../services/agentBuildWorker')];
if (dataDir && fs.existsSync(dataDir)) {
fs.rmSync(dataDir, { recursive: true, force: true });
}
});
it('markRebuildPending + processPendingRebuildOnStartup clears flag', async () => {
const worker = require('../services/agentBuildWorker');
worker.markRebuildPending('test');
const flagPath = path.join(dataDir, '.agent_rebuild_pending');
expect(fs.existsSync(flagPath)).toBe(true);
const db = require('../services/database');
const origList = db.listAgentBundles;
db.listAgentBundles = async () => [];
try {
const result = await worker.processPendingRebuildOnStartup();
expect(result.bundles).toBe(0);
expect(result.reason).toBe('test');
expect(fs.existsSync(flagPath)).toBe(false);
} finally {
db.listAgentBundles = origList;
}
});
it('syncs the pending SHA before requeueing agent bundles', async () => {
const updateService = require('../services/updateService');
const sync = jest.spyOn(updateService, 'syncAgentSourceAtSha')
.mockResolvedValue({ staged: 3, paths: 3 });
const worker = require('../services/agentBuildWorker');
const db = require('../services/database');
const origList = db.listAgentBundles;
db.listAgentBundles = async () => [];
try {
const remoteSHA = 'd'.repeat(40);
worker.markRebuildPending('test-sha', { remoteSHA });
const result = await worker.processPendingRebuildOnStartup();
expect(sync).toHaveBeenCalledWith(remoteSHA);
expect(result.source).toEqual({ staged: 3, paths: 3 });
expect(result.remoteSHA).toBe(remoteSHA);
} finally {
db.listAgentBundles = origList;
sync.mockRestore();
}
});
});