46 lines
1.7 KiB
JavaScript
46 lines
1.7 KiB
JavaScript
import { initialize, getActorTestDir, pushActor, startActorOnPlatform, expect } from '../tools.mjs';
|
|
import { Actor } from 'apify';
|
|
import { log } from 'crawlee';
|
|
import { setTimeout } from 'node:timers/promises';
|
|
|
|
if (process.env.STORAGE_IMPLEMENTATION === 'PLATFORM') {
|
|
const testActorDirname = getActorTestDir(import.meta.url);
|
|
await initialize(testActorDirname);
|
|
|
|
const client = Actor.newClient();
|
|
const actorId = await pushActor(client, testActorDirname);
|
|
log.info(`Actor build (ID ${actorId})`);
|
|
|
|
const { id: queueId } = await client.requestQueues().getOrCreate();
|
|
const limit = 1000;
|
|
|
|
const input = JSON.stringify({ limit, queueId });
|
|
|
|
const runIds = await Promise.all([
|
|
startActorOnPlatform(client, actorId, input),
|
|
startActorOnPlatform(client, actorId, input),
|
|
startActorOnPlatform(client, actorId, input),
|
|
startActorOnPlatform(client, actorId, input),
|
|
]);
|
|
log.info(`Started runs (IDs ${JSON.stringify(runIds)})`);
|
|
|
|
const stats = await Promise.all(
|
|
runIds.map(async (runId) => {
|
|
await client.run(runId).waitForFinish();
|
|
await setTimeout(6000);
|
|
return client.run(runId).get();
|
|
}),
|
|
);
|
|
log.info('Runs finished');
|
|
|
|
const requestQueue = await client.requestQueue(queueId).get();
|
|
|
|
await expect(requestQueue.pendingRequestCount === 0, 'No pending requests');
|
|
await expect(requestQueue.handledRequestCount === 1000, 'All requests are handled');
|
|
|
|
const firstActorFinish = Math.min(...stats.map((run) => run.finishedAt.valueOf()));
|
|
const lastActorFinish = Math.max(...stats.map((run) => run.finishedAt.valueOf()));
|
|
|
|
await expect(lastActorFinish - firstActorFinish < 60 * 1000, 'Actors finished at similar times');
|
|
}
|