Files
kmsvc-cli/internal/cli/testserver_test.go
T

70 lines
2.5 KiB
Go

package cli
import (
"context"
"net"
"testing"
kafkamgmtv1 "forgejo.riotpiao.homelab.com/homelab/kmsvc-proto/gen/kafkamgmt/v1"
"google.golang.org/grpc"
)
// fakeQueueService is a minimal QueueServiceServer for exercising CLI
// commands end-to-end over a real (loopback) gRPC connection.
type fakeQueueService struct {
kafkamgmtv1.UnimplementedQueueServiceServer
sendMessage func(context.Context, *kafkamgmtv1.SendMessageRequest) (*kafkamgmtv1.SendMessageResponse, error)
receiveMessage func(context.Context, *kafkamgmtv1.ReceiveMessageRequest) (*kafkamgmtv1.ReceiveMessageResponse, error)
deleteMessage func(context.Context, *kafkamgmtv1.DeleteMessageRequest) (*kafkamgmtv1.DeleteMessageResponse, error)
changeMessageVisibility func(context.Context, *kafkamgmtv1.ChangeMessageVisibilityRequest) (*kafkamgmtv1.ChangeMessageVisibilityResponse, error)
}
func (f *fakeQueueService) SendMessage(ctx context.Context, req *kafkamgmtv1.SendMessageRequest) (*kafkamgmtv1.SendMessageResponse, error) {
if f.sendMessage != nil {
return f.sendMessage(ctx, req)
}
return f.UnimplementedQueueServiceServer.SendMessage(ctx, req)
}
func (f *fakeQueueService) ReceiveMessage(ctx context.Context, req *kafkamgmtv1.ReceiveMessageRequest) (*kafkamgmtv1.ReceiveMessageResponse, error) {
if f.receiveMessage != nil {
return f.receiveMessage(ctx, req)
}
return f.UnimplementedQueueServiceServer.ReceiveMessage(ctx, req)
}
func (f *fakeQueueService) DeleteMessage(ctx context.Context, req *kafkamgmtv1.DeleteMessageRequest) (*kafkamgmtv1.DeleteMessageResponse, error) {
if f.deleteMessage != nil {
return f.deleteMessage(ctx, req)
}
return f.UnimplementedQueueServiceServer.DeleteMessage(ctx, req)
}
func (f *fakeQueueService) ChangeMessageVisibility(ctx context.Context, req *kafkamgmtv1.ChangeMessageVisibilityRequest) (*kafkamgmtv1.ChangeMessageVisibilityResponse, error) {
if f.changeMessageVisibility != nil {
return f.changeMessageVisibility(ctx, req)
}
return f.UnimplementedQueueServiceServer.ChangeMessageVisibility(ctx, req)
}
// startTestServer starts fake on a loopback TCP listener and returns its
// address, registering cleanup with t.
func startTestServer(t *testing.T, fake *fakeQueueService) string {
t.Helper()
lis, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
t.Fatalf("listen: %v", err)
}
srv := grpc.NewServer()
kafkamgmtv1.RegisterQueueServiceServer(srv, fake)
go func() {
_ = srv.Serve(lis)
}()
t.Cleanup(srv.Stop)
return lis.Addr().String()
}