public void StorageStream_can_read_overlaping_byte_ranges_from_last_page() { var buffer = new byte[StorageConstants.MaxPageSize]; new Random().NextBytes(buffer); using (var stream = StorageStream.CreatingNewAndWritting( transactionalStorage, new MockIndexStorage(), new StorageOperationsTask(transactionalStorage, new MockIndexStorage(), new EmptyNotificationsPublisher()), "file", EmptyETagMetadata)) { stream.Write(buffer, 0, StorageConstants.MaxPageSize); } using (var stream = StorageStream.Reading(transactionalStorage, "file")) { var readBuffer = new byte[10]; stream.Seek(StorageConstants.MaxPageSize - 10, SeekOrigin.Begin); stream.Read(readBuffer, 0, 10); // read last 10 bytes var subBuffer = buffer.ToList().Skip(StorageConstants.MaxPageSize - 10).Take(10).ToArray(); for (int i = 0; i < 10; i++) { Assert.Equal(subBuffer[i], readBuffer[i]); } readBuffer = new byte[5]; stream.Seek(StorageConstants.MaxPageSize - 5, SeekOrigin.Begin); stream.Read(readBuffer, 0, 5); // read last 5 bytes - note that they were read last time as well subBuffer = buffer.ToList().Skip(StorageConstants.MaxPageSize - 5).Take(5).ToArray(); for (int i = 0; i < 5; i++) { Assert.Equal(subBuffer[i], readBuffer[i]); } } }
public void StorageStream_should_write_to_storage_by_64kB_pages() { using (var stream = StorageStream.CreatingNewAndWritting(fs, "file", new RavenJObject())) { var buffer = new byte[StorageConstants.MaxPageSize]; new Random().NextBytes(buffer); stream.Write(buffer, 0, 32768); stream.Write(buffer, 32767, 32768); stream.Write(buffer, 0, 1); } FileAndPagesInformation fileAndPages = null; transactionalStorage.Batch(accessor => fileAndPages = accessor.GetFile("file", 0, 10)); Assert.Equal(2, fileAndPages.Pages.Count); Assert.Equal(StorageConstants.MaxPageSize, fileAndPages.Pages[0].Size); Assert.Equal(1, fileAndPages.Pages[1].Size); }
public void StorageStream_can_read_overlaping_byte_ranges_from_last_page() { var buffer = new byte[StorageConstants.MaxPageSize]; new Random().NextBytes(buffer); using (var stream = StorageStream.CreatingNewAndWritting(fs, "file", new RavenJObject())) { stream.Write(buffer, 0, StorageConstants.MaxPageSize); } using (var stream = StorageStream.Reading(fs.Storage, "file")) { var readBuffer = new byte[10]; stream.Seek(StorageConstants.MaxPageSize - 10, SeekOrigin.Begin); stream.Read(readBuffer, 0, 10); // read last 10 bytes var subBuffer = buffer.ToList().Skip(StorageConstants.MaxPageSize - 10).Take(10).ToArray(); for (int i = 0; i < 10; i++) { Assert.Equal(subBuffer[i], readBuffer[i]); } readBuffer = new byte[5]; stream.Seek(StorageConstants.MaxPageSize - 5, SeekOrigin.Begin); stream.Read(readBuffer, 0, 5); // read last 5 bytes - note that they were read last time as well subBuffer = buffer.ToList().Skip(StorageConstants.MaxPageSize - 5).Take(5).ToArray(); for (int i = 0; i < 5; i++) { Assert.Equal(subBuffer[i], readBuffer[i]); } } }
public void StorageStream_should_write_to_storage_by_64kB_pages() { using (var stream = StorageStream.CreatingNewAndWritting( transactionalStorage, new MockIndexStorage(), new StorageOperationsTask(transactionalStorage, new MockIndexStorage(), new EmptyNotificationsPublisher()), "file", EmptyETagMetadata)) { var buffer = new byte[StorageConstants.MaxPageSize]; new Random().NextBytes(buffer); stream.Write(buffer, 0, 32768); stream.Write(buffer, 32767, 32768); stream.Write(buffer, 0, 1); } FileAndPagesInformation fileAndPages = null; transactionalStorage.Batch(accessor => fileAndPages = accessor.GetFile("file", 0, 10)); Assert.Equal(2, fileAndPages.Pages.Count); Assert.Equal(StorageConstants.MaxPageSize, fileAndPages.Pages[0].Size); Assert.Equal(1, fileAndPages.Pages[1].Size); }