unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
98 lines • 3.81 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const scheduler_service_1 = require("../features/scheduler/scheduler-service");
const test_config_1 = require("../../test/config/test-config");
const fake_setting_store_1 = __importDefault(require("../../test/fixtures/fake-setting-store"));
const setting_service_1 = __importDefault(require("./setting-service"));
const maintenance_service_1 = __importDefault(require("../features/maintenance/maintenance-service"));
function ms(timeMs) {
return new Promise((resolve) => setTimeout(resolve, timeMs));
}
const getLogger = () => {
const records = [];
const logger = () => ({
error(...args) {
records.push(args);
},
debug() { },
info() { },
warn() { },
fatal() { },
});
const getRecords = () => {
return records;
};
return { logger, getRecords };
};
let schedulerService;
let getRecords;
beforeEach(() => {
const config = (0, test_config_1.createTestConfig)();
const settingStore = new fake_setting_store_1.default();
const settingService = new setting_service_1.default({ settingStore }, config, {
storeEvent() { },
});
const maintenanceService = new maintenance_service_1.default(config, settingService);
const { logger, getRecords: getRecordsFn } = getLogger();
getRecords = getRecordsFn;
schedulerService = new scheduler_service_1.SchedulerService(logger, maintenanceService, config.eventBus);
});
test('Schedules job immediately', async () => {
const job = jest.fn();
await schedulerService.schedule(job, 10, 'test-id');
expect(job).toBeCalledTimes(1);
schedulerService.stop();
});
test('Can schedule a single regular job', async () => {
const job = jest.fn();
await schedulerService.schedule(job, 50, 'test-id-3');
await ms(75);
expect(job).toBeCalledTimes(2);
schedulerService.stop();
});
test('Can schedule multiple jobs at the same interval', async () => {
const job = jest.fn();
const anotherJob = jest.fn();
await schedulerService.schedule(job, 50, 'test-id-6');
await schedulerService.schedule(anotherJob, 50, 'test-id-7');
await ms(75);
expect(job).toBeCalledTimes(2);
expect(anotherJob).toBeCalledTimes(2);
schedulerService.stop();
});
test('Can schedule multiple jobs at the different intervals', async () => {
const job = jest.fn();
const anotherJob = jest.fn();
await schedulerService.schedule(job, 100, 'test-id-8');
await schedulerService.schedule(anotherJob, 200, 'test-id-9');
await ms(250);
expect(job).toBeCalledTimes(3);
expect(anotherJob).toBeCalledTimes(2);
schedulerService.stop();
});
test('Can handle crash of a async job', async () => {
const job = async () => {
await Promise.reject('async reason');
};
await schedulerService.schedule(job, 50, 'test-id-10');
await ms(75);
schedulerService.stop();
const records = getRecords();
expect(records[0][0]).toContain('initial scheduled job failed | id: test-id-10');
expect(records[1][0]).toContain('interval scheduled job failed | id: test-id-10');
});
test('Can handle crash of a sync job', async () => {
const job = () => {
throw new Error('sync reason');
};
await schedulerService.schedule(job, 50, 'test-id-11');
await ms(75);
schedulerService.stop();
const records = getRecords();
expect(records[0][0]).toContain('initial scheduled job failed | id: test-id-11');
expect(records[1][0]).toContain('interval scheduled job failed | id: test-id-11');
});
//# sourceMappingURL=scheduler-service.test.js.map