feat: initial kmsvc-sdk Go client for kafkamgmt.v1 message-plane API
Client/auth/message-plane methods/long-poll/typed errors, all tested against an in-process bufconn fake. Consumes [email protected] via go get (GOPRIVATE), no submodule or local codegen.
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
package kmsvc
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
kafkamgmtv1 "forgejo.riotpiao.homelab.com/rock/kmsvc-proto/gen/kafkamgmt/v1"
|
||||
)
|
||||
|
||||
func TestReceiveMessageMapsResponse(t *testing.T) {
|
||||
var gotReq *kafkamgmtv1.ReceiveMessageRequest
|
||||
fake := &fakeQueueService{
|
||||
receiveMessage: func(ctx context.Context, req *kafkamgmtv1.ReceiveMessageRequest) (*kafkamgmtv1.ReceiveMessageResponse, error) {
|
||||
gotReq = req
|
||||
return &kafkamgmtv1.ReceiveMessageResponse{
|
||||
Messages: []*kafkamgmtv1.Message{
|
||||
{MessageId: "m1", ReceiptHandle: "rh1", Body: []byte("hi"), ReceiveCount: 1},
|
||||
},
|
||||
}, nil
|
||||
},
|
||||
}
|
||||
client := newTestClient(t, fake)
|
||||
|
||||
msgs, err := client.ReceiveMessage(context.Background(), "q", ReceiveOptions{
|
||||
MaxNumberOfMessages: 5,
|
||||
WaitTimeSeconds: 2,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("ReceiveMessage: %v", err)
|
||||
}
|
||||
if len(msgs) != 1 || msgs[0].MessageID != "m1" || msgs[0].ReceiptHandle != "rh1" {
|
||||
t.Fatalf("unexpected messages: %+v", msgs)
|
||||
}
|
||||
if gotReq.QueueName != "q" || gotReq.MaxNumberOfMessages != 5 || gotReq.WaitTimeSeconds != 2 {
|
||||
t.Errorf("unexpected request: %+v", gotReq)
|
||||
}
|
||||
}
|
||||
|
||||
func TestReceiveMessageRespectsCallerDeadline(t *testing.T) {
|
||||
fake := &fakeQueueService{
|
||||
receiveMessage: func(ctx context.Context, req *kafkamgmtv1.ReceiveMessageRequest) (*kafkamgmtv1.ReceiveMessageResponse, error) {
|
||||
<-ctx.Done()
|
||||
return nil, ctx.Err()
|
||||
},
|
||||
}
|
||||
client := newTestClient(t, fake)
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 200*time.Millisecond)
|
||||
defer cancel()
|
||||
|
||||
start := time.Now()
|
||||
_, err := client.ReceiveMessage(ctx, "q", ReceiveOptions{WaitTimeSeconds: 20})
|
||||
elapsed := time.Since(start)
|
||||
|
||||
if err == nil {
|
||||
t.Fatal("expected error from cancelled context")
|
||||
}
|
||||
if elapsed > 2*time.Second {
|
||||
t.Errorf("ReceiveMessage took %v, want it to respect the caller's 200ms deadline, not the 20s+margin internal one", elapsed)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user