public async Task Open_AllowsMultipleThreads() { var gate = new ManualGate(); gate.Open(); var waitResult1 = await gate.WaitAsync(TimeSpan.Zero); var waitResult2 = await gate.WaitAsync(TimeSpan.Zero); Assert.True(waitResult1 && waitResult2); }
public async Task Close_PreventsThreads_AfterBeginOpen() { var gate = new ManualGate(); gate.Open(); await gate.WaitAsync(); gate.Close(); var waitResult = await gate.WaitAsync(TimeSpan.FromSeconds(1)); Assert.False(waitResult); }
public async Task WaitAsync_ReturnsFalse_AfterTimeoutElapsed() { var threshold = TimeSpan.FromMilliseconds(1); var gate = new ManualGate(); var wasOpened = await gate.WaitAsync(threshold); Assert.False(wasOpened); }
public void WaitAsync_DoesNotBlock() { var beginTime = DateTime.UtcNow; var threshold = TimeSpan.FromSeconds(10); var gate = new ManualGate(); var waitTask = gate.WaitAsync(threshold); Assert.True(DateTime.UtcNow < beginTime + threshold); }
public async Task WaitAsync_TimesOut_AfterTimeoutElapsed() { var beginTime = DateTime.UtcNow; var threshold = TimeSpan.FromSeconds(1); var gate = new ManualGate(); await gate.WaitAsync(threshold); Assert.True(DateTime.UtcNow >= beginTime + threshold); }
public async Task WaitAsync_ReturnsTrue_WhenOpened_BeforeWaiting() { var threshold = TimeSpan.FromSeconds(1); var gate = new ManualGate(); gate.Open(); var wasOpened = await gate.WaitAsync(threshold); Assert.True(wasOpened); }
public async Task WaitAsync_ReturnsFalse_AfterCancellationRequested() { var cancellationTokenSource = new CancellationTokenSource(); var cancellationToken = cancellationTokenSource.Token; var gate = new ManualGate(); var waitTask = gate.WaitAsync(TimeSpan.MaxValue, cancellationToken); cancellationTokenSource.Cancel(); var result = await waitTask; Assert.False(result); }