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) } }