Ejemplo n.º 1
0
        public async Task RunInBackgroundAsync_Using_OnFatalError()
        {
            Exception fakeException = new Exception();
            Exception fatalError    = null;

            //set up processor to throw
            var mockLogProcessor = new Mock <ILogProcessor>();

            mockLogProcessor
            .Setup(s => s.ProcessLogsAsync(It.IsAny <FilterLog[]>()))
            .ThrowsAsync(fakeException);


            var web3Mock = new Web3Mock();
            var logs     = new[] { new FilterLog() };

            web3Mock.GetLogsMock
            .Setup(p => p.SendRequestAsync(It.IsAny <NewFilterInput>(), null))
            .ReturnsAsync(logs);

            web3Mock.BlockNumberMock
            .Setup(p => p.SendRequestAsync(null))
            .ReturnsAsync(100.ToHexBigInteger());

            var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(10));

            var processor = new LogsProcessorBuilder(web3Mock.Eth)
                            .Set(p => p.BlocksPerBatch     = 1)
                            .Set(p => p.MinimumBlockNumber = 0)
                            .OnFatalError(e => fatalError  = e)
                            .Add(mockLogProcessor.Object)
                            .Build();

            var backgroundTask = processor.ProcessContinuallyInBackgroundAsync(cancellationTokenSource.Token);

            //simulate doing some work until cancellation is requested
            while (!backgroundTask.IsCompleted)
            {
                await Task.Delay(100);
            }

            Assert.Same(fakeException, fatalError);
        }