public void CorrectlyCreatesAndWritesToFile()
        {
            var path = Path.Combine(MockFilesDirectory, "write-to-file-test");

            var dataPageFile = Path.Combine(path, "datapage-1");
            var fileInfo     = new FileInfo(dataPageFile);

            if (fileInfo.Exists)
            {
                fileInfo.Delete();
            }

            const string stringToWrite = "Hello world!";
            var          dataRecord    = Core.Models.DataRecord.Create(Encoding.UTF8.GetBytes(stringToWrite));

            dataRecord.SetDataRecordId(1);
            var bytes = dataRecord.GetBytes();
            int currentOffset;
            int offset;

            Core.Models.DataRecord dataRecordReaded;
            int freeSpaceLength;

            using (var dataPage = new Core.Models.DataPage(_config, 1, fileInfo.FullName, false))
            {
                currentOffset = _config.PageSize - bytes.Length;
                dataPage.TrySaveData(dataRecord.Id, bytes, out offset);
                dataRecordReaded = dataPage.Read(offset, bytes.Length);
                freeSpaceLength  = dataPage.GetFreeSpaceLength();
            }

            Assert.Multiple(() =>
            {
                Assert.AreEqual(currentOffset, offset, "Оффсет должен быть корректным.");
                Assert.AreEqual(_config.PageSize - bytes.Length - DataPageLocalIndex.Size - DataPageHeader.Size, freeSpaceLength, "Количество свободного места должно уменьшиться на кол-во записанных байт.");
                Assert.AreEqual(stringToWrite, Encoding.UTF8.GetString(dataRecordReaded.Body), "Записанные данные должны корректно восстановиться.");
                Assert.AreEqual(File.ReadAllBytes(Path.Combine(path, "expected-datapage-1")), File.ReadAllBytes(fileInfo.FullName), "Контент должен совпасть.");
            });
        }
예제 #2
0
 public void CorrectFreeSpaceAtStart()
 {
     Assert.AreEqual(_config.PageSize - DataPageHeader.Size, _dataPage.GetFreeSpaceLength());
 }