Beispiel #1
0
        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;
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
 public TestDataStreamStructureBuilder(DataStreamDefinition dataStreamDefinition, IVirtualDisk disk, IFreeBlockManager freeBlockManager, IFileSystemNodeStorage fileSystemNodeStorage, Node governingNode, AddressingSystemParameters addressingSystemParameters)
     : base(dataStreamDefinition, disk, freeBlockManager, fileSystemNodeStorage, governingNode, addressingSystemParameters)
 {
 }
Beispiel #7
0
        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;
        }