fix(core): Allow license:clear command to be used for licenses that failed renewal (#10665)

Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <netroy@users.noreply.github.com>
This commit is contained in:
Cornelius Suermann 2024-09-05 16:42:22 +02:00 committed by GitHub
parent 3ea114129b
commit a422c5ac7b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 27 additions and 5 deletions

View file

@ -12,10 +12,14 @@ export class ClearLicenseCommand extends BaseCommand {
async run() { async run() {
this.logger.info('Clearing license from database.'); this.logger.info('Clearing license from database.');
// Invoke shutdown() to force any floating entitlements to be released // Attempt to invoke shutdown() to force any floating entitlements to be released
const license = Container.get(License); const license = Container.get(License);
await license.init(); await license.init();
await license.shutdown(); try {
await license.shutdown();
} catch {
this.logger.info('License shutdown failed. Continuing with clearing license from database.');
}
await Container.get(SettingsRepository).delete({ await Container.get(SettingsRepository).delete({
key: SETTINGS_LICENSE_CERT_KEY, key: SETTINGS_LICENSE_CERT_KEY,

View file

@ -1,10 +1,14 @@
import { License } from '@/license'; import { Container } from 'typedi';
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
import { ClearLicenseCommand } from '@/commands/license/clear';
import { setupTestCommand } from '@test-integration/utils/test-command'; import { setupTestCommand } from '@test-integration/utils/test-command';
import { mockInstance } from '../../shared/mocking'; import { mockInstance } from '../../shared/mocking';
import { ClearLicenseCommand } from '@/commands/license/clear';
import { SETTINGS_LICENSE_CERT_KEY } from '@/constants';
import { SettingsRepository } from '@/databases/repositories/settings.repository';
import { License } from '@/license';
import { LoadNodesAndCredentials } from '@/load-nodes-and-credentials';
mockInstance(LoadNodesAndCredentials); mockInstance(LoadNodesAndCredentials);
const license = mockInstance(License); const license = mockInstance(License);
const command = setupTestCommand(ClearLicenseCommand); const command = setupTestCommand(ClearLicenseCommand);
@ -15,3 +19,17 @@ test('license:clear invokes shutdown() to release any floating entitlements', as
expect(license.init).toHaveBeenCalledTimes(1); expect(license.init).toHaveBeenCalledTimes(1);
expect(license.shutdown).toHaveBeenCalledTimes(1); expect(license.shutdown).toHaveBeenCalledTimes(1);
}); });
test('license:clear deletes the license from the DB even if shutdown() fails', async () => {
license.shutdown.mockRejectedValueOnce(new Error('shutdown failed'));
const settingsRepository = Container.get(SettingsRepository);
settingsRepository.delete = jest.fn();
await command.run();
expect(settingsRepository.delete).toHaveBeenCalledWith({
key: SETTINGS_LICENSE_CERT_KEY,
});
});