Пример #1
0
        private void TestRandomFlushOperation(AlignedWriteStream writeStream, FileStream targetStream)
        {
            writeStream.Flush();
            targetStream.Flush();

            Assert.AreEqual(targetStream.Position, writeStream.Position, "Position mismatch");
            Assert.AreEqual(targetStream.Length, writeStream.Length, "Length mismatch");
        }
Пример #2
0
 private void TestWriteStreamRandomOperations(int count, string inputfile, string outputfile1, string outputfile2, int alignmentSize,
     Func<FileStream, AlignedWriteStream, byte[], WriteSreamOperations> testOperation)
 {
     byte[] data = File.ReadAllBytes(inputfile);
     List<Tuple<WriteSreamOperations, long, long, long, long, long, long>> operations =
         new List<Tuple<WriteSreamOperations, long, long, long, long, long, long>>();
     using (FileStream targetFileStream1 = new FileStream(outputfile1, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
     {
         using (FileStream targetFileStream2 = new FileStream(outputfile2, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite, 8,
             FileOptions.WriteThrough | Win32.FileFlagNoBuffering))
         {
             using (AlignedWriteStream writeStream = new AlignedWriteStream(targetFileStream2, alignmentSize))
             {
                 while (0 < count)
                 {
                     long position = targetFileStream1.Position;
                     long length = targetFileStream1.Length;
                     WriteSreamOperations operation = testOperation(targetFileStream1, writeStream, data);
                     targetFileStream1.Flush();
                     byte[] data1 = this.ReadFile(outputfile1);
                     byte[] data2 = this.ReadFile(outputfile2);
                     if (Math.Abs(data1.Length - data2.Length) > alignmentSize * 2)
                     {
                         writeStream.Flush();
                         data2 = this.ReadFile(outputfile2);
                     }
                     Assert.IsTrue(Math.Abs(data1.Length - data2.Length) < alignmentSize*2, "Length mismatch");
                     int i = 0;
                     if (data1.Length < data2.Length)
                     {
                         i = this.FindNoneZero(data2, data1.Length);
                         Assert.IsTrue(-1 == i, "Junk found");
                     }
                     i = this.CompareBuffers(data1, data2, 0, Math.Min(data1.Length, data2.Length));
                     if (-1 != i)
                     {
                         writeStream.Flush();
                         data2 = this.ReadFile(outputfile2);
                         if (data1.Length < data2.Length)
                         {
                             i = this.FindNoneZero(data2, data1.Length);
                             Assert.IsTrue(-1 == i, "Junk found");
                         }
                         i = this.CompareBuffers(data1, data2, 0, Math.Min(data1.Length, data2.Length));
                         Assert.IsTrue(-1 == i, "Data mismatch");
                     }
                     count--;
                     operations.Add(new Tuple<WriteSreamOperations, long, long, long, long, long, long>(
                         operation, position, length, targetFileStream1.Position, targetFileStream1.Length,
                         targetFileStream2.Position, targetFileStream2.Length));
                 }
             }
         }
     }
     byte[] fdata1 = this.ReadFile(outputfile1);
     byte[] fdata2 = this.ReadFile(outputfile2);
     Assert.IsTrue(Math.Abs(fdata1.Length - fdata2.Length) < alignmentSize * 2, "Length mismatch");
     Assert.IsTrue(-1 == this.CompareBuffers(fdata1, fdata2, 0, fdata1.Length), "Data mismatch");
 }
Пример #3
0
        private void TestAlignedWriteStreamLength(string targetFilename)
        {
            var buffer = new byte[1024];
            using (FileStream targetFileStream = new FileStream(targetFilename, FileMode.Create, FileAccess.ReadWrite, FileShare.Write, 8,
                FileOptions.WriteThrough | Win32.FileFlagNoBuffering))
            {
                using (AlignedWriteStream writeStream = new AlignedWriteStream(targetFileStream))
                {
                    writeStream.Write(buffer, 0, 1000);
                    Assert.AreEqual(1000, writeStream.Position, "Invlid position");
                    Assert.AreEqual(512, targetFileStream.Position, "Invlid position");
                    Assert.AreEqual(1000, writeStream.Length, "Invlid length");
                    Assert.AreEqual(512, targetFileStream.Length, "Invlid length");
                    writeStream.SetLength(1024);
                    Assert.AreEqual(1000, writeStream.Position, "Invlid position");
                    Assert.AreEqual(512, targetFileStream.Position, "Invlid position");
                    Assert.AreEqual(1024, writeStream.Length, "Invlid length");
                    Assert.AreEqual(1024, targetFileStream.Length, "Invlid length");
                    writeStream.SetLength(512);
                    Assert.AreEqual(512, writeStream.Position, "Invlid position");
                    Assert.AreEqual(512, targetFileStream.Position, "Invlid position");
                    Assert.AreEqual(512, writeStream.Length, "Invlid length");
                    Assert.AreEqual(512, targetFileStream.Length, "Invlid length");
                    writeStream.Write(buffer, 0, 1000);
                    Assert.AreEqual(1512, writeStream.Position, "Invlid position");
                    Assert.AreEqual(1024, targetFileStream.Position, "Invlid position");
                    Assert.AreEqual(1512, writeStream.Length, "Invlid length");
                    Assert.AreEqual(1024, targetFileStream.Length, "Invlid length");
                    writeStream.SetLength(2048);
                    Assert.AreEqual(1512, writeStream.Position, "Invlid position");
                    Assert.AreEqual(1024, targetFileStream.Position, "Invlid position");
                    Assert.AreEqual(2048, writeStream.Length, "Invlid length");
                    Assert.AreEqual(2048, targetFileStream.Length, "Invlid length");
                    writeStream.Write(buffer, 345, 38);
                    Assert.AreEqual(1550, writeStream.Position, "Invlid position");
                    Assert.AreEqual(1536, targetFileStream.Position, "Invlid position");
                    Assert.AreEqual(2048, writeStream.Length, "Invlid length");
                    Assert.AreEqual(2048, targetFileStream.Length, "Invlid length");
                    writeStream.SetLength(0);
                    Assert.AreEqual(0, writeStream.Position, "Invlid position");
                    Assert.AreEqual(0, targetFileStream.Position, "Invlid position");
                    Assert.AreEqual(0, writeStream.Length, "Invlid length");
                    Assert.AreEqual(0, targetFileStream.Length, "Invlid length");
                    writeStream.Flush();
                    Assert.AreEqual(0, writeStream.Position, "Invlid position");
                    Assert.AreEqual(0, targetFileStream.Position, "Invlid position");
                    Assert.AreEqual(0, writeStream.Length, "Invlid length");
                    Assert.AreEqual(0, targetFileStream.Length, "Invlid length");

                }
                Assert.AreEqual(0, targetFileStream.Position, "Invlid position");
                Assert.AreEqual(0, targetFileStream.Length, "Invlid position");
            }
        }