feat(docker): add container logs modal and stats columns (#4807)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
This commit is contained in:
1 parent
cc24f070db
commit
dbf021e04a
16 files changed
+666
-65
No files matched your search
@@ -0,0 +1,53 @@
|
||||
import { describe, expect, test } from "vitest";
|
||||
|
||||
import { createDockerLogStreamProcessor, decodeDockerLogs } from "./docker-log-decode";
|
||||
|
||||
const encodeDockerLogFrame = (streamType: number, message: string) => {
|
||||
const payload = Buffer.from(message, "utf-8");
|
||||
const header = Buffer.alloc(8);
|
||||
header.writeUInt8(streamType, 0);
|
||||
header.writeUInt32BE(payload.length, 4);
|
||||
return Buffer.concat([header, payload]);
|
||||
};
|
||||
|
||||
describe("decodeDockerLogs", () => {
|
||||
test("decodes multiplexed docker log frames", () => {
|
||||
const logs = Buffer.concat([encodeDockerLogFrame(1, "hello "), encodeDockerLogFrame(2, "world")]);
|
||||
|
||||
expect(decodeDockerLogs(logs)).toBe("hello world");
|
||||
});
|
||||
|
||||
test("returns plain text logs unchanged", () => {
|
||||
expect(decodeDockerLogs("plain text log")).toBe("plain text log");
|
||||
});
|
||||
|
||||
test("falls back to raw buffer text for non-multiplexed output", () => {
|
||||
expect(decodeDockerLogs(Buffer.from("raw docker output", "utf-8"))).toBe("raw docker output");
|
||||
});
|
||||
});
|
||||
|
||||
describe("createDockerLogStreamProcessor", () => {
|
||||
test("emits decoded chunks from a stream", () => {
|
||||
const messages: string[] = [];
|
||||
const processChunk = createDockerLogStreamProcessor(
|
||||
(data) => messages.push(data),
|
||||
() => undefined,
|
||||
1024,
|
||||
);
|
||||
|
||||
const chunk = encodeDockerLogFrame(1, "streamed log");
|
||||
expect(processChunk(chunk)).toBe(true);
|
||||
expect(messages).toEqual(["streamed log"]);
|
||||
});
|
||||
|
||||
test("returns false when message size exceeds limit", () => {
|
||||
const processChunk = createDockerLogStreamProcessor(
|
||||
() => undefined,
|
||||
() => undefined,
|
||||
4,
|
||||
);
|
||||
|
||||
const chunk = encodeDockerLogFrame(1, "this message is too long");
|
||||
expect(processChunk(chunk)).toBe(false);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user