mq(kafka): implement ApiVersions protocol handler with manual binary encoding and comprehensive unit tests

This commit is contained in:
chrislu committed 2025-09-10 11:21:52 -07:00
1 parent 8c74de6f6e
commit 7c4a5f546c
6 files changed
+370 -83

No files matched your search

+37 -39
View File
@@ -1,50 +1,48 @@
package kafka
import (
"net"
"testing"
"time"
"net"
"testing"
"time"
"github.com/seaweedfs/seaweedfs/weed/mq/kafka/gateway"
"github.com/seaweedfs/seaweedfs/weed/mq/kafka/gateway"
)
func TestGateway_StartAcceptsConnections(t *testing.T) {
srv := gateway.NewServer(gateway.Options{Listen: ":0"})
if err := srv.Start(); err != nil {
t.Fatalf("start gateway: %v", err)
}
addr := srv.Addr()
if addr == "" {
t.Fatalf("server Addr() empty")
}
conn, err := net.DialTimeout("tcp", addr, 2*time.Second)
if err != nil {
t.Fatalf("dial gateway: %v", err)
}
_ = conn.Close()
if err := srv.Close(); err != nil {
t.Fatalf("close gateway: %v", err)
}
srv := gateway.NewServer(gateway.Options{Listen: ":0"})
if err := srv.Start(); err != nil {
t.Fatalf("start gateway: %v", err)
}
addr := srv.Addr()
if addr == "" {
t.Fatalf("server Addr() empty")
}
conn, err := net.DialTimeout("tcp", addr, 2*time.Second)
if err != nil {
t.Fatalf("dial gateway: %v", err)
}
_ = conn.Close()
if err := srv.Close(); err != nil {
t.Fatalf("close gateway: %v", err)
}
}
func TestGateway_RefusesAfterClose(t *testing.T) {
srv := gateway.NewServer(gateway.Options{Listen: ":0"})
if err := srv.Start(); err != nil {
t.Fatalf("start gateway: %v", err)
}
addr := srv.Addr()
if addr == "" {
t.Fatalf("server Addr() empty")
}
if err := srv.Close(); err != nil {
t.Fatalf("close gateway: %v", err)
}
// give the OS a brief moment to release the port
time.Sleep(50 * time.Millisecond)
_, err := net.DialTimeout("tcp", addr, 300*time.Millisecond)
if err == nil {
t.Fatalf("expected dial to fail after close")
}
srv := gateway.NewServer(gateway.Options{Listen: ":0"})
if err := srv.Start(); err != nil {
t.Fatalf("start gateway: %v", err)
}
addr := srv.Addr()
if addr == "" {
t.Fatalf("server Addr() empty")
}
if err := srv.Close(); err != nil {
t.Fatalf("close gateway: %v", err)
}
// give the OS a brief moment to release the port
time.Sleep(50 * time.Millisecond)
_, err := net.DialTimeout("tcp", addr, 300*time.Millisecond)
if err == nil {
t.Fatalf("expected dial to fail after close")
}
}