Search in sources :

Example 6 with Frame

use of com.rabbitmq.client.impl.Frame in project rabbitmq-java-client by rabbitmq.

the class FrameBuilderTest method buildFrameInSeveralCalls.

@Test
public void buildFrameInSeveralCalls() throws IOException {
    buffer = ByteBuffer.wrap(new byte[] { 1, 0, 0, 0, 0, 0, 3, 1, 2 });
    builder = new FrameBuilder(channel, buffer);
    Frame frame = builder.readFrame();
    assertThat(frame).isNull();
    buffer.clear();
    buffer.put(b(3)).put(end());
    buffer.flip();
    frame = builder.readFrame();
    assertThat(frame).isNotNull();
    assertThat(frame.getType()).isEqualTo(1);
    assertThat(frame.getChannel()).isEqualTo(0);
    assertThat(frame.getPayload()).hasSize(3);
}
Also used : Frame(com.rabbitmq.client.impl.Frame) FrameBuilder(com.rabbitmq.client.impl.nio.FrameBuilder) Test(org.junit.Test)

Example 7 with Frame

use of com.rabbitmq.client.impl.Frame in project rabbitmq-java-client by rabbitmq.

the class FrameMax method rejectHeadersExceedingFrameMax.

/* client should throw exception if headers exceed negotiated
     * frame size */
@Test
public void rejectHeadersExceedingFrameMax() throws IOException, TimeoutException {
    declareTransientTopicExchange("x");
    String queueName = channel.queueDeclare().getQueue();
    channel.queueBind(queueName, "x", "foobar");
    Map<String, Object> headers = new HashMap<String, Object>();
    String headerName = "x-huge-header";
    // create headers with zero-length value to calculate maximum header value size before exceeding frame_max
    headers.put(headerName, LongStringHelper.asLongString(new byte[0]));
    AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder().headers(headers).build();
    Frame minimalHeaderFrame = properties.toFrame(0, 0);
    int maxHeaderValueSize = FRAME_MAX - minimalHeaderFrame.size();
    // create headers with maximum header value size (frame size equals frame_max)
    headers.put(headerName, LongStringHelper.asLongString(new byte[maxHeaderValueSize]));
    properties = new AMQP.BasicProperties.Builder().headers(headers).build();
    basicPublishVolatile(new byte[100], "x", "foobar", properties);
    assertDelivered(queueName, 1);
    // create headers with frame size exceeding frame_max by 1
    headers.put(headerName, LongStringHelper.asLongString(new byte[maxHeaderValueSize + 1]));
    properties = new AMQP.BasicProperties.Builder().headers(headers).build();
    try {
        basicPublishVolatile(new byte[100], "x", "foobar", properties);
        fail("expected rejectHeadersExceedingFrameMax to throw");
    } catch (IllegalArgumentException iae) {
        assertTrue(iae.getMessage().startsWith("Content headers exceeded max frame size"));
        // check that the channel is still operational
        assertDelivered(queueName, 0);
    }
    // cleanup
    deleteExchange("x");
}
Also used : Frame(com.rabbitmq.client.impl.Frame) HashMap(java.util.HashMap) AMQP(com.rabbitmq.client.AMQP) AMQBasicProperties(com.rabbitmq.client.impl.AMQBasicProperties) Test(org.junit.Test)

Example 8 with Frame

use of com.rabbitmq.client.impl.Frame in project rabbitmq-java-client by rabbitmq.

the class BrokenFramesTest method methodThenBody.

@Test
public void methodThenBody() throws Exception {
    List<Frame> frames = new ArrayList<Frame>();
    byte[] contentBody = new byte[10];
    int channelNumber = 0;
    Publish method = new Publish(1, "test", "test", false, false);
    frames.add(method.toFrame(0));
    frames.add(Frame.fromBodyFragment(channelNumber, contentBody, 0, contentBody.length));
    myFrameHandler.setFrames(frames.iterator());
    try {
        new AMQConnection(factory.params(Executors.newFixedThreadPool(1)), myFrameHandler).start();
    } catch (IOException e) {
        UnexpectedFrameError unexpectedFrameError = findUnexpectedFrameError(e);
        assertNotNull(unexpectedFrameError);
        assertEquals(AMQP.FRAME_BODY, unexpectedFrameError.getReceivedFrame().getType());
        assertEquals(AMQP.FRAME_HEADER, unexpectedFrameError.getExpectedFrameType());
        return;
    }
    fail("No UnexpectedFrameError thrown");
}
Also used : Frame(com.rabbitmq.client.impl.Frame) AMQConnection(com.rabbitmq.client.impl.AMQConnection) ArrayList(java.util.ArrayList) UnexpectedFrameError(com.rabbitmq.client.UnexpectedFrameError) IOException(java.io.IOException) Publish(com.rabbitmq.client.impl.AMQImpl.Basic.Publish) Test(org.junit.Test)

Example 9 with Frame

use of com.rabbitmq.client.impl.Frame in project rabbitmq-java-client by rabbitmq.

the class BrokenFramesTest method noMethod.

@Test
public void noMethod() throws Exception {
    List<Frame> frames = new ArrayList<Frame>();
    frames.add(new Frame(AMQP.FRAME_HEADER, 0));
    myFrameHandler.setFrames(frames.iterator());
    try {
        new AMQConnection(factory.params(Executors.newFixedThreadPool(1)), myFrameHandler).start();
    } catch (IOException e) {
        UnexpectedFrameError unexpectedFrameError = findUnexpectedFrameError(e);
        assertNotNull(unexpectedFrameError);
        assertEquals(AMQP.FRAME_HEADER, unexpectedFrameError.getReceivedFrame().getType());
        assertEquals(AMQP.FRAME_METHOD, unexpectedFrameError.getExpectedFrameType());
        return;
    }
    fail("No UnexpectedFrameError thrown");
}
Also used : Frame(com.rabbitmq.client.impl.Frame) AMQConnection(com.rabbitmq.client.impl.AMQConnection) ArrayList(java.util.ArrayList) UnexpectedFrameError(com.rabbitmq.client.UnexpectedFrameError) IOException(java.io.IOException) Test(org.junit.Test)

Aggregations

Frame (com.rabbitmq.client.impl.Frame)9 Test (org.junit.Test)8 ArrayList (java.util.ArrayList)4 FrameBuilder (com.rabbitmq.client.impl.nio.FrameBuilder)3 DataOutputStream (java.io.DataOutputStream)3 IOException (java.io.IOException)3 ByteBuffer (java.nio.ByteBuffer)3 UnexpectedFrameError (com.rabbitmq.client.UnexpectedFrameError)2 AMQConnection (com.rabbitmq.client.impl.AMQConnection)2 ByteBufferOutputStream (com.rabbitmq.client.impl.nio.ByteBufferOutputStream)2 AMQP (com.rabbitmq.client.AMQP)1 AMQBasicProperties (com.rabbitmq.client.impl.AMQBasicProperties)1 Publish (com.rabbitmq.client.impl.AMQImpl.Basic.Publish)1 SelectionKey (java.nio.channels.SelectionKey)1 Selector (java.nio.channels.Selector)1 HashMap (java.util.HashMap)1 Random (java.util.Random)1