public void TestNumericKeyWithPartitioning(string directory)
        {
            int key1     = 123;
            int key2     = 1123;
            var basePath = FileSystemPath.Root.AppendDirectory(directory);
            var options  = new FilesystemStorageOptions()
            {
                BasePath             = basePath,
                EntitiesPerDirectory = 1000
            };

            var expected1 = basePath.AppendDirectory("0")
                            .AppendDirectory(key1.ToString())
                            .AppendFile(EntityFilename);

            var actual1 = FilesystemLocator.LocateEntityFile(key1, options);

            Assert.Equal(expected1, actual1);

            var expected2 = basePath.AppendDirectory("1")
                            .AppendDirectory(key2.ToString())
                            .AppendFile(EntityFilename);

            var actual2 = FilesystemLocator.LocateEntityFile(key2, options);

            Assert.Equal(expected2, actual2);
        }
        public void Drop(TKey entityKey)
        {
            var folder   = FilesystemLocator.FindSnapshotFolder(entityKey, options);
            var entities = fileSystem.GetEntitiesRecursive(folder).ToList();

            foreach (var entity in entities)
            {
                fileSystem.Delete(entity);
            }
        }
        private IOrderedEnumerable <FileSystemPath> GetExistingFiles(TKey key)
        {
            var folder = FilesystemLocator.FindSnapshotFolder(key, options);

            if (!fileSystem.Exists(folder))
            {
                fileSystem.CreateDirectoryRecursive(folder);
            }
            return(fileSystem.GetEntities(folder)
                   .Where(path => path.IsFile)
                   .Where(path => fileSystem.Exists(path))
                   .OrderBy(x => TimeFromFilename(x)));
        }
        public void TestKeyfileLocation(string directory)
        {
            int key      = 123;
            var basePath = FileSystemPath.Root.AppendDirectory(directory);
            var options  = new FilesystemStorageOptions()
            {
                BasePath             = basePath,
                EntitiesPerDirectory = 0
            };
            var expected = basePath.AppendDirectory(key.ToString()).AppendFile(KeyFilename);
            var actual   = FilesystemLocator.LocateKeyFile(key, options);

            Assert.Equal(expected, actual);
        }
        private Stream CreateNewFile(TKey key, long time, int requiredEmptyBytes)
        {
            var fileName = ToFilename(time, zeroPaddingStep);
            var filePath = FilesystemLocator.FindSnapshotFolder(key, options)
                           .AppendFile(fileName);

            using (var fileStream = fileSystem.CreateFile(filePath))
            {
                var data = new byte[zeroPaddingStep];
                data[zeroPaddingStep - 1] = 255;
                fileStream.Write(data, 0, zeroPaddingStep);
            }
            var stream = fileSystem.OpenFile(filePath, FileAccess.ReadWrite);

            return(SeekOrReopen(stream, filePath, zeroPaddingStep - 1, requiredEmptyBytes));
        }
        public void TestNonPartitionableKey(string directory, int entitiesPerDir)
        {
            var key      = "Hello World";
            var basePath = FileSystemPath.Root.AppendDirectory(directory);
            var options  = new FilesystemStorageOptions()
            {
                BasePath             = basePath,
                EntitiesPerDirectory = entitiesPerDir
            };

            var expected = basePath.AppendDirectory(key.GetHashCode().ToString())
                           .AppendFile(EntityFilename);

            var actual = FilesystemLocator.LocateEntityFile(key, options);

            Assert.Equal(expected, actual);
        }