Пример #1
0
        private async Task ExchangeIn()
        {
            await Task.Yield();

            while (!_cancellation.IsCancellationRequested)
            {
                try
                {
                    _monitorableEndpointRegistry.UpdateEndpoints(await _exchangeClient.GetEndpointIdentitiesAsync(_cancellation.Token));
                }
                catch (OperationCanceledException)
                {
                    return;
                }
                catch (Exception e)
                {
                    Logger.Error($"Unable to query changes: {e.Message}", e);
                }

                await DelayNoThrow(_config.EndpointChangeQueryInterval);
            }
        }
        public void UpdateEndpoints_should_register_new_endpoints_dispose_not_specified_ones_and_ignore_ones_with_unrecognized_monitor_type()
        {
            MockMonitor("monitor");
            var e1 = _registry.TryRegister(new EndpointIdentity(Guid.NewGuid(), "monitor", "address"));
            var e2 = _registry.TryRegister(new EndpointIdentity(Guid.NewGuid(), "monitor", "address2"));
            var e3 = _registry.TryRegister(new EndpointIdentity(Guid.NewGuid(), "monitor", "address3"));
            var i4 = new EndpointIdentity(Guid.NewGuid(), "monitor", "address4");
            var i5 = new EndpointIdentity(Guid.NewGuid(), "monitor", "address4");
            var i6 = new EndpointIdentity(Guid.NewGuid(), "unknownMonitor", "address4");

            List <MonitorableEndpoint> captured = new List <MonitorableEndpoint>();

            _registry.NewEndpointAdded += e => captured.Add(e);

            _registry.UpdateEndpoints(e1.Identity, e2.Identity, i4, i5, i6);

            Assert.Equal(2, captured.Count);
            Assert.Contains(i4, captured.Select(c => c.Identity));
            Assert.Contains(i5, captured.Select(c => c.Identity));

            Assert.False(e1.IsDisposed, "e1.IsDisposed");
            Assert.False(e2.IsDisposed, "e2.IsDisposed");
            Assert.True(e3.IsDisposed, "e3.IsDisposed");
        }