示例#1
0
        public void MakeSureYouCannotDoAThingWithAFileThatIsLocked()
        {
            VirtualFileSystem fileSystem = VirtualFileSystemFactory.CreateDefaultFileSystem();

            FolderInfo folder1Node = fileSystem.CreateFolder(@"\folder1");
            FileInfo   newFile     = fileSystem.CreateFile(@"\folder1\file1");

            using (DataStreamReadable dataStream = fileSystem.OpenFileForReading(newFile.FullPath))
            {
                ExceptionAssert.MakeSureExceptionIsRaisedBy <FileLockedException>(
                    delegate
                {
                    fileSystem.OpenFileForWriting(newFile.FullPath);
                });

                ExceptionAssert.MakeSureExceptionIsRaisedBy <FileLockedException>(
                    delegate
                {
                    fileSystem.DeleteFile(newFile.FullPath);
                });

                ExceptionAssert.MakeSureExceptionIsRaisedBy <FileLockedException>(
                    delegate
                {
                    fileSystem.RenameFile(newFile.FullPath, "newFile.txt");
                });

                ExceptionAssert.MakeSureExceptionIsRaisedBy <FolderLockedException>(
                    delegate
                {
                    fileSystem.RenameFolder(folder1Node.FullPath, "Untitled");
                });
            }
        }
示例#2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="dataStreamReadable"></param>
 /// <exception cref="ArgumentNullException"></exception>
 public DataStreamReadableAdaptedToStream(DataStreamReadable dataStreamReadable)
 {
     if (dataStreamReadable == null)
     {
         throw new ArgumentNullException("dataStreamReadable");
     }
     _dataStreamReadable = dataStreamReadable;
 }
        public void TryWritingABigFileReadingItAfterSystemReload()
        {
            var testCollaborators = TestCollaboratorsFactory.CreateAllCollaborators(50000, false);

            byte[] interestingBytes = ByteBufferFactory.BuildSomeGuidsIntoByteArray(5000);

            int streamLength;

            const int numberOfGuidPortionsToReadAndWrite = 500;

            using (DataStreamReadableWritable stream = testCollaborators.VirtualFileSystem.CreateAndOpenFileForWriting(@"\hey"))
            {
                for (int i = 0; i < numberOfGuidPortionsToReadAndWrite; i++)
                {
                    stream.Write(interestingBytes, 0, interestingBytes.Length);
                }

                streamLength = stream.Length;
            }

            VirtualFileSystem fileSystemReloaded =
                TestCollaboratorsFactory.CreateFileSystemFromExistingStream(testCollaborators.Stream);

            using (DataStreamReadable stream = fileSystemReloaded.OpenFileForReading(@"\hey"))
            {
                Assert.AreEqual(streamLength, stream.Length);

                var bytesRead = new byte[interestingBytes.Length];

                for (int i = 0; i < numberOfGuidPortionsToReadAndWrite; i++)
                {
                    int numberOfBytesRead = stream.Read(bytesRead, 0, interestingBytes.Length);
                    CollectionAssert.AreEqual(interestingBytes, bytesRead);
                }
            }
        }
示例#4
0
        public void MakeSureYouReadSameStuffFromTwoStreamsLinkingToTheSameFile()
        {
            VirtualFileSystem fileSystem = VirtualFileSystemFactory.CreateDefaultFileSystem();

            FolderInfo folder1Node = fileSystem.CreateFolder(@"\folder1");
            FileInfo   newFile     = fileSystem.CreateFile(@"\folder1\file1");

            var relativelyInterestingData = new List <byte>();

            for (int i = 0; i < 1000; i++)
            {
                relativelyInterestingData.AddRange(Guid.NewGuid().ToByteArray());
            }

            using (DataStreamReadableWritable dataStream = fileSystem.OpenFileForWriting(newFile.FullPath))
            {
                dataStream.Write(relativelyInterestingData.ToArray(), 0, relativelyInterestingData.Count);
            }

            DataStreamReadable dataStream1 = fileSystem.OpenFileForReading(newFile.FullPath);
            DataStreamReadable dataStream2 = fileSystem.OpenFileForReading(newFile.FullPath);

            Exception anyThreadException = null;

            var bytesReadByThreadOne = new List <byte>();

            var thread1 = new Thread(delegate()
            {
                try
                {
                    var buffer = new byte[1];

                    while (dataStream1.Read(buffer, 0, 1) == 1)
                    {
                        bytesReadByThreadOne.Add(buffer[0]);
                    }
                }
                catch (Exception exception)
                {
                    anyThreadException = new InvalidOperationException("", exception);
                }
            });

            var bytesReadByThreadTwo = new List <byte>();

            var thread2 = new Thread(delegate()
            {
                try
                {
                    while (dataStream2.Position != dataStream2.Length)
                    {
                        var buffer = new byte[1];
                        dataStream2.Read(buffer, 0, 1);
                        bytesReadByThreadTwo.Add(buffer[0]);
                    }
                }
                catch (Exception exception)
                {
                    anyThreadException = new InvalidOperationException("Возникло исключение в одном из тестовых потоков. Детали и стэк вызова - в обернутом исключении.", exception);
                }
            });

            thread1.Start();
            thread2.Start();

            thread2.Join();
            thread1.Join();

            if (anyThreadException != null)
            {
                throw anyThreadException;
            }

            CollectionAssert.AreEqual(relativelyInterestingData, bytesReadByThreadOne);
            CollectionAssert.AreEqual(relativelyInterestingData, bytesReadByThreadTwo);
        }