func TestRelayIDClash(t *testing.T) { opts := serviceNameOpts("s1").SetRelayOnly() testutils.WithTestServer(t, opts, func(ts *testutils.TestServer) { s1 := ts.Server() s2 := ts.NewServer(serviceNameOpts("s2")) unblock := make(chan struct{}) testutils.RegisterEcho(s1, func() { <-unblock }) testutils.RegisterEcho(s2, nil) var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func() { defer wg.Done() testutils.AssertEcho(t, s2, ts.HostPort(), s1.ServiceName()) }() } for i := 0; i < 5; i++ { testutils.AssertEcho(t, s1, ts.HostPort(), s2.ServiceName()) } close(unblock) wg.Wait() }) }
func TestRelayHandleLocalCall(t *testing.T) { opts := testutils.NewOpts().SetRelayOnly(). SetRelayLocal("relay", "tchannel", "test"). // We make a call to "test" for an unknown method. AddLogFilter("Couldn't find handler.", 1) testutils.WithTestServer(t, opts, func(ts *testutils.TestServer) { s2 := ts.NewServer(serviceNameOpts("s2")) testutils.RegisterEcho(s2, nil) client := ts.NewClient(nil) testutils.AssertEcho(t, client, ts.HostPort(), "s2") testutils.RegisterEcho(ts.Relay(), nil) testutils.AssertEcho(t, client, ts.HostPort(), "relay") // Sould get a bad request for "test" since the channel does not handle it. err := testutils.CallEcho(client, ts.HostPort(), "test", nil) assert.Equal(t, ErrCodeBadRequest, GetSystemErrorCode(err), "Expected BadRequest for test") // But an unknown service causes declined err = testutils.CallEcho(client, ts.HostPort(), "unknown", nil) assert.Equal(t, ErrCodeDeclined, GetSystemErrorCode(err), "Expected Declined for unknown") }) }
func TestRelayConnectionCloseDrainsRelayItems(t *testing.T) { opts := serviceNameOpts("s1").SetRelayOnly() testutils.WithTestServer(t, opts, func(ts *testutils.TestServer) { ctx, cancel := NewContext(time.Second) defer cancel() s1 := ts.Server() s2 := ts.NewServer(serviceNameOpts("s2")) s2HP := s2.PeerInfo().HostPort testutils.RegisterEcho(s1, func() { // When s1 gets called, it calls Close on the connection from the relay to s2. conn, err := ts.Relay().Peers().GetOrAdd(s2HP).GetConnection(ctx) require.NoError(t, err, "Unexpected failure getting connection between s1 and relay") conn.Close() }) testutils.AssertEcho(t, s2, ts.HostPort(), "s1") calls := relaytest.NewMockStats() calls.Add("s2", "s1", "echo").Succeeded().End() ts.AssertRelayStats(calls) }) }