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