first commit
This commit is contained in:
78
apps/gateway/src/debug/terminalFrameCapture.test.ts
Normal file
78
apps/gateway/src/debug/terminalFrameCapture.test.ts
Normal file
@@ -0,0 +1,78 @@
|
||||
import fs from "node:fs";
|
||||
import os from "node:os";
|
||||
import path from "node:path";
|
||||
import { afterEach, describe, expect, it } from "vitest";
|
||||
import { createTerminalFrameCaptureRecorder } from "./terminalFrameCapture";
|
||||
|
||||
const ORIGINAL_CAPTURE_DIR = process.env.RC_TERMINAL_CAPTURE_DIR;
|
||||
|
||||
afterEach(() => {
|
||||
if (ORIGINAL_CAPTURE_DIR === undefined) {
|
||||
delete process.env.RC_TERMINAL_CAPTURE_DIR;
|
||||
} else {
|
||||
process.env.RC_TERMINAL_CAPTURE_DIR = ORIGINAL_CAPTURE_DIR;
|
||||
}
|
||||
});
|
||||
|
||||
describe("terminalFrameCapture", () => {
|
||||
it("未配置目录时不会开启录制", () => {
|
||||
delete process.env.RC_TERMINAL_CAPTURE_DIR;
|
||||
const recorder = createTerminalFrameCaptureRecorder({
|
||||
ip: "127.0.0.1",
|
||||
host: "example.com",
|
||||
port: 22,
|
||||
username: "gavin"
|
||||
});
|
||||
|
||||
expect(recorder).toBeNull();
|
||||
});
|
||||
|
||||
it("会把 meta、frame 和 close 事件写入 jsonl 文件", () => {
|
||||
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "remoteconn-capture-"));
|
||||
process.env.RC_TERMINAL_CAPTURE_DIR = tempDir;
|
||||
|
||||
const recorder = createTerminalFrameCaptureRecorder({
|
||||
ip: "127.0.0.1",
|
||||
host: "example.com",
|
||||
port: 22,
|
||||
username: "gavin",
|
||||
clientSessionKey: "session-1"
|
||||
});
|
||||
|
||||
expect(recorder).not.toBeNull();
|
||||
recorder?.record("stdin", "hello\n");
|
||||
recorder?.record("stdout", "world\r\n");
|
||||
recorder?.close("shell_closed");
|
||||
|
||||
const filePath = recorder?.filePath;
|
||||
expect(filePath).toBeTruthy();
|
||||
const lines = fs
|
||||
.readFileSync(String(filePath), "utf8")
|
||||
.trim()
|
||||
.split("\n")
|
||||
.map((line) => JSON.parse(line));
|
||||
|
||||
expect(lines[0]).toMatchObject({
|
||||
kind: "meta",
|
||||
host: "example.com",
|
||||
username: "gavin",
|
||||
clientSessionKey: "session-1"
|
||||
});
|
||||
expect(lines[1]).toMatchObject({
|
||||
kind: "frame",
|
||||
type: "stdin",
|
||||
data: "hello\n"
|
||||
});
|
||||
expect(lines[2]).toMatchObject({
|
||||
kind: "frame",
|
||||
type: "stdout",
|
||||
data: "world\r\n"
|
||||
});
|
||||
expect(lines[3]).toMatchObject({
|
||||
kind: "close",
|
||||
reason: "shell_closed"
|
||||
});
|
||||
|
||||
fs.rmSync(tempDir, { recursive: true, force: true });
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user