/// <summary> /// Creates instance of <see cref="IFileFsClient"/>. /// </summary> /// <param name="fileFsStoragePath">Path to FileFS storage file.</param> /// <param name="options">Options for FileFS client.</param> /// <param name="logger">Logger instance.</param> /// <returns>Instance of <see cref="IFileFsClient"/>.</returns> public static IFileFsClient Create(string fileFsStoragePath, FileFsClientOptions options, ILogger logger) { ITransactionWrapper CreateTransactionWrapper(bool enableTransactions) => enableTransactions ? (ITransactionWrapper) new TransactionWrapper(fileFsStoragePath, logger) : (ITransactionWrapper) new NullTransactionWrapper(); FileFsClientOptionsValidator.Validate(options); var storageStreamProvider = new StorageStreamProvider(fileFsStoragePath, logger); var connection = new StorageConnection(storageStreamProvider, options.ByteBufferSize, logger); var filesystemDescriptorSerializer = new FilesystemDescriptorSerializer(logger); var filesystemDescriptorAccessor = new FilesystemDescriptorAccessor(connection, filesystemDescriptorSerializer, logger); var entryDescriptorSerializer = new EntryDescriptorSerializer(filesystemDescriptorAccessor, logger); var entryDescriptorRepository = new EntryDescriptorRepository(connection, filesystemDescriptorAccessor, entryDescriptorSerializer, logger); var operationLocker = new StorageOperationLocker(); var optimizer = new StorageOptimizer(connection, entryDescriptorRepository, filesystemDescriptorAccessor, operationLocker, logger); var extender = new StorageExtender(connection, filesystemDescriptorAccessor, operationLocker, logger); var allocator = new FileAllocator(connection, filesystemDescriptorAccessor, entryDescriptorRepository, optimizer, extender, operationLocker, logger); var entryRepository = new EntryRepository(filesystemDescriptorAccessor, entryDescriptorRepository, logger); var fileRepository = new FileRepository(connection, allocator, filesystemDescriptorAccessor, entryDescriptorRepository, logger); var directoryRepository = new DirectoryRepository(filesystemDescriptorAccessor, entryDescriptorRepository, logger); var externalFileManager = new ExternalFileManager(logger); var transactionWrapper = CreateTransactionWrapper(options.EnableTransactions); var client = new FileFsClient(fileRepository, directoryRepository, entryRepository, externalFileManager, optimizer, transactionWrapper, operationLocker); return(client); }
public void Update_ShouldReturnUpdatedDescriptor(int bufferSize, int fileDescriptorLength) { // Arrange var buffer = new byte[bufferSize]; var storageStreamProvider = StorageStreamProviderMockFactory.Create(buffer); var logger = new LoggerConfiguration().CreateLogger(); var storageConnection = new StorageConnection(storageStreamProvider, 4096, logger); var filesystemSerializer = new FilesystemDescriptorSerializer(logger); var expectedDescriptor = new FilesystemDescriptor(0, 0, fileDescriptorLength); var filesystemDescriptorBytes = filesystemSerializer.ToBytes(expectedDescriptor); var filesystemDescriptorCursor = new Cursor(-FilesystemDescriptor.BytesTotal, SeekOrigin.End); storageConnection.PerformWrite(filesystemDescriptorCursor, filesystemDescriptorBytes); var filesystemDescriptorAccessor = new FilesystemDescriptorAccessor(storageConnection, filesystemSerializer, logger); // Act filesystemDescriptorAccessor.Update(_ => 0, _ => 0, _ => fileDescriptorLength); // Assert var returnedDescriptorBytes = storageConnection.PerformRead(filesystemDescriptorCursor, FilesystemDescriptor.BytesTotal); var returnedDescriptor = filesystemSerializer.FromBytes(returnedDescriptorBytes); Assert.Equal(expectedDescriptor, returnedDescriptor); }
/// <summary> /// Creates instance of <see cref="IStorageInitializer"/>. /// </summary> /// <param name="fileFsStoragePath">Path to FileFS storage file.</param> /// <param name="logger">Logger instance.</param> /// <returns>Instance of <see cref="IStorageInitializer"/>.</returns> public static IStorageInitializer Create(string fileFsStoragePath, ILogger logger) { var storageStreamProvider = new StorageStreamProvider(fileFsStoragePath, logger); var connection = new StorageConnection(storageStreamProvider, 4096, logger); var filesystemDescriptorSerializer = new FilesystemDescriptorSerializer(logger); var filesystemDescriptorAccessor = new FilesystemDescriptorAccessor(connection, filesystemDescriptorSerializer, logger); var entryDescriptorSerializer = new EntryDescriptorSerializer(filesystemDescriptorAccessor, logger); var entryDescriptorRepository = new EntryDescriptorRepository(connection, filesystemDescriptorAccessor, entryDescriptorSerializer, logger); var operationLocker = new StorageOperationLocker(); var storageInitializer = new StorageInitializer(connection, operationLocker, filesystemDescriptorAccessor, entryDescriptorRepository, logger); return(storageInitializer); }