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) {
     }
   }
 }