Пример #1
0
        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]);
                }
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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]);
                }
            }
        }
Пример #4
0
        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);
        }