// private methods private void ThreadStart() { _state = DnsMonitorState.Running; try { Monitor(); } catch (OperationCanceledException) { // ignore OperationCanceledException } catch (Exception exception) { _unhandledException = exception; if (_sdamInformationEventHandler != null) { var message = $"Unhandled exception in DnsMonitor: {exception}."; var sdamInformationEvent = new SdamInformationEvent(() => message); _sdamInformationEventHandler(sdamInformationEvent); } _state = DnsMonitorState.Failed; return; } _state = DnsMonitorState.Stopped; }
// constructors public DnsMonitor(IDnsMonitoringCluster cluster, IDnsResolver dnsResolver, string lookupDomainName, IEventSubscriber eventSubscriber, CancellationToken cancellationToken) { _cluster = Ensure.IsNotNull(cluster, nameof(cluster)); _dnsResolver = Ensure.IsNotNull(dnsResolver, nameof(dnsResolver)); _lookupDomainName = EnsureLookupDomainNameIsValid(lookupDomainName); _cancellationToken = cancellationToken; _service = "_mongodb._tcp." + _lookupDomainName; _state = DnsMonitorState.Created; eventSubscriber?.TryGetEventHandler(out _sdamInformationEventHandler); }
public void Start_should_set_state_to_Running_when_starting() { var mockCluster = new Mock <IDnsMonitoringCluster>(); var subject = CreateSubject(cluster: mockCluster.Object); DnsMonitorState actualState = (DnsMonitorState)(-1); mockCluster .Setup(m => m.ShouldDnsMonitorStop()) .Returns(() => { actualState = subject.State; return(true); }); var thread = subject.Start(); thread.Join(); actualState.Should().Be(DnsMonitorState.Running); }