private void TestRandomWriteOperation(FileStream targetStream, AlignedWriteStream writeStream, byte[] data, int offset, int count) { long possition = targetStream.Position; long length = targetStream.Length; targetStream.Write(data, offset, count); writeStream.Write(data, offset, count); Assert.AreEqual(targetStream.Position, writeStream.Position, string.Format("Position mismatch (Original {0})", possition)); Assert.AreEqual(targetStream.Length, writeStream.Length, string.Format("Length mismatch (Original {0})", length)); }
private void TestAlignedWriteStreamSeekPosition(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, 500); Assert.AreEqual(500, writeStream.Position, "Invlid position"); Assert.AreEqual(0, targetFileStream.Position, "Invlid position"); Assert.AreEqual(500, writeStream.Length, "Invlid length"); Assert.AreEqual(0, targetFileStream.Length, "Invlid length"); writeStream.Seek(400, SeekOrigin.Begin); Assert.AreEqual(400, writeStream.Position, "Invlid position"); Assert.AreEqual(0, targetFileStream.Position, "Invlid position"); Assert.AreEqual(500, writeStream.Length, "Invlid length"); Assert.AreEqual(0, targetFileStream.Length, "Invlid length"); writeStream.Write(buffer, 0, 650); Assert.AreEqual(1050, writeStream.Position, "Invlid position"); Assert.AreEqual(1024, targetFileStream.Position, "Invlid position"); Assert.AreEqual(1050, writeStream.Length, "Invlid length"); Assert.AreEqual(1024, targetFileStream.Length, "Invlid length"); writeStream.Seek(1000, SeekOrigin.Begin); Assert.AreEqual(1000, writeStream.Position, "Invlid position"); Assert.AreEqual(512, targetFileStream.Position, "Invlid position"); Assert.AreEqual(1050, writeStream.Length, "Invlid length"); Assert.AreEqual(1536, targetFileStream.Length, "Invlid length"); writeStream.Write(buffer, 19, 24); Assert.AreEqual(1024, writeStream.Position, "Invlid position"); Assert.AreEqual(writeStream.Position, targetFileStream.Position, "Invlid position"); Assert.AreEqual(1050, writeStream.Length, "Invlid length"); Assert.AreEqual(1536, targetFileStream.Length, "Invlid length"); writeStream.Seek(12, SeekOrigin.Begin); Assert.AreEqual(12, writeStream.Position, "Invlid position"); Assert.AreEqual(0, targetFileStream.Position, "Invlid position"); Assert.AreEqual(1050, writeStream.Length, "Invlid length"); Assert.AreEqual(1536, targetFileStream.Length, "Invlid length"); writeStream.Write(buffer, 19, 500); Assert.AreEqual(512, writeStream.Position, "Invlid position"); Assert.AreEqual(writeStream.Position, targetFileStream.Position, "Invlid position"); Assert.AreEqual(1050, writeStream.Length, "Invlid length"); Assert.AreEqual(1536, targetFileStream.Length, "Invlid length"); writeStream.Seek(-2, SeekOrigin.End); Assert.AreEqual(1048, writeStream.Position, "Invlid position"); Assert.AreEqual(1024, targetFileStream.Position, "Invlid position"); Assert.AreEqual(1050, writeStream.Length, "Invlid length"); Assert.AreEqual(1536, targetFileStream.Length, "Invlid length"); writeStream.Write(buffer, 0, 1000); Assert.AreEqual(2048, writeStream.Position, "Invlid position"); Assert.AreEqual(2048, targetFileStream.Position, "Invlid position"); Assert.AreEqual(2048, writeStream.Length, "Invlid length"); Assert.AreEqual(writeStream.Length, targetFileStream.Length, "Invlid length"); writeStream.Seek(-1000, SeekOrigin.Current); Assert.AreEqual(1048, writeStream.Position, "Invlid position"); Assert.AreEqual(1024, targetFileStream.Position, "Invlid position"); Assert.AreEqual(2048, writeStream.Length, "Invlid length"); Assert.AreEqual(writeStream.Length, targetFileStream.Length, "Invlid length"); writeStream.Seek(0, SeekOrigin.End); Assert.AreEqual(2048, writeStream.Position, "Invlid position"); Assert.AreEqual(2048, targetFileStream.Position, "Invlid position"); Assert.AreEqual(2048, writeStream.Length, "Invlid length"); Assert.AreEqual(writeStream.Length, targetFileStream.Length, "Invlid length"); writeStream.Write(buffer, 11, 2); Assert.AreEqual(2050, writeStream.Position, "Invlid position"); Assert.AreEqual(2048, targetFileStream.Position, "Invlid position"); Assert.AreEqual(2050, writeStream.Length, "Invlid length"); Assert.AreEqual(2048, targetFileStream.Length, "Invlid length"); writeStream.Seek(4000, SeekOrigin.Begin); Assert.AreEqual(4000, writeStream.Position, "Invlid position"); Assert.AreEqual(3584, targetFileStream.Position, "Invlid position"); Assert.AreEqual(2050, writeStream.Length, "Invlid length"); Assert.AreEqual(2560, targetFileStream.Length, "Invlid length"); writeStream.Write(buffer, 40, 95); Assert.AreEqual(4095, writeStream.Position, "Invlid position"); Assert.AreEqual(3584, targetFileStream.Position, "Invlid position"); Assert.AreEqual(4095, writeStream.Length, "Invlid length"); Assert.AreEqual(2560, targetFileStream.Length, "Invlid length"); writeStream.Write(buffer, 40, 1); Assert.AreEqual(4096, writeStream.Position, "Invlid position"); Assert.AreEqual(4096, targetFileStream.Position, "Invlid position"); Assert.AreEqual(4096, writeStream.Length, "Invlid length"); Assert.AreEqual(4096, targetFileStream.Length, "Invlid length"); } Assert.AreEqual(4096, targetFileStream.Position, "Invlid position"); Assert.AreEqual(4096, targetFileStream.Length, "Invlid length"); } }
private void TestAlignedWriteStreamWritePosition(string targetFilename) { var buffer = new byte[1024]; using (FileStream targetFileStream = new FileStream(targetFilename, FileMode.Create, FileAccess.Write, FileShare.Write, 8, FileOptions.WriteThrough | Win32.FileFlagNoBuffering)) { using (AlignedWriteStream writeStream = new AlignedWriteStream(targetFileStream)) { writeStream.Write(buffer, 0, 500); Assert.AreEqual(500, writeStream.Position, "Invlid position"); Assert.AreEqual(0, targetFileStream.Position, "Invlid position"); Assert.AreEqual(500, writeStream.Length, "Invlid length"); Assert.AreEqual(0, targetFileStream.Length, "Invlid length"); writeStream.Write(buffer, 500, 524); Assert.AreEqual(1024, writeStream.Position, "Invlid position"); Assert.AreEqual(writeStream.Position, targetFileStream.Position, "Invlid position"); Assert.AreEqual(1024, writeStream.Length, "Invlid length"); Assert.AreEqual(writeStream.Length, targetFileStream.Length, "Invlid length"); writeStream.Write(buffer, 19, 512); Assert.AreEqual(1536, writeStream.Position, "Invlid position"); Assert.AreEqual(writeStream.Position, targetFileStream.Position, "Invlid position"); Assert.AreEqual(1536, writeStream.Length, "Invlid length"); Assert.AreEqual(writeStream.Length, targetFileStream.Length, "Invlid length"); writeStream.Write(buffer, 0, 1000); Assert.AreEqual(2536, writeStream.Position, "Invlid position"); Assert.AreEqual(2048, targetFileStream.Position, "Invlid position"); Assert.AreEqual(2536, writeStream.Length, "Invlid length"); Assert.AreEqual(2048, targetFileStream.Length, "Invlid length"); } Assert.AreEqual(2560, targetFileStream.Position, "Invlid position"); Assert.AreEqual(2560, targetFileStream.Length, "Invlid position"); } }
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"); } }