mirror of
https://github.com/n8n-io/n8n.git
synced 2026-10-18 23:09:03 +02:00
40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
import { describe, expect, test, vi } from 'vitest';
|
|
|
|
import { ResourceTracker } from '../resource-tracker';
|
|
|
|
function container(id: string, stop = vi.fn().mockResolvedValue(undefined)) {
|
|
return {
|
|
getId: () => id,
|
|
stop,
|
|
};
|
|
}
|
|
|
|
describe('ResourceTracker', () => {
|
|
test('waits for a late acquisition before cleanup', async () => {
|
|
const tracker = new ResourceTracker();
|
|
const endAcquisition = tracker.beginAcquisition();
|
|
const lateContainer = container('late-container');
|
|
const cleanup = tracker.dispose();
|
|
|
|
tracker.trackContainer(lateContainer as never);
|
|
endAcquisition();
|
|
|
|
await expect(cleanup).resolves.toEqual({ failures: [], remaining: [] });
|
|
await expect(tracker.dispose()).resolves.toEqual({ failures: [], remaining: [] });
|
|
expect(lateContainer.stop).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
test('reports cleanup failures and keeps the original resource', async () => {
|
|
const stop = vi.fn().mockRejectedValue(new Error('daemon refused to stop'));
|
|
const tracker = new ResourceTracker();
|
|
tracker.trackContainer(container('stuck-container', stop) as never);
|
|
|
|
const cleanup = await tracker.dispose();
|
|
|
|
expect(cleanup.failures).toHaveLength(1);
|
|
expect(cleanup.failures[0]?.resource).toBe('container stuck-container');
|
|
expect(cleanup.failures[0]?.error.message).toBe('daemon refused to stop');
|
|
expect(cleanup.remaining).toEqual(['container stuck-container']);
|
|
});
|
|
});
|