@@ -193,6 +193,45 @@ describe("startQaLiveLaneGateway", () => {
|
193 | 193 | expect(gatewayStop).toHaveBeenCalledTimes(1); |
194 | 194 | }); |
195 | 195 | |
| 196 | +it("stops the mock server when gateway startup fails", async () => { |
| 197 | +startQaGatewayChild.mockRejectedValueOnce(new Error("gateway failed")); |
| 198 | + |
| 199 | +await expect( |
| 200 | +startQaLiveLaneGateway({ |
| 201 | +repoRoot: "/tmp/openclaw-repo", |
| 202 | +transport: createStubTransport(), |
| 203 | +transportBaseUrl: "http://127.0.0.1:43123", |
| 204 | +providerMode: "mock-openai", |
| 205 | +primaryModel: "mock-openai/gpt-5.5", |
| 206 | +alternateModel: "mock-openai/gpt-5.5-alt", |
| 207 | +controlUiEnabled: false, |
| 208 | +}), |
| 209 | +).rejects.toThrow("gateway failed"); |
| 210 | + |
| 211 | +expect(mockStop).toHaveBeenCalledTimes(1); |
| 212 | +}); |
| 213 | + |
| 214 | +it("reports mock cleanup failures after gateway startup failures", async () => { |
| 215 | +startQaGatewayChild.mockRejectedValueOnce(new Error("gateway failed")); |
| 216 | +mockStop.mockRejectedValueOnce(new Error("mock stuck")); |
| 217 | + |
| 218 | +await expect( |
| 219 | +startQaLiveLaneGateway({ |
| 220 | +repoRoot: "/tmp/openclaw-repo", |
| 221 | +transport: createStubTransport(), |
| 222 | +transportBaseUrl: "http://127.0.0.1:43123", |
| 223 | +providerMode: "mock-openai", |
| 224 | +primaryModel: "mock-openai/gpt-5.5", |
| 225 | +alternateModel: "mock-openai/gpt-5.5-alt", |
| 226 | +controlUiEnabled: false, |
| 227 | +}), |
| 228 | +).rejects.toThrow( |
| 229 | +"failed to start QA live lane gateway:\ngateway startup failed: gateway failed\nmock provider stop failed: mock stuck", |
| 230 | +); |
| 231 | + |
| 232 | +expect(mockStop).toHaveBeenCalledTimes(1); |
| 233 | +}); |
| 234 | + |
196 | 235 | it("still stops the mock server when gateway shutdown fails", async () => { |
197 | 236 | gatewayStop.mockRejectedValueOnce(new Error("gateway down")); |
198 | 237 | const harness = await startQaLiveLaneGateway({ |
|