Add test that we handle thread.interrupt() in NioEventLoop (#7917)
Motivation: We added some code to guard against thread.interrupt() in NioEventLoop but did not added a test. Modifications: Add testcase. Result: Verify that we correctly handle interrupt().
This commit is contained in:
parent
f01a590154
commit
cbe9ed8cc1
@ -25,6 +25,7 @@ import io.netty.util.concurrent.Future;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.nio.channels.Selector;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
@ -42,7 +43,7 @@ public class NioEventLoopTest extends AbstractEventLoopTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRebuildSelector() throws Exception {
|
||||
public void testRebuildSelector() {
|
||||
EventLoopGroup group = new NioEventLoopGroup(1);
|
||||
final NioEventLoop loop = (NioEventLoop) group.next();
|
||||
try {
|
||||
@ -107,4 +108,47 @@ public class NioEventLoopTest extends AbstractEventLoopTest {
|
||||
assertTrue(future.cancel(true));
|
||||
group.shutdownGracefully();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testInterruptEventLoopThread() throws Exception {
|
||||
EventLoopGroup group = new NioEventLoopGroup(1);
|
||||
final NioEventLoop loop = (NioEventLoop) group.next();
|
||||
try {
|
||||
Selector selector = loop.unwrappedSelector();
|
||||
assertTrue(selector.isOpen());
|
||||
|
||||
loop.submit(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
// Interrupt the thread which should not end-up in a busy spin and
|
||||
// so the selector should not have been rebuild.
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
}).syncUninterruptibly();
|
||||
|
||||
assertTrue(selector.isOpen());
|
||||
|
||||
final CountDownLatch latch = new CountDownLatch(2);
|
||||
loop.submit(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
latch.countDown();
|
||||
}
|
||||
}).syncUninterruptibly();
|
||||
|
||||
loop.schedule(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
latch.countDown();
|
||||
}
|
||||
}, 2, TimeUnit.SECONDS).syncUninterruptibly();
|
||||
|
||||
latch.await();
|
||||
|
||||
assertSame(selector, loop.unwrappedSelector());
|
||||
assertTrue(selector.isOpen());
|
||||
} finally {
|
||||
group.shutdownGracefully();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user