package grpc

import (
	"context"
	"reflect"
	"testing"

	"github.com/go-kratos/kratos/v2/selector"
	"google.golang.org/grpc/metadata"
)

func TestTrailer(t *testing.T) {
	trailer := Trailer(metadata.New(map[string]string{"a": "b"}))
	if !reflect.DeepEqual("b", trailer.Get("a")) {
		t.Errorf("expect %v, got %v", "b", trailer.Get("a"))
	}
	if !reflect.DeepEqual("", trailer.Get("notfound")) {
		t.Errorf("expect %v, got %v", "", trailer.Get("notfound"))
	}
}

func TestBalancerName(t *testing.T) {
	o := &clientOptions{}

	WithBalancerName("p2c")(o)
	if !reflect.DeepEqual("p2c", o.balancerName) {
		t.Errorf("expect %v, got %v", "p2c", o.balancerName)
	}
}

func TestFilters(t *testing.T) {
	o := &clientOptions{}

	WithFilter(func(_ context.Context, nodes []selector.Node) []selector.Node {
		return nodes
	})(o)
	if !reflect.DeepEqual(1, len(o.filters)) {
		t.Errorf("expect %v, got %v", 1, len(o.filters))
	}
}