예제 #1
0
        public void ConcurrentBeginWritesFirstEndWriteFails()
        {
            // GIVEN: a QueuedStream
            var m     = new Mock <Stream>(MockBehavior.Strict);
            var q     = new QueuedStream(m.Object);
            var a     = new MockAsyncResult("A");
            var b     = new MockAsyncResult("B");
            var trace = new StringBuilder();

            m.SetupBeginWrite(a, trace);
            m.SetupEndWrite(a, new ApplicationException("**ERROR**"), trace);
            m.SetupBeginWrite(b, trace);
            m.SetupEndWrite(b, trace);

            // WHEN: i make two concurrent calls to BeginWrite
            // AND : the first concurrent operation fails in EndWrite
            q.BeginWrite(a.Data, 0, a.Data.Length, ar => Assert.Throws <ApplicationException>(() => q.EndWrite(ar)), null);
            q.BeginWrite(b.Data, 0, b.Data.Length, q.EndWrite, null);
            a.Complete(trace);
            b.Complete(trace);

            // THEN: i expect BeginWrite of the underlying stream to be called one after each other
            // AND : and EndWrite of the first operation fails with an exception
            Assert.That(trace.ToString(), Is.EqualTo("BeginWrite(A) Complete(A) EndWrite(**ERROR**)BeginWrite(B) Complete(B) EndWrite(B)"));
            m.VerifyAll();
        }
예제 #2
0
        public void ConcurrentBeginWritesSecondFails()
        {
            // GIVEN: a QueuedStream
            var m     = new Mock <Stream>(MockBehavior.Strict);
            var q     = new QueuedStream(m.Object);
            var a     = new MockAsyncResult("A");
            var b     = new MockAsyncResult("B");
            var c     = new MockAsyncResult("C");
            var trace = new StringBuilder();

            m.SetupBeginWrite(a, trace);
            m.SetupEndWrite(a, trace);
            m.SetupBeginWrite(b, new ApplicationException("**ERROR**"), trace);
            m.SetupBeginWrite(c, trace);
            m.SetupEndWrite(c, trace);

            // WHEN: i make three concurrent calls to BeginWrite
            // AND : the second concurrent operation fails in BeginWrite
            q.BeginWrite(a.Data, 0, a.Data.Length, q.EndWrite, null);
            q.BeginWrite(b.Data, 0, b.Data.Length, ar => {
                var ex = Assert.Throws <ApplicationException>(() => q.EndWrite(ar));
                trace.AppendFormat("EndWrite({0})", ex.Message);
            }, null);
            q.BeginWrite(c.Data, 0, c.Data.Length, q.EndWrite, null);
            a.Complete(trace);
            c.Complete(trace);

            // THEN: i expect BeginWrite of the underlying stream to be called one after each other
            // AND : and EndWrite of the second operation fails with and exception
            Assert.That(trace.ToString(), Is.EqualTo("BeginWrite(A) Complete(A) EndWrite(A)BeginWrite(**ERROR**)EndWrite(**ERROR**)BeginWrite(C) Complete(C) EndWrite(C)"));
            m.VerifyAll();
        }
예제 #3
0
        public void EndWrite()
        {
            var q = new QueuedStream(new MemoryStream());
            var a = new MockAsyncResult("A");

            Assert.Throws <ArgumentException>(() => q.EndWrite(a));
        }
예제 #4
0
        public void Position()
        {
            var m = new Mock <Stream>();
            var q = new QueuedStream(m.Object);

            m.SetupGet(x => x.Position).Returns(1234);

            Assert.That(q.Position, Is.EqualTo(1234));
        }
예제 #5
0
        public void CanSeek(bool expected)
        {
            var m = new Mock <Stream>();
            var q = new QueuedStream(m.Object);

            m.SetupGet(x => x.CanSeek).Returns(expected);

            Assert.That(q.CanSeek, Is.EqualTo(expected));
        }
예제 #6
0
        public void Length()
        {
            var m = new Mock <Stream>();
            var q = new QueuedStream(m.Object);

            m.SetupGet(x => x.Length).Returns(100);

            Assert.That(q.Length, Is.EqualTo(100));
        }
예제 #7
0
        public void Length()
        {
            var m = new Mock<Stream>();
            var q = new QueuedStream(m.Object);

            m.SetupGet(x => x.Length).Returns(100);

            Assert.That(q.Length, Is.EqualTo(100));
        }
예제 #8
0
        public void CanSeek(bool expected)
        {
            var m = new Mock<Stream>();
            var q = new QueuedStream(m.Object);

            m.SetupGet(x => x.CanSeek).Returns(expected);

            Assert.That(q.CanSeek, Is.EqualTo(expected));
        }
예제 #9
0
        public void Position()
        {
            var m = new Mock<Stream>();
            var q = new QueuedStream(m.Object);

            m.SetupGet(x => x.Position).Returns(1234);

            Assert.That(q.Position, Is.EqualTo(1234));
        }
