serialize test db shutdown
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/backend-test-utils': patch
|
||||
---
|
||||
|
||||
Serialize test database shutdown, and add logging
|
||||
@@ -276,19 +276,28 @@ export class TestDatabases {
|
||||
|
||||
private async shutdown() {
|
||||
const instances = [...this.instanceById.values()];
|
||||
await Promise.all(
|
||||
instances.map(async ({ stopContainer, connections }) => {
|
||||
this.instanceById.clear();
|
||||
|
||||
for (const { stopContainer, connections, databaseManager } of instances) {
|
||||
for (const connection of connections) {
|
||||
try {
|
||||
await Promise.all(connections.map(c => c.destroy()));
|
||||
} catch {
|
||||
// ignore
|
||||
await connection.destroy();
|
||||
} catch (error) {
|
||||
console.warn(`TestDatabases: Failed to destroy connection`, {
|
||||
connection,
|
||||
error,
|
||||
});
|
||||
}
|
||||
try {
|
||||
await stopContainer?.();
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
try {
|
||||
await stopContainer?.();
|
||||
} catch (error) {
|
||||
console.warn(`TestDatabases: Failed to stop container`, {
|
||||
databaseManager,
|
||||
error,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,6 @@ import { TestDatabaseId, TestDatabases } from '@backstage/backend-test-utils';
|
||||
import { TaskScheduler } from '@backstage/backend-tasks';
|
||||
|
||||
jest.setTimeout(60_000);
|
||||
jest.useFakeTimers();
|
||||
|
||||
const testFactRetriever: FactRetriever = {
|
||||
id: 'test_factretriever',
|
||||
@@ -203,30 +202,36 @@ describe('FactRetrieverEngine', () => {
|
||||
});
|
||||
}
|
||||
|
||||
const handler = jest.fn();
|
||||
engine = await createEngine(
|
||||
databaseId,
|
||||
insertCallback,
|
||||
() => {},
|
||||
undefined,
|
||||
{ ...testFactRetriever, handler },
|
||||
);
|
||||
await engine.schedule();
|
||||
const job = await engine.getJobRegistration(testFactRetriever.id);
|
||||
expect(job.cadence!!).toEqual(defaultCadence);
|
||||
jest.useFakeTimers();
|
||||
|
||||
await engine.triggerJob(job.factRetriever.id);
|
||||
jest.advanceTimersByTime(5000);
|
||||
try {
|
||||
const handler = jest.fn();
|
||||
engine = await createEngine(
|
||||
databaseId,
|
||||
insertCallback,
|
||||
() => {},
|
||||
undefined,
|
||||
{ ...testFactRetriever, handler },
|
||||
);
|
||||
await engine.schedule();
|
||||
const job = await engine.getJobRegistration(testFactRetriever.id);
|
||||
expect(job.cadence!!).toEqual(defaultCadence);
|
||||
|
||||
const handlerParam = await new Promise(resolve =>
|
||||
handler.mockImplementation(resolve),
|
||||
);
|
||||
await engine.triggerJob(job.factRetriever.id);
|
||||
jest.advanceTimersByTime(5000);
|
||||
|
||||
await expect(handlerParam).toEqual(
|
||||
expect.objectContaining({
|
||||
entityFilter: testFactRetriever.entityFilter,
|
||||
}),
|
||||
);
|
||||
const handlerParam = await new Promise(resolve =>
|
||||
handler.mockImplementation(resolve),
|
||||
);
|
||||
|
||||
await expect(handlerParam).toEqual(
|
||||
expect.objectContaining({
|
||||
entityFilter: testFactRetriever.entityFilter,
|
||||
}),
|
||||
);
|
||||
} finally {
|
||||
jest.useRealTimers();
|
||||
}
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user