예제 #1
0
        public async Task Monitor_NoTimeout()
        {
            var connection = new TestConnection();
            var task       = new OperationTask();
            var flow       = new OperationTaskflow(task);

            List <OperationEvent> received = new List <OperationEvent>();

            void callback(OperationEvent operationEvent)
            {
                received.Add(operationEvent);
            }

            var monitor = new OperationMonitor(
                flow,
                TimeSpan.FromMilliseconds(200),
                TimeSpan.FromMilliseconds(200),
                connection,
                callback);

            // Time to start monitoring
            await Task.Delay(100);

            monitor.Update(TaskProgress.Acknowledged);

            await Task.Delay(100);

            flow.Update(TaskProgress.Confirmed);

            await Task.Delay(300);

            Assert.AreEqual(0, received.Count);
            Assert.IsTrue(monitor.IsComplete);
        }
예제 #2
0
        public void Monitor_AcknowledgeLost()
        {
            var connection = new TestConnection();
            var task       = new OperationTask();
            var flow       = new OperationTaskflow(task);

            AutoResetEvent signal = new AutoResetEvent(false);

            void callback(OperationEvent operationEvent)
            {
                signal.Set();
            }

            connection.NextStatus = new OperationStatus
            {
                Events     = new[] { new OperationEvent() },
                RetryAfter = TimeSpan.FromMilliseconds(100)
            };

            var monitor = new OperationMonitor(
                flow,
                TimeSpan.FromMilliseconds(100),
                TimeSpan.FromMilliseconds(2000),
                connection,
                callback);

            Assert.IsTrue(signal.WaitOne(200));
            Assert.IsTrue(signal.WaitOne(200));
            Assert.IsTrue(signal.WaitOne(200));

            monitor.Update(TaskProgress.Confirmed);

            Assert.IsFalse(signal.WaitOne(200));

            Assert.IsTrue(monitor.IsComplete);
        }