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"); }); } }
/// <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); } } }
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); }