proto-socket/IMPROVEMENT_PLAN_REVIEW_TEST.md
toki 7f8771b89e refactor: implement HeartbeatMixin for heartbeat handling
- Dart: Replace ResponseChecker with HeartbeatMixin
- Dart: Remove heartbeat-related fields from ProtobufClient/Server
- Dart: Add HeartbeatMixin for cleaner heartbeat logic
- Go: Add timeout test in communicator_test.go
- Go: Add heartbeat_test.go with heartbeat functionality tests
- Go: Add TLS test in tls_test.go
- Go: Add message type mismatch tests
- Go: Improve tcp_test.go and ws_test.go with comprehensive tests
- Dart: Add comprehensive socket_test.dart with multiple test scenarios
- Add untracked documentation files
2026-04-11 16:33:40 +09:00

3 KiB

테스트 보강 코드리뷰 후속 작업계획서

개요

IMPROVEMENT_PLAN_TEST.md 기반 테스트 추가 작업에 대한 코드리뷰 결과, 두 가지 후속 수정이 필요하다.


개선 항목

[Review-1] Dart 서버 print() 제거 필수

문제

이전 Dart 개선 작업([Dart-4])에서 라이브러리 코드의 print()를 제거했으나 서버 파일 두 곳이 누락됐다.

// protobuf_server.dart:69
void onDisconnectedClient(ProtobufClient client) {
  _clientList.remove(client);
  client.dispose();
  print('Client disconnected');  // ← 제거 대상
}

// ws_protobuf_server.dart:70
void onDisconnectedClient(WsProtobufClient client) {
  _clientList.remove(client);
  client.dispose();
  print('WS Client disconnected');  // ← 제거 대상
}

파일 상단의 // ignore_for_file: avoid_print suppress 주석도 함께 삭제한다.

수정 파일

  • dart/lib/src/protobuf_server.dart
    • 1행 // ignore_for_file: avoid_print, prefer_final_fields// ignore_for_file: prefer_final_fields
    • print('Client disconnected') 한 줄 제거
  • dart/lib/src/ws_protobuf_server.dart
    • 1행 // ignore_for_file: avoid_print, prefer_final_fields// ignore_for_file: prefer_final_fields
    • print('WS Client disconnected') 한 줄 제거

검증

cd dart && dart analyze && dart test

[Review-2] Go 서버 종료 테스트 — 이중 Stop() 명확화 선택

문제

TestTcpServerStopDisconnectsClientsTestWsServerStopDisconnectsClients에서 server.Stop()이 두 번 호출된다.

defer server.Stop()  // ← defer 등록

// ... 테스트 본문 ...

if err := server.Stop(); err != nil {  // ← 명시적 호출
    t.Fatal(err)
}

테스트 목적상 Stop() 이후 disconnect 콜백이 울리는지를 검증하는 것이 핵심이므로, defer server.Stop()은 불필요하다. 오히려 이중 호출이 Stop() 멱등성에 의존하는 것처럼 읽혀 의도를 흐린다.

해결 방법

defer server.Stop()을 제거한다. 명시적 server.Stop() 호출 이후 서버는 이미 중단 상태이므로 teardown 역할은 필요 없다.

// defer server.Stop()  ← 제거

// ...

if err := server.Stop(); err != nil {
    t.Fatal(err)
}

수정 파일

  • go/test/tcp_test.goTestTcpServerStopDisconnectsClientsdefer server.Stop() 제거
  • go/test/ws_test.goTestWsServerStopDisconnectsClientsdefer server.Stop() 제거

검증

cd go && go test ./test/... -run "TestTcpServerStopDisconnectsClients|TestWsServerStopDisconnectsClients" -v

우선순위

우선순위 항목 이유
1 Review-1 (print 제거) 라이브러리 코드에 로그가 남는 버그. analyze 경고 발생
2 Review-2 (이중 Stop 정리) 기능 문제 아님. 가독성 개선

최종 검증

# Go
cd go && go test ./test/... -v

# Dart
cd dart && dart analyze && dart test