@Test public void createWithUnknownReason() { DisconnectMessage disconnectMessage = DisconnectMessage.create(DisconnectReason.UNKNOWN); assertThat(disconnectMessage.getReason()).isEqualTo(DisconnectReason.UNKNOWN); assertThat(disconnectMessage.getData().toString()).isEqualToIgnoringCase("0xC180"); } }
@Test public void readFromWithNoReason() { MessageData messageData = new RawMessage(WireMessageCodes.DISCONNECT, BytesValue.fromHexString("0xC180")); DisconnectMessage disconnectMessage = DisconnectMessage.readFrom(messageData); DisconnectReason reason = disconnectMessage.getReason(); assertThat(reason).isEqualTo(DisconnectReason.UNKNOWN); }
@Test public void shouldThrowExceptionWhenAttemptingToSendMessageOnClosedConnection() { connection.disconnect(DisconnectReason.SUBPROTOCOL_TRIGGERED); Assertions.assertThatThrownBy(() -> connection.send(null, HelloMessage.create(peerInfo))) .isInstanceOfAny(PeerNotConnected.class); } }
@Test public void readFromWithWrongMessageType() { MessageData messageData = new RawMessage(WireMessageCodes.PING, BytesValue.fromHexString("0xC103")); assertThatThrownBy(() -> DisconnectMessage.readFrom(messageData)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("Message has code 2 and thus is not a DisconnectMessage"); }
@Test public void shouldThrowFramingExceptionWhenMessageIsNotCompressedButShouldBe() { final HandshakeSecrets secrets = new HandshakeSecrets( BytesValue.fromHexString( "0x75b3ee95adff0c529a05efd7612aa1dbe5057eb9facdde0dfc837ad143da1d43") .extractArray(), BytesValue.fromHexString( "0x030dfd1566f4800c4842c177f7d476b64ae2b99a2aa0ab5600aa2f41a8710575") .extractArray(), BytesValue.fromHexString( "0xc9d3385b1588a5969cba312f8c29bedb4cb9d56ec0cf825436addc1ec644f1d6") .extractArray()); final Framer receivingFramer = new Framer(secrets); final Framer sendingFramer = new Framer(secrets); // Write a disconnect message with compression disabled. final ByteBuf out = Unpooled.buffer(); sendingFramer.frame(DisconnectMessage.create(DisconnectReason.TIMEOUT), out); // Then read it with compression enabled. receivingFramer.enableCompression(); assertThatThrownBy(() -> receivingFramer.deframe(out)).isInstanceOf(FramingException.class); }
@Test public void createWithReason() { DisconnectMessage disconnectMessage = DisconnectMessage.create(DisconnectReason.USELESS_PEER); assertThat(disconnectMessage.getReason()).isEqualTo(DisconnectReason.USELESS_PEER); assertThat(disconnectMessage.getData().toString()).isEqualToIgnoringCase("0xC103"); }
@Test public void readFromWithReason() { MessageData messageData = new RawMessage(WireMessageCodes.DISCONNECT, BytesValue.fromHexString("0xC103")); DisconnectMessage disconnectMessage = DisconnectMessage.readFrom(messageData); DisconnectReason reason = disconnectMessage.getReason(); assertThat(reason).isEqualTo(DisconnectReason.USELESS_PEER); }
@Test public void readFromWithInvalidReason() { String[] invalidReasons = { "0xC10C", "0xC155", // List containing a byte > 128 (negative valued) "0xC281FF", // List containing a multi-byte reason "0xC3820101" }; for (String invalidReason : invalidReasons) { MessageData messageData = new RawMessage(WireMessageCodes.DISCONNECT, BytesValue.fromHexString(invalidReason)); DisconnectMessage disconnectMessage = DisconnectMessage.readFrom(messageData); DisconnectReason reason = disconnectMessage.getReason(); assertThat(reason).isEqualTo(DisconnectReason.UNKNOWN); } }