mirror of
https://github.com/balena-os/balena-supervisor.git
synced 2025-02-01 00:45:23 +00:00
Add unit test for usingInferStepsLock
Change-type: patch Signed-off-by: Christina Ying Wang <christina@balena.io>
This commit is contained in:
parent
3049b03cba
commit
51e59725f8
@ -268,9 +268,11 @@ function emitAsync<T extends keyof DeviceStateEvents>(
|
||||
|
||||
const inferStepsLock = () =>
|
||||
takeGlobalLockRW('inferSteps').disposer((release) => release());
|
||||
function usingInferStepsLock<T extends () => any, U extends ReturnType<T>>(
|
||||
fn: T,
|
||||
): Bluebird<UnwrappedPromise<U>> {
|
||||
// Exported for unit test
|
||||
export function usingInferStepsLock<
|
||||
T extends () => any,
|
||||
U extends ReturnType<T>,
|
||||
>(fn: T): Bluebird<UnwrappedPromise<U>> {
|
||||
return Bluebird.using(inferStepsLock, () => fn());
|
||||
}
|
||||
|
||||
|
30
test/unit/device-state.spec.ts
Normal file
30
test/unit/device-state.spec.ts
Normal file
@ -0,0 +1,30 @@
|
||||
import { expect } from 'chai';
|
||||
import * as deviceState from '~/src/device-state';
|
||||
|
||||
describe('usingInferStepsLock', () => {
|
||||
it('should not allow to start a function call without finishing the previous sequential call of the function', async () => {
|
||||
const result: string[] = [];
|
||||
const fn = async (id: number, str: string) => {
|
||||
return deviceState.usingInferStepsLock(async () => {
|
||||
if (id < 3 || id === 20) {
|
||||
result.push(`Started ${id}, ${str} call`);
|
||||
await fn(id + 1, 'first');
|
||||
await fn(id + 1, 'second');
|
||||
result.push(`Finished ${id}, ${str} call`);
|
||||
}
|
||||
});
|
||||
};
|
||||
await fn(1, 'master');
|
||||
await fn(20, 'master');
|
||||
expect(result).to.deep.equal([
|
||||
'Started 1, master call',
|
||||
'Started 2, first call',
|
||||
'Finished 2, first call',
|
||||
'Started 2, second call',
|
||||
'Finished 2, second call',
|
||||
'Finished 1, master call',
|
||||
'Started 20, master call',
|
||||
'Finished 20, master call',
|
||||
]);
|
||||
});
|
||||
});
|
Loading…
x
Reference in New Issue
Block a user