예제 #10
0
        public void Seek()
        {
            var m = new Mock <Stream>();
            var q = new QueuedStream(m.Object);

            m.Setup(x => x.Seek(100L, SeekOrigin.End)).Returns(1800);

            Assert.That(q.Seek(100L, SeekOrigin.End), Is.EqualTo(1800));
        }
예제 #11
0
        public void SetLength()
        {
            var m = new Mock <Stream>();
            var q = new QueuedStream(m.Object);

            q.SetLength(100L);

            m.Verify(x => x.SetLength(100L));
        }
예제 #12
0
        public void Read()
        {
            var m = new Mock <Stream>();
            var q = new QueuedStream(m.Object);
            var b = new byte[] { 0x1, 0x2, 0x3, 0x4 };

            m.Setup(x => x.Read(b, 100, 2000)).Returns(1800);

            Assert.That(q.Read(b, 100, 2000), Is.EqualTo(1800));
        }
예제 #13
0
        public void Read()
        {
            var m = new Mock<Stream>();
            var q = new QueuedStream(m.Object);
            var b = new byte[] { 0x1, 0x2, 0x3, 0x4 };

            m.Setup(x => x.Read(b, 100, 2000)).Returns(1800);

            Assert.That(q.Read(b, 100, 2000), Is.EqualTo(1800));
        }
예제 #14
0
        public void Close()
        {
            var m = new Mock <Stream>();
            var q = new QueuedStream(m.Object);

            m.Setup(x => x.Close());

            q.Close();

            m.VerifyAll();
        }
예제 #15
0
        public void EndRead()
        {
            var m = new Mock <Stream>();
            var q = new QueuedStream(m.Object);
            var a = new MockAsyncResult("A");

            m.Setup(x => x.EndRead(a));

            q.EndRead(a);

            m.VerifyAll();
        }
예제 #16
0
        public void BeginRead()
        {
            var m = new Mock <Stream>();
            var q = new QueuedStream(m.Object);
            var d = new byte[] { 1, 2, 3 };
            var a = new MockAsyncResult("A");

            m.Setup(x => x.BeginRead(d, 0, d.Length, It.IsAny <AsyncCallback>(), null))
            .Returns <byte[], int, int, AsyncCallback, object>((b, o, l, c, s) => a);

            Assert.That(q.BeginRead(d, 0, d.Length, ar => { }, null), Is.EqualTo(a));

            m.VerifyAll();
        }
예제 #17
0
        public void ConcurrentBeginWrites()
        {
            // GIVEN: a QueuedStream
            var m     = new Mock <Stream>();
            var q     = new QueuedStream(m.Object);
            var a     = new MockAsyncResult("A");
            var b     = new MockAsyncResult("B");
            var trace = new StringBuilder();

            m.SetupBeginWrite(a, trace);
            m.SetupEndWrite(a, trace);
            m.SetupBeginWrite(b, trace);
            m.SetupEndWrite(b, trace);

            // WHEN: i make two concurrent calls to BeginWrite
            q.BeginWrite(a.Data, 0, a.Data.Length, q.EndWrite, null);
            q.BeginWrite(b.Data, 0, b.Data.Length, q.EndWrite, null);
            a.Complete(trace);
            b.Complete(trace);

            // THEN: i expect BeginWrite of the underlying stream to be called one after each other
            Assert.That(trace.ToString(), Is.EqualTo("BeginWrite(A) Complete(A) EndWrite(A)BeginWrite(B) Complete(B) EndWrite(B)"));
            m.VerifyAll();
        }
예제 #18
0
        public void Write()
        {
            var q = new QueuedStream(new MemoryStream());

            Assert.Throws<NotSupportedException>(() => q.Write(new byte[] { 1, 2, 3 }, 0, 3));
        }
예제 #19
0
        public void ConcurrentBeginWritesSecondFails()
        {
            // GIVEN: a QueuedStream
            var m = new Mock<Stream>(MockBehavior.Strict);
            var q = new QueuedStream(m.Object);
            var a = new MockAsyncResult("A");
            var b = new MockAsyncResult("B");
            var c = new MockAsyncResult("C");
            var trace = new StringBuilder();

            m.SetupBeginWrite(a, trace);
            m.SetupEndWrite(a, trace);
            m.SetupBeginWrite(b, new ApplicationException("**ERROR**"), trace);
            m.SetupBeginWrite(c, trace);
            m.SetupEndWrite(c, trace);

            // WHEN: i make three concurrent calls to BeginWrite
            // AND : the second concurrent operation fails in BeginWrite
            q.BeginWrite(a.Data, 0, a.Data.Length, q.EndWrite, null);
            q.BeginWrite(b.Data, 0, b.Data.Length, ar =>
            {
                var ex = Assert.Throws<ApplicationException>(() => q.EndWrite(ar));
                trace.AppendFormat("EndWrite({0})", ex.Message);
            }, null);
            q.BeginWrite(c.Data, 0, c.Data.Length, q.EndWrite, null);
            a.Complete(trace);
            c.Complete(trace);

            // THEN: i expect BeginWrite of the underlying stream to be called one after each other
            // AND : and EndWrite of the second operation fails with and exception
            Assert.That(trace.ToString(), Is.EqualTo("BeginWrite(A) Complete(A) EndWrite(A)BeginWrite(**ERROR**)EndWrite(**ERROR**)BeginWrite(C) Complete(C) EndWrite(C)"));
            m.VerifyAll();
        }
