55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
// Copyright 2017-2021 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
import { assert } from 'chai';
|
|
|
|
import { sleep } from '../util/sleep';
|
|
import createTaskWithTimeout from '../textsecure/TaskWithTimeout';
|
|
|
|
describe('createTaskWithTimeout', () => {
|
|
it('resolves when promise resolves', async () => {
|
|
const task = () => Promise.resolve('hi!');
|
|
const taskWithTimeout = createTaskWithTimeout(task, 'test');
|
|
|
|
const result = await taskWithTimeout();
|
|
assert.strictEqual(result, 'hi!');
|
|
});
|
|
|
|
it('flows error from promise back', async () => {
|
|
const error = new Error('original');
|
|
const task = () => Promise.reject(error);
|
|
const taskWithTimeout = createTaskWithTimeout(task, 'test');
|
|
|
|
await assert.isRejected(taskWithTimeout(), 'original');
|
|
});
|
|
|
|
it('rejects if promise takes too long (this one logs error to console)', async () => {
|
|
const task = async () => {
|
|
await sleep(3000);
|
|
};
|
|
const taskWithTimeout = createTaskWithTimeout(task, 'test', {
|
|
timeout: 10,
|
|
});
|
|
|
|
await assert.isRejected(taskWithTimeout());
|
|
});
|
|
|
|
it('rejects if task throws (and does not log about taking too long)', async () => {
|
|
const error = new Error('Task is throwing!');
|
|
const task = () => {
|
|
throw error;
|
|
};
|
|
const taskWithTimeout = createTaskWithTimeout(task, 'test', {
|
|
timeout: 10,
|
|
});
|
|
await assert.isRejected(taskWithTimeout(), 'Task is throwing!');
|
|
});
|
|
|
|
it('passes arguments to the underlying function', async () => {
|
|
const task = (arg: string) => Promise.resolve(arg);
|
|
const taskWithTimeout = createTaskWithTimeout(task, 'test');
|
|
|
|
const result = await taskWithTimeout('hi!');
|
|
assert.strictEqual(result, 'hi!');
|
|
});
|
|
});
|