fix(client): Improve IPC client robustness and daemon debug logging; update tests and package metadata
This commit is contained in:
@@ -2,15 +2,17 @@ import { expect, tap } from '@git.zone/tstest/tapbundle';
|
||||
import * as tspm from '../ts/index.js';
|
||||
import * as path from 'path';
|
||||
import * as fs from 'fs/promises';
|
||||
import { TspmDaemon } from '../ts/classes.daemon.js';
|
||||
|
||||
// Test daemon server functionality
|
||||
tap.test('TspmDaemon creation', async () => {
|
||||
const daemon = new TspmDaemon();
|
||||
expect(daemon).toBeInstanceOf(TspmDaemon);
|
||||
// These tests have been disabled after the architecture refactoring
|
||||
// TspmDaemon is now internal to the daemon and not exported
|
||||
// Future tests should focus on testing via the IPC client interface
|
||||
|
||||
tap.test('Daemon exports available', async () => {
|
||||
// Test that the daemon can be started via the exported function
|
||||
expect(tspm.startDaemon).toBeTypeOf('function');
|
||||
});
|
||||
|
||||
tap.test('Daemon PID file management', async (tools) => {
|
||||
tap.test('PID file management utilities', async (tools) => {
|
||||
const testDir = path.join(process.cwd(), '.nogit');
|
||||
const testPidFile = path.join(testDir, 'test-daemon.pid');
|
||||
|
||||
@@ -29,52 +31,7 @@ tap.test('Daemon PID file management', async (tools) => {
|
||||
await fs.unlink(testPidFile);
|
||||
});
|
||||
|
||||
tap.test('Daemon socket path generation', async () => {
|
||||
const daemon = new TspmDaemon();
|
||||
// Access private property for testing (normally wouldn't do this)
|
||||
const socketPath = (daemon as any).socketPath;
|
||||
expect(socketPath).toInclude('tspm.sock');
|
||||
});
|
||||
|
||||
tap.test('Daemon shutdown handlers', async (tools) => {
|
||||
const daemon = new TspmDaemon();
|
||||
|
||||
// Test that shutdown handlers are registered
|
||||
const sigintListeners = process.listeners('SIGINT');
|
||||
const sigtermListeners = process.listeners('SIGTERM');
|
||||
|
||||
// We expect at least one listener for each signal
|
||||
// (Note: in actual test we won't start the daemon to avoid side effects)
|
||||
expect(sigintListeners.length).toBeGreaterThanOrEqual(0);
|
||||
expect(sigtermListeners.length).toBeGreaterThanOrEqual(0);
|
||||
});
|
||||
|
||||
tap.test('Daemon process info tracking', async () => {
|
||||
const daemon = new TspmDaemon();
|
||||
const tspmInstance = (daemon as any).tspmInstance;
|
||||
|
||||
expect(tspmInstance).toBeDefined();
|
||||
expect(tspmInstance.processes).toBeInstanceOf(Map);
|
||||
expect(tspmInstance.processConfigs).toBeInstanceOf(Map);
|
||||
expect(tspmInstance.processInfo).toBeInstanceOf(Map);
|
||||
});
|
||||
|
||||
tap.test('Daemon heartbeat monitoring setup', async (tools) => {
|
||||
const daemon = new TspmDaemon();
|
||||
|
||||
// Test heartbeat interval property exists
|
||||
const heartbeatInterval = (daemon as any).heartbeatInterval;
|
||||
expect(heartbeatInterval).toEqual(null); // Should be null before start
|
||||
});
|
||||
|
||||
tap.test('Daemon shutdown state management', async () => {
|
||||
const daemon = new TspmDaemon();
|
||||
const isShuttingDown = (daemon as any).isShuttingDown;
|
||||
|
||||
expect(isShuttingDown).toEqual(false);
|
||||
});
|
||||
|
||||
tap.test('Daemon memory usage reporting', async () => {
|
||||
tap.test('Process memory usage reporting', async () => {
|
||||
const memUsage = process.memoryUsage();
|
||||
|
||||
expect(memUsage.heapUsed).toBeGreaterThan(0);
|
||||
@@ -82,7 +39,7 @@ tap.test('Daemon memory usage reporting', async () => {
|
||||
expect(memUsage.rss).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
tap.test('Daemon CPU usage calculation', async () => {
|
||||
tap.test('Process CPU usage calculation', async () => {
|
||||
const cpuUsage = process.cpuUsage();
|
||||
|
||||
expect(cpuUsage.user).toBeGreaterThanOrEqual(0);
|
||||
@@ -93,14 +50,14 @@ tap.test('Daemon CPU usage calculation', async () => {
|
||||
expect(cpuSeconds).toBeGreaterThanOrEqual(0);
|
||||
});
|
||||
|
||||
tap.test('Daemon uptime calculation', async () => {
|
||||
tap.test('Uptime calculation', async () => {
|
||||
const startTime = Date.now();
|
||||
|
||||
// Wait a bit
|
||||
await new Promise((resolve) => setTimeout(resolve, 100));
|
||||
|
||||
const uptime = Date.now() - startTime;
|
||||
expect(uptime).toBeGreaterThanOrEqual(100);
|
||||
expect(uptime).toBeGreaterThanOrEqual(95); // Allow some timing variance
|
||||
expect(uptime).toBeLessThan(200);
|
||||
});
|
||||
|
||||
|
Reference in New Issue
Block a user