-
Notifications
You must be signed in to change notification settings - Fork 149
Open
Description
After the Vitest migration in #1202, we're skipping a few tests that call proxy.start/proxy.stop due to some kind of race condition that makes them fail depending on execution order.
This is the list of problematic test files/tests:
- All tests in
proxy.test.ts(3) - "proxy express application" tests in
testProxyRoute.test.ts(8)
Running the proxy.test.ts file results in the following error:
Serialized Error: { code: 'EADDRINUSE', errno: -98, syscall: 'listen', address: '::', port: 8000 }
This error originated in "test/testProxyRoute.test.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running.
The latest test that might've caused the error is "should restart and proxy for a new host when project is ADDED". It might mean one of the following:
- The error was thrown, while Vitest was running this test.
- If the error occurred after the test had been completed, this was the last documented test before it was thrown.
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Uncaught Exception ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Error: listen EADDRINUSE: address already in use :::8000
❯ Server.setupListenHandle [as _listen2] node:net:1937:16
❯ listenInCluster node:net:1994:12
❯ Server.listen node:net:2099:7
❯ Proxy.start src/proxy/index.ts:76:8
74| this.httpServer = http
75| .createServer(getServerOptions() as any, this.expressApp)
76| .listen(proxyHttpPort, () => {
| ^
77| console.log(`HTTP Proxy Listening on ${proxyHttpPort}`);
78| });
❯ processTicksAndRejections node:internal/process/task_queues:105:5
❯ src/service/routes/repo.ts:135:9Meanwhile, running all of the files results in varying errors depending on test execution order. When re-running all tests locally, they pass without fail. The first test run always fails in the CI.
Describe the solution you'd like
We should look into these tests and figure out why they might be failing in Vitest since they were working without issues previously. Some things that come to mind:
- Check whether the default
proxy.start/proxy.stopbehaviour isn't being overridden, and internal dependencies too- I have a feeling that some of the
doMockfor the internalhttpServer/httpsServermay be propagating to other tests
- I have a feeling that some of the
- Make sure all tests have proper cleanup functions
- I've tried this for the misbehaving test files, might be good to do a more systematic check to make sure all test files are doing proper cleanup
- Maybe we could write a
testCleanup()util to unify all test cleanup procedures?
Additional context
Vitest migration PR #1202
Metadata
Metadata
Assignees
Labels
No labels