test/java/nio/channels/Selector/ChangingInterests.java

Print this page

        

*** 50,63 **** return "(" + s + ")"; } static void write1(SocketChannel peer) throws IOException { peer.write(ByteBuffer.wrap(new byte[1])); - // give time for other end to be readable - try { - Thread.sleep(50); - } catch (InterruptedException ignore) { } } static void drain(SocketChannel sc) throws IOException { ByteBuffer buf = ByteBuffer.allocate(100); int n; --- 50,59 ----
*** 79,119 **** sel.selectNow(); sel.selectedKeys().clear(); // change to the "to" interest set key.interestOps(to); - System.out.println("select..."); - int selected = sel.selectNow(); - System.out.println("" + selected + " channel(s) selected"); ! int expected = (to == 0) ? 0 : 1; ! assertTrue(selected == expected, "Expected " + expected); // check selected keys ! for (SelectionKey k: sel.selectedKeys()) { assertTrue(k == key, "Unexpected key selected"); ! boolean readable = k.isReadable(); ! boolean writable = k.isWritable(); ! ! System.out.println("key readable: " + readable); ! System.out.println("key writable: " + writable); ! ! if ((to & OP_READ) == 0) { ! assertTrue(!readable, "Not expected to be readable"); ! } else { ! assertTrue(readable, "Expected to be readable"); ! } ! ! if ((to & OP_WRITE) == 0) { ! assertTrue(!writable, "Not expected to be writable"); ! } else { ! assertTrue(writable, "Expected to be writable"); } sel.selectedKeys().clear(); } } /** * Tests that given Selector's select method blocks. */ --- 75,143 ---- sel.selectNow(); sel.selectedKeys().clear(); // change to the "to" interest set key.interestOps(to); ! int readCounter = ((to & OP_READ) == 0) ? 0 : 1; ! int writeCounter = ((to & OP_WRITE) == 0) ? 0 : 1; ! System.out.printf("Expected number of readable events %d, writable events %d\n", ! readCounter, writeCounter); ! ! long start = System.currentTimeMillis(); ! ! while ((readCounter > 0 || writeCounter > 0) ! && System.currentTimeMillis() - start < 10000) { ! System.out.println("\ttry selection"); ! try { ! Thread.sleep(1000); ! } catch (InterruptedException ignore) {} ! ! sel.selectNow(); // check selected keys ! for (SelectionKey k : sel.selectedKeys()) { assertTrue(k == key, "Unexpected key selected"); ! if (k.isReadable()) { ! readCounter--; ! } ! if (k.isWritable()) { ! writeCounter--; ! } ! } } + verifyEvents(to, readCounter, writeCounter); sel.selectedKeys().clear(); } + + /** + * Verify actual arrived events with current interest configuration + */ + static void verifyEvents(int op, int readCounter, int writeCounter) { + System.out.printf("Verify : %s <-> readCounter %d writeCounter %d\n", + toOpsString(op), readCounter, writeCounter); + switch (op) { + case 0 : + assertTrue(readCounter == 0 && writeCounter == 0, + "Expecting no event"); + break; + case OP_READ : + assertTrue(readCounter == 0, "Expecting only read event"); + break; + case OP_WRITE : + assertTrue(writeCounter == 0, "Expecting only write event"); + break; + case OP_READ | OP_WRITE : + assertTrue(readCounter == 0 && writeCounter <= 0, + "Expecting read and write events"); + break; + default: + assertTrue(false, "Wrong interest setting"); + break; + } } /** * Tests that given Selector's select method blocks. */