mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 10:30:44 +00:00
test: stabilize loaded full-suite checks
This commit is contained in:
@@ -25,14 +25,17 @@ type SlackContractApiSurface = Pick<
|
||||
"listSlackDirectoryPeersFromConfig" | "listSlackDirectoryGroupsFromConfig"
|
||||
>;
|
||||
type SlackProbe = import("@openclaw/slack/api.js").SlackProbe;
|
||||
type TelegramApiSurface = typeof import("@openclaw/telegram/api.js");
|
||||
type TelegramContractApiSurface = Pick<
|
||||
typeof import("@openclaw/telegram/contract-api.js"),
|
||||
"listTelegramDirectoryPeersFromConfig" | "listTelegramDirectoryGroupsFromConfig"
|
||||
>;
|
||||
type TelegramProbe = import("@openclaw/telegram/api.js").TelegramProbe;
|
||||
type TelegramTokenResolution = import("@openclaw/telegram/api.js").TelegramTokenResolution;
|
||||
type WhatsAppApiSurface = typeof import("@openclaw/whatsapp/api.js");
|
||||
|
||||
let discordContractApi: DiscordContractApiSurface | undefined;
|
||||
let slackContractApi: SlackContractApiSurface | undefined;
|
||||
let telegramApi: TelegramApiSurface | undefined;
|
||||
let telegramContractApi: TelegramContractApiSurface | undefined;
|
||||
let whatsappApi: WhatsAppApiSurface | undefined;
|
||||
|
||||
function getDiscordContractApi(): DiscordContractApiSurface {
|
||||
@@ -45,9 +48,9 @@ function getSlackContractApi(): SlackContractApiSurface {
|
||||
return slackContractApi;
|
||||
}
|
||||
|
||||
function getTelegramApi(): TelegramApiSurface {
|
||||
telegramApi ??= loadBundledPluginApiSync<TelegramApiSurface>("telegram");
|
||||
return telegramApi;
|
||||
function getTelegramContractApi(): TelegramContractApiSurface {
|
||||
telegramContractApi ??= loadBundledPluginContractApiSync<TelegramContractApiSurface>("telegram");
|
||||
return telegramContractApi;
|
||||
}
|
||||
|
||||
function getWhatsAppApi(): WhatsAppApiSurface {
|
||||
@@ -261,8 +264,8 @@ export function describeSlackPluginsCoreExtensionContract() {
|
||||
|
||||
export function describeTelegramPluginsCoreExtensionContract() {
|
||||
describe("telegram plugins-core extension contract", () => {
|
||||
const listPeers = () => getTelegramApi().listTelegramDirectoryPeersFromConfig;
|
||||
const listGroups = () => getTelegramApi().listTelegramDirectoryGroupsFromConfig;
|
||||
const listPeers = () => getTelegramContractApi().listTelegramDirectoryPeersFromConfig;
|
||||
const listGroups = () => getTelegramContractApi().listTelegramDirectoryGroupsFromConfig;
|
||||
|
||||
it("TelegramProbe satisfies BaseProbeResult", () => {
|
||||
expectTypeOf<TelegramProbe>().toMatchTypeOf<BaseProbeResult>();
|
||||
|
||||
@@ -312,7 +312,7 @@ describe("check-extension-package-tsc-boundary", () => {
|
||||
"process.exit(2);",
|
||||
].join(" "),
|
||||
],
|
||||
5_000,
|
||||
20_000,
|
||||
),
|
||||
).rejects.toMatchObject({
|
||||
message: expect.stringContaining("[... 6 earlier lines omitted ...]"),
|
||||
@@ -320,31 +320,33 @@ describe("check-extension-package-tsc-boundary", () => {
|
||||
kind: "nonzero-exit",
|
||||
elapsedMs: expect.any(Number),
|
||||
});
|
||||
});
|
||||
}, 30_000);
|
||||
|
||||
it("aborts concurrent sibling steps after the first failure", async () => {
|
||||
const startedAt = Date.now();
|
||||
const slowStepTimeoutMs = 60_000;
|
||||
const abortBudgetMs = 30_000;
|
||||
|
||||
await expect(
|
||||
runNodeStepsWithConcurrency(
|
||||
[
|
||||
{
|
||||
label: "fail-fast",
|
||||
args: ["--eval", "setTimeout(() => process.exit(2), 10)"],
|
||||
timeoutMs: 5_000,
|
||||
args: ["--eval", "process.exit(2)"],
|
||||
timeoutMs: slowStepTimeoutMs,
|
||||
},
|
||||
{
|
||||
label: "slow-step",
|
||||
args: ["--eval", "setTimeout(() => {}, 10_000)"],
|
||||
timeoutMs: 5_000,
|
||||
args: ["--eval", "setTimeout(() => {}, 60_000)"],
|
||||
timeoutMs: slowStepTimeoutMs,
|
||||
},
|
||||
],
|
||||
2,
|
||||
),
|
||||
).rejects.toThrow("fail-fast");
|
||||
|
||||
expect(Date.now() - startedAt).toBeLessThan(2_000);
|
||||
});
|
||||
expect(Date.now() - startedAt).toBeLessThan(abortBudgetMs);
|
||||
}, 45_000);
|
||||
|
||||
it("passes successful step timing metadata to onSuccess handlers", async () => {
|
||||
const elapsedTimes: number[] = [];
|
||||
@@ -353,8 +355,8 @@ describe("check-extension-package-tsc-boundary", () => {
|
||||
[
|
||||
{
|
||||
label: "demo-step",
|
||||
args: ["--eval", "setTimeout(() => process.exit(0), 10)"],
|
||||
timeoutMs: 5_000,
|
||||
args: ["--eval", "process.exit(0)"],
|
||||
timeoutMs: 20_000,
|
||||
onSuccess(result: { elapsedMs: number }) {
|
||||
elapsedTimes.push(result.elapsedMs);
|
||||
},
|
||||
@@ -365,5 +367,5 @@ describe("check-extension-package-tsc-boundary", () => {
|
||||
|
||||
expect(elapsedTimes).toHaveLength(1);
|
||||
expect(elapsedTimes[0]).toBeGreaterThanOrEqual(0);
|
||||
});
|
||||
}, 30_000);
|
||||
});
|
||||
|
||||
@@ -36,24 +36,26 @@ describe("prepare-extension-package-boundary-artifacts", () => {
|
||||
|
||||
it("aborts sibling steps after the first failure", async () => {
|
||||
const startedAt = Date.now();
|
||||
const slowStepTimeoutMs = 60_000;
|
||||
const abortBudgetMs = 30_000;
|
||||
|
||||
await expect(
|
||||
runNodeStepsInParallel([
|
||||
{
|
||||
label: "fail-fast",
|
||||
args: ["--eval", "setTimeout(() => process.exit(2), 10)"],
|
||||
timeoutMs: 5_000,
|
||||
args: ["--eval", "process.exit(2)"],
|
||||
timeoutMs: slowStepTimeoutMs,
|
||||
},
|
||||
{
|
||||
label: "slow-step",
|
||||
args: ["--eval", "setTimeout(() => {}, 10_000)"],
|
||||
timeoutMs: 5_000,
|
||||
args: ["--eval", "setTimeout(() => {}, 60_000)"],
|
||||
timeoutMs: slowStepTimeoutMs,
|
||||
},
|
||||
]),
|
||||
).rejects.toThrow("fail-fast failed with exit code 2");
|
||||
|
||||
expect(Date.now() - startedAt).toBeLessThan(2_000);
|
||||
});
|
||||
expect(Date.now() - startedAt).toBeLessThan(abortBudgetMs);
|
||||
}, 45_000);
|
||||
|
||||
it("treats artifacts as fresh only when outputs are newer than inputs", () => {
|
||||
const rootDir = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-boundary-prep-"));
|
||||
|
||||
Reference in New Issue
Block a user