public async Task ShouldNoStartSynchronizationWhenConditionFalse() { var hasSynchronized = false; ChannelUnderTest.AddSynchronizationStartedObserver(_ => hasSynchronized = true); await ChannelUnderTest.Drain(false); Assert.IsFalse(hasSynchronized); }
public async Task ShouldCallSynchronizationStartedObserver() { bool isCalled = false; ChannelUnderTest.AddSynchronizationStartedObserver(start => { Assert.AreEqual(typeof(LocalTestResource), start.Type1); Assert.AreEqual(typeof(RemoteTestResource), start.Type2); isCalled = true; }); await ChannelUnderTest.Synchronize(); Assert.IsTrue(isCalled); }
public void ShouldIgnoreSecondSynchCallIfASynchIsAlreadyRunning() { int startCallCount = 0; ChannelUnderTest.AddSynchronizationStartedObserver(_ => { // put in small delay to make test deterministic and have thread at least hold on for little longer. Task.Delay(50); startCallCount++; }); // Start first in new thread that should immediately stop second from running. var task1 = Task.Run(() => ChannelUnderTest.Synchronize()); // This one should never start since it starts immediately after, don't expect first to finish. var task2 = ChannelUnderTest.Synchronize(); Task.WaitAll(task1, task2); Assert.AreEqual(1, startCallCount); }