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; }
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/"); }
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>(); }