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);
}
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");
}
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");
}
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");
}
Aggregations