public void MakeSureYouCannotCreateVirtualDiskFromGarbage()
        {
            MemoryStream testStream = new MemoryStream();

            testStream.Write(new byte[2048], 0, 2048);

            ExceptionAssert.MakeSureExceptionIsRaisedBy <VirtualDiskCreationFailedException>(delegate()
            {
                VirtualDisk.CreateFromStream(testStream);
            });
        }
        public void MakeSureVirtualDisksCorrectlyInitializeThemselvesFromSuitableStreams()
        {
            VirtualDiskWithItsStream virtualDiskConstructionResult = VirtualDiskTestFactory.ConstructDefaultTestDiskWithStream();

            var virtualDisk = virtualDiskConstructionResult.Disk;

            Assert.AreEqual(VirtualDiskTestFactory.DefaultDiskBlockSize, virtualDisk.BlockSizeInBytes);
            Assert.AreEqual(VirtualDiskTestFactory.DefaultDiskSize, virtualDisk.DiskSizeInBytes);

            VirtualDisk diskRecreatedFromTheSameStream = VirtualDisk.CreateFromStream(virtualDiskConstructionResult.BackingStream);

            Assert.AreEqual(virtualDisk.BlockSizeInBytes, diskRecreatedFromTheSameStream.BlockSizeInBytes);
            Assert.AreEqual(VirtualDiskTestFactory.DefaultDiskSize, diskRecreatedFromTheSameStream.DiskSizeInBytes);
        }
예제 #3
0
        public static VirtualFileSystem CreateFileSystemFromExistingStream(Stream stream)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            VirtualDisk disk = VirtualDisk.CreateFromStream(stream);

            var diskStructuresManager = new FileSystemNodeStorage(disk);

            FileSystemHeader header = diskStructuresManager.ReadFileSystemHeader(VirtualDiskFormatter.FileSystemHeaderBlockIndex);

            var nameValidator = FileSystemArtifactNamesValidator.Default;

            var pathValidator = PathValidator.Default;

            var pathBuilder = PathBuilder.Default;

            var nodeResolver = new NodeResolver(disk, diskStructuresManager, StringComparer.OrdinalIgnoreCase, header.RootBlockOffset, VirtualFileSystem.Root, VirtualFileSystem.DirectorySeparatorChar, pathValidator, pathBuilder);

            return(VirtualFileSystem.CreateFromDisk(disk, StringComparer.OrdinalIgnoreCase, nodeResolver, pathBuilder, nameValidator, pathValidator));
        }
예제 #4
0
        // Note: этот код специально прилеплен к и без того немаленькому VirtualFileSystem. Это повышает discoverability фабричных методов (по сравнению с выделением фабрики) и усиливает ограничения (private-конструктор против internal-конструктора).

        /// <summary>
        /// Создает виртуальную файловую систему с настройками по умолчанию, на основе указанного файла.
        /// </summary>
        /// <param name="fullPathForFile"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException"></exception>
        /// <exception cref="FileSystemCreationFailedException"></exception>
        public static VirtualFileSystem OpenExisting(string fullPathForFile)
        {
            if (String.IsNullOrEmpty(fullPathForFile))
            {
                throw new ArgumentNullException("fullPathForFile");
            }

            FileStream stream = CreateStreamFromExistingFileWrappingExceptions(fullPathForFile);

            try
            {
                VirtualDisk disk = VirtualDisk.CreateFromStream(stream);

                var diskStructuresManager = new FileSystemNodeStorage(disk);

                FileSystemHeader header = diskStructuresManager.ReadFileSystemHeader(VirtualDiskFormatter.FileSystemHeaderBlockIndex);

                var nameValidator = FileSystemArtifactNamesValidator.Default;

                var pathValidator = PathValidator.Default;

                var pathBuilder = PathBuilder.Default;

                var nodeResolver = new NodeResolver(disk, diskStructuresManager, StringComparer.OrdinalIgnoreCase, header.RootBlockOffset, VirtualFileSystem.Root, VirtualFileSystem.DirectorySeparatorChar, pathValidator, pathBuilder);

                return(VirtualFileSystem.CreateFromDisk(disk, StringComparer.OrdinalIgnoreCase, nodeResolver, pathBuilder, nameValidator, pathValidator));
            }
            catch (VirtualDiskCreationFailedException exception)
            {
                throw CreateGenericSystemCreationFromExistingFileException(exception, fullPathForFile);
            }
            catch (InconsistentDataDetectedException exception)
            {
                throw CreateGenericSystemCreationFromExistingFileException(exception, fullPathForFile);
            }
        }