Пример #1
0
        public override void TestFixtureSetUp()
        {
            base.TestFixtureSetUp();
            var header = new PTableHeader(1);

            using (var f = File.Open(Filename, FileMode.OpenOrCreate)) {
                f.Seek(0, SeekOrigin.Begin);
                var bytes = header.AsByteArray();
                f.Write(bytes, 0, bytes.Length);
                var size = (long)(uint.MaxValue + 10000000L) * (long)PTable.IndexEntrySize + PTableHeader.Size + PTable.MD5Size;
                Console.WriteLine("allocating file " + Filename + " size is " + size);
                f.SetLength(size);
                Console.WriteLine("file allocated");
            }
            _ptable = PTable.FromFile(Filename, 22);
        }
Пример #2
0
        public static void CreatePTableFile(string filename, long ptableSize, int indexEntrySize, int cacheDepth = 16)
        {
            //TODO: fix this unsafe test it will fill the target disk if the test is aborted or an error occurs

            Ensure.NotNullOrEmpty(filename, "filename");
            Ensure.Nonnegative(cacheDepth, "cacheDepth");

            var sw      = Stopwatch.StartNew();
            var tableId = Guid.NewGuid();

            using (var fs = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite, FileShare.None,
                                           DefaultSequentialBufferSize, FileOptions.SequentialScan)) {
                fs.SetLength((long)ptableSize);
                fs.Seek(0, SeekOrigin.Begin);

                var recordCount = (long)((ptableSize - PTableHeader.Size - PTable.MD5Size) / (long)indexEntrySize);
                using (var md5 = MD5.Create())
                    using (var cs = new CryptoStream(fs, md5, CryptoStreamMode.Write))
                        using (var bs = new BufferedStream(cs, DefaultSequentialBufferSize)) {
                            // WRITE HEADER
                            var headerBytes = new PTableHeader(Version).AsByteArray();
                            cs.Write(headerBytes, 0, headerBytes.Length);

                            // WRITE INDEX ENTRIES
                            var buffer = new byte[indexEntrySize];
                            for (long i = 0; i < recordCount; i++)
                            {
                                bs.Write(buffer, 0, indexEntrySize);
                            }

                            bs.Flush();
                            cs.FlushFinalBlock();

                            // WRITE MD5
                            var hash = md5.Hash;
                            fs.Write(hash, 0, hash.Length);
                        }
            }

            Console.WriteLine("Created PTable File[{0}, size of {1}] in {2}.", tableId, ptableSize, sw.Elapsed);
        }