public void testCrazyProtocolHeader() throws IOException { ConnectionFactory factory = new ConnectionFactory(); // keep the frame handler's socket Socket fhSocket = factory.getSocketFactory().createSocket("localhost", AMQP.PROTOCOL.PORT); SocketFrameHandler fh = new SocketFrameHandler(fhSocket); fh.sendHeader(100, 3); // major, minor DataInputStream in = fh.getInputStream(); // we should get a valid protocol header back byte[] header = new byte[4]; in.read(header); // The protocol header is "AMQP" plus a version that the server // supports. We can really only test for the first bit. assertEquals("AMQP", new String(header)); in.read(header); assertEquals(in.available(), 0); // At this point the socket should have been closed. We can // directly test for this, but since Socket.isClosed is purported to be // unreliable, we can also test whether trying to read more bytes // gives an error. if (!fhSocket.isClosed()) { fh.setTimeout(500); // NB the frame handler will return null if the socket times out try { fh.readFrame(); fail("Expected socket read to fail due to socket being closed"); } catch (MalformedFrameException mfe) { fail("Expected nothing, rather than a badly-formed something"); } catch (IOException ioe) { } } }
@Override public void writeFrame(Frame frame) throws IOException { if (confusedOnce) { super.writeFrame(frame); } else { Frame confusedFrame = confuser.confuse(frame); if (confusedFrame != frame) confusedOnce = true; if (confusedFrame != null) { super.writeFrame(confusedFrame); } } }
public void testCorrectProtocolHeader() throws IOException { ConnectionFactory factory = new ConnectionFactory(); SocketFrameHandler fh = new SocketFrameHandler( factory.getSocketFactory().createSocket("localhost", AMQP.PROTOCOL.PORT)); fh.sendHeader(); AMQCommand command = new AMQCommand(); while (!command.handleFrame(fh.readFrame())) {} Method m = command.getMethod(); // System.out.println(m.getClass()); assertTrue("First command must be Connection.start", m instanceof AMQP.Connection.Start); AMQP.Connection.Start start = (AMQP.Connection.Start) m; assertTrue( "Version in Connection.start is <= what we sent", start.getVersionMajor() < AMQP.PROTOCOL.MAJOR || (start.getVersionMajor() == AMQP.PROTOCOL.MAJOR && start.getVersionMinor() <= AMQP.PROTOCOL.MINOR)); }