Compare commits

...

1 Commits

Author SHA1 Message Date
Peter Steinberger
d3c53f4596 fix: stabilize CI lint/tests (#592) 2026-01-09 18:35:52 +01:00
3 changed files with 35 additions and 5 deletions

View File

@ -331,7 +331,8 @@ actor MacNodeBridgeSession {
let now = self.clock.now
if now > last.advanced(by: timeout) {
let age = last.duration(to: now)
self.logger.warning("Node bridge heartbeat timed out; disconnecting (age: \(String(describing: age), privacy: .public)).")
self.logger.warning(
"Node bridge heartbeat timed out; disconnecting (age: \(String(describing: age), privacy: .public)).")
await self.disconnect()
return
}
@ -341,7 +342,8 @@ actor MacNodeBridgeSession {
do {
try await self.send(BridgePing(type: "ping", id: id))
} catch {
self.logger.warning("Node bridge ping send failed; disconnecting (error: \(String(describing: error), privacy: .public)).")
self.logger.warning(
"Node bridge ping send failed; disconnecting (error: \(String(describing: error), privacy: .public)).")
await self.disconnect()
return
}
@ -356,7 +358,8 @@ actor MacNodeBridgeSession {
private func handleConnectionState(_ state: NWConnection.State) async {
switch state {
case let .failed(error):
self.logger.warning("Node bridge connection failed; disconnecting (error: \(String(describing: error), privacy: .public)).")
self.logger.warning(
"Node bridge connection failed; disconnecting (error: \(String(describing: error), privacy: .public)).")
await self.disconnect()
case .cancelled:
self.logger.warning("Node bridge connection cancelled; disconnecting.")

View File

@ -6,6 +6,10 @@ import { afterAll, beforeAll, describe, expect, it, vi } from "vitest";
const realOs = await vi.importActual<typeof import("node:os")>("node:os");
const HOME = path.join(realOs.tmpdir(), "clawdbot-home-test");
const PREV_CLAWDBOT_STATE_DIR = process.env.CLAWDBOT_STATE_DIR;
const PREV_CLAWDIS_STATE_DIR = process.env.CLAWDIS_STATE_DIR;
delete process.env.CLAWDBOT_STATE_DIR;
delete process.env.CLAWDIS_STATE_DIR;
vi.mock("node:os", () => ({
default: { homedir: () => HOME, tmpdir: () => realOs.tmpdir() },
@ -22,11 +26,18 @@ describe("media store", () => {
afterAll(async () => {
await fs.rm(HOME, { recursive: true, force: true });
if (PREV_CLAWDBOT_STATE_DIR !== undefined)
process.env.CLAWDBOT_STATE_DIR = PREV_CLAWDBOT_STATE_DIR;
else delete process.env.CLAWDBOT_STATE_DIR;
if (PREV_CLAWDIS_STATE_DIR !== undefined)
process.env.CLAWDIS_STATE_DIR = PREV_CLAWDIS_STATE_DIR;
else delete process.env.CLAWDIS_STATE_DIR;
});
it("creates and returns media directory", async () => {
const dir = await store.ensureMediaDir();
expect(dir).toContain("clawdbot-home-test");
expect(path.basename(dir)).toBe("media");
const stat = await fs.stat(dir);
expect(stat.isDirectory()).toBe(true);
});

View File

@ -14,9 +14,16 @@ const runtime = {
describe("web logout", () => {
const origHomedir = os.homedir;
let tmpDir: string;
let prevStateDir: string | undefined;
let prevClawdisStateDir: string | undefined;
beforeEach(() => {
vi.clearAllMocks();
prevStateDir = process.env.CLAWDBOT_STATE_DIR;
prevClawdisStateDir = process.env.CLAWDIS_STATE_DIR;
delete process.env.CLAWDBOT_STATE_DIR;
delete process.env.CLAWDIS_STATE_DIR;
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "clawdbot-logout-"));
vi.spyOn(os, "homedir").mockReturnValue(tmpDir);
vi.resetModules();
@ -36,6 +43,14 @@ describe("web logout", () => {
await fsPromises
.rm(tmpDir, { recursive: true, force: true })
.catch(() => {});
if (prevStateDir !== undefined) process.env.CLAWDBOT_STATE_DIR = prevStateDir;
else delete process.env.CLAWDBOT_STATE_DIR;
if (prevClawdisStateDir !== undefined)
process.env.CLAWDIS_STATE_DIR = prevClawdisStateDir;
else delete process.env.CLAWDIS_STATE_DIR;
// restore for safety
// eslint-disable-next-line @typescript-eslint/unbound-method
(os.homedir as unknown as typeof origHomedir) = origHomedir;
@ -47,7 +62,8 @@ describe("web logout", () => {
async () => {
const { logoutWeb, WA_WEB_AUTH_DIR } = await import("./session.js");
expect(WA_WEB_AUTH_DIR.startsWith(tmpDir)).toBe(true);
const rel = path.relative(tmpDir, WA_WEB_AUTH_DIR);
expect(rel && !rel.startsWith("..") && !path.isAbsolute(rel)).toBe(true);
fs.mkdirSync(WA_WEB_AUTH_DIR, { recursive: true });
fs.writeFileSync(path.join(WA_WEB_AUTH_DIR, "creds.json"), "{}");
const result = await logoutWeb({ runtime: runtime as never });