public void WhenDnsServerInitialized_AndMasterFileOnDisk_ThenDnsServerSuccessfullyInitializes() { // Arrange. Mock <IUdpClient> udpClient = new Mock <IUdpClient>(); Mock <IMasterFile> masterFile = new Mock <IMasterFile>(); masterFile.Setup(m => m.Get(It.IsAny <Question>())).Returns(new List <IResourceRecord>()); CancellationTokenSource source = new CancellationTokenSource(5000); Mock <INodeLifetime> nodeLifetime = new Mock <INodeLifetime>(); nodeLifetime.Setup(n => n.ApplicationStopping).Returns(source.Token); Mock <ILogger> logger = new Mock <ILogger>(); Mock <ILoggerFactory> loggerFactory = new Mock <ILoggerFactory>(); loggerFactory.Setup <ILogger>(f => f.CreateLogger(It.IsAny <string>())).Returns(logger.Object); Mock <IAsyncLoopFactory> asyncLoopFactory = new Mock <IAsyncLoopFactory>(); asyncLoopFactory.Setup(f => f.Run(It.IsAny <string>(), It.IsAny <Func <CancellationToken, Task> >(), It.IsAny <TimeSpan?>(), It.IsAny <TimeSpan?>())).Returns(new Mock <IAsyncLoop>().Object); IDateTimeProvider dateTimeProvider = new Mock <IDateTimeProvider>().Object; DnsSettings dnsSettings = new Mock <DnsSettings>().Object; dnsSettings.DnsHostName = "host.example.com"; dnsSettings.DnsNameServer = "ns1.host.example.com"; dnsSettings.DnsMailBox = "*****@*****.**"; DataFolder dataFolder = CreateDataFolder(this); string masterFilePath = Path.Combine(dataFolder.DnsMasterFilePath, DnsFeature.DnsMasterFileName); // Act. try { // Create masterfile on disk using (FileStream stream = File.Create(masterFilePath)) { stream.Close(); } // Run server DnsSeedServer server = new DnsSeedServer(udpClient.Object, masterFile.Object, asyncLoopFactory.Object, nodeLifetime.Object, loggerFactory.Object, dateTimeProvider, dnsSettings, dataFolder); server.Initialize(); bool waited = source.Token.WaitHandle.WaitOne(); // Assert. server.Should().NotBeNull(); waited.Should().BeTrue(); masterFile.Verify(m => m.Load(It.IsAny <Stream>()), Times.Once); } finally { // Try and remove created if (File.Exists(masterFilePath)) { File.Delete(masterFilePath); } } }
public void WhenDnsServerInitialized_ThenMetricsLoopStarted() { // Arrange. Mock <IUdpClient> udpClient = new Mock <IUdpClient>(); Mock <IMasterFile> masterFile = new Mock <IMasterFile>(); masterFile.Setup(m => m.Get(It.IsAny <Question>())).Returns(new List <IResourceRecord>()); CancellationTokenSource source = new CancellationTokenSource(5000); Mock <INodeLifetime> nodeLifetime = new Mock <INodeLifetime>(); nodeLifetime.Setup(n => n.ApplicationStopping).Returns(source.Token); Mock <ILogger> logger = new Mock <ILogger>(); bool startedLoop = false; logger.Setup(l => l.Log(LogLevel.Information, It.IsAny <EventId>(), It.IsAny <FormattedLogValues>(), It.IsAny <Exception>(), It.IsAny <Func <object, Exception, string> >())).Callback <LogLevel, EventId, object, Exception, Func <object, Exception, string> >((level, id, state, e, f) => { // Don't reset if we found the trace message we were looking for if (!startedLoop) { // Not yet set, check trace message startedLoop = state.ToString().Contains("DNS Metrics"); } }); Mock <ILoggerFactory> loggerFactory = new Mock <ILoggerFactory>(); loggerFactory.Setup <ILogger>(f => f.CreateLogger(It.IsAny <string>())).Returns(logger.Object); IAsyncLoopFactory asyncLoopFactory = new AsyncLoopFactory(loggerFactory.Object); IDateTimeProvider dateTimeProvider = new Mock <IDateTimeProvider>().Object; NodeSettings nodeSettings = NodeSettings.Default(); nodeSettings.DataDir = Directory.GetCurrentDirectory(); DnsSettings dnsSettings = new Mock <DnsSettings>().Object; dnsSettings.DnsHostName = "host.example.com"; dnsSettings.DnsNameServer = "ns1.host.example.com"; dnsSettings.DnsMailBox = "*****@*****.**"; DataFolder dataFolders = new Mock <DataFolder>(nodeSettings).Object; // Act. DnsSeedServer server = new DnsSeedServer(udpClient.Object, masterFile.Object, asyncLoopFactory, nodeLifetime.Object, loggerFactory.Object, dateTimeProvider, dnsSettings, dataFolders); server.Initialize(); bool waited = source.Token.WaitHandle.WaitOne(); // Assert. server.Should().NotBeNull(); waited.Should().BeTrue(); startedLoop.Should().BeTrue(); }
public void WhenDnsServerInitialized_ThenMetricsLoopStarted() { // Arrange. var udpClient = new Mock <IUdpClient>(); var masterFile = new Mock <IMasterFile>(); masterFile.Setup(m => m.Get(It.IsAny <Question>())).Returns(new List <IResourceRecord>()); var source = new CancellationTokenSource(5000); var nodeLifetime = new Mock <INodeLifetime>(); nodeLifetime.Setup(n => n.ApplicationStopping).Returns(source.Token); var logger = new Mock <ILogger>(); bool startedLoop = false; logger .Setup(f => f.Log(It.IsAny <LogLevel>(), It.IsAny <EventId>(), It.IsAny <It.IsAnyType>(), It.IsAny <Exception>(), (Func <It.IsAnyType, Exception, string>)It.IsAny <object>())) .Callback(new InvocationAction(invocation => { if (!startedLoop && (LogLevel)invocation.Arguments[0] == LogLevel.Information) { // Not yet set, check trace message startedLoop = invocation.Arguments[2].ToString().Contains("DNS Metrics"); } })); var loggerFactory = new Mock <ILoggerFactory>(); loggerFactory.Setup <ILogger>(f => f.CreateLogger(It.IsAny <string>())).Returns(logger.Object); IAsyncProvider asyncProvider = new AsyncProvider(loggerFactory.Object, new Mock <ISignals>().Object); IDateTimeProvider dateTimeProvider = new Mock <IDateTimeProvider>().Object; DnsSettings dnsSettings = new DnsSettings(NodeSettings.Default(this.Network)); dnsSettings.DnsHostName = "host.example.com"; dnsSettings.DnsNameServer = "ns1.host.example.com"; dnsSettings.DnsMailBox = "*****@*****.**"; DataFolder dataFolder = CreateDataFolder(this); // Act. var server = new DnsSeedServer(udpClient.Object, masterFile.Object, asyncProvider, nodeLifetime.Object, loggerFactory.Object, dateTimeProvider, dnsSettings, dataFolder); server.Initialize(); bool waited = source.Token.WaitHandle.WaitOne(); // Assert. server.Should().NotBeNull(); waited.Should().BeTrue(); startedLoop.Should().BeTrue(); }
public void WhenDnsServerInitialized_AndNoMasterFileOnDisk_ThenDnsServerSuccessfullyInitializes() { // Arrange. var udpClient = new Mock <IUdpClient>(); var masterFile = new Mock <IMasterFile>(); masterFile.Setup(m => m.Get(It.IsAny <Question>())).Returns(new List <IResourceRecord>()); var source = new CancellationTokenSource(5000); var nodeLifetime = new Mock <INodeLifetime>(); nodeLifetime.Setup(n => n.ApplicationStopping).Returns(source.Token); var logger = new Mock <ILogger>(); var loggerFactory = new Mock <ILoggerFactory>(); loggerFactory.Setup <ILogger>(f => f.CreateLogger(It.IsAny <string>())).Returns(logger.Object); var asyncProvider = new Mock <IAsyncProvider>(); asyncProvider.Setup(f => f.CreateAndRunAsyncLoop(It.IsAny <string>(), It.IsAny <Func <CancellationToken, Task> >(), CancellationToken.None, It.IsAny <TimeSpan?>(), It.IsAny <TimeSpan?>())).Returns(new Mock <IAsyncLoop>().Object); IDateTimeProvider dateTimeProvider = new Mock <IDateTimeProvider>().Object; DnsSettings dnsSettings = new DnsSettings(NodeSettings.Default(this.Network)); dnsSettings.DnsHostName = "host.example.com"; dnsSettings.DnsNameServer = "ns1.host.example.com"; dnsSettings.DnsMailBox = "*****@*****.**"; DataFolder dataFolder = CreateDataFolder(this); string masterFilePath = Path.Combine(dataFolder.DnsMasterFilePath, DnsFeature.DnsMasterFileName); // Try and remove if already exists if (File.Exists(masterFilePath)) { File.Delete(masterFilePath); } // Act. var server = new DnsSeedServer(udpClient.Object, masterFile.Object, asyncProvider.Object, nodeLifetime.Object, loggerFactory.Object, dateTimeProvider, dnsSettings, dataFolder); server.Initialize(); bool waited = source.Token.WaitHandle.WaitOne(); // Assert. server.Should().NotBeNull(); waited.Should().BeTrue(); masterFile.Verify(m => m.Load(It.IsAny <Stream>()), Times.Never); }
public void WhenDnsServerInitialized_ThenSaveMasterfileLoopStarted() { // Arrange. Mock <IUdpClient> udpClient = new Mock <IUdpClient>(); Mock <IMasterFile> masterFile = new Mock <IMasterFile>(); masterFile.Setup(m => m.Get(It.IsAny <Question>())).Returns(new List <IResourceRecord>()); masterFile.Setup(m => m.Save(It.IsAny <Stream>())).Verifiable(); CancellationTokenSource source = new CancellationTokenSource(5000); Mock <INodeLifetime> nodeLifetime = new Mock <INodeLifetime>(); nodeLifetime.Setup(n => n.ApplicationStopping).Returns(source.Token); Mock <ILogger> logger = new Mock <ILogger>(); Mock <ILoggerFactory> loggerFactory = new Mock <ILoggerFactory>(); loggerFactory.Setup <ILogger>(f => f.CreateLogger(It.IsAny <string>())).Returns(logger.Object); IAsyncLoopFactory asyncLoopFactory = new AsyncLoopFactory(loggerFactory.Object); IDateTimeProvider dateTimeProvider = new Mock <IDateTimeProvider>().Object; NodeSettings nodeSettings = NodeSettings.Default(); nodeSettings.DataDir = Directory.GetCurrentDirectory(); DnsSettings dnsSettings = new Mock <DnsSettings>().Object; dnsSettings.DnsHostName = "host.example.com"; dnsSettings.DnsNameServer = "ns1.host.example.com"; dnsSettings.DnsMailBox = "*****@*****.**"; DataFolder dataFolders = new Mock <DataFolder>(nodeSettings).Object; // Act. DnsSeedServer server = new DnsSeedServer(udpClient.Object, masterFile.Object, asyncLoopFactory, nodeLifetime.Object, loggerFactory.Object, dateTimeProvider, dnsSettings, dataFolders); server.Initialize(); bool waited = source.Token.WaitHandle.WaitOne(); // Assert. server.Should().NotBeNull(); waited.Should().BeTrue(); masterFile.Verify(m => m.Save(It.IsAny <Stream>()), Times.AtLeastOnce); }