





















@@ -2523,6 +2523,93 @@ describe.concurrent("scripts/crabbox-wrapper", () => {
25232523}
25242524});
252525252526+it("rejects malformed sparse-sync minimum free byte limits", () => {
2527+const syncRoot = path.join(repoRoot, ".crabbox-test-invalid-disk-sync-root");
2528+rmSync(syncRoot, { recursive: true, force: true });
2529+try {
2530+const result = runWrapper(
2531+"provider: hetzner, aws, local-container, blacksmith-testbox, or cloudflare\n",
2532+["run", "--provider", "aws", "--", "echo ok"],
2533+{
2534+env: {
2535+OPENCLAW_CRABBOX_SYNC_MIN_FREE_BYTES: "1024mb",
2536+OPENCLAW_CRABBOX_SYNC_TMPDIR: syncRoot,
2537+},
2538+gitResponses: {
2539+[GIT_CONFIG_SPARSE_KEY]: { stdout: "true\n" },
2540+[GIT_STATUS_PORCELAIN_KEY]: { stdout: "" },
2541+},
2542+},
2543+);
2544+2545+expect(result.status).toBe(1);
2546+expect(result.stderr).toContain(
2547+'OPENCLAW_CRABBOX_SYNC_MIN_FREE_BYTES must be a non-negative integer byte count, got "1024mb"',
2548+);
2549+expect(readdirSync(syncRoot)).toEqual([]);
2550+} finally {
2551+rmSync(syncRoot, { recursive: true, force: true });
2552+}
2553+});
2554+2555+it("rejects unsafe sparse-sync minimum free byte limits", () => {
2556+const syncRoot = path.join(repoRoot, ".crabbox-test-unsafe-disk-sync-root");
2557+rmSync(syncRoot, { recursive: true, force: true });
2558+try {
2559+const result = runWrapper(
2560+"provider: hetzner, aws, local-container, blacksmith-testbox, or cloudflare\n",
2561+["run", "--provider", "aws", "--", "echo ok"],
2562+{
2563+env: {
2564+OPENCLAW_CRABBOX_SYNC_MIN_FREE_BYTES: String(Number.MAX_SAFE_INTEGER + 1),
2565+OPENCLAW_CRABBOX_SYNC_TMPDIR: syncRoot,
2566+},
2567+gitResponses: {
2568+[GIT_CONFIG_SPARSE_KEY]: { stdout: "true\n" },
2569+[GIT_STATUS_PORCELAIN_KEY]: { stdout: "" },
2570+},
2571+},
2572+);
2573+2574+expect(result.status).toBe(1);
2575+expect(result.stderr).toContain(
2576+"OPENCLAW_CRABBOX_SYNC_MIN_FREE_BYTES must be a safe non-negative integer byte count",
2577+);
2578+expect(readdirSync(syncRoot)).toEqual([]);
2579+} finally {
2580+rmSync(syncRoot, { recursive: true, force: true });
2581+}
2582+});
2583+2584+it("rejects malformed sparse-sync keepalive intervals", () => {
2585+const syncRoot = path.join(repoRoot, ".crabbox-test-invalid-keepalive-sync-root");
2586+rmSync(syncRoot, { recursive: true, force: true });
2587+try {
2588+const result = runWrapper(
2589+"provider: hetzner, aws, local-container, blacksmith-testbox, or cloudflare\n",
2590+["run", "--provider", "aws", "--", "echo ok"],
2591+{
2592+env: {
2593+OPENCLAW_CRABBOX_SYNC_KEEPALIVE_MS: "10ms",
2594+OPENCLAW_CRABBOX_SYNC_TMPDIR: syncRoot,
2595+},
2596+gitResponses: {
2597+[GIT_CONFIG_SPARSE_KEY]: { stdout: "true\n" },
2598+[GIT_STATUS_PORCELAIN_KEY]: { stdout: "" },
2599+},
2600+},
2601+);
2602+2603+expect(result.status).toBe(1);
2604+expect(result.stderr).toContain(
2605+'OPENCLAW_CRABBOX_SYNC_KEEPALIVE_MS must be a non-negative integer millisecond interval, got "10ms"',
2606+);
2607+expect(readdirSync(syncRoot)).toEqual([]);
2608+} finally {
2609+rmSync(syncRoot, { recursive: true, force: true });
2610+}
2611+});
2612+25262613(process.platform === "win32" ? it.skip : it)(
25272614"recreates sparse-sync temporary full checkouts that disappear while Crabbox is running",
25282615() => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。