Merge pull request #1586 from RooVetGit/cte/fix-tests-macos

Fix terminal process unit tests on MacOS
This commit is contained in:
Chris Estreich 2025-03-11 21:48:14 -07:00 committed by GitHub
commit 0fafe06e15
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -253,7 +253,7 @@ describe("TerminalProcess with Real Command Output", () => {
})
it("should execute 'echo -n a' and return exactly 'a'", async () => {
const { executionTimeUs } = await testTerminalCommand("echo -n a", "a")
const { executionTimeUs } = await testTerminalCommand("/bin/echo -n a", "a")
console.log(
`'echo -n a' execution time: ${executionTimeUs} microseconds (${executionTimeUs / 1000} milliseconds)`,
)
@ -274,23 +274,19 @@ describe("TerminalProcess with Real Command Output", () => {
)
})
// Configure the number of lines for the base64 test
const BASE64_TEST_LINES = 1000000
const TEST_LINES = 1_000_000
it(`should execute 'base64 < /dev/zero | head -n ${BASE64_TEST_LINES}' and verify ${BASE64_TEST_LINES} lines of 'A's`, async () => {
// Create an expected output pattern that matches what base64 produces
// Each line is 76 'A's followed by a newline
const expectedOutput = Array(BASE64_TEST_LINES).fill("A".repeat(76)).join("\n") + "\n"
it(`should execute 'yes AAA... | head -n ${TEST_LINES}' and verify ${TEST_LINES} lines of 'A's`, async () => {
const expectedOutput = Array(TEST_LINES).fill("A".repeat(76)).join("\n") + "\n"
// This command will generate BASE64_TEST_LINES lines of base64 encoded zeros
// Each line will contain 76 'A' characters (base64 encoding of zeros)
// This command will generate 1M lines with 76 'A's each.
const { executionTimeUs, capturedOutput } = await testTerminalCommand(
`base64 < /dev/zero | head -n ${BASE64_TEST_LINES}`,
`yes "${"A".repeat(76)}" | head -n ${TEST_LINES}`,
expectedOutput,
)
console.log(
`'base64 < /dev/zero | head -n ${BASE64_TEST_LINES}' execution time: ${executionTimeUs} microseconds (${executionTimeUs / 1000} milliseconds)`,
`'yes "${"A".repeat(76)}" | head -n ${TEST_LINES}' execution time: ${executionTimeUs} microseconds (${executionTimeUs / 1000} milliseconds)`,
)
// Display a truncated output sample (first 3 lines and last 3 lines)
@ -299,21 +295,23 @@ describe("TerminalProcess with Real Command Output", () => {
lines.slice(0, 3).join("\n") +
`\n... (truncated ${lines.length - 6} lines) ...\n` +
lines.slice(Math.max(0, lines.length - 3), lines.length).join("\n")
console.log("Output sample (first 3 lines):\n", truncatedOutput)
// Verify the output
// Check if we have BASE64_TEST_LINES lines (may have an empty line at the end)
expect(lines.length).toBeGreaterThanOrEqual(BASE64_TEST_LINES)
// Verify the output.
// Check if we have TEST_LINES lines (may have an empty line at the end).
expect(lines.length).toBeGreaterThanOrEqual(TEST_LINES)
// Sample some lines to verify they contain 76 'A' characters
// Sample indices at beginning, 1%, 10%, 50%, and end of the output
// Sample some lines to verify they contain 76 'A' characters.
// Sample indices at beginning, 1%, 10%, 50%, and end of the output.
const sampleIndices = [
0,
Math.floor(BASE64_TEST_LINES * 0.01),
Math.floor(BASE64_TEST_LINES * 0.1),
Math.floor(BASE64_TEST_LINES * 0.5),
BASE64_TEST_LINES - 1,
Math.floor(TEST_LINES * 0.01),
Math.floor(TEST_LINES * 0.1),
Math.floor(TEST_LINES * 0.5),
TEST_LINES - 1,
].filter((i) => i < lines.length)
for (const index of sampleIndices) {
expect(lines[index]).toBe("A".repeat(76))
}