예제 #1
0
        public async Task ShouldNoStartSynchronizationWhenConditionFalse()
        {
            var hasSynchronized = false;

            ChannelUnderTest.AddSynchronizationStartedObserver(_ => hasSynchronized = true);
            await ChannelUnderTest.Drain(false);

            Assert.IsFalse(hasSynchronized);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }