From 3489feaf676e968da6a84e99ef21895679586ab4 Mon Sep 17 00:00:00 2001 From: Jonathan Finley Date: Fri, 13 Mar 2026 23:46:24 -0400 Subject: [PATCH] fix: handle BinaryManager removal errors --- server/managers/BinaryManager.js | 4 ++-- test/server/managers/BinaryManager.test.js | 28 ++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/server/managers/BinaryManager.js b/server/managers/BinaryManager.js index f16d47c0b..2ad3c801f 100644 --- a/server/managers/BinaryManager.js +++ b/server/managers/BinaryManager.js @@ -369,14 +369,14 @@ class BinaryManager { * @param {Binary} binary */ async removeBinary(destination, binary) { + const binaryPath = path.join(destination, binary.fileName) try { - const binaryPath = path.join(destination, binary.fileName) if (await fs.pathExists(binaryPath)) { Logger.debug(`[BinaryManager] Removing binary: ${binaryPath}`) await fs.remove(binaryPath) } } catch (err) { - Logger.error(`[BinaryManager] Error removing binary: ${binaryPath}`) + Logger.error(`[BinaryManager] Error removing binary: ${binaryPath}`, err) } } diff --git a/test/server/managers/BinaryManager.test.js b/test/server/managers/BinaryManager.test.js index 5ec38c4b9..e62fd9bec 100644 --- a/test/server/managers/BinaryManager.test.js +++ b/test/server/managers/BinaryManager.test.js @@ -4,6 +4,7 @@ const fs = require('../../../server/libs/fsExtra') const fileUtils = require('../../../server/utils/fileUtils') const which = require('../../../server/libs/which') const path = require('path') +const Logger = require('../../../server/Logger') const BinaryManager = require('../../../server/managers/BinaryManager') const { Binary, ffbinaries } = require('../../../server/managers/BinaryManager') @@ -203,6 +204,33 @@ describe('BinaryManager', () => { expect(downloadBinaryStub.calledWith(destination)).to.be.true }) }) + + describe('removeBinary', () => { + let pathExistsStub + let errorStub + + beforeEach(() => { + binaryManager = new BinaryManager() + pathExistsStub = sinon.stub(fs, 'pathExists').rejects(new Error('remove failed')) + errorStub = sinon.stub(Logger, 'error') + }) + + afterEach(() => { + pathExistsStub.restore() + errorStub.restore() + }) + + it('logs the resolved binary path when removal fails', async () => { + const destination = '/path/to/install' + const binary = { fileName: 'ffmpeg' } + + await binaryManager.removeBinary(destination, binary) + + expect(errorStub.calledOnce).to.be.true + expect(errorStub.firstCall.args[0]).to.include(path.join(destination, binary.fileName)) + expect(errorStub.firstCall.args[1]).to.be.an('error') + }) + }) }) describe('Binary', () => {