예제 #20
0
        public void ConcurrentBeginWritesFirstEndWriteFails()
        {
            // GIVEN: a QueuedStream
            var m = new Mock<Stream>(MockBehavior.Strict);
            var q = new QueuedStream(m.Object);
            var a = new MockAsyncResult("A");
            var b = new MockAsyncResult("B");
            var trace = new StringBuilder();

            m.SetupBeginWrite(a, trace);
            m.SetupEndWrite(a, new ApplicationException("**ERROR**"), trace);
            m.SetupBeginWrite(b, trace);
            m.SetupEndWrite(b, trace);

            // WHEN: i make two concurrent calls to BeginWrite
            // AND : the first concurrent operation fails in EndWrite
            q.BeginWrite(a.Data, 0, a.Data.Length, ar => Assert.Throws<ApplicationException>(() => q.EndWrite(ar)), null);
            q.BeginWrite(b.Data, 0, b.Data.Length, q.EndWrite, null);
            a.Complete(trace);
            b.Complete(trace);

            // THEN: i expect BeginWrite of the underlying stream to be called one after each other
            // AND : and EndWrite of the first operation fails with an exception
            Assert.That(trace.ToString(), Is.EqualTo("BeginWrite(A) Complete(A) EndWrite(**ERROR**)BeginWrite(B) Complete(B) EndWrite(B)"));
            m.VerifyAll();
        }
예제 #21
0
        public void ConcurrentBeginWrites()
        {
            // GIVEN: a QueuedStream
            var m = new Mock<Stream>();
            var q = new QueuedStream(m.Object);
            var a = new MockAsyncResult("A");
            var b = new MockAsyncResult("B");
            var trace = new StringBuilder();

            m.SetupBeginWrite(a, trace);
            m.SetupEndWrite(a, trace);
            m.SetupBeginWrite(b, trace);
            m.SetupEndWrite(b, trace);

            // WHEN: i make two concurrent calls to BeginWrite
            q.BeginWrite(a.Data, 0, a.Data.Length, q.EndWrite, null);
            q.BeginWrite(b.Data, 0, b.Data.Length, q.EndWrite, null);
            a.Complete(trace);
            b.Complete(trace);

            // THEN: i expect BeginWrite of the underlying stream to be called one after each other
            Assert.That(trace.ToString(), Is.EqualTo("BeginWrite(A) Complete(A) EndWrite(A)BeginWrite(B) Complete(B) EndWrite(B)"));
            m.VerifyAll();
        }
예제 #22
0
        public void Close()
        {
            var m = new Mock<Stream>();
            var q = new QueuedStream(m.Object);

            m.Setup(x => x.Close());

            q.Close();

            m.VerifyAll();
        }
예제 #23
0
        public void EndWrite()
        {
            var q = new QueuedStream(new MemoryStream());
            var a = new MockAsyncResult("A");

            Assert.Throws<ArgumentException>(() => q.EndWrite(a));
        }
예제 #24
0
        public void EndRead()
        {
            var m = new Mock<Stream>();
            var q = new QueuedStream(m.Object);
            var a = new MockAsyncResult("A");

            m.Setup(x => x.EndRead(a));

            q.EndRead(a);

            m.VerifyAll();
        }
예제 #25
0
        public void BeginRead()
        {
            var m = new Mock<Stream>();
            var q = new QueuedStream(m.Object);
            var d = new byte[] { 1, 2, 3 };
            var a = new MockAsyncResult("A");

            m.Setup(x => x.BeginRead(d, 0, d.Length, It.IsAny<AsyncCallback>(), null))
                .Returns<byte[], int, int, AsyncCallback, object>((b, o, l, c, s) => a);

            Assert.That(q.BeginRead(d, 0, d.Length, ar => { }, null), Is.EqualTo(a));

            m.VerifyAll();
        }
예제 #26
0
        public void Seek()
        {
            var m = new Mock<Stream>();
            var q = new QueuedStream(m.Object);

            m.Setup(x => x.Seek(100L, SeekOrigin.End)).Returns(1800);

            Assert.That(q.Seek(100L, SeekOrigin.End), Is.EqualTo(1800));
        }
예제 #27
0
        public void SetLength()
        {
            var m = new Mock<Stream>();
            var q = new QueuedStream(m.Object);

            q.SetLength(100L);

            m.Verify(x => x.SetLength(100L));
        }
예제 #28
0
        public void Write()
        {
            var q = new QueuedStream(new MemoryStream());

            Assert.Throws <NotSupportedException>(() => q.Write(new byte[] { 1, 2, 3 }, 0, 3));
        }