test: supertest 대상 앱을 127.0.0.1에 열어 다른 프로세스의 포트 가로채기 차단 - #490
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
🧹 knip — dead-code 리포트전체 리포트
|
🩺 NestJS Doctor — 90/100 (Excellent)진단 469건 (error 12).
architecture / security 상위 항목
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Coverage report
Test suite run success3746 tests passing in 356 suites. Report generated by 🧪jest coverage report action from b55c414 |
- role-routes worker의 GET /rest-docs가 간헐 401(기대 404). worker 앱은 이 경로를 항상 404로 끝내고 테스트 env에는 문서 토큰이 없어, 앱 안에서는 401이 나올 수 없음 → 다른 서버의 응답 - supertest는 닫힌 서버를 와일드카드(::)로 열고 127.0.0.1로 요청. macOS는 다른 프로세스가 같은 포트를 127.0.0.1로 따로 바인드하게 두고 요청을 그쪽으로 보냄(실측). 맥미니의 VS Code 헬퍼가 127.0.0.1 임시 포트에서 /rest-docs에 401을 돌려줌 - 사고 순간의 포트 점유는 재현하지 못함, 메커니즘과 401 응답자만 확인 - listenOnLoopback(src/test/http-app.ts): 앱을 127.0.0.1에 먼저 열어 같은 주소·포트를 다른 프로세스가 잡지 못하게(EADDRINUSE), supertest는 열린 주소를 그대로 씀 - getHttpServer()를 쓰는 spec 7개의 app.init()을 교체 - http-app.spec: 와일드카드로 열면 가로채진다(macOS만, 리눅스는 바인드 자체 거부), 헬퍼로 열면 못 가로챈다, 사용처 전수 점검(role-routes를 되돌리면 그 파일을 위반으로 잡음 확인) - 가이드 §9 운영 호스트 보호에 한 줄
- 단언이 서버를 모으기 전에 실패하면 열린 서버가 남아 jest가 끝나지 않고 공용 락을 계속 잡음(첫 버전 실행에서 약 35분) - 서버는 열리는 즉시 모으고 afterEach가 연결까지 닫음 - 반증: 단언을 일부러 실패시켜도 13초 안에 종료(1 failed), 정상 3 passed
bd96e84 to
b55c414
Compare
배경
role-routes.spec의 workerGET /rest-docs가 가끔 기대한 404 대신 401을 받았습니다.원인 (유력, 사고 순간 재현은 못 함)
::)로 열고, 요청은127.0.0.1로 보냅니다.127.0.0.1로 따로 바인드하는 것을 허용하고, 그러면127.0.0.1요청이 그쪽으로 갑니다. 스크립트와 새 spec으로 실측했습니다(리눅스는 그 바인드를 거부합니다).127.0.0.1임시 포트(49208, 50004)를 열고 있고, 둘 다/rest-docs에 401을 돌려줍니다.변경
listenOnLoopback(src/test/http-app.ts)을 추가했습니다. 앱을127.0.0.1에 먼저 열고, supertest는 열린 주소를 그대로 씁니다.127.0.0.1요청을 가져가지 못합니다.getHttpServer()를 쓰는 spec 7개의app.init()을 이 헬퍼로 바꿨습니다.테스트
src/test/http-app.spec.ts를 추가했습니다.127.0.0.1로 잡은 서버에 요청을 빼앗깁니다(macOS에서만 실행, 리눅스 CI는 skip).role-routes의 교체를 되돌리면 그 파일을 위반으로 잡는 것을 확인했습니다.플랜 대조