public void TestLength()
 {
     using (Stream s = new ClampedStream(new MemoryStream(SequencedBytes(20), false), 2, 10))
         Assert.AreEqual(10, s.Length);
     using (Stream s = new ClampedStream(new MemoryStream(SequencedBytes(10), false), 2, 10))
         Assert.AreEqual(8, s.Length);
     using (Stream s = new ClampedStream(new MemoryStream(SequencedBytes(10), false), 2, 0))
         Assert.AreEqual(0, s.Length);
     using (Stream s = new ClampedStream(new MemoryStream(SequencedBytes(10), false), 12, 10))
         Assert.AreEqual(0, s.Length);
 }
        public void TestClampedFlush()
        {
            MemoryStream ms = new MemoryStream();
            BufferedStream bs = new BufferedStream(ms, 1024);

            using (Stream s = new ClampedStream(bs, 0, long.MaxValue, false))
            {
                s.WriteByte(1);
                Assert.AreEqual(0, ms.Position);
                s.Flush();
                Assert.AreEqual(1, ms.Position);
                ms.Position = 0;
                Assert.AreEqual(1, ms.ReadByte());
            }
        }
 public void TestClampedCanI()
 {
     MemoryStream ms = new MemoryStream();
     using (ClampedStream stream = new ClampedStream(ms, 0, long.MaxValue))
     {
         Assert.IsTrue(stream.CanRead);
         Assert.IsTrue(stream.CanWrite);
         Assert.IsTrue(stream.CanSeek);
         stream.Dispose();
         Assert.IsFalse(stream.CanRead);
         Assert.IsFalse(stream.CanWrite);
         Assert.IsFalse(stream.CanSeek);
     }
     ms = new MemoryStream(new byte[10], false);
     using (ClampedStream stream = new ClampedStream(ms, 3, 5))
     {
         Assert.IsTrue(stream.CanRead);
         Assert.IsFalse(stream.CanWrite);
         Assert.IsTrue(stream.CanSeek);
     }
 }
示例#4
0
        public IContentResponse Get(string method, string rawUrl, NameValueCollection headers, Stream inputStream)
        {
            long length;
            using (new MutexLock(2000, _lockName))
            {
                using (Stream output = new FileStream(_filename, FileMode.OpenOrCreate, FileAccess.Read, FileShare.Read))
                    length = output.Length;
            }
            using (Stream rawinput = new FileStream(_filename, FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite))
            {
                long position = 0;
                Match m = Regex.Match(headers["If-None-Match"] ?? String.Empty, "^\"position:(?<position>\\d+)\"$");
                if (m.Success)
                    position = Math.Min(Math.Max(0, long.Parse(m.Groups["position"].Value)), length);

                using (Stream input = new ClampedStream(rawinput, position, Math.Max(0, length - position)))
                {
                    PingbackRecord rec = PingbackRecord.ParseFrom(input);
                    return new DynamicResponse("application/vnd.google.protobuf", rec.ToByteArray())
                               {
                                   ETag = String.Format("position:{0}", length),
                                   LastModified = rec.RecordsCount > 0
                                                      ? rec.RecordsList[rec.RecordsCount - 1].When
                                                      : DateTime.Now,
                               };
                }
            }
        }
        public void TestPosition()
        {
            using (Stream s = new ClampedStream(new MemoryStream(SequencedBytes(20), false), 2, 10))
            {
                Assert.AreEqual(0, s.Position);
                Assert.AreEqual(2, s.ReadByte());
                s.Position = 0;
                Assert.AreEqual(0, s.Position);
                Assert.AreEqual(2, s.ReadByte());

                s.Position = 10;
                Assert.AreEqual(-1, s.ReadByte());
                Assert.AreEqual(10, s.Position);

                Assert.AreEqual(0, s.Read(new byte[10], 0, 10));
                Assert.AreEqual(10, s.Position);
            }
        }
 public void TestWritePastEndByte()
 {
     using (Stream s = new ClampedStream(new MemoryStream(new byte[255]), 2, 10))
     {
         s.Seek(0, SeekOrigin.End);
         s.WriteByte(1);
     }
     Assert.Fail();
 }
 public void TestIsDispose()
 {
     Stream s = new ClampedStream(new MemoryStream(), 0, long.MaxValue, false);
     s.Dispose();
     s.Seek(0, SeekOrigin.Begin);
     Assert.Fail();
 }
 public void TestInvalidSeekPastEnd()
 {
     using (Stream s = new ClampedStream(new MemoryStream(new byte[255]), 2, 10))
         s.Seek(1, SeekOrigin.End);
     Assert.Fail();
 }
 public void TestWritePastEnd()
 {
     using (Stream s = new ClampedStream(new MemoryStream(new byte[255]), 2, 10))
         s.Write(new byte[20], 0, 20);
     Assert.Fail();
 }
 public void TestInvalidSeekBeforeBegin()
 {
     using(Stream s = new ClampedStream(new MemoryStream(new byte[255]), 2, 10))
         s.Seek(-1, SeekOrigin.Begin);
     Assert.Fail();
 }
 public void TestSetLengthNotSupported()
 {
     MemoryStream ms = new MemoryStream(SequencedBytes(20));
     using (Stream s = new ClampedStream(ms, 2, 10))
     {
         s.SetLength(20);
         Assert.Fail();
     }
 }
 public void TestReadWrite()
 {
     using (MemoryStream ms = new MemoryStream(SequencedBytes(20)))
     using (Stream s = new ClampedStream(ms, 10, 5))
     {
         byte[] test = new byte[200];
         Assert.AreEqual(5, s.Read(test, 0, 200));
         Array.Resize(ref test, 5);
         Assert.AreEqual(new byte[] { 10, 11, 12, 13, 14 }, test);
         s.Position = 0;
         s.Write(new byte[] { 1, 2, 3, 4, 5 }, 0, 5);
         s.Position = 0;
         Assert.AreEqual(new byte[] { 1, 2, 3, 4, 5 }, IOStream.ReadAllBytes(s));
     }
 }
 public void TestSeek()
 {
     MemoryStream ms = new MemoryStream(SequencedBytes(100));
     using (Stream s = new ClampedStream(ms, 10, 80))
     {
         Assert.AreEqual(0, s.Seek(0, SeekOrigin.Begin));
         Assert.AreEqual(0, s.Position);
         Assert.AreEqual(10, s.Seek(10, SeekOrigin.Begin));
         Assert.AreEqual(10, s.Position);
         Assert.AreEqual(20, s.Seek(10, SeekOrigin.Current));
         Assert.AreEqual(20, s.Position);
         Assert.AreEqual(15, s.Seek(-5, SeekOrigin.Current));
         Assert.AreEqual(15, s.Position);
         Assert.AreEqual(70, s.Seek(-10, SeekOrigin.End));
         Assert.AreEqual(70, s.Position);
         Assert.AreEqual(80, s.Seek(0, SeekOrigin.End));
         Assert.AreEqual(80, s.Position);
     }
 }
 public void TestSetLength()
 {
     MemoryStream ms = new MemoryStream();
     using (Stream s = new ClampedStream(ms, 2, long.MaxValue))
     {
         s.SetLength(20);
         Assert.AreEqual(22, ms.Length);
     }
 }