package grpc

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

	"github.com/go-kratos/kratos/v2/internal/host"
)

func TestServer(t *testing.T) {
	srv := NewServer()
	if endpoint, err := srv.Endpoint(); err != nil || endpoint == "" {
		t.Fatal(endpoint, err)
	}

	time.AfterFunc(time.Second, func() {
		defer srv.Stop()
		testClient(t, srv)
	})
	// start server
	if err := srv.Start(); err != nil {
		t.Fatal(err)
	}
}

func testClient(t *testing.T, srv *Server) {
	port, ok := host.Port(srv.lis)
	if !ok {
		t.Fatalf("extract port error: %v", srv.lis)
	}
	endpoint := fmt.Sprintf("127.0.0.1:%d", port)
	// new a gRPC client
	conn, err := DialInsecure(context.Background(), WithEndpoint(endpoint))
	if err != nil {
		t.Fatal(err)
	}
	conn.Close()
}