public void OnGetFileStreamReturnsInternalErrorWhenOffsetNonZero() { using (WindowsFileSystemVirtualizerTester tester = new WindowsFileSystemVirtualizerTester(this.Repo)) { tester.InvokeGetFileDataCallback(expectedResult: HResult.InternalError, byteOffset: 10); } }
public void MoveFile() { using (WindowsFileSystemVirtualizerTester tester = new WindowsFileSystemVirtualizerTester(this.Repo)) { NotificationType notificationType = NotificationType.UseExistingMask; tester.MockVirtualization.OnNotifyFileRenamed( "test.txt", "test2.txt", isDirectory: false, triggeringProcessId: TriggeringProcessId, triggeringProcessImageFileName: TriggeringProcessImageFileName, notificationMask: out notificationType); notificationType.ShouldEqual(NotificationType.UseExistingMask); tester.FileSystemCallbacks.OnIndexFileChangeCallCount.ShouldEqual(0); tester.FileSystemCallbacks.OnLogsHeadChangeCallCount.ShouldEqual(0); tester.FileSystemCallbacks.OnFileRenamedCallCount.ShouldEqual(1); tester.FileSystemCallbacks.OnFolderRenamedCallCount.ShouldEqual(0); tester.FileSystemCallbacks.ResetCalls(); tester.MockVirtualization.OnNotifyFileRenamed( "test_folder_src", "test_folder_dst", isDirectory: true, triggeringProcessId: TriggeringProcessId, triggeringProcessImageFileName: TriggeringProcessImageFileName, notificationMask: out notificationType); notificationType.ShouldEqual(NotificationType.UseExistingMask); tester.FileSystemCallbacks.OnIndexFileChangeCallCount.ShouldEqual(0); tester.FileSystemCallbacks.OnLogsHeadChangeCallCount.ShouldEqual(0); tester.FileSystemCallbacks.OnFileRenamedCallCount.ShouldEqual(0); tester.FileSystemCallbacks.OnFolderRenamedCallCount.ShouldEqual(1); } }
public void GetPlaceholderInformationHandlerPathNotProjected() { using (WindowsFileSystemVirtualizerTester tester = new WindowsFileSystemVirtualizerTester(this.Repo)) { tester.MockVirtualization.requiredCallbacks.GetPlaceholderInfoCallback(1, "doesNotExist", TriggeringProcessId, TriggeringProcessImageFileName).ShouldEqual(HResult.FileNotFound); } }
public void OnGetFileStreamReturnsInternalErrorWhenPlaceholderVersionDoesNotMatchExpected() { using (WindowsFileSystemVirtualizerTester tester = new WindowsFileSystemVirtualizerTester(this.Repo)) { byte[] epochId = new byte[] { FileSystemVirtualizer.PlaceholderVersion + 1 }; tester.InvokeGetFileDataCallback(expectedResult: HResult.InternalError, providerId: epochId); } }
public void GetPlaceholderInformationHandlerPathProjected() { using (WindowsFileSystemVirtualizerTester tester = new WindowsFileSystemVirtualizerTester(this.Repo)) { tester.MockVirtualization.requiredCallbacks.GetPlaceholderInfoCallback(1, "test.txt", TriggeringProcessId, TriggeringProcessImageFileName).ShouldEqual(HResult.Pending); tester.MockVirtualization.WaitForCompletionStatus().ShouldEqual(HResult.Ok); tester.MockVirtualization.CreatedPlaceholders.ShouldContain(entry => entry == "test.txt"); tester.GitIndexProjection.PlaceholdersCreated.ShouldContain(entry => entry == "test.txt"); } }
public void OnStartDirectoryEnumerationReturnsSuccessWhenResultsInMemory() { using (WindowsFileSystemVirtualizerTester tester = new WindowsFileSystemVirtualizerTester(this.Repo, new[] { "test" })) { Guid enumerationGuid = Guid.NewGuid(); tester.GitIndexProjection.EnumerationInMemory = true; tester.MockVirtualization.requiredCallbacks.StartDirectoryEnumerationCallback(1, enumerationGuid, "test", TriggeringProcessId, TriggeringProcessImageFileName).ShouldEqual(HResult.Ok); tester.MockVirtualization.requiredCallbacks.EndDirectoryEnumerationCallback(enumerationGuid).ShouldEqual(HResult.Ok); } }
public void OnGetFileStreamHandlesWriteFailure() { using (WindowsFileSystemVirtualizerTester tester = new WindowsFileSystemVirtualizerTester(this.Repo)) { tester.MockVirtualization.WriteFileReturnResult = HResult.InternalError; tester.InvokeGetFileDataCallback(expectedResult: HResult.Pending); HResult result = tester.MockVirtualization.WaitForCompletionStatus(); result.ShouldEqual(tester.MockVirtualization.WriteFileReturnResult); } }
public void OnGetFileStreamReturnsPendingAndCompletesWithSuccessWhenNoFailures() { using (WindowsFileSystemVirtualizerTester tester = new WindowsFileSystemVirtualizerTester(this.Repo)) { tester.MockVirtualization.WriteFileReturnResult = HResult.Ok; tester.InvokeGetFileDataCallback(expectedResult: HResult.Pending); tester.MockVirtualization.WaitForCompletionStatus().ShouldEqual(HResult.Ok); } }
public void OnStartDirectoryEnumerationReturnsPendingWhenResultsNotInMemory() { using (WindowsFileSystemVirtualizerTester tester = new WindowsFileSystemVirtualizerTester(this.Repo)) { Guid enumerationGuid = Guid.NewGuid(); tester.GitIndexProjection.EnumerationInMemory = false; tester.MockVirtualization.requiredCallbacks.StartDirectoryEnumerationCallback(1, enumerationGuid, "test", TriggeringProcessId, TriggeringProcessImageFileName).ShouldEqual(HResult.Pending); tester.MockVirtualization.WaitForCompletionStatus().ShouldEqual(HResult.Ok); tester.MockVirtualization.requiredCallbacks.EndDirectoryEnumerationCallback(enumerationGuid).ShouldEqual(HResult.Ok); } }
public void MoveFileIntoDotGitDirectory() { using (WindowsFileSystemVirtualizerTester tester = new WindowsFileSystemVirtualizerTester(this.Repo)) { NotificationType notificationType = NotificationType.UseExistingMask; tester.MockVirtualization.OnNotifyFileRenamed( "test.txt", Path.Combine(".git", "test.txt"), isDirectory: false, triggeringProcessId: TriggeringProcessId, triggeringProcessImageFileName: TriggeringProcessImageFileName, notificationMask: out notificationType); notificationType.ShouldEqual(NotificationType.UseExistingMask); tester.FileSystemCallbacks.OnIndexFileChangeCallCount.ShouldEqual(0); tester.FileSystemCallbacks.OnLogsHeadChangeCallCount.ShouldEqual(0); tester.FileSystemCallbacks.OnFileRenamedCallCount.ShouldEqual(1); tester.FileSystemCallbacks.OnFolderRenamedCallCount.ShouldEqual(0); tester.FileSystemCallbacks.ResetCalls(); // We don't expect something to rename something from outside the .gitdir to the .git\index, but this // verifies that we behave as expected in case that happens tester.MockVirtualization.OnNotifyFileRenamed( "test.txt", Path.Combine(".git", "index"), isDirectory: false, triggeringProcessId: TriggeringProcessId, triggeringProcessImageFileName: TriggeringProcessImageFileName, notificationMask: out notificationType); notificationType.ShouldEqual(NotificationType.UseExistingMask); tester.FileSystemCallbacks.OnIndexFileChangeCallCount.ShouldEqual(1); tester.FileSystemCallbacks.OnLogsHeadChangeCallCount.ShouldEqual(0); tester.FileSystemCallbacks.OnFileRenamedCallCount.ShouldEqual(1); tester.FileSystemCallbacks.OnFolderRenamedCallCount.ShouldEqual(0); tester.FileSystemCallbacks.ResetCalls(); // We don't expect something to rename something from outside the .gitdir to the .git\logs\HEAD, but this // verifies that we behave as expected in case that happens tester.MockVirtualization.OnNotifyFileRenamed( "test.txt", Path.Combine(".git", "logs\\HEAD"), isDirectory: false, triggeringProcessId: TriggeringProcessId, triggeringProcessImageFileName: TriggeringProcessImageFileName, notificationMask: out notificationType); notificationType.ShouldEqual(NotificationType.UseExistingMask); tester.FileSystemCallbacks.OnIndexFileChangeCallCount.ShouldEqual(0); tester.FileSystemCallbacks.OnLogsHeadChangeCallCount.ShouldEqual(1); tester.FileSystemCallbacks.OnFileRenamedCallCount.ShouldEqual(1); tester.FileSystemCallbacks.OnFolderRenamedCallCount.ShouldEqual(0); tester.FileSystemCallbacks.ResetCalls(); } }
public void OnGetFileStreamHandlesHResultHandleResult() { using (WindowsFileSystemVirtualizerTester tester = new WindowsFileSystemVirtualizerTester(this.Repo)) { tester.MockVirtualization.WriteFileReturnResult = HResult.Handle; tester.InvokeGetFileDataCallback(expectedResult: HResult.Pending); HResult result = tester.MockVirtualization.WaitForCompletionStatus(); result.ShouldEqual(tester.MockVirtualization.WriteFileReturnResult); MockTracer mockTracker = this.Repo.Context.Tracer as MockTracer; mockTracker.RelatedErrorEvents.ShouldBeEmpty(); } }
public void OnGetFileStreamHandlesTryCopyBlobContentStreamThrowingOperationCanceled() { using (WindowsFileSystemVirtualizerTester tester = new WindowsFileSystemVirtualizerTester(this.Repo)) { MockTracer mockTracker = this.Repo.Context.Tracer as MockTracer; mockTracker.WaitRelatedEventName = "GetFileStreamHandlerAsyncHandler_OperationCancelled"; MockGVFSGitObjects mockGVFSGitObjects = this.Repo.GitObjects as MockGVFSGitObjects; mockGVFSGitObjects.CancelTryCopyBlobContentStream = true; tester.InvokeGetFileDataCallback(expectedResult: HResult.Pending); mockTracker.WaitForRelatedEvent(); } }
public void OnGetFileStreamHandlesCancellationDuringWriteAction() { using (WindowsFileSystemVirtualizerTester tester = new WindowsFileSystemVirtualizerTester(this.Repo)) { MockTracer mockTracker = this.Repo.Context.Tracer as MockTracer; mockTracker.WaitRelatedEventName = "GetFileStreamHandlerAsyncHandler_OperationCancelled"; tester.MockVirtualization.BlockCreateWriteBuffer(willWaitForRequest: true); tester.InvokeGetFileDataCallback(expectedResult: HResult.Pending); tester.MockVirtualization.WaitForCreateWriteBuffer(); tester.MockVirtualization.OnCancelCommand(1); tester.MockVirtualization.UnblockCreateWriteBuffer(); mockTracker.WaitForRelatedEvent(); } }
public void GetPlaceholderInformationHandlerCancelledDuringNetworkRequest() { using (WindowsFileSystemVirtualizerTester tester = new WindowsFileSystemVirtualizerTester(this.Repo)) { MockTracer mockTracker = this.Repo.Context.Tracer as MockTracer; mockTracker.WaitRelatedEventName = "GetPlaceholderInformationAsyncHandler_GetProjectedFileInfo_Cancelled"; tester.GitIndexProjection.ThrowOperationCanceledExceptionOnProjectionRequest = true; tester.MockVirtualization.requiredCallbacks.GetPlaceholderInfoCallback(1, "test.txt", TriggeringProcessId, TriggeringProcessImageFileName).ShouldEqual(HResult.Pending); // Cancelling in the middle of GetPlaceholderInformation in the middle of a network request should not result in placeholder // getting created mockTracker.WaitForRelatedEvent(); tester.MockVirtualization.CreatedPlaceholders.ShouldNotContain(entry => entry == "test.txt"); tester.GitIndexProjection.PlaceholdersCreated.ShouldNotContain(entry => entry == "test.txt"); } }
public void GetPlaceholderInformationHandlerCancelledDuringAsyncCallback() { using (WindowsFileSystemVirtualizerTester tester = new WindowsFileSystemVirtualizerTester(this.Repo)) { tester.GitIndexProjection.BlockGetProjectedFileInfo(willWaitForRequest: true); tester.MockVirtualization.requiredCallbacks.GetPlaceholderInfoCallback(1, "test.txt", TriggeringProcessId, TriggeringProcessImageFileName).ShouldEqual(HResult.Pending); tester.GitIndexProjection.WaitForGetProjectedFileInfo(); tester.MockVirtualization.OnCancelCommand(1); tester.GitIndexProjection.UnblockGetProjectedFileInfo(); // Cancelling in the middle of GetPlaceholderInformation still allows it to create placeholders when the cancellation does not // interrupt network requests tester.MockVirtualization.WaitForPlaceholderCreate(); tester.GitIndexProjection.WaitForPlaceholderCreate(); tester.MockVirtualization.CreatedPlaceholders.ShouldContain(entry => entry == "test.txt"); tester.GitIndexProjection.PlaceholdersCreated.ShouldContain(entry => entry == "test.txt"); } }
public void GetPlaceholderInformationHandlerCancelledBeforeSchedulingAsync() { using (WindowsFileSystemVirtualizerTester tester = new WindowsFileSystemVirtualizerTester(this.Repo)) { tester.GitIndexProjection.BlockIsPathProjected(willWaitForRequest: true); Task.Run(() => { // Wait for OnGetPlaceholderInformation to call IsPathProjected and then while it's blocked there // call OnCancelCommand tester.GitIndexProjection.WaitForIsPathProjected(); tester.MockVirtualization.OnCancelCommand(1); tester.GitIndexProjection.UnblockIsPathProjected(); }); tester.MockVirtualization.requiredCallbacks.GetPlaceholderInfoCallback(1, "test.txt", TriggeringProcessId, TriggeringProcessImageFileName).ShouldEqual(HResult.Pending); // Cancelling before GetPlaceholderInformation has registered the command results in placeholders being created tester.MockVirtualization.WaitForPlaceholderCreate(); tester.GitIndexProjection.WaitForPlaceholderCreate(); tester.MockVirtualization.CreatedPlaceholders.ShouldContain(entry => entry == "test.txt"); tester.GitIndexProjection.PlaceholdersCreated.ShouldContain(entry => entry == "test.txt"); } }