public FileManager(IVirtualDisk virtualDisk, FileSystemNodeStorage fileSystemNodeStorage, IEqualityComparer <string> namesComparer, NodeResolver nodeResolver, IFreeBlockManager freeBlockManager, IFolderEnumeratorRegistry folderEnumeratorRegistry, IFileSystemObjectLockingManager lockingManager, BlockReferenceListsEditor blockReferenceListsEditor, PathBuilder pathBuilder, IFileSystemArtifactNamesValidator nameValidator, IPathValidator pathValidator) { if (virtualDisk == null) { throw new ArgumentNullException("virtualDisk"); } if (fileSystemNodeStorage == null) { throw new ArgumentNullException("fileSystemNodeStorage"); } if (namesComparer == null) { throw new ArgumentNullException("namesComparer"); } if (nodeResolver == null) { throw new ArgumentNullException("nodeResolver"); } if (freeBlockManager == null) { throw new ArgumentNullException("freeBlockManager"); } if (folderEnumeratorRegistry == null) { throw new ArgumentNullException("folderEnumeratorRegistry"); } if (lockingManager == null) { throw new ArgumentNullException("lockingManager"); } if (blockReferenceListsEditor == null) { throw new ArgumentNullException("blockReferenceListsEditor"); } if (pathBuilder == null) { throw new ArgumentNullException("pathBuilder"); } if (nameValidator == null) { throw new ArgumentNullException("nameValidator"); } if (pathValidator == null) { throw new ArgumentNullException("pathValidator"); } _virtualDisk = virtualDisk; _pathValidator = pathValidator; _nameValidator = nameValidator; _pathBuilder = pathBuilder; _blockReferenceListsEditor = blockReferenceListsEditor; _lockingManager = lockingManager; _folderEnumeratorRegistry = folderEnumeratorRegistry; _freeBlockManager = freeBlockManager; _nodeResolver = nodeResolver; _namesComparer = namesComparer; _fileSystemNodeStorage = fileSystemNodeStorage; }
/// <summary> /// /// </summary> /// <param name="dataStreamDefinition"></param> /// <param name="disk"></param> /// <param name="freeBlockManager"></param> /// <param name="fileSystemNodeStorage"></param> /// <param name="governingNode"></param> /// <param name="addressingSystemParameters"></param> /// <exception cref="ArgumentNullException"></exception> public DataStreamStructureBuilder(DataStreamDefinition dataStreamDefinition, IVirtualDisk disk, IFreeBlockManager freeBlockManager, IFileSystemNodeStorage fileSystemNodeStorage, Node governingNode, AddressingSystemParameters addressingSystemParameters) : base(disk, dataStreamDefinition, addressingSystemParameters, fileSystemNodeStorage, governingNode) { if (freeBlockManager == null) { throw new ArgumentNullException("freeBlockManager"); } _freeBlockManager = freeBlockManager; }
/// <summary> /// /// </summary> /// <param name="freeBlockManager"></param> /// <param name="blocksToFree"></param> /// <exception cref="ArgumentNullException"></exception> /// <exception cref="ArgumentOutOfRangeException"></exception> /// <exception cref="BlockNotOccupiedException"></exception> public static void MarkBlocksAsFree(this IFreeBlockManager freeBlockManager, IEnumerable <int> blocksToFree) { if (freeBlockManager == null) { throw new ArgumentNullException("freeBlockManager"); } if (blocksToFree == null) { throw new ArgumentNullException("blocksToFree"); } foreach (int blockIndex in blocksToFree) { freeBlockManager.MarkBlockAsFree(blockIndex); } }
public BlockReferenceListsEditor(IVirtualDisk virtualDisk, IFreeBlockManager freeBlockManager, FileSystemNodeStorage fileSystemNodeStorage) { if (virtualDisk == null) { throw new ArgumentNullException("virtualDisk"); } if (freeBlockManager == null) { throw new ArgumentNullException("freeBlockManager"); } if (fileSystemNodeStorage == null) { throw new ArgumentNullException("fileSystemNodeStorage"); } _virtualDisk = virtualDisk; _fileSystemNodeStorage = fileSystemNodeStorage; _freeBlockManager = freeBlockManager; }
public void MakeSureStructureBuilderAllocatesExactlyTheNumberOfBlocksNeededToStoreTheData() { var testCollaborators = TestCollaboratorsFactory.CreateCollaboratorsForTestingDataStreamStructureBuilder(); MockRepository mocks = new MockRepository(); IFreeBlockManager freeBlockManager = mocks.DynamicMock <IFreeBlockManager>(); IFileSystemNodeStorage nodeStorageStub = mocks.Stub <IFileSystemNodeStorage>(); int freeBlockCounter = 25; int numberOfFreeBlocksAllocated = 0; using (mocks.Unordered()) { Expect.Call(freeBlockManager.AcquireFreeBlocks(1)).IgnoreArguments().Do( new Func <int, ReadOnlyCollection <int> >(delegate(int i) { var blocks = new List <int>(); for (int j = 0; j < i; j++) { blocks.Add(freeBlockCounter); freeBlockCounter++; } numberOfFreeBlocksAllocated += i; return(blocks.AsReadOnly()); })); Expect.Call(freeBlockManager.AcquireFreeBlock()).IgnoreArguments().Do( new Func <int>(delegate { freeBlockCounter++; numberOfFreeBlocksAllocated++; return(freeBlockCounter); })); } mocks.ReplayAll(); var dataStreamStructureBuilder = new TestDataStreamStructureBuilder( testCollaborators.FileNode.ResolvedNode.FileContentsStreamDefinition, testCollaborators.Disk, freeBlockManager, nodeStorageStub, testCollaborators.FileNode.ResolvedNode, AddressingSystemParameters.Default); Assert.AreEqual(0, dataStreamStructureBuilder.DoubleIndirectBlocks.Count); dataStreamStructureBuilder.SetSize(1000); Assert.AreEqual(1000, dataStreamStructureBuilder.CurrentSize); var diskStructureEnumerator = dataStreamStructureBuilder.CreateEnumerator(); Assert.AreEqual(2, numberOfFreeBlocksAllocated); // один для данных, другой - под single indirect block Assert.AreEqual(1, diskStructureEnumerator.Count); // количество дисковых блоков = 1 Assert.AreEqual(1, dataStreamStructureBuilder.DoubleIndirectBlocks.Count); dataStreamStructureBuilder.SetSize(1500); Assert.AreEqual(1500, dataStreamStructureBuilder.CurrentSize); dataStreamStructureBuilder.SetSize(2000); Assert.AreEqual(2000, dataStreamStructureBuilder.CurrentSize); diskStructureEnumerator = dataStreamStructureBuilder.CreateEnumerator(); Assert.AreEqual(2, numberOfFreeBlocksAllocated); Assert.AreEqual(1, diskStructureEnumerator.Count); // количество дисковых блоков = 1 Assert.AreEqual(1, dataStreamStructureBuilder.DoubleIndirectBlocks.Count); dataStreamStructureBuilder.SetSize(2048); Assert.AreEqual(2048, dataStreamStructureBuilder.CurrentSize); diskStructureEnumerator = dataStreamStructureBuilder.CreateEnumerator(); Assert.AreEqual(2, numberOfFreeBlocksAllocated); // оверхед системы адресации - еще один блок. Assert.AreEqual(1, diskStructureEnumerator.Count); // количество дисковых блоков = 2 Assert.AreEqual(1, dataStreamStructureBuilder.DoubleIndirectBlocks.Count); dataStreamStructureBuilder.SetSize(testCollaborators.Disk.BlockSizeInBytes * (testCollaborators.Disk.BlockSizeInBytes / 4) * 3); Assert.AreEqual((testCollaborators.Disk.BlockSizeInBytes / 4) * 3 + 3, numberOfFreeBlocksAllocated); dataStreamStructureBuilder.SetSize(testCollaborators.Disk.BlockSizeInBytes * (testCollaborators.Disk.BlockSizeInBytes / 4) * 5); }
public TestDataStreamStructureBuilder(DataStreamDefinition dataStreamDefinition, IVirtualDisk disk, IFreeBlockManager freeBlockManager, IFileSystemNodeStorage fileSystemNodeStorage, Node governingNode, AddressingSystemParameters addressingSystemParameters) : base(dataStreamDefinition, disk, freeBlockManager, fileSystemNodeStorage, governingNode, addressingSystemParameters) { }
private VirtualFileSystem( IVirtualDisk virtualDisk, VirtualFileSystemInfo fileSystemInfo, FileSystemNodeStorage fileSystemNodeStorage, IEqualityComparer <string> namesComparer, NodeResolver nodeResolver, IFreeBlockManager freeBlockManager, IFolderEnumeratorRegistry folderEnumeratorRegistry, BlockReferenceListsEditor blockReferenceListsEditor, PathBuilder pathBuilder, IFileSystemArtifactNamesValidator nameValidator, IPathValidator pathValidator, FileManager fileManager, FolderManager folderManager) { if (fileSystemInfo == null) { throw new ArgumentNullException("fileSystemInfo"); } if (fileSystemNodeStorage == null) { throw new ArgumentNullException("fileSystemNodeStorage"); } if (namesComparer == null) { throw new ArgumentNullException("namesComparer"); } if (nodeResolver == null) { throw new ArgumentNullException("nodeResolver"); } if (freeBlockManager == null) { throw new ArgumentNullException("freeBlockManager"); } if (folderEnumeratorRegistry == null) { throw new ArgumentNullException("folderEnumeratorRegistry"); } if (blockReferenceListsEditor == null) { throw new ArgumentNullException("blockReferenceListsEditor"); } if (pathBuilder == null) { throw new ArgumentNullException("pathBuilder"); } if (nameValidator == null) { throw new ArgumentNullException("nameValidator"); } if (pathValidator == null) { throw new ArgumentNullException("pathValidator"); } if (folderManager == null) { throw new ArgumentNullException("folderManager"); } _virtualDisk = virtualDisk; _folderManager = folderManager; _folderManager = folderManager; _folderManager = folderManager; _folderManager = folderManager; _fileManager = fileManager; _pathBuilder = pathBuilder; _folderEnumeratorRegistry = folderEnumeratorRegistry; _nodeResolver = nodeResolver; _freeBlockManager = freeBlockManager; _fileSystemInfo = fileSystemInfo; _namesComparer = namesComparer; }