Example #1
0
        public async Task ReturnsContentOfFileWhenNoRange()
        {
            var    file     = Path.GetTempFileName();
            string contents = new string('A', 1000);
            await File.WriteAllTextAsync(file, contents).ConfigureAwait(false);

            var mockLogger = new Mock <ILogger <LogfileProvider> >();
            var config     = new SpringBootConfig
            {
                LogFilePath = file,
            };

            var mockMonitor = new Mock <IOptionsMonitor <SpringBootConfig> >();

            mockMonitor.Setup(x => x.CurrentValue).Returns(config);

            var sut = new LogfileProvider(mockLogger.Object, mockMonitor.Object);

            var result = sut.GetLog();

            using var sr = new StreamReader(result);
            var resultStr = await sr.ReadToEndAsync().ConfigureAwait(false);

            resultStr.Should().HaveLength(1000);
        }
        public void CreateApplicationRespectsMetadata()
        {
            var hostingEnv = Mock.Of <IWebHostEnvironment>();

            hostingEnv.ApplicationName = "appName";

            var config = new SpringBootConfig();

            config.Application.ServiceUrl = new System.Uri("http://example.com");
            config.Application.Metadata   = new Dictionary <string, string>()
            {
                { "unique", "value" }
            };
            var acessor = new Mock <IOptionsMonitor <SpringBootConfig> >();

            acessor.Setup(x => x.CurrentValue).Returns(config);

            var mdp = new Mock <IMetadataProvider>();

            mdp.Setup(x => x.GetMetadata()).Returns(new Dictionary <string, string>()
            {
                { "test", "value" },
            });

            var sbc = new ApplicationBuilder(hostingEnv, new List <IMetadataProvider>()
            {
                mdp.Object
            }, acessor.Object);
            var app = sbc.CreateApplication();

            app.Metadata.Count.Should().Equals(1);
            app.Metadata.Should().Contain(new KeyValuePair <string, string>("test", "value"));
            app.Metadata.Should().Contain(new KeyValuePair <string, string>("unique", "value"));
        }
        public async Task ExecuteAsyncRetries()
        {
            var appBuilder = new Mock <IApplicationBuilder>();

            appBuilder.Setup(x => x.CreateApplication()).Returns(new Application());

            Uri uri    = new Uri("http://example.com");
            var config = new SpringBootConfig()
            {
                SpringBootServerUrl = uri, RetryTimeout = TimeSpan.FromMilliseconds(5)
            };

            var acessor = new Mock <IOptionsMonitor <SpringBootConfig> >();

            acessor.Setup(x => x.CurrentValue).Returns(config);

            var logger      = new Mock <ILogger <SpringBootClient> >();
            var restAPiMock = new Mock <ISpringBootAdminRESTAPI>();

            restAPiMock.Setup(x => x.PostAsync(It.IsNotNull <Application>(), It.Is <Uri>(x => x == uri))).Throws(new DuplicateKeyException());

            var sbc = new SpringBootClient(logger.Object, appBuilder.Object, acessor.Object, restAPiMock.Object);

            await sbc.StartAsync(CancellationToken.None).ConfigureAwait(false);

            await Task.Delay(11).ConfigureAwait(false);

            restAPiMock.Verify(x => x.PostAsync(It.IsAny <Application>(), It.IsAny <Uri>()), Times.AtLeast(2));
            sbc.Dispose();
        }
        public async Task RegisterReturnsAssignedId()
        {
            var appBuilder = new Mock <IApplicationBuilder>();

            appBuilder.Setup(x => x.CreateApplication()).Returns(new Application());

            Uri uri    = new Uri("http://example.com");
            var config = new SpringBootConfig()
            {
                SpringBootServerUrl = uri
            };

            var acessor = new Mock <IOptionsMonitor <SpringBootConfig> >();

            acessor.Setup(x => x.CurrentValue).Returns(config);

            var logger      = new Mock <ILogger <SpringBootClient> >();
            var restAPiMock = new Mock <ISpringBootAdminRESTAPI>();

            restAPiMock.Setup(x => x.PostAsync(It.IsNotNull <Application>(), It.Is <Uri>(x => x == uri))).Returns(new ValueTask <SpringBootRegisterResponse>(new SpringBootRegisterResponse()
            {
                Id = Id
            }).AsTask);

            var sbc = new SpringBootClient(logger.Object, appBuilder.Object, acessor.Object, restAPiMock.Object);

            var result = await sbc.RegisterAsync().ConfigureAwait(false);

            result.Should().Equals(Id);
            sbc.Dispose();
        }
        public async Task ExecuteAsyncStopsWhenCancelled()
        {
            var appBuilder = new Mock <IApplicationBuilder>();

            appBuilder.Setup(x => x.CreateApplication()).Returns(new Application());

            Uri uri    = new Uri("http://example.com");
            var config = new SpringBootConfig()
            {
                SpringBootServerUrl = uri, RetryTimeout = TimeSpan.FromMilliseconds(5)
            };

            var acessor = new Mock <IOptionsMonitor <SpringBootConfig> >();

            acessor.Setup(x => x.CurrentValue).Returns(config);

            var logger      = new Mock <ILogger <SpringBootClient> >();
            var restAPiMock = new Mock <ISpringBootAdminRESTAPI>();

            restAPiMock.Setup(x => x.PostAsync(It.IsNotNull <Application>(), It.Is <Uri>(x => x == uri))).Throws(new DuplicateKeyException());

            var sbc = new SpringBootClient(logger.Object, appBuilder.Object, acessor.Object, restAPiMock.Object);

            // the token passed to startasync is not the one used by ExecuteAsync (https://github.com/dotnet/extensions/issues/1245)
            await sbc.StartAsync(CancellationToken.None).ConfigureAwait(false);

            await Task.Delay(11).ConfigureAwait(false);

            await sbc.StopAsync(CancellationToken.None).ConfigureAwait(false);

            sbc.Registering.Should().BeFalse();
            sbc.Dispose();
        }
        public LogfileProvider(ILogger <LogfileProvider> logger, IOptionsMonitor <SpringBootConfig> optionsMonitor, ILogFileLocationResolver resolver = null !)
        {
            if (optionsMonitor is null)
            {
                throw new ArgumentNullException(nameof(optionsMonitor));
            }

            config        = optionsMonitor.CurrentValue;
            this.logger   = logger;
            this.resolver = resolver;
        }
Example #7
0
        public void ReturnsErrorWhenFileDoesNotExist()
        {
            var mockLogger = new Mock <ILogger <LogfileProvider> >();
            var config     = new SpringBootConfig
            {
                LogFilePath = "does/not/exist.log",
            };

            var mockMonitor = new Mock <IOptionsMonitor <SpringBootConfig> >();

            mockMonitor.Setup(x => x.CurrentValue).Returns(config);

            var sut = new LogfileProvider(mockLogger.Object, mockMonitor.Object);

            sut.Invoking(x => sut.GetLog().ConfigureAwait(false)).Should().Throw <FileNotFoundException>();
        }
        public void CreateApplicationSetServiceUrl()
        {
            var hostingEnv = Mock.Of <IWebHostEnvironment>();

            hostingEnv.ApplicationName = "appName";

            var config = new SpringBootConfig();

            config.Application.ServiceUrl = new System.Uri("http://example.com");
            var acessor = new Mock <IOptionsMonitor <SpringBootConfig> >();

            acessor.Setup(x => x.CurrentValue).Returns(config);

            var sbc = new ApplicationBuilder(hostingEnv, new List <IMetadataProvider>(), acessor.Object);
            var app = sbc.CreateApplication();

            app.ManagementUrl.Should().Equals("http://example.com/");
        }
Example #9
0
        public ThreadDumpProvider(ILogger <ThreadDumpProvider> logger, IOptionsMonitor <SpringBootConfig> optionsMonitor)
        {
            if (optionsMonitor is null)
            {
                throw new ArgumentNullException(nameof(optionsMonitor));
            }

            this.logger  = logger;
            this.options = optionsMonitor.CurrentValue;

            if (options.EnableThreadDump)
            {
                logger.LogInformation("ThreadDumps are ENABLED. Beware of unexpected crashes and misbehaviour. Do not use this setting in Production");
            }
            else
            {
                logger.LogInformation("Threaddumps disabled");
            }
        }
        public void CreateApplicationThrowsOnDuplicateData()
        {
            var hostingEnv = Mock.Of <IWebHostEnvironment>();

            hostingEnv.ApplicationName = "appName";

            var mdp = new Mock <IMetadataProvider>();

            mdp.Setup(x => x.GetMetadata()).Returns(new Dictionary <string, string>()
            {
                { "test", "value" },
            });

            var mdp2 = new Mock <IMetadataProvider>();

            mdp2.Setup(x => x.GetMetadata()).Returns(new Dictionary <string, string>()
            {
                { "test", "value2" },
            });

            var config = new SpringBootConfig();

            config.Application.ServiceUrl = new System.Uri("http://example.com");
            var acessor = new Mock <IOptionsMonitor <SpringBootConfig> >();

            acessor.Setup(x => x.CurrentValue).Returns(config);

            var sbc = new ApplicationBuilder(hostingEnv, new List <IMetadataProvider>()
            {
                mdp.Object, mdp2.Object
            }, acessor.Object);

            sbc.Invoking(x => x.CreateApplication())
            .Should()
            .Throw <DuplicateKeyException>();
        }