Beispiel #1
0
        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();
        }
Beispiel #4
0
        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);
        }