Пример #1
0
        public void TestCache2()
        {
            // Writer
            DurableFileStream dfs = new DurableFileStream("TestCache2.dat", true, 5000);

            byte[] writeBuffer = new byte[4096];
            Helper.SetArrayRandomly(writeBuffer);
            dfs.Write(writeBuffer, 0, writeBuffer.Length);

            byte[] writeBuffer2 = new byte[4096];
            Helper.SetArrayRandomly(writeBuffer2);
            dfs.Write(writeBuffer2, 0, writeBuffer2.Length);

            byte[] writeBuffer3 = new byte[4096];
            Helper.SetArrayRandomly(writeBuffer3);
            dfs.Write(writeBuffer3, 0, writeBuffer2.Length);
            dfs.Commit();

            byte[] writeBuffer4 = new byte[4096];
            Helper.SetArrayRandomly(writeBuffer4);
            dfs.Write(writeBuffer4, 0, writeBuffer2.Length);

            dfs.Seek(-2 * 4096, System.IO.SeekOrigin.Current);
            byte[] readBuffer = new byte[4096];
            dfs.Read(readBuffer, 0, readBuffer.Length);

            dfs.Seek(-2 * 4096, System.IO.SeekOrigin.Current);
            byte[] readBuffer2 = new byte[4096];
            dfs.Read(readBuffer2, 0, readBuffer2.Length);

            dfs.Close();
        }
Пример #2
0
        public void TestWriteReadRandom_Seek2()
        {
            DurableFileStream dfs = new DurableFileStream("TestWriteReadRandom_Seek2.dat", true);

            // seek
            long seekedPos = dfs.Seek(2000, SeekOrigin.Begin);
            Assert.AreEqual<long>(seekedPos, 2000);
            Assert.AreEqual<long>(dfs.Position, 2000);
            Assert.AreEqual<long>(dfs.Length, 0);

            seekedPos = dfs.Seek(-1000, SeekOrigin.Current);
            Assert.AreEqual<long>(seekedPos, 1000);
            Assert.AreEqual<long>(dfs.Position, 1000);
            Assert.AreEqual<long>(dfs.Length, 0);

            // write
            int bufferSize = DurableFileStream.BLOCK_SIZE;
            byte[] writeBuffer = new byte[bufferSize];
            Helper.SetArrayRandomly(writeBuffer);
            dfs.Write(writeBuffer, 0, bufferSize);
            long lastPosition = seekedPos + bufferSize;
            Assert.AreEqual<long>(dfs.Position, lastPosition);
            Assert.AreEqual<long>(dfs.Length, lastPosition);

            seekedPos = dfs.Seek(-1000, SeekOrigin.End);
            Assert.AreEqual<long>(seekedPos, lastPosition - 1000);
            Assert.AreEqual<long>(dfs.Position, lastPosition - 1000);
            Assert.AreEqual<long>(dfs.Length, lastPosition);

            dfs.Commit();
            dfs.Close();
        }
Пример #3
0
        public void TestWriteReadRandom_Seek1()
        {
            DurableFileStream dfs = new DurableFileStream("TestWriteReadRandom_Seek1.dat", true);

            long seekedPos = dfs.Seek(2000, SeekOrigin.Begin);
            Assert.AreEqual<long>(seekedPos, 2000);
            Assert.AreEqual<long>(dfs.Position, 2000);
            Assert.AreEqual<long>(dfs.Length, 0);

            seekedPos = dfs.Seek(-1000, SeekOrigin.Current);
            Assert.AreEqual<long>(seekedPos, 1000);
            Assert.AreEqual<long>(dfs.Position, 1000);
            Assert.AreEqual<long>(dfs.Length, 0);

            dfs.Close();
        }
        public void TestLogWriteOptimization2()
        {
            Random rand = new Random();

            byte[] writeBuffer1 = new byte[2500];
            Helper.SetArrayRandomly(writeBuffer1);

            byte[] writeBuffer2 = new byte[1000];
            Helper.SetArrayRandomly(writeBuffer2);

            //
            //  Writer
            //
            DurableFileStream dfs = new DurableFileStream("TestLogWriteOptimization2.dat", true);
            dfs.Write(writeBuffer1, 0, writeBuffer1.Length);
            Assert.AreEqual<long>(dfs.Position, writeBuffer1.Length);
            Assert.AreEqual<long>(dfs.Length, writeBuffer1.Length);

            dfs.Seek(500, System.IO.SeekOrigin.Begin);
            Assert.AreEqual<long>(dfs.Position, 500);

            dfs.Write(writeBuffer2, 0, writeBuffer2.Length);
            Assert.AreEqual<long>(dfs.Position, 500 + writeBuffer2.Length);
            Assert.AreEqual<long>(dfs.Length, writeBuffer1.Length);
            dfs.Commit();

            dfs.Close();

            //
            // Reader
            //
            dfs = new DurableFileStream("TestLogWriteOptimization2.dat", false);
            byte[] readBuffer = new byte[writeBuffer1.Length];
            dfs.Read(readBuffer, 0, writeBuffer1.Length);
            Assert.AreEqual<long>(dfs.Position, writeBuffer1.Length);
            Assert.AreEqual<long>(dfs.Length, writeBuffer1.Length);

            byte[] mergedWriteBuffer = new byte[writeBuffer1.Length];
            Array.Copy(writeBuffer1, 0, mergedWriteBuffer, 0, writeBuffer1.Length);
            Array.Copy(writeBuffer2, 0, mergedWriteBuffer, 500, writeBuffer2.Length);

            dfs.Close();

            // Validate
            Assert.IsTrue(Helper.EqualArray(readBuffer, mergedWriteBuffer));
        }
Пример #5
0
        public void TestOffset1()
        {
            int bufferSize = 4096;

            byte[] writeBuffer = new byte[bufferSize];
            Helper.SetArrayRandomly(writeBuffer);

            //
            //  Writer
            //
            DurableFileStream dfs = new DurableFileStream("TestOffset1.dat", true);
            int offset = 100;
            int count = 500;
            dfs.Write(writeBuffer, offset, count);

            dfs.Seek(0, System.IO.SeekOrigin.Begin);
            byte[] readBuffer = new byte[count * 2];
            int readOffest = 300;
            dfs.Read(readBuffer, readOffest, count);
            bool equal = true;
            for (int i = offset; i < count; i++)
            {
                if (writeBuffer[i] != readBuffer[i - offset + readOffest])
                {
                    equal = false;
                    break;
                }
            }
            Assert.IsTrue(equal);

            dfs.Commit();
            Assert.AreEqual<long>(dfs.Position, count);
            Assert.AreEqual<long>(dfs.Length, count);

            dfs.Seek(0, System.IO.SeekOrigin.Begin);
            readBuffer = new byte[count * 2];
            dfs.Read(readBuffer, readOffest, count);
            equal = true;
            for (int i = offset; i < count; i++)
            {
                if (writeBuffer[i] != readBuffer[i - offset + readOffest])
                {
                    equal = false;
                    break;
                }
            }
            Assert.IsTrue(equal);

            dfs.Close();

            //
            // Reader
            //
            dfs = new DurableFileStream("TestOffset1.dat", false);
            Assert.AreEqual<long>(dfs.Position, 0);
            Assert.AreEqual<long>(dfs.Length, count);
            int count2 = count - 10;
            readBuffer = new byte[count2 * 3];
            readOffest = 750;
            dfs.Read(readBuffer, readOffest, count2);

            equal = true;
            for (int i = offset; i < count2; i++)
            {
                if (writeBuffer[i] != readBuffer[i - offset + readOffest])
                {
                    equal = false;
                    break;
                }
            }
            Assert.IsTrue(equal);

            Assert.AreEqual<long>(dfs.Position, count2);
            Assert.AreEqual<long>(dfs.Length, count);

            dfs.Close();
        }