public void TryEnterAndReleaseALot() { var semaphore = new SemaphoreSlimIsolationSemaphore(GroupKey.Named("Test"), new TransientConfigurableValue <int>(5), new IgnoringStats()); Assert.True(semaphore.TryEnter()); Assert.True(semaphore.TryEnter()); Assert.True(semaphore.TryEnter()); Assert.True(semaphore.TryEnter()); Assert.True(semaphore.TryEnter()); Assert.False(semaphore.TryEnter()); Assert.False(semaphore.TryEnter()); Assert.False(semaphore.TryEnter()); semaphore.Release(); Assert.True(semaphore.TryEnter()); Assert.False(semaphore.TryEnter()); semaphore.Release(); semaphore.Release(); semaphore.Release(); semaphore.Release(); semaphore.Release(); Assert.True(semaphore.TryEnter()); Assert.True(semaphore.TryEnter()); Assert.True(semaphore.TryEnter()); semaphore.Release(); Assert.True(semaphore.TryEnter()); Assert.True(semaphore.TryEnter()); Assert.True(semaphore.TryEnter()); Assert.False(semaphore.TryEnter()); Assert.False(semaphore.TryEnter()); semaphore.Release(); semaphore.Release(); semaphore.Release(); semaphore.Release(); semaphore.Release(); }
public void TryEnter_WhenSemaphoreIsAvailable_ReturnsTrueImmediately() { var semaphore = new SemaphoreSlimIsolationSemaphore(GroupKey.Named("Test"), new TransientConfigurableValue <int>(1), new IgnoringStats()); var stopwatch = Stopwatch.StartNew(); Assert.True(semaphore.TryEnter()); Assert.True(stopwatch.ElapsedMilliseconds < 10); }
public void Release_WhenSemaphoreNotAvailable_MakesItAvailable() { var semaphore = new SemaphoreSlimIsolationSemaphore(GroupKey.Named("Test"), new TransientConfigurableValue <int>(1), new IgnoringStats()); semaphore.TryEnter(); Assert.False(semaphore.TryEnter()); semaphore.Release(); Assert.True(semaphore.TryEnter()); }
public async Task Construct_CreatesGauges() { const long gaugeIntervalMillis = 50; var mockStats = new Mock <IStats>(); var semaphore = new SemaphoreSlimIsolationSemaphore(GroupKey.Named("Test"), new TransientConfigurableValue <int>(10), mockStats.Object, new TransientConfigurableValue <long>(gaugeIntervalMillis)); await Task.Delay(TimeSpan.FromMilliseconds(gaugeIntervalMillis + 50)); mockStats.Verify(m => m.Gauge("mjolnir fallback-semaphore Test available", "Available", 10), Times.AtLeastOnce); }
public void Release_WhenSemaphoreNotInUse_DoesNothing() { var semaphore = new SemaphoreSlimIsolationSemaphore(GroupKey.Named("Test"), new TransientConfigurableValue <int>(5), new IgnoringStats()); semaphore.Release(); // Shouldn't throw. }