func TestClientHostPort(t *testing.T) { ctx, cancel := NewContext(time.Second * 10) defer cancel() s1ch, err := testutils.NewServer(nil) require.NoError(t, err, "testutils.NewServer failed") s2ch, err := testutils.NewServer(nil) require.NoError(t, err, "testutils.NewServer failed") defer s1ch.Close() defer s2ch.Close() s1ch.Peers().Add(s2ch.PeerInfo().HostPort) s2ch.Peers().Add(s1ch.PeerInfo().HostPort) mock1, mock2 := new(mocks.TChanSecondService), new(mocks.TChanSecondService) NewServer(s1ch).Register(gen.NewTChanSecondServiceServer(mock1)) NewServer(s2ch).Register(gen.NewTChanSecondServiceServer(mock2)) // When we call using a normal client, it can only call the other server (only peer). c1 := gen.NewTChanSecondServiceClient(NewClient(s1ch, s2ch.PeerInfo().ServiceName, nil)) mock2.On("Echo", ctxArg(), "call1").Return("call1", nil) res, err := c1.Echo(ctx, "call1") assert.NoError(t, err, "call1 failed") assert.Equal(t, "call1", res) // When we call using a client that specifies host:port, it should call that server. c2 := gen.NewTChanSecondServiceClient(NewClient(s1ch, s1ch.PeerInfo().ServiceName, &ClientOptions{ HostPort: s1ch.PeerInfo().HostPort, })) mock1.On("Echo", ctxArg(), "call2").Return("call2", nil) res, err = c2.Echo(ctx, "call2") assert.NoError(t, err, "call2 failed") assert.Equal(t, "call2", res) }
func TestRequestSubChannel(t *testing.T) { ctx, cancel := NewContext(time.Second) defer cancel() tchan, err := tchannel.NewChannel("svc1", nil) require.NoError(t, err, "server NewChannel failed") require.NoError(t, tchan.ListenAndServe(":0"), "Listen failed") defer tchan.Close() clientCh, err := tchannel.NewChannel("client", nil) require.NoError(t, err, "client NewChannel failed") defer clientCh.Close() clientCh.Peers().Add(tchan.PeerInfo().HostPort) tests := []tchannel.Registrar{tchan, tchan.GetSubChannel("svc2"), tchan.GetSubChannel("svc3")} for _, ch := range tests { mockHandler := new(mocks.TChanSecondService) server := NewServer(ch) server.Register(gen.NewTChanSecondServiceServer(mockHandler)) client := NewClient(clientCh, ch.ServiceName(), nil) secondClient := gen.NewTChanSecondServiceClient(client) echoArg := ch.ServiceName() echoRes := echoArg + "-echo" mockHandler.On("Echo", ctxArg(), echoArg).Return(echoRes, nil) res, err := secondClient.Echo(ctx, echoArg) assert.NoError(t, err, "Echo failed") assert.Equal(t, echoRes, res) } }
func setupServer(h *mocks.TChanSimpleService, sh *mocks.TChanSecondService) (*tchannel.Channel, net.Listener, error) { tchan, err := tchannel.NewChannel("service", nil) if err != nil { return nil, nil, err } listener, err := net.Listen("tcp", ":0") if err != nil { return nil, nil, err } server := NewServer(tchan) server.Register(gen.NewTChanSimpleServiceServer(h)) server.Register(gen.NewTChanSecondServiceServer(sh)) tchan.Serve(listener) return tchan, listener, nil }