- API 서비스 workerclient Hello 함수에 context.Err() 선행 검증 추가 - Hello 요청을 goroutine으로 비동기 처리하고 select로 ctx.Done() 감지 - 이미 초과된 deadline인 경우 즉시 에러 반환 - worker 서비스 config에서 strconv import를 config.go로 이동 - worker socket session handler 및 registerHandlers 테스트 추가 - parser_map 테스트 파일 신규 추가
106 lines
2.6 KiB
Go
106 lines
2.6 KiB
Go
package socket
|
|
|
|
import (
|
|
"context"
|
|
"net"
|
|
"testing"
|
|
"time"
|
|
|
|
altv1 "git.toki-labs.com/toki/alt/packages/contracts/gen/go/alt/v1"
|
|
"git.toki-labs.com/toki/alt/services/worker/internal/config"
|
|
workerContracts "git.toki-labs.com/toki/alt/services/worker/internal/contracts"
|
|
protoSocket "git.toki-labs.com/toki/proto-socket/go"
|
|
)
|
|
|
|
func TestWorkerSocketServerHello(t *testing.T) {
|
|
// Get temporary port
|
|
l, err := net.Listen("tcp", "127.0.0.1:0")
|
|
if err != nil {
|
|
t.Fatalf("failed to listen on temporary port: %v", err)
|
|
}
|
|
port := l.Addr().(*net.TCPAddr).Port
|
|
l.Close()
|
|
|
|
cfg := config.Config{
|
|
Host: "127.0.0.1",
|
|
Port: port,
|
|
SocketPath: "/socket",
|
|
}
|
|
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
|
|
server := NewServer(cfg)
|
|
if err := server.Start(ctx); err != nil {
|
|
t.Fatalf("failed to start worker socket server: %v", err)
|
|
}
|
|
defer server.Stop()
|
|
|
|
// Wait slightly for server setup
|
|
time.Sleep(50 * time.Millisecond)
|
|
|
|
// Dial
|
|
client, err := protoSocket.DialWs(ctx, "127.0.0.1", port, "/socket", workerContracts.ParserMap())
|
|
if err != nil {
|
|
t.Fatalf("failed to dial worker socket server: %v", err)
|
|
}
|
|
defer client.Close()
|
|
|
|
// Send HelloRequest
|
|
req := &altv1.HelloRequest{
|
|
AltProtocolVersion: "alt.v1",
|
|
}
|
|
|
|
res, err := protoSocket.SendRequestTyped[*altv1.HelloRequest, *altv1.HelloResponse](&client.Communicator, req, 2*time.Second)
|
|
if err != nil {
|
|
t.Fatalf("failed to send HelloRequest: %v", err)
|
|
}
|
|
|
|
if res.ServerName != "alt-worker" {
|
|
t.Errorf("expected ServerName to be %q, got %q", "alt-worker", res.ServerName)
|
|
}
|
|
if res.AltProtocolVersion != "alt.v1" {
|
|
t.Errorf("expected AltProtocolVersion to be %q, got %q", "alt.v1", res.AltProtocolVersion)
|
|
}
|
|
}
|
|
|
|
func TestSessionHandlers(t *testing.T) {
|
|
handlers := sessionHandlers()
|
|
|
|
hasHello := false
|
|
seenTypes := make(map[string]bool)
|
|
|
|
for _, h := range handlers {
|
|
if h.requestType == "" {
|
|
t.Error("handler requestType cannot be empty")
|
|
}
|
|
if h.register == nil {
|
|
t.Errorf("handler for %q has nil register function", h.requestType)
|
|
}
|
|
|
|
if seenTypes[h.requestType] {
|
|
t.Errorf("duplicate handler registration for requestType %q", h.requestType)
|
|
}
|
|
seenTypes[h.requestType] = true
|
|
|
|
if h.requestType == "alt.v1.HelloRequest" {
|
|
hasHello = true
|
|
}
|
|
}
|
|
|
|
if !hasHello {
|
|
t.Error("expected alt.v1.HelloRequest to be registered in session handlers")
|
|
}
|
|
}
|
|
|
|
func TestRegisterHandlers(t *testing.T) {
|
|
t.Run("skip nil register", func(t *testing.T) {
|
|
handlers := []sessionHandler{
|
|
{
|
|
requestType: "test.DummyRequest",
|
|
register: nil,
|
|
},
|
|
}
|
|
registerHandlers(nil, handlers)
|
|
})
|
|
}
|