public void AddContextProviderMethodHappyPath() { var builder = new TestLoggerBuilder(); IDependency dependency = new ConcreteDependency(); int setting = 123; var serviceProvider = new ServiceCollection() .AddSingleton(dependency) .BuildServiceProvider(); builder.AddContextProvider <TestContextProvider>(setting); var registration = builder.ContextProviderRegistrations.Should().ContainSingle() .Subject; var contextProvider = registration.Invoke(serviceProvider); var testContextProvider = contextProvider.Should().BeOfType <TestContextProvider>() .Subject; testContextProvider.Setting.Should().Be(setting); testContextProvider.Dependency.Should().BeSameAs(dependency); }
public void AddFileLogProviderMethod3HappyPath() { var builder = new TestLoggerBuilder(); IDependency dependency = new ConcreteDependency(); int setting = 123; var file = "c:\\foobar"; var serviceProvider = new ServiceCollection() .AddSingleton(dependency) .BuildServiceProvider(); builder.AddFileLogProvider <TestLogFormatter>(file, LogLevel.Info, logFormatterParameters: setting); var registration = builder.LogProviderRegistrations.Should().ContainSingle() .Subject; var logProvider = registration.Invoke(serviceProvider); var fileLogProvider = logProvider.Should().BeOfType <FileLogProvider>() .Subject; fileLogProvider.Level.Should().Be(LogLevel.Info); fileLogProvider.File.Should().Be(file); var formatter = fileLogProvider.Formatter.Should().BeOfType <TestLogFormatter>() .Subject; formatter.Dependency.Should().BeSameAs(dependency); formatter.Setting.Should().Be(setting); }
public void AddRollingFileLogProviderMethod4HappyPath() { var builder = new TestLoggerBuilder(); var formatter = new Mock <ILogFormatter>().Object; ILogFormatter FormatterRegistration(IServiceProvider sp) => formatter; var file = "c:\\foobar"; builder.AddRollingFileLogProvider(FormatterRegistration, file, LogLevel.Info, maxFileSizeKilobytes: 123, maxArchiveCount: 456, rolloverPeriod: RolloverPeriod.Hourly); var registration = builder.LogProviderRegistrations.Should().ContainSingle() .Subject; var logProvider = registration.Invoke(_emptyServiceProvider); var rollingFileLogProvider = logProvider.Should().BeOfType <RollingFileLogProvider>() .Subject; rollingFileLogProvider.Level.Should().Be(LogLevel.Info); rollingFileLogProvider.File.Should().Be(file); rollingFileLogProvider.MaxFileSizeBytes.Should().Be(123 * 1024); rollingFileLogProvider.MaxArchiveCount.Should().Be(456); rollingFileLogProvider.RolloverPeriod.Should().Be(RolloverPeriod.Hourly); rollingFileLogProvider.Formatter.Should().BeSameAs(formatter); }
public void AddFileLogProviderMethod5HappyPath() { var builder = new TestLoggerBuilder(); var formatter = new Mock <ILogFormatter>().Object; var file = "c:\\foobar"; var serviceCollection = new ServiceCollection(); serviceCollection.Configure <FileLogProviderOptions>(options => options.Level = LogLevel.Info); builder.AddFileLogProvider(options => { options.File = file; options.SetFormatter(formatter); }); var registration = builder.LogProviderRegistrations.Should().ContainSingle() .Subject; var logProvider = registration.Invoke(serviceCollection.BuildServiceProvider()); var fileLogProvider = logProvider.Should().BeOfType <FileLogProvider>() .Subject; fileLogProvider.Level.Should().Be(LogLevel.Info); fileLogProvider.File.Should().Be(file); fileLogProvider.Formatter.Should().BeSameAs(formatter); }
public void AddFileLogProviderMethod4HappyPath() { var builder = new TestLoggerBuilder(); var formatter = new Mock <ILogFormatter>().Object; ILogFormatter FormatterRegistration(IServiceProvider sp) => formatter; var file = "c:\\foobar"; builder.AddFileLogProvider(FormatterRegistration, file, LogLevel.Info); var registration = builder.LogProviderRegistrations.Should().ContainSingle() .Subject; var logProvider = registration.Invoke(_emptyServiceProvider); var fileLogProvider = logProvider.Should().BeOfType <FileLogProvider>() .Subject; fileLogProvider.Level.Should().Be(LogLevel.Info); fileLogProvider.File.Should().Be(file); fileLogProvider.Formatter.Should().BeSameAs(formatter); }
public async Task SocketHealthPublisher_Should_Start_TcpListener() { #pragma warning disable CA2000 // Dispose objects before losing scope var logFactory = TestLoggerBuilder.Create(builder => { builder.AddConsole(); builder.AddDebug(); builder.AddXunit(_output, LogLevel.Debug); }); #pragma warning restore CA2000 // Dispose objects before losing scope var port = 8181; var publishers = new List <IHealthCheckPublisher> { new SocketHealthCheckPublisher(port, logFactory.CreateLogger <SocketHealthCheckPublisher>()) }; var services = CreateService(publishers.ToArray(), _output); var healthService = services.GetRequiredService <HealthCheckService>(); var report = await healthService.CheckHealthAsync(); var publisher = services.GetServices <IHealthCheckPublisher>().OfType <SocketHealthCheckPublisher>().Single(); var response = string.Empty; var clientThread = new Thread(() => { _output.WriteLine("client-started"); response = TcpClientResponse(port, "ping"); _output.WriteLine("client-stopped"); }); try { clientThread.Start(); _output.WriteLine("server-started"); using var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5)); await Task.Factory.StartNew(async() => await publisher.PublishAsync(report, cts.Token), cts.Token); Thread.Sleep(TimeSpan.FromSeconds(4)); Assert.Equal("ping", response); Assert.Equal(HealthStatus.Healthy, report.Status); } finally { _output.WriteLine("server-stopped"); } }
public void Add_Job_Successfully_1() { var dic = new Dictionary <string, string> { { "SchedulerJobs:TestJobException:CronSchedule", "*/10 * * * * *" }, { "SchedulerJobs:TestJobException:CronTimeZone", string.Empty }, { "SchedulerJobs:TestJobException:RunImmediately", "true" }, }; var configuration = new ConfigurationBuilder().AddInMemoryCollection(dic).Build(); var service = new ServiceCollection(); service.AddSingleton <IConfiguration>(configuration); service.AddOptions(); var name = typeof(TestJob).Name; service.AddChangeTokenOptions <SchedulerOptions>("SchedulerJobs:TestJobException", name, _ => { }); service.AddLogging(builder => { builder.AddConsole(); builder.AddDebug(); builder.AddXunit(_output, LogLevel.Debug); }); service.AddSingleton <SchedulerRegistration>(); var sp = service.BuildServiceProvider(); var instance = sp.GetService <SchedulerRegistration>(); using var logFactory = TestLoggerBuilder.Create(builder => { builder.AddConsole(); builder.AddDebug(); builder.AddXunit(_output, LogLevel.Debug); }); var job = new TestJob(logFactory.CreateLogger <TestJob>()); var options = sp.GetRequiredService <IOptionsMonitor <SchedulerOptions> >().Get(name); instance.AddOrUpdate(job, options); Assert.Equal(1, instance.Jobs.Count); configuration.Providers.ToList()[0].Set("SchedulerJobs:TestJobException:CronSchedule", "*/1 * * * * *"); configuration.Reload(); _output.WriteLine(instance.Jobs.ToArray()[0].Value.Schedule.ToString()); }
public void Add_Job_Successfully() { var dic = new Dictionary <string, string> { { "SchedulerJobs:TestJobException:CronSchedule", "*/10 * * * * *" }, { "SchedulerJobs:TestJobException:CronTimeZone", string.Empty }, { "SchedulerJobs:TestJobException:RunImmediately", "true" }, }; var configuration = new ConfigurationBuilder().AddInMemoryCollection(dic).Build(); var service = new ServiceCollection(); service.AddSingleton <IConfiguration>(configuration); service.AddOptions(); var name = typeof(TestJob).Name; service.AddOptions <SchedulerOptions>(name) .Configure <IConfiguration>((options, configuration) => { configuration.Bind("SchedulerJobs:TestJobException", options); }); service.AddLogging(builder => { builder.AddConsole(); builder.AddDebug(); builder.AddXunit(_output, LogLevel.Debug); }); service.AddSingleton <SchedulerRegistration>(); var sp = service.BuildServiceProvider(); var instance = sp.GetService <SchedulerRegistration>(); using var logFactory = TestLoggerBuilder.Create(builder => { builder.AddConsole(); builder.AddDebug(); builder.AddXunit(_output, LogLevel.Debug); }); var job = new TestJob(logFactory.CreateLogger <TestJob>()); var options = sp.GetRequiredService <IOptionsMonitor <SchedulerOptions> >().Get(name); instance.AddOrUpdate(job, options); Assert.Single(instance.Jobs); }
public void LoggerProviderDoesNotWriteLogMessagesBelowMinimumLevel() { var testTestOutputHelper = new TestTestOutputHelper(); var loggerFactory = TestLoggerBuilder.Create(builder => builder .AddXunit(testTestOutputHelper, LogLevel.Warning)); var logger = loggerFactory.CreateLogger("TestCategory"); logger.LogInformation("This is some great information"); logger.LogError("This is a bad error"); Assert.Equal("| TestCategory Error: This is a bad error" + Environment.NewLine, testTestOutputHelper.Output); }
public void LoggerProviderDoesNotThrowIfOutputHelperThrows() { var testTestOutputHelper = new TestTestOutputHelper(); var loggerFactory = TestLoggerBuilder.Create(builder => builder .AddXunit(testTestOutputHelper)); testTestOutputHelper.Throw = true; var logger = loggerFactory.CreateLogger("TestCategory"); logger.LogInformation("This is a" + Environment.NewLine + "multi-line" + Environment.NewLine + "message"); Assert.Equal(0, testTestOutputHelper.Output.Length); }
private ServiceProvider CreateService( IHealthCheckPublisher[] publishers, ITestOutputHelper outputHelper, Action <HealthCheckPublisherOptions> configure = null) { var serviceCollection = new ServiceCollection(); serviceCollection.AddOptions(); serviceCollection.AddLogging(); serviceCollection.AddHealthChecks() .AddCheck("one", () => HealthCheckResult.Healthy()) .AddCheck("two", () => HealthCheckResult.Healthy()); serviceCollection.Configure <HealthCheckPublisherOptions>(options => { options.Delay = TimeSpan.FromMilliseconds(1); options.Period = TimeSpan.FromMilliseconds(1); options.Timeout = TimeSpan.FromMilliseconds(1); }); if (publishers != null) { for (var i = 0; i < publishers.Length; i++) { serviceCollection.AddSingleton <IHealthCheckPublisher>(publishers[i]); } } if (configure != null) { serviceCollection.Configure(configure); } #pragma warning disable CA2000 // Dispose objects before losing scope var logFactory = TestLoggerBuilder.Create(builder => { builder.AddConsole(); builder.AddDebug(); builder.AddXunit(outputHelper, LogLevel.Debug); }); #pragma warning restore CA2000 // Dispose objects before losing scope serviceCollection.AddSingleton <ILoggerFactory>(logFactory); return(serviceCollection.BuildServiceProvider()); }
public void LoggerProviderPrependsPrefixToEachLine() { var testTestOutputHelper = new TestTestOutputHelper(); var loggerFactory = TestLoggerBuilder.Create(builder => builder .AddXunit(testTestOutputHelper)); var logger = loggerFactory.CreateLogger("TestCategory"); logger.LogInformation("This is a" + Environment.NewLine + "multi-line" + Environment.NewLine + "message"); var expectedOutput = "| TestCategory Information: This is a" + Environment.NewLine + "| multi-line" + Environment.NewLine + "| message" + Environment.NewLine; Assert.Equal(expectedOutput, testTestOutputHelper.Output); }
public void AddHttpContextProviderExtension() { var contextMock = new Mock <IHttpContextAccessor>(); var loggerBuilder = new TestLoggerBuilder(); var serviceProvider = new ServiceCollection() .AddSingleton(contextMock.Object) .BuildServiceProvider(); loggerBuilder.AddHttpContextProvider(); var registration = loggerBuilder.ContextProviderRegistrations.Should().ContainSingle().Subject; var contextProvider = registration.Invoke(serviceProvider); contextProvider.Should().BeOfType <HttpContextProvider>(); }
public void LoggerProviderPrependsPrefixToEachLine() { var testTestOutputHelper = new TestTestOutputHelper(); var loggerFactory = TestLoggerBuilder.Create(builder => builder .AddXunit(testTestOutputHelper)); var logger = loggerFactory.CreateLogger("TestCategory"); logger.LogInformation("This is a" + Environment.NewLine + "multi-line" + Environment.NewLine + "message"); // The lines after the first one are indented more because the indentation was calculated based on the timestamp's actual length. var expectedOutput = "| [TIMESTAMP] TestCategory Information: This is a" + Environment.NewLine + "| multi-line" + Environment.NewLine + "| message" + Environment.NewLine; Assert.Equal(expectedOutput, MakeConsistent(testTestOutputHelper.Output)); }
public void LoggerProviderWritesToTestOutputHelper() { var testTestOutputHelper = new TestTestOutputHelper(); var loggerFactory = TestLoggerBuilder.Create(builder => builder .SetMinimumLevel(LogLevel.Trace) .AddXunit(testTestOutputHelper)); var logger = loggerFactory.CreateLogger("TestCategory"); logger.LogInformation("This is some great information"); logger.LogTrace("This is some unimportant information"); var expectedOutput = "| TestCategory Information: This is some great information" + Environment.NewLine + "| TestCategory Trace: This is some unimportant information" + Environment.NewLine; Assert.Equal(expectedOutput, testTestOutputHelper.Output); }
public void AddConsoleLogProviderMethod2HappyPath() { var builder = new TestLoggerBuilder(); var formatter = new Mock <ILogFormatter>().Object; builder.AddConsoleLogProvider(formatter, LogLevel.Info); var registration = builder.LogProviderRegistrations.Should().ContainSingle() .Subject; var logProvider = registration.Invoke(_emptyServiceProvider); var consoleLogProvider = logProvider.Should().BeOfType <ConsoleLogProvider>() .Subject; consoleLogProvider.Level.Should().Be(LogLevel.Info); consoleLogProvider.Formatter.Should().BeSameAs(formatter); }
public void AddRollingFileLogProviderMethod3HappyPath() { var builder = new TestLoggerBuilder(); IDependency dependency = new ConcreteDependency(); int setting = 123; var file = "c:\\foobar"; var serviceProvider = new ServiceCollection() .AddSingleton(dependency) .BuildServiceProvider(); builder.AddRollingFileLogProvider <TestLogFormatter>(file, LogLevel.Info, maxFileSizeKilobytes: 123, maxArchiveCount: 456, rolloverPeriod: RolloverPeriod.Hourly, logFormatterParameters: setting); var registration = builder.LogProviderRegistrations.Should().ContainSingle() .Subject; var logProvider = registration.Invoke(serviceProvider); var rollingFileLogProvider = logProvider.Should().BeOfType <RollingFileLogProvider>() .Subject; rollingFileLogProvider.Level.Should().Be(LogLevel.Info); rollingFileLogProvider.File.Should().Be(file); rollingFileLogProvider.MaxFileSizeBytes.Should().Be(123 * 1024); rollingFileLogProvider.MaxArchiveCount.Should().Be(456); rollingFileLogProvider.RolloverPeriod.Should().Be(RolloverPeriod.Hourly); var formatter = rollingFileLogProvider.Formatter.Should().BeOfType <TestLogFormatter>() .Subject; formatter.Dependency.Should().BeSameAs(dependency); formatter.Setting.Should().Be(setting); }
public void AddConsoleLogProviderMethod1HappyPath() { var builder = new TestLoggerBuilder(); var template = "foobar"; builder.AddConsoleLogProvider(template, LogLevel.Info); var registration = builder.LogProviderRegistrations.Should().ContainSingle() .Subject; var logProvider = registration.Invoke(_emptyServiceProvider); var consoleLogProvider = logProvider.Should().BeOfType <ConsoleLogProvider>() .Subject; consoleLogProvider.Level.Should().Be(LogLevel.Info); consoleLogProvider.Formatter.Should().BeOfType <TemplateLogFormatter>() .Which.Template.Should().Be(template); }
public void AddRollingFileLogProviderMethod5HappyPath() { var builder = new TestLoggerBuilder(); var formatter = new Mock <ILogFormatter>().Object; var file = "c:\\foobar"; var serviceCollection = new ServiceCollection(); serviceCollection.Configure <RollingFileLogProviderOptions>(options => options.Level = LogLevel.Info); builder.AddRollingFileLogProvider(options => { options.File = file; options.MaxFileSizeKilobytes = 123; options.MaxArchiveCount = 456; options.RolloverPeriod = RolloverPeriod.Hourly; options.SetFormatter(formatter); }); var registration = builder.LogProviderRegistrations.Should().ContainSingle() .Subject; var logProvider = registration.Invoke(serviceCollection.BuildServiceProvider()); var rollingFileLogProvider = logProvider.Should().BeOfType <RollingFileLogProvider>() .Subject; rollingFileLogProvider.Level.Should().Be(LogLevel.Info); rollingFileLogProvider.File.Should().Be(file); rollingFileLogProvider.MaxFileSizeBytes.Should().Be(123 * 1024); rollingFileLogProvider.MaxArchiveCount.Should().Be(456); rollingFileLogProvider.RolloverPeriod.Should().Be(RolloverPeriod.Hourly); rollingFileLogProvider.Formatter.Should().BeSameAs(formatter); }
private static ILogger CreateLogger() { return(TestLoggerBuilder.Create(builder => builder.AddDebug()).CreateLogger("Test")); }
private async Task ExecuteShutdownTest(string testName, string shutdownMechanic) { var xunitTestLoggerFactory = TestLoggerBuilder.Create(builder => { builder.SetMinimumLevel(LogLevel.Trace); builder.AddXunit(_output); }); // TODO refactor deployers to not depend on source code // see https://github.com/dotnet/extensions/issues/1697 and https://github.com/dotnet/aspnetcore/issues/10268 #pragma warning disable 0618 var applicationPath = Path.Combine(TestPathUtilities.GetSolutionRootDirectory("Extensions"), "src", "Hosting", "test", "testassets", "Microsoft.Extensions.Hosting.TestApp"); #pragma warning restore 0618 var deploymentParameters = new DeploymentParameters( applicationPath, RuntimeFlavor.CoreClr, RuntimeArchitecture.x64) { TargetFramework = Tfm.NetCoreApp50, ApplicationType = ApplicationType.Portable, PublishApplicationBeforeDeployment = true, StatusMessagesEnabled = false }; deploymentParameters.EnvironmentVariables["DOTNET_STARTMECHANIC"] = shutdownMechanic; using (var deployer = new SelfHostDeployer(deploymentParameters, xunitTestLoggerFactory)) { var result = await deployer.DeployAsync(); var started = new TaskCompletionSource <int>(TaskCreationOptions.RunContinuationsAsynchronously); var completed = new TaskCompletionSource <int>(TaskCreationOptions.RunContinuationsAsynchronously); var output = string.Empty; deployer.HostProcess.OutputDataReceived += (sender, args) => { if (!string.IsNullOrEmpty(args.Data) && args.Data.StartsWith(StartedMessage)) { output += args.Data.Substring(StartedMessage.Length) + '\n'; started.TrySetResult(0); } else { output += args.Data + '\n'; } if (output.Contains(CompletionMessage)) { completed.TrySetResult(0); } }; await started.Task.TimeoutAfter(TimeSpan.FromSeconds(60)); SendShutdownSignal(deployer.HostProcess); await completed.Task.TimeoutAfter(TimeSpan.FromSeconds(60)); WaitForExitOrKill(deployer.HostProcess); output = output.Trim('\n'); Assert.Equal(CompletionMessage, output); } }