/* * Copyright (c) 2011-2015 The original author or authors * ------------------------------------------------------ * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Apache License v2.0 which accompanies this distribution. * * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html * * The Apache License v2.0 is available at * http://www.opensource.org/licenses/apache2.0.php * * You may elect to redistribute this code under either of these licenses. */ package io.vertx.ext.stomp; import io.vertx.core.buffer.Buffer; import io.vertx.ext.stomp.impl.FrameException; import io.vertx.ext.stomp.impl.FrameParser; import io.vertx.ext.stomp.utils.Headers; import org.junit.Test; import static org.assertj.core.api.Assertions.assertThat; /** * Check the behavior of {@link Frame}. * * @author <a href="http://escoffier.me">Clement Escoffier</a> */ public class FrameTest { private Frame frame; @Test public void testThatPassCodeAreNotInToString() { Frame frame = new Frame(Frame.Command.STOMP, Headers.create("login", "vertx", "passcode", "secret"), null); assertThat(frame.toString()).doesNotContain("secret").contains("********"); } @Test(expected = FrameException.class) public void testThatConnectFrameCannotHaveBody() { new Frame(Frame.Command.CONNECT, Headers.create("host", "foo"), Buffer.buffer("illegal")); } @Test public void testDefaultEncoding() { final String content = "This content contains utf-8 characters: ü ß é ø î"; Frame frame = new Frame(Frame.Command.SEND, Headers.create(), Buffer.buffer(content)); assertThat(frame.getBodyAsString()).isEqualTo(content); } @Test public void testEncoding() { final String content = "\u03B1"; Frame frame = new Frame(Frame.Command.SEND, Headers.create("content-type", "text/plain;charset=utf-16"), Buffer.buffer(content)); assertThat(frame.encoding()).isEqualTo("utf-16"); frame = new Frame(Frame.Command.SEND, Headers.create("content-type", "text/plain;charset=utf-8"), Buffer.buffer(content)); assertThat(frame.encoding()).isEqualTo("utf-8"); } @Test public void testHeaderEncoding() { String value = "test-\r\n :\\-test"; String expected = "test-" + (char) 92 + (char) 114 + (char) 92 + (char) 110 + " " + (char) 92 + (char) 99 + (char) 92 + (char) 92 + "-test"; Frame frame = new Frame(Frame.Command.SEND, Headers.create("header", value), null); assertThat(frame.toBuffer().toString()).contains("header:" + expected + "\n"); } @Test public void testHeaderEncodingOnConnectAndConnectedFrames() { String value = "test-\r\n :\\-test"; String expected = "test-\r\n :" + (char) 92 + (char) 92 + "-test"; Frame frame = new Frame(Frame.Command.CONNECT, Headers.create("header", value), null); assertThat(frame.toBuffer().toString()).contains("header:" + expected + "\n"); frame = new Frame(Frame.Command.CONNECTED, Headers.create("header", value), null); assertThat(frame.toBuffer().toString()).contains("header:" + expected + "\n"); } @Test public void testHeartbeatComputationWith00() { Frame.Heartbeat client = Frame.Heartbeat.parse("0,0"); Frame.Heartbeat server = Frame.Heartbeat.parse("0,0"); assertThat(Frame.Heartbeat.computePingPeriod(client, server)).isEqualTo(0); assertThat(Frame.Heartbeat.computePongPeriod(client, server)).isEqualTo(0); assertThat(Frame.Heartbeat.computePongPeriod(server, client)).isEqualTo(0); assertThat(Frame.Heartbeat.computePingPeriod(server, client)).isEqualTo(0); } @Test public void testHeartbeatComputationWith01() { Frame.Heartbeat client = Frame.Heartbeat.parse("0,1"); Frame.Heartbeat server = Frame.Heartbeat.parse("0,1"); assertThat(Frame.Heartbeat.computePingPeriod(client, server)).isEqualTo(0); assertThat(Frame.Heartbeat.computePongPeriod(client, server)).isEqualTo(0); assertThat(Frame.Heartbeat.computePingPeriod(server, client)).isEqualTo(0); assertThat(Frame.Heartbeat.computePongPeriod(server, client)).isEqualTo(0); } @Test public void testHeartbeatComputationWith10() { Frame.Heartbeat client = Frame.Heartbeat.parse("1,0"); Frame.Heartbeat server = Frame.Heartbeat.parse("1,0"); assertThat(Frame.Heartbeat.computePingPeriod(client, server)).isEqualTo(0); assertThat(Frame.Heartbeat.computePongPeriod(client, server)).isEqualTo(0); assertThat(Frame.Heartbeat.computePingPeriod(server, client)).isEqualTo(0); assertThat(Frame.Heartbeat.computePongPeriod(server, client)).isEqualTo(0); } @Test public void testHeartbeatComputationWith11() { Frame.Heartbeat client = Frame.Heartbeat.parse("1,1"); Frame.Heartbeat server = Frame.Heartbeat.parse("1,1"); assertThat(Frame.Heartbeat.computePingPeriod(client, server)).isEqualTo(1); assertThat(Frame.Heartbeat.computePongPeriod(client, server)).isEqualTo(1); assertThat(Frame.Heartbeat.computePingPeriod(server, client)).isEqualTo(1); assertThat(Frame.Heartbeat.computePongPeriod(server, client)).isEqualTo(1); } @Test public void testHeartbeatComputationNotSymmetric() { Frame.Heartbeat client = Frame.Heartbeat.parse("1,2"); Frame.Heartbeat server = Frame.Heartbeat.parse("3,4"); assertThat(Frame.Heartbeat.computePingPeriod(client, server)).isEqualTo(4); assertThat(Frame.Heartbeat.computePongPeriod(client, server)).isEqualTo(3); assertThat(Frame.Heartbeat.computePingPeriod(server, client)).isEqualTo(3); assertThat(Frame.Heartbeat.computePongPeriod(server, client)).isEqualTo(4); } @Test public void testWithTrailingSpaces() { frame = new Frame(Frame.Command.MESSAGE, Headers.create("foo", "bar"), Buffer.buffer("hello")); assertThat(frame.toBuffer(true).toString()).endsWith(FrameParser.NULL + "\n"); frame = new Frame(Frame.Command.MESSAGE, Headers.create("foo", "bar"), null); assertThat(frame.toBuffer(true).toString()).endsWith(FrameParser.NULL + "\n"); frame = new Frame(Frame.Command.MESSAGE, Headers.create(), null); assertThat(frame.toBuffer(true).toString()).endsWith(FrameParser.NULL + "\n"); } }