mirror of
https://github.com/UNITRONIX/BetterDesk.git
synced 2026-09-11 13:49:03 +00:00
2eec0d2ceb
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)
70 lines
2.6 KiB
JavaScript
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();
|
|
}
|
|
});
|
|
});
|