package broker

import (
	"context"
	"fmt"
	"net"
	"testing"
	"time"

	"github.com/seaweedfs/seaweedfs/weed/pb/mq_pb"
	"google.golang.org/grpc"
	"google.golang.org/grpc/test/bufconn"
)

var lis *bufconn.Listener

func init() {
	lis = bufconn.Listen(1024 * 1024)
	server := grpc.NewServer()
	mq_pb.RegisterSeaweedMessagingServer(server, &MessageQueueBroker{})
	go func() {
		if err := server.Serve(lis); err != nil {
			fmt.Printf("Server exited with error: %v", err)
		}
	}()
}

func bufDialer(string, time.Duration) (net.Conn, error) {
	return lis.Dial()
}

func TestMessageQueueBroker_ListTopics(t *testing.T) {
	conn, err := grpc.DialContext(context.Background(), "bufnet", grpc.WithDialer(bufDialer), grpc.WithInsecure())
	if err != nil {
		t.Fatalf("Failed to dial bufnet: %v", err)
	}
	defer conn.Close()

	client := mq_pb.NewSeaweedMessagingClient(conn)
	request := &mq_pb.ListTopicsRequest{}

	_, err = client.ListTopics(context.Background(), request)
	if err == nil {
		t.Fatalf("Add failed: %v", err)
	}

}