



























11// Qa Lab tests cover docker up plugin behavior.
22import { mkdtemp, readFile, rm } from "node:fs/promises";
3-import { createServer } from "node:net";
43import os from "node:os";
54import path from "node:path";
65import { describe, expect, it, vi } from "vitest";
76import { runQaDockerUp } from "./docker-up.runtime.js";
8798type QaDockerUpDeps = NonNullable<Parameters<typeof runQaDockerUp>[1]>;
10911-async function occupyPortOrAcceptExisting(port: number): Promise<{ close: () => Promise<void> }> {
12-const server = createServer();
13-const listening = await new Promise<boolean>((resolve, reject) => {
14-server.once("error", (error: NodeJS.ErrnoException) => {
15-if (error.code === "EADDRINUSE") {
16-resolve(false);
17-return;
18-}
19-reject(error);
20-});
21-server.listen(port, "127.0.0.1", () => resolve(true));
22-});
23-24-return {
25-close: async () => {
26-if (!listening) {
27-return;
28-}
29-await new Promise<void>((resolve, reject) => {
30-server.close((error) => (error ? reject(error) : resolve()));
31-});
32-},
33-};
34-}
35-3610function createHealthyDockerDeps(calls: string[]): QaDockerUpDeps {
3711return {
3812async runCommand(command, args, cwd) {
@@ -163,7 +137,8 @@ describe("runQaDockerUp", () => {
163137const outputDir = await mkdtemp(path.join(os.tmpdir(), "qa-docker-up-"));
164138const gatewayPort = 18789;
165139const qaLabPort = 43124;
166-const resolveHostPort = vi.fn(async (preferredPort: number) => {
140+const resolveHostPort = vi.fn(async (preferredPort: number, pinned: boolean) => {
141+expect(pinned).toBe(false);
167142if (preferredPort === gatewayPort) {
168143return 28001;
169144}
@@ -172,16 +147,12 @@ describe("runQaDockerUp", () => {
172147}
173148return preferredPort;
174149});
175-const gatewayPortReservation = await occupyPortOrAcceptExisting(18789);
176-const qaLabPortReservation = await occupyPortOrAcceptExisting(43124);
177150178151try {
179152const result = await runQaDockerUp(
180153{
181154repoRoot: "/repo/openclaw",
182155 outputDir,
183- gatewayPort,
184- qaLabPort,
185156skipUiBuild: true,
186157usePrebuiltImage: true,
187158},
@@ -202,9 +173,9 @@ describe("runQaDockerUp", () => {
202173expect(result.qaLabUrl).not.toBe(`http://127.0.0.1:${qaLabPort}`);
203174expect(result.gatewayUrl).toBe("http://127.0.0.1:28001/");
204175expect(result.qaLabUrl).toBe("http://127.0.0.1:28002");
176+expect(resolveHostPort).toHaveBeenCalledWith(gatewayPort, false);
177+expect(resolveHostPort).toHaveBeenCalledWith(qaLabPort, false);
205178} finally {
206-await gatewayPortReservation.close();
207-await qaLabPortReservation.close();
208179await rm(outputDir, { recursive: true, force: true });
209180}
210181});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。