public void Write_Call_Properly_Checks_The_Constraints_When_Stream_Is_Null(byte[] nullBuff)
        {
            using (var instance = new ByteCountStream())
            {
                //null buff
                var err = Assert.Throws <DdnDfException>(() => instance.Write(nullBuff, 0, 0));
                Assert.NotNull(err);
                Assert.True(err.ErrorCode == DdnDfErrorCode.NullObject);

                // -ve offset
                err = Assert.Throws <DdnDfException>(() => instance.Write(new byte[0], -1, 0));
                Assert.NotNull(err);
                Assert.True(err.ErrorCode == DdnDfErrorCode.ValueLessThanThreshold);

                // -ve count
                err = Assert.Throws <DdnDfException>(() => instance.Write(new byte[0], 0, -1));
                Assert.NotNull(err);
                Assert.True(err.ErrorCode == DdnDfErrorCode.ValueLessThanThreshold);

                // buff length < offset + count
                err = Assert.Throws <DdnDfException>(() => instance.Write(new byte[0], 0, 1));
                Assert.NotNull(err);
                Assert.True(err.ErrorCode == DdnDfErrorCode.ValueLessThanThreshold);

                //this would pass
                instance.Write(new byte[0], 0, 0);
            }
        }
        public void Write_Call_Properly_Estimates_The_Count(int buffSize)
        {
            using (var mem = new MemoryStream())
            {
                using (var instance = new ByteCountStream(mem, true))
                {
                    var buffer = new byte[buffSize];
                    for (var i = 0; i < buffSize; i++)
                    {
                        buffer[i] = 5;
                    }
                    instance.Write(buffer, 0, buffSize);
                    Assert.True(instance.ByteCount == mem.Length);

                    using (var mem1 = new MemoryStream())
                    {
                        instance.ResetWith(mem1, true);
                        buffer = new byte[buffSize];
                        for (var i = 0; i < buffSize; i++)
                        {
                            buffer[i] = 5;
                        }
                        instance.Write(buffer, 0, buffSize);
                        Assert.True(instance.ByteCount == mem.Length);
                    }
                }
            }
        }
        public void Properties_With_Null_Stream_Works_As_Expected()
        {
            var instance = new ByteCountStream();

            using (instance)
            {
                Assert.True(instance.CanRead);
                Assert.True(instance.CanWrite);
                Assert.True(instance.CanSeek);
                Assert.False(instance.CanTimeout);
                Assert.True(instance.InnerStream == Stream.Null);

                Assert.True(instance.Position == 0);
                instance.Position = 10;
                Assert.True(instance.Position == 0);

                Assert.True(instance.Length == 0);
                instance.SetLength(10);
                Assert.True(instance.Length == 0);

                Assert.True(instance.Seek(10, SeekOrigin.Begin) == 0);

                Assert.True(instance.ByteCount == 0);
                instance.Flush();
            }

            //Available after dispose
            Assert.True(instance.ByteCount == 0);
            Assert.Throws <ObjectDisposedException>(() =>
            {
                var _ = instance.CanSeek;
            });
            Assert.Null(instance.InnerStream);
        }
Example #4
0
        internal static Func <Task <PullFuncStream> > ApplyByteCount(this Func <Task <PullFuncStream> > pipe,
                                                                     ByteCountStream bcs)
        {
            return(async() =>
            {
                var data = await pipe().StartIfNeeded().ConfigureAwait(false);

                return data.ApplyByteCount(bcs);
            });
        }
 public void Read_Call_Properly_Estimates_The_Count(int buffSize)
 {
     using (var mem = new MemoryStream(TestValues.BigString.ToBytes()))
     {
         using (var instance = new ByteCountStream(mem, true))
         {
             var buffer = new byte[buffSize];
             var cnt    = instance.Read(buffer, 0, buffSize);
             Assert.True(instance.ByteCount == cnt);
         }
     }
 }
        public void LeaveOpen_Logic_Works_As_Expected(bool leaveOpen)
        {
            var strm = Substitute.For <Stream>();

            using (var _ = new ByteCountStream(strm, leaveOpen))
            {
                //dual dispose must work
                using (_)
                { }
            }
            strm.Received(leaveOpen ? 0 : 1).Dispose();
        }
Example #7
0
        // we keep internal extensions here
        internal static Func <PushFuncStream, Task> ApplyByteCount(this Func <PushFuncStream, Task> pipe,
                                                                   ByteCountStream bcs)
        {
            return(async pfs =>
            {
                bcs.ResetWith(pfs.Writable, pfs.Dispose);
                using (bcs)
                {
                    var t = pfs.Token;
                    await pipe(new PushFuncStream(bcs, false, t)).StartIfNeeded()
                    .ConfigureAwait(false);

                    await bcs.FlushAsync(t).ConfigureAwait(false);
                }
            });
        }
Example #8
0
 internal static PullFuncStream ApplyByteCount(this PullFuncStream data, ByteCountStream bcs)
 {
     bcs.ResetWith(data.Readable, data.Dispose);
     return(new PullFuncStream(bcs, true));
 }
Example #9
0
 internal static Func <PullFuncStream> ApplyByteCount(this Func <PullFuncStream> pipe,
                                                      ByteCountStream bcs)
 {
     return(() => pipe().ApplyByteCount(bcs));
 }