protected override void Act() { ThreadAbstraction.ExecuteThread(() => { Thread.Sleep(500); _reader.Dispose(); _disposeCompleted.Set(); }); try { _reader.Read(); Assert.Fail(); } catch (ObjectDisposedException ex) { _actualException = ex; } // Dispose may unblock Read() before the dispose has fully completed, so // let's wait until it has completed _disposeCompleted.WaitOne(500); }
public void DisposeShouldCloseHandleAndCompleteImmediately() { SftpSessionMock.InSequence(_seq).Setup(p => p.BeginClose(_handle, null, null)).Returns(_closeAsyncResult); SftpSessionMock.InSequence(_seq).Setup(p => p.EndClose(_closeAsyncResult)); var stopwatch = Stopwatch.StartNew(); _reader.Dispose(); stopwatch.Stop(); Assert.IsTrue(stopwatch.ElapsedMilliseconds < 200, "Dispose took too long to complete: " + stopwatch.ElapsedMilliseconds); SftpSessionMock.Verify(p => p.BeginClose(_handle, null, null), Times.Once); SftpSessionMock.Verify(p => p.EndClose(_closeAsyncResult), Times.Once); }
protected override void Act() { Assert.IsTrue(_beginReadInvoked.WaitOne(5000)); _reader.Dispose(); }