private ByteBuffer verifyDataPassing(TCPChannel svrChan) throws Exception { ByteBuffer b = ByteBuffer.allocate(10); helper.putString(b, "de"); helper.doneFillingBuffer(b); int expectedWrote = b.remaining(); log.fine("***********************************************"); int actualWrite = client1.oldWrite(b); assertEquals(expectedWrote, actualWrite); CalledMethod m = mockServer.expect(MockNIOServer.INCOMING_DATA); TCPChannel actualChannel = (TCPChannel) m.getAllParams()[0]; Class c = Class.forName(getChannelImplName()); assertEquals("should be correct type of channel", c, actualChannel.getClass()); ByteBuffer actualBuf = (ByteBuffer) m.getAllParams()[1]; String result = helper.readString(actualBuf, actualBuf.remaining()); assertEquals("de", result); b.rewind(); svrChan.oldWrite(b); m = mockHandler.expect(MockDataHandler.INCOMING_DATA); actualBuf = (ByteBuffer) m.getAllParams()[1]; result = helper.readString(actualBuf, actualBuf.remaining()); assertEquals("de", result); return b; }
public void testUnregisterReregisterForReads() throws Exception { Class c = Class.forName(getChannelImplName()); client1.bind(loopBackAnyPort); client1.oldConnect(svrAddr); TCPChannel svrChan = ZNioFailureSuperclass.expectServerChannel(mockServer, c); client1.registerForReads((DataListener) mockHandler); ByteBuffer b = verifyDataPassing(svrChan); client1.unregisterForReads(); b.rewind(); svrChan.oldWrite(b); Thread.sleep(5000); mockHandler.expect(MockObject.NONE); client1.registerForReads((DataListener) mockHandler); CalledMethod m = mockHandler.expect(MockNIOServer.INCOMING_DATA); ByteBuffer actualBuf = (ByteBuffer) m.getAllParams()[1]; String result = helper.readString(actualBuf, actualBuf.remaining()); assertEquals("de", result); verifyTearDown(); }
public void testRunInMiddleOfPacket() throws Exception { log.fine("B*******************************************"); clientEngine.beginHandshake(); CalledMethod m = clientList.expect("packetEncrypted"); ByteBuffer b = (ByteBuffer) m.getAllParams()[0]; serverEngine.feedEncryptedPacket(b, null); m = serverList.expect("runTask"); Runnable r = (Runnable) m.getAllParams()[0]; r.run(); m = serverList.expect("packetEncrypted"); b = (ByteBuffer) m.getAllParams()[0]; clientEngine.feedEncryptedPacket(b, null); m = clientList.expect("runTask"); r = (Runnable) m.getAllParams()[0]; r.run(); String[] methodNames = new String[3]; methodNames[0] = "packetEncrypted"; methodNames[1] = "packetEncrypted"; methodNames[2] = "packetEncrypted"; CalledMethod[] methods = clientList.expect(methodNames); ByteBuffer b0 = (ByteBuffer) methods[0].getAllParams()[0]; ByteBuffer b1 = (ByteBuffer) methods[1].getAllParams()[0]; ByteBuffer b2 = (ByteBuffer) methods[2].getAllParams()[0]; serverEngine.feedEncryptedPacket(b0, null); m = serverList.expect("runTask"); r = (Runnable) m.getAllParams()[0]; int total = b1.remaining() + b2.remaining(); ByteBuffer combined = ByteBuffer.allocate(total); int lim = b1.limit(); b1.limit(3); // we only want to put part of b1 in payload combined.put(b1); helper.doneFillingBuffer(combined); serverEngine.feedEncryptedPacket(combined, null); // run the task after some of the previous packet fed, then feed rest of packet r.run(); combined.clear(); b1.limit(lim); combined.put(b1); combined.put(b2); helper.doneFillingBuffer(combined); serverEngine.feedEncryptedPacket(combined, null); String[] methodNames1 = new String[3]; methodNames1[0] = "packetEncrypted"; methodNames1[1] = "packetEncrypted"; methodNames1[2] = "encryptedLinkEstablished"; CalledMethod[] methods1 = serverList.expect(methodNames1); b0 = (ByteBuffer) methods1[0].getAllParams()[0]; clientEngine.feedEncryptedPacket(b0, null); b1 = (ByteBuffer) methods1[1].getAllParams()[0]; clientEngine.feedEncryptedPacket(b1, null); clientList.expect("encryptedLinkEstablished"); }
public void testOneAndHalfPackets() throws Exception { clientEngine.beginHandshake(); CalledMethod m = clientList.expect("packetEncrypted"); ByteBuffer b = (ByteBuffer) m.getAllParams()[0]; serverEngine.feedEncryptedPacket(b, null); m = serverList.expect("runTask"); Runnable r = (Runnable) m.getAllParams()[0]; r.run(); m = serverList.expect("packetEncrypted"); b = (ByteBuffer) m.getAllParams()[0]; clientEngine.feedEncryptedPacket(b, null); m = clientList.expect("runTask"); r = (Runnable) m.getAllParams()[0]; r.run(); String[] methodNames = new String[3]; methodNames[0] = "packetEncrypted"; methodNames[1] = "packetEncrypted"; methodNames[2] = "packetEncrypted"; CalledMethod[] methods = clientList.expect(methodNames); ByteBuffer b0 = (ByteBuffer) methods[0].getAllParams()[0]; ByteBuffer b1 = (ByteBuffer) methods[1].getAllParams()[0]; ByteBuffer b2 = (ByteBuffer) methods[2].getAllParams()[0]; int total = b0.remaining() + b1.remaining() + b2.remaining(); ByteBuffer combined = ByteBuffer.allocate(total); combined.put(b0); int lim = b1.limit(); b1.limit(3); // we only want to put part of b1 in payload combined.put(b1); helper.doneFillingBuffer(combined); serverEngine.feedEncryptedPacket(combined, null); combined.clear(); b1.limit(lim); combined.put(b1); combined.put(b2); helper.doneFillingBuffer(combined); serverEngine.feedEncryptedPacket(combined, null); m = serverList.expect("runTask"); r = (Runnable) m.getAllParams()[0]; r.run(); methodNames = new String[3]; methodNames[0] = "packetEncrypted"; methodNames[1] = "packetEncrypted"; methodNames[2] = "encryptedLinkEstablished"; methods = serverList.expect(methodNames); b0 = (ByteBuffer) methods[0].getAllParams()[0]; b1 = (ByteBuffer) methods[1].getAllParams()[0]; total = b0.remaining() + b1.remaining(); combined = ByteBuffer.allocate(total); combined.put(b0); combined.put(b1); helper.doneFillingBuffer(combined); clientEngine.feedEncryptedPacket(combined, null); clientList.expect("encryptedLinkEstablished"); }