mirror of
https://github.com/getpaseo/paseo.git
synced 2026-10-23 01:32:40 +00:00
* fix(daemon): keep lifecycle operations on the selected instance Restart reconstructed launch inputs and address fallback could redirect a home-selected shutdown to another daemon. Let supervisors publish bound endpoints, retain their worker restart contract, and share captured local lifecycle ownership between CLI and Desktop. * test(daemon): verify bounded desktop readiness and cancellable artifacts * test(cli): verify reload target hints and durable offline pairing * test(daemon): align lifecycle fixtures with ownership and targeting * fix(daemon): preserve reachability when status details time out Provider discovery can outlast a status request after authentication succeeds. Keep local connection facts separate from unavailable details, while explicit remote queries retain their error outcome. Migrate CLI and packaged Desktop fixtures to persistent managed configuration and explicit targets. Isolate generic Git observation from forge discovery and reuse disposable CLI homes on Windows. * test(daemon): observe restart through the worker status RPC The bounded CLI status observation may omit worker details while an authenticated connection remains healthy. Exercise the app-style restart through its full RPC and retain the replacement observation, with a real slow provider probe covering the distinction.
124 lines
5.1 KiB
TypeScript
124 lines
5.1 KiB
TypeScript
#!/usr/bin/env npx tsx
|
|
|
|
/**
|
|
* Phase 11: Agent Archive Command Tests
|
|
*
|
|
* Tests the agent archive command - archiving (soft-delete) agents.
|
|
* Since daemon may not be running, we test both:
|
|
* - Help and argument parsing
|
|
* - Graceful error handling when daemon not running
|
|
* - All flags are accepted
|
|
*
|
|
* Tests:
|
|
* - agent archive --help shows options
|
|
* - agent archive requires ID argument
|
|
* - agent archive handles daemon not running
|
|
* - agent archive --force flag is accepted
|
|
*/
|
|
|
|
import assert from "node:assert";
|
|
import { getAvailablePort } from "./helpers/network.ts";
|
|
import { $ } from "zx";
|
|
import { mkdtemp, rm } from "fs/promises";
|
|
import { tmpdir } from "os";
|
|
import { join } from "path";
|
|
|
|
$.verbose = false;
|
|
|
|
console.log("=== Agent Archive Command Tests ===\n");
|
|
|
|
// Allocate an unused endpoint for connection-error and argument-validation checks.
|
|
const port = await getAvailablePort();
|
|
const paseoHome = await mkdtemp(join(tmpdir(), "paseo-test-home-"));
|
|
|
|
try {
|
|
// Test 1: agent archive --help shows options
|
|
{
|
|
console.log("Test 1: agent archive --help shows options");
|
|
const result = await $`npx paseo agent archive --help`.nothrow();
|
|
assert.strictEqual(result.exitCode, 0, "agent archive --help should exit 0");
|
|
assert(result.stdout.includes("--force"), "help should mention --force flag");
|
|
assert(result.stdout.includes("--host"), "help should mention --host option");
|
|
assert(result.stdout.includes("<id>"), "help should mention required id argument");
|
|
console.log("✓ agent archive --help shows options\n");
|
|
}
|
|
|
|
// Test 2: agent archive requires ID argument
|
|
{
|
|
console.log("Test 2: agent archive requires ID argument");
|
|
const result =
|
|
await $`PASEO_HOME=${paseoHome} npx paseo --host localhost:${port} agent archive`.nothrow();
|
|
assert.notStrictEqual(result.exitCode, 0, "should fail without id");
|
|
const output = result.stdout + result.stderr;
|
|
const hasError =
|
|
output.toLowerCase().includes("missing") ||
|
|
output.toLowerCase().includes("required") ||
|
|
output.toLowerCase().includes("argument");
|
|
assert(hasError, "error should mention missing argument");
|
|
console.log("✓ agent archive requires ID argument\n");
|
|
}
|
|
|
|
// Test 3: agent archive handles daemon not running
|
|
{
|
|
console.log("Test 3: agent archive handles daemon not running");
|
|
const result =
|
|
await $`PASEO_HOME=${paseoHome} npx paseo --host localhost:${port} agent archive abc123`.nothrow();
|
|
// Should fail because daemon not running
|
|
assert.notStrictEqual(result.exitCode, 0, "should fail when daemon not running");
|
|
const output = result.stdout + result.stderr;
|
|
const hasError =
|
|
output.toLowerCase().includes("daemon") ||
|
|
output.toLowerCase().includes("connect") ||
|
|
output.toLowerCase().includes("cannot");
|
|
assert(hasError, "error message should mention connection issue");
|
|
console.log("✓ agent archive handles daemon not running\n");
|
|
}
|
|
|
|
// Test 4: agent archive --force flag is accepted
|
|
{
|
|
console.log("Test 4: agent archive --force flag is accepted");
|
|
const result =
|
|
await $`PASEO_HOME=${paseoHome} npx paseo --host localhost:${port} agent archive abc123 --force`.nothrow();
|
|
const output = result.stdout + result.stderr;
|
|
assert(!output.includes("unknown option"), "should accept --force flag");
|
|
assert(!output.includes("error: option"), "should not have option parsing error");
|
|
console.log("✓ agent archive --force flag is accepted\n");
|
|
}
|
|
|
|
// Test 5: agent archive with ID and --host flag is accepted
|
|
{
|
|
console.log("Test 5: agent archive with ID and --host flag is accepted");
|
|
const result =
|
|
await $`PASEO_HOME=${paseoHome} npx paseo --host localhost:${port} agent archive abc123 --host localhost:${port}`.nothrow();
|
|
const output = result.stdout + result.stderr;
|
|
assert(!output.includes("unknown option"), "should accept --host flag");
|
|
assert(!output.includes("error: option"), "should not have option parsing error");
|
|
console.log("✓ agent archive with ID and --host flag is accepted\n");
|
|
}
|
|
|
|
// Test 6: agent shows archive in subcommands
|
|
{
|
|
console.log("Test 6: agent --help shows archive subcommand");
|
|
const result = await $`npx paseo agent --help`.nothrow();
|
|
assert.strictEqual(result.exitCode, 0, "agent --help should exit 0");
|
|
assert(result.stdout.includes("archive"), "help should mention archive subcommand");
|
|
console.log("✓ agent --help shows archive subcommand\n");
|
|
}
|
|
|
|
// Test 7: -q (quiet) flag is accepted with agent archive
|
|
{
|
|
console.log("Test 7: -q (quiet) flag is accepted with agent archive");
|
|
const result =
|
|
await $`PASEO_HOME=${paseoHome} npx paseo --host localhost:${port} -q agent archive abc123`.nothrow();
|
|
const output = result.stdout + result.stderr;
|
|
assert(!output.includes("unknown option"), "should accept -q flag");
|
|
assert(!output.includes("error: option"), "should not have option parsing error");
|
|
console.log("✓ -q (quiet) flag is accepted with agent archive\n");
|
|
}
|
|
} finally {
|
|
// Clean up temp directory
|
|
await rm(paseoHome, { recursive: true, force: true });
|
|
}
|
|
|
|
console.log("=== All agent archive tests passed ===");
|