Skip to content

Commit f81fc0b

Browse files
committed
test: add coverage for orphaned channel branch
1 parent ffe4072 commit f81fc0b

1 file changed

Lines changed: 24 additions & 0 deletions

File tree

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

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,30 @@ public boolean isLoggable(LogRecord record) {
140140
}
141141
}
142142

143+
@Test
144+
public void orphanedChannel_triggerWarningAndCoverage() {
145+
ManagedChannel mc = new TestManagedChannel();
146+
final ReferenceQueue<ManagedChannelOrphanWrapper> refqueue = new ReferenceQueue<>();
147+
ConcurrentMap<ManagedChannelReference, ManagedChannelReference> refs =
148+
new ConcurrentHashMap<>();
149+
150+
// Create the wrapper but NEVER call shutdown
151+
ManagedChannelOrphanWrapper wrapper = new ManagedChannelOrphanWrapper(mc, refqueue, refs);
152+
wrapper = null; // Make it eligible for GC
153+
154+
// Trigger GC and clean the queue to hit the !wasShutdown branch
155+
final AtomicInteger numOrphans = new AtomicInteger();
156+
GcFinalization.awaitDone(new FinalizationPredicate() {
157+
@Override
158+
public boolean isDone() {
159+
numOrphans.getAndAdd(ManagedChannelReference.cleanQueue(refqueue));
160+
return numOrphans.get() > 0;
161+
}
162+
});
163+
164+
assertEquals(1, numOrphans.get());
165+
}
166+
143167
@Test
144168
public void refCycleIsGCed() {
145169
ReferenceQueue<ManagedChannelOrphanWrapper> refqueue =

0 commit comments

Comments
 (0)