mirror of https://github.com/grpc/grpc-go.git
				
				
				
			xds: Fix TestV2ClientBackoffAfterRecvError (#3815)
The failure seems to have been because of the following: * After the stream failure, and after the backoff, the client tries to register all its existing watches. And there seems to have been a race between the re-register and the client close. Hence a log message was getting printing saying "send failed because of EOF". I've fixed this by making sure that the test waits for the xDS request corresponding to the re-registered watch. I've also tried running it a 1000 times without a failure.
This commit is contained in:
		
							parent
							
								
									9310253e11
								
							
						
					
					
						commit
						6768e33c1f
					
				|  | @ -508,14 +508,14 @@ func newV2Client(p xdsclient.UpdateHandler, cc *grpc.ClientConn, n *basepb.Node, | |||
| 	return c.(*client), nil | ||||
| } | ||||
| 
 | ||||
| // TestV2ClientBackoffAfterRecvError verifies if the v2Client backoffs when it
 | ||||
| // TestV2ClientBackoffAfterRecvError verifies if the v2Client backs off when it
 | ||||
| // encounters a Recv error while receiving an LDS response.
 | ||||
| func (s) TestV2ClientBackoffAfterRecvError(t *testing.T) { | ||||
| 	fakeServer, cc, cleanup := startServerAndGetCC(t) | ||||
| 	defer cleanup() | ||||
| 
 | ||||
| 	// Override the v2Client backoff function with this, so that we can verify
 | ||||
| 	// that a backoff actually was triggerred.
 | ||||
| 	// that a backoff actually was triggered.
 | ||||
| 	boCh := make(chan int, 1) | ||||
| 	clientBackoff := func(v int) time.Duration { | ||||
| 		boCh <- v | ||||
|  | @ -532,7 +532,6 @@ func (s) TestV2ClientBackoffAfterRecvError(t *testing.T) { | |||
| 	defer v2c.Close() | ||||
| 	t.Log("Started xds v2Client...") | ||||
| 
 | ||||
| 	// v2c.watchLDS(goodLDSTarget1, func(u ldsUpdate, err error) {})
 | ||||
| 	v2c.AddWatch(version.V2ListenerURL, goodLDSTarget1) | ||||
| 	if _, err := fakeServer.XDSRequestChan.Receive(); err != nil { | ||||
| 		t.Fatalf("Timeout expired when expecting an LDS request") | ||||
|  | @ -552,6 +551,11 @@ func (s) TestV2ClientBackoffAfterRecvError(t *testing.T) { | |||
| 	case <-callbackCh: | ||||
| 		t.Fatal("Received unexpected LDS callback") | ||||
| 	} | ||||
| 
 | ||||
| 	if _, err := fakeServer.XDSRequestChan.Receive(); err != nil { | ||||
| 		t.Fatalf("Timeout expired when expecting an LDS request") | ||||
| 	} | ||||
| 	t.Log("FakeServer received request after backoff...") | ||||
| } | ||||
| 
 | ||||
| // TestV2ClientRetriesAfterBrokenStream verifies the case where a stream
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue