Skip to content

Commit 71ed338

Browse files
committed
Testcase to repro issue.
1 parent 7cb8b68 commit 71ed338

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

core/src/test/java/io/grpc/internal/PickFirstLeafLoadBalancerTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,11 +402,23 @@ public void pickAfterResolvedAndChanged() {
402402
Lists.newArrayList(new EquivalentAddressGroup(socketAddr2));
403403

404404
// accept resolved addresses which starts connection attempt to first address
405+
InOrder inOrder = inOrder(mockHelper, mockSubchannel1);
405406
loadBalancer.acceptResolvedAddresses(
406407
ResolvedAddresses.newBuilder().setAddresses(oldServers).setAttributes(affinity).build());
407408
verify(mockHelper).updateBalancingState(eq(CONNECTING), pickerCaptor.capture());
409+
verify(mockHelper).createSubchannel(createArgsCaptor.capture());
410+
inOrder.verify(mockSubchannel1).start(stateListenerCaptor.capture());
411+
SubchannelStateListener stateListener = stateListenerCaptor.getValue();
408412
assertNull(pickerCaptor.getValue().pickSubchannel(mockArgs).getSubchannel());
413+
stateListener.onSubchannelState(ConnectivityStateInfo.forNonError(READY));
414+
415+
// Connection breaks
416+
stateListener.onSubchannelState(ConnectivityStateInfo.forNonError(IDLE));
417+
inOrder.verify(mockHelper).refreshNameResolution();
418+
inOrder.verify(mockHelper).updateBalancingState(eq(IDLE), pickerCaptor.capture());
419+
assertEquals(Status.OK, pickerCaptor.getValue().pickSubchannel(mockArgs).getStatus());
409420

421+
// Re-resolution result from NR
410422
// updating the subchannel addresses is unnecessary, but doesn't hurt anything
411423
loadBalancer.acceptResolvedAddresses(
412424
ResolvedAddresses.newBuilder().setAddresses(newServers).setAttributes(affinity).build());

0 commit comments

Comments
 (0)