public void CorruptHeader_InvalidMessageSize() { MqttHeader inputHeader = new MqttHeader() { Duplicate = true, Retain = false, MessageSize = 268435455, // the max message size, which we will fudge later in the test MessageType = MqttMessageType.Connect, Qos = MqttQos.AtLeastOnce }; MqttHeader outputHeader; using (MemoryStream stream = new MemoryStream()) { inputHeader.WriteTo(268435455, stream); // fudge the header by making the last bit of the 4th message size byte a 1, therefore making the header // invalid because the last bit of the 4th size byte should always be 0 (according to the spec). It's how // we know to stop processing the header when reading a full message). stream.Seek(4, SeekOrigin.Begin); byte existingByte = (byte)stream.ReadByte(); stream.Seek(4, SeekOrigin.Begin); stream.WriteByte((byte)(existingByte | 0xFF)); stream.Seek(0, SeekOrigin.Begin); Assert.Throws <InvalidHeaderException>(() => outputHeader = new MqttHeader(stream)); } }
public void HeaderRoundtrip() { MqttHeader inputHeader = new MqttHeader() { Duplicate = true, Retain = false, MessageSize = 1, MessageType = MqttMessageType.Connect, Qos = MqttQos.AtLeastOnce }; MqttHeader outputHeader; using (MemoryStream stream = new MemoryStream()) { inputHeader.WriteTo(0, stream); // the stream will be chock full-o-bytes, rewind it so we can read it back stream.Seek(0, SeekOrigin.Begin); outputHeader = new MqttHeader(stream); } Assert.Equal <bool>(inputHeader.Duplicate, outputHeader.Duplicate); Assert.Equal <bool>(inputHeader.Retain, outputHeader.Retain); Assert.Equal <MqttQos>(inputHeader.Qos, outputHeader.Qos); Assert.Equal <MqttMessageType>(inputHeader.MessageType, outputHeader.MessageType); }