70 lines
2.5 KiB
Go
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()
|
|
}
|