79 lines
2.1 KiB
TypeScript
79 lines
2.1 KiB
TypeScript
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 });
|
|
});
|
|
});
|