public void TestReceivedBytesMessageThrowsMessageNotWriteableExceptionOnWriteBytes()
        {
            byte[] content = Encoding.UTF8.GetBytes("myBytes");

            NmsTestBytesMessageFacade facade       = new NmsTestBytesMessageFacade(content);
            NmsBytesMessage           bytesMessage = new NmsBytesMessage(facade);

            bytesMessage.OnDispatch();
            Assert.Throws <MessageNotWriteableException>(() => bytesMessage.WriteBytes(content));
        }
        public void TestClearBodyOnReceivedBytesMessageMakesMessageWritable()
        {
            byte[] content = Encoding.UTF8.GetBytes("myBytes");
            NmsTestBytesMessageFacade facade = new NmsTestBytesMessageFacade(content);

            NmsBytesMessage bytesMessage = new NmsBytesMessage(facade);

            bytesMessage.OnDispatch();

            Assert.True(bytesMessage.IsReadOnlyBody);
            bytesMessage.ClearBody();
            Assert.False(bytesMessage.IsReadOnlyBody);
        }
        public void TestClearBodyOnReceivedBytesMessageClearsFacadeInputStream()
        {
            byte[] content = Encoding.UTF8.GetBytes("myBytes");
            NmsTestBytesMessageFacade facade = new NmsTestBytesMessageFacade(content);

            NmsBytesMessage bytesMessage = new NmsBytesMessage(facade);

            bytesMessage.OnDispatch();

            Assert.True(facade.BodyLength > 0, "Expected message content but none was present");
            Assert.AreEqual(1, facade.GetDataReader().Read(new byte[1], 0, 1), "Expected data from facade");
            bytesMessage.ClearBody();
            Assert.True(facade.BodyLength == 0, "Expected no message content from facade");
            Assert.AreEqual(0, facade.GetDataReader().Read(new byte[1], 0, 1), "Expected no data from facade, but got some");
        }
        public void TestResetOnNewlyPopulatedBytesMessageResetsMarkerAndMakesReadable()
        {
            byte[] content = Encoding.UTF8.GetBytes("myBytes");
            NmsTestBytesMessageFacade facade = new NmsTestBytesMessageFacade(content);

            NmsBytesMessage bytesMessage = new NmsBytesMessage(facade);

            Assert.False(bytesMessage.IsReadOnlyBody, "Message should be writable");
            bytesMessage.WriteBytes(content);
            bytesMessage.Reset();
            Assert.True(bytesMessage.IsReadOnlyBody, "Message should not be writable");

            // retrieve the bytes, check they match
            byte[] resetBytes = new byte[content.Length];
            bytesMessage.ReadBytes(resetBytes);
            CollectionAssert.AreEqual(content, resetBytes);
        }
        public void TestReadBytesUsingReceivedMessageWithBodyReturnsBytes()
        {
            byte[] content = Encoding.UTF8.GetBytes("myBytes");

            NmsTestBytesMessageFacade facade       = new NmsTestBytesMessageFacade(content);
            NmsBytesMessage           bytesMessage = new NmsBytesMessage(facade);

            bytesMessage.OnDispatch();

            // retrieve the expected bytes, check they match
            byte[] receivedBytes = new byte[content.Length];
            bytesMessage.ReadBytes(receivedBytes);
            CollectionAssert.AreEqual(content, receivedBytes);

            // verify no more bytes remain, i.e EOS
            Assert.AreEqual(0, bytesMessage.ReadBytes(new byte[1]), "Expected input stream to be at end but data was returned");
            Assert.AreEqual(content.Length, bytesMessage.BodyLength);
        }
        public void TestResetOnReceivedBytesMessageResetsMarker()
        {
            byte[] content = Encoding.UTF8.GetBytes("myBytes");
            NmsTestBytesMessageFacade facade = new NmsTestBytesMessageFacade(content);

            NmsBytesMessage bytesMessage = new NmsBytesMessage(facade);

            bytesMessage.OnDispatch();

            // retrieve a few bytes, check they match the first few expected bytes
            byte[] partialBytes = new byte[3];
            bytesMessage.ReadBytes(partialBytes);
            byte[] partialOriginalBytes = content.Take(3).ToArray();
            CollectionAssert.AreEqual(partialOriginalBytes, partialBytes);

            bytesMessage.Reset();

            // retrieve all the expected bytes, check they match
            byte[] resetBytes = new byte[content.Length];
            bytesMessage.ReadBytes(resetBytes);
            CollectionAssert.AreEqual(content, resetBytes);
        }
        public void TestGetBodyLengthOnClearedReceivedMessageThrowsMessageNotReadableException()
        {
            byte[] content = Encoding.UTF8.GetBytes("myBytes");
            NmsTestBytesMessageFacade facade = new NmsTestBytesMessageFacade(content);

            NmsBytesMessage bytesMessage = new NmsBytesMessage(facade);

            bytesMessage.OnDispatch();

            Assert.AreEqual(content.Length, bytesMessage.BodyLength, "Unexpected message length");
            bytesMessage.ClearBody();

            try
            {
                long bodyLength = bytesMessage.BodyLength;
                Assert.Fail("expected exception to be thrown");
            }
            catch (MessageNotReadableException)
            {
                // expected
            }
        }