github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/swarmkit/protobuf/plugin/raftproxy/test/raftproxy_test.go (about) 1 package test 2 3 import ( 4 "context" 5 "net" 6 "testing" 7 "time" 8 9 "github.com/docker/swarmkit/testutils" 10 "github.com/stretchr/testify/assert" 11 "github.com/stretchr/testify/require" 12 13 "google.golang.org/grpc" 14 "google.golang.org/grpc/codes" 15 ) 16 17 type testRouteGuide struct{} 18 19 func (testRouteGuide) GetFeature(context.Context, *Point) (*Feature, error) { 20 panic("not implemented") 21 } 22 23 func (testRouteGuide) ListFeatures(*Rectangle, RouteGuide_ListFeaturesServer) error { 24 panic("not implemented") 25 } 26 27 func (testRouteGuide) RecordRoute(RouteGuide_RecordRouteServer) error { 28 panic("not implemented") 29 } 30 31 func (testRouteGuide) RouteChat(RouteGuide_RouteChatServer) error { 32 panic("not implemented") 33 } 34 35 type mockCluster struct { 36 conn *grpc.ClientConn 37 } 38 39 func (m *mockCluster) LeaderConn(ctx context.Context) (*grpc.ClientConn, error) { 40 return m.conn, nil 41 } 42 43 func TestSimpleRedirect(t *testing.T) { 44 l, err := net.Listen("tcp", "127.0.0.1:0") 45 require.NoError(t, err) 46 addr := l.Addr().String() 47 conn, err := grpc.Dial(addr, grpc.WithInsecure(), grpc.WithTimeout(5*time.Second)) 48 require.NoError(t, err) 49 defer conn.Close() 50 51 cluster := &mockCluster{conn: conn} 52 53 forwardAsOwnRequest := func(ctx context.Context) (context.Context, error) { return ctx, nil } 54 api := NewRaftProxyRouteGuideServer(testRouteGuide{}, cluster, nil, forwardAsOwnRequest) 55 srv := grpc.NewServer() 56 RegisterRouteGuideServer(srv, api) 57 go srv.Serve(l) 58 defer srv.Stop() 59 60 client := NewRouteGuideClient(conn) 61 _, err = client.GetFeature(context.Background(), &Point{}) 62 assert.NotNil(t, err) 63 assert.Equal(t, codes.ResourceExhausted, testutils.ErrorCode(err)) 64 }