public void Trace_Verbose_Writes_Correct_Message_To_TraceListeners_With_Only_Required_Fields_Set() { // Arrange SystemDiagnosticsTraceWriter writer = CreateTraceWriter(); writer.IsVerbose = true; HttpRequestMessage request = new HttpRequestMessage { RequestUri = new Uri("http://localhost"), Method = HttpMethod.Get }; InvalidOperationException exception = new InvalidOperationException("TestException"); // Act writer.Info(request, "TestCategory", String.Empty); // Assert string expected = String.Format("Level=Info, Kind=Trace, Category='TestCategory', Id={0}", request.GetCorrelationId().ToString()); string actual = ((TestTraceListener)writer.TraceSource.Listeners[0]).Messages[0].Trim(); string timePrefix = "] "; actual = actual.Substring(actual.IndexOf(timePrefix) + timePrefix.Length); Assert.Equal(expected, actual); }
public void Format_Verbose_Delegates_To_FormatRequestEnvelope_End() { // Arrange HttpRequestMessage request = new HttpRequestMessage { RequestUri = new Uri("http://localhost"), Method = HttpMethod.Get }; TraceRecord traceRecord = new TraceRecord(request, "System.Web.Http.Request", TraceLevel.Info) { Kind = TraceKind.End, }; // Act string actualTrace = new SystemDiagnosticsTraceWriter() { IsVerbose = true }.Format(traceRecord); // Assert string timePrefix = "] "; actualTrace = actualTrace.Substring(actualTrace.IndexOf(timePrefix) + timePrefix.Length); string expectedTrace = String.Format("Sending response, Method=GET, Url=http://localhost/, Id={0}", traceRecord.RequestId.ToString()); Assert.Equal(expectedTrace, actualTrace); }
public void Format_Builds_Trace_With_Null_Fields() { // Arrange TraceRecord traceRecord = new TraceRecord(request: null, category: null, level: TraceLevel.Info) { Message = null, Operation = null, Operator = null, }; // Act string formattedTrace = new SystemDiagnosticsTraceWriter() { IsVerbose = true }.Format(traceRecord); // Assert AssertContainsExactly(formattedTrace, new Dictionary <string, string> { { "Level", TraceLevel.Info.ToString() }, { "Kind", TraceKind.Trace.ToString() }, { "Id", new Guid().ToString() } }); }
public void FormatRequestEnvelope_Verbose_Builds_Correct_End_Trace_With_Only_Required_Fields() { // Arrange HttpRequestMessage request = new HttpRequestMessage { RequestUri = new Uri("http://localhost"), Method = HttpMethod.Get }; TraceRecord traceRecord = new TraceRecord(request, "System.Web.Http.Request", TraceLevel.Info) { Kind = TraceKind.End, Status = HttpStatusCode.Accepted }; // Act string actualTrace = new SystemDiagnosticsTraceWriter() { IsVerbose = true }.FormatRequestEnvelope(traceRecord); // Assert string timePrefix = "] "; actualTrace = actualTrace.Substring(actualTrace.IndexOf(timePrefix) + timePrefix.Length); string expectedTrace = String.Format("Sending response, Status=202 (Accepted), Method=GET, Url=http://localhost/, Id={0}", traceRecord.RequestId.ToString()); Assert.Equal(expectedTrace, actualTrace); }
public void FormatRequestEnvelope_Verbose_Builds_Correct_End_Trace_With_Null_Fields() { // Arrange TraceRecord traceRecord = new TraceRecord( request: null, category: null, level: TraceLevel.Info ) { Kind = TraceKind.End, }; // Act string actualTrace = new SystemDiagnosticsTraceWriter() { IsVerbose = true }.FormatRequestEnvelope(traceRecord); // Assert string timePrefix = "] "; actualTrace = actualTrace.Substring( actualTrace.IndexOf(timePrefix) + timePrefix.Length ); string expectedTrace = String.Format( "Sending response, Id={0}", traceRecord.RequestId.ToString() ); Assert.Equal(expectedTrace, actualTrace); }
public void Trace_Traces_Warning_EventType_When_Translates_HttpResponseException_Error() { // Arrange SystemDiagnosticsTraceWriter writer = CreateTraceWriter(); writer.IsVerbose = true; HttpRequestMessage request = new HttpRequestMessage { RequestUri = new Uri("http://localhost"), Method = HttpMethod.Get }; HttpResponseMessage response = request.CreateErrorResponse( HttpStatusCode.BadRequest, "bad request" ); HttpResponseException responseException = new HttpResponseException(response); // Act writer.Error(request, "TestCategory", responseException); // Assert Assert.Equal( TraceEventType.Warning, ((TestTraceListener)writer.TraceSource.Listeners[0]).TraceEventType ); }
public static void Register(HttpConfiguration config) { // Web API configuration and services SystemDiagnosticsTraceWriter traceWriter = config.EnableSystemDiagnosticsTracing(); traceWriter.IsVerbose = true; traceWriter.MinimumLevel = TraceLevel.Debug; //Replace default tracer config.Services.Replace(typeof(ITraceWriter), new CourseAPITracer()); // Web API routes config.MapHttpAttributeRoutes(); // Add a filter for exceptions //config.Filters.Add(new CoursesExceptionFilter()); // Add logger config.Services.Add(typeof(IExceptionLogger), new TraceExceptionLogger()); config.Services.Add(typeof(IExceptionLogger), new RaygunExceptionLogger()); // add handler for exceptions config.Services.Replace(typeof(IExceptionHandler), new CourseAPIExceptionHandler()); // Set Language handler to detect and set localized languages config.MessageHandlers.Add(new LanguageMessageHandler()); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); }
public void Trace_Brief_Trace_Does_Not_Trace_BeginKind() { // Arrange SystemDiagnosticsTraceWriter writer = CreateTraceWriter(); HttpRequestMessage request = new HttpRequestMessage { RequestUri = new Uri("http://localhost"), Method = HttpMethod.Get }; InvalidOperationException exception = new InvalidOperationException("TestException"); // Act writer.Trace( request, "TestCategory", TraceLevel.Info, (tr) => { tr.Kind = TraceKind.Begin; tr.Message = "TestMessage"; } ); // Assert Assert.Equal(0, ((TestTraceListener)writer.TraceSource.Listeners[0]).Messages.Count); }
public static void Register(HttpConfiguration config) { // Конфигурация и службы веб-API BFSConfig bfsConfig = (BFSConfig)ConfigurationManager.GetSection("bfsConfigs"); if (bfsConfig.Logging.TraceEnabled) { SystemDiagnosticsTraceWriter traceWriter = config.EnableSystemDiagnosticsTracing(); traceWriter.IsVerbose = true; traceWriter.MinimumLevel = TraceLevel.Debug; System.Diagnostics.Trace.Listeners.Clear(); System.Diagnostics.Trace.Listeners.Add( new System.Diagnostics.TextWriterTraceListener("C:\\BARSFormStatus\\trace.txt")); } //Конфигурация службы для возврата данных в формате JSON config.Formatters.Add(new BrowserJsonFormatter()); config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; // Маршруты веб-API config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); }
public void Trace_Writes_Correct_EventType_To_TraceListeners( TraceLevel level, TraceEventType diagnosticLevel ) { // Arrange SystemDiagnosticsTraceWriter writer = CreateTraceWriter(); writer.MinimumLevel = level; HttpRequestMessage request = new HttpRequestMessage { RequestUri = new Uri("http://localhost"), Method = HttpMethod.Get }; // Act writer.Trace( request, "TestCategory", level, (tr) => { tr.Message = "TestMessage"; } ); // Assert Assert.Equal( diagnosticLevel, ((TestTraceListener)writer.TraceSource.Listeners[0]).TraceEventType ); }
public void Trace_Brief_Writes_Correct_Message_To_TraceListeners_With_All_Fields_Set(TraceLevel level) { // Arrange SystemDiagnosticsTraceWriter writer = CreateTraceWriter(); writer.MinimumLevel = level; HttpRequestMessage request = new HttpRequestMessage { RequestUri = new Uri("http://localhost"), Method = HttpMethod.Get }; InvalidOperationException exception = new InvalidOperationException("TestException"); // Act writer.Trace(request, "TestCategory", level, (tr) => { tr.Message = "TestMessage"; tr.Operation = "TestOperation"; tr.Operator = "TestOperator"; tr.Status = HttpStatusCode.Accepted; tr.Exception = exception; }); // Assert string expected = "Message='TestMessage', Operation=TestOperator.TestOperation, Status=202 (Accepted), Exception=System.InvalidOperationException: TestException"; string actual = ((TestTraceListener)writer.TraceSource.Listeners[0]).Messages[0].Trim(); Assert.Equal(expected, actual); }
public static void Register(HttpConfiguration config) { var corsAttr = new EnableCorsAttribute(AppConstants.ConfigurationKeys.AllowedOrigins, "*", "*"); config.EnableCors(corsAttr); config.Filters.Add(new HandleExceptionFilterAttribute()); // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/identity/" + AppConstants.ConfigurationKeys.WebApiVersion + "/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); // API Throttling if (AppConstants.ConfigurationKeys.IsThrottlingEnabled) { var traceWriter = new SystemDiagnosticsTraceWriter() { IsVerbose = true }; config.Services.Replace(typeof(System.Web.Http.Tracing.ITraceWriter), traceWriter); config.EnableSystemDiagnosticsTracing(); } config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); var json = config.Formatters.JsonFormatter; json.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); }
private static void AddloggerTracer(HttpConfiguration config) { SystemDiagnosticsTraceWriter traceWriter = config.EnableSystemDiagnosticsTracing(); traceWriter.IsVerbose = true; traceWriter.MinimumLevel = TraceLevel.Debug; config.Services.Replace(typeof(ITraceWriter), new SimpleTracer()); }
public void EnableSystemDiagnosticsTracing_Adds_TraceWriter() { HttpConfiguration config = new HttpConfiguration(); SystemDiagnosticsTraceWriter returnedTraceWriter = config.EnableSystemDiagnosticsTracing(); ITraceWriter setTraceWriter = config.Services.GetService(typeof(ITraceWriter)) as ITraceWriter; Assert.ReferenceEquals(returnedTraceWriter, setTraceWriter); }
public void Ctor_Initializes_Properties() { // Arrange SystemDiagnosticsTraceWriter writer = new SystemDiagnosticsTraceWriter(); // Act & Assert Assert.False(writer.IsVerbose); Assert.Equal(TraceLevel.Info, writer.MinimumLevel); Assert.Null(writer.TraceSource); }
public static void Register(HttpConfiguration config) { // Configurar as rotas do menos informacional (sem id) até o mais detalhado (com id) config.Routes.MapHttpRoute( name: "DefaultApiWithActionAndId", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); config.Routes.MapHttpRoute( name: "DefaultApiWithId", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); // Web API formatters config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain")); config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json")); config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/octet-stream")); config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.None; config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto; config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.None; config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto; // Remove XML format config.Formatters.Remove(config.Formatters.XmlFormatter); // Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable<T> return type. // To avoid processing unexpected or malicious queries, use the validation settings on QueryableAttribute to validate incoming queries. // For more information, visit http://go.microsoft.com/fwlink/?LinkId=279712. //config.EnableQuerySupport(); // To disable tracing in your application, please comment out or remove the following line of code // For more information, refer to: http://www.asp.net/web-api SystemDiagnosticsTraceWriter traceWriter = config.EnableSystemDiagnosticsTracing(); traceWriter.IsVerbose = Convert.ToBoolean(ConfigurationManager.AppSettings["TraceIsVerbose"]); traceWriter.MinimumLevel = (TraceLevel)Convert.ToInt32(ConfigurationManager.AppSettings["TraceLevel"]); // Injeção do repositório no controlador... o Unity é concorrente do Ninject... não usamos aqui // https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/dependency-injection var container = new UnityContainer(); container.RegisterType <IEntityRepository, MySqlEntityRepository>(new HierarchicalLifetimeManager()); container.RegisterType <IEntityController, EntityController>(new HierarchicalLifetimeManager()); config.DependencyResolver = new Resolver(container); }
public void TraceSource_Accepts_Null_TraceSource() { // Arrange SystemDiagnosticsTraceWriter writer = new SystemDiagnosticsTraceWriter(); // Act writer.TraceSource = null; // Assert Assert.Null(writer.TraceSource); }
public void MinimumLevel_Setter_Accepts_All_Legal_Levels(TraceLevel level) { // Arrange SystemDiagnosticsTraceWriter writer = new SystemDiagnosticsTraceWriter(); // Act writer.MinimumLevel = level; // Assert Assert.Equal(level, writer.MinimumLevel); }
public void Format_Verbose_Builds_Trace_With_All_TraceRecord_Properties(TraceLevel level) { // Arrange HttpRequestMessage request = new HttpRequestMessage { RequestUri = new Uri("http://localhost"), Method = HttpMethod.Get }; InvalidOperationException exception; try { // Want the full stack trace in the payload throw new InvalidOperationException("TestException"); } catch (InvalidOperationException ex) { exception = ex; } TraceRecord traceRecord = new TraceRecord(request, "TestCategory", level) { Message = "TestMessage", Operation = "TestOperation", Operator = "TestOperator", Status = HttpStatusCode.Accepted, Exception = exception }; // Act string formattedTrace = new SystemDiagnosticsTraceWriter() { IsVerbose = true }.Format( traceRecord ); // Assert AssertContainsExactly( formattedTrace, new Dictionary <string, string> { { "Level", level.ToString() }, { "Kind", TraceKind.Trace.ToString() }, { "Category", "'TestCategory'" }, { "Id", request.GetCorrelationId().ToString() }, { "Message", "'TestMessage'" }, { "Operation", "TestOperator.TestOperation" }, { "Status", "202 (Accepted)" }, { "Exception", exception.ToString() }, } ); }
public void Trace_Throws_With_Null_Category() { // Arrange SystemDiagnosticsTraceWriter writer = new SystemDiagnosticsTraceWriter(); // Act & Assert ArgumentNullException exception = Assert.Throws <ArgumentNullException>( () => writer.Trace(new HttpRequestMessage(), null, TraceLevel.Info, (tr) => { }) ); Assert.Equal("category", exception.ParamName); }
public void FormatRequestEnvelope_Verbose_Builds_Correct_End_Trace_With_All_Fields() { // Arrange HttpRequestMessage request = new HttpRequestMessage { RequestUri = new Uri("http://localhost"), Method = HttpMethod.Get }; Exception exception = null; try { throw new InvalidOperationException("ExceptionMessage"); } catch (Exception ex) { exception = ex; } TraceRecord traceRecord = new TraceRecord( request, "System.Web.Http.Request", TraceLevel.Info ) { Kind = TraceKind.End, Status = HttpStatusCode.Accepted, Message = "EnvelopeMessage", Exception = exception }; // Act string actualTrace = new SystemDiagnosticsTraceWriter() { IsVerbose = true }.FormatRequestEnvelope(traceRecord); // Assert string timePrefix = "] "; actualTrace = actualTrace.Substring( actualTrace.IndexOf(timePrefix) + timePrefix.Length ); string expectedTrace = String.Format( "Sending response, Status=202 (Accepted), Method=GET, Url=http://localhost/, Id={0}, Message={1}, Exception={2}", traceRecord.RequestId.ToString(), "'EnvelopeMessage'", exception.ToString().Trim() ); Assert.Equal(expectedTrace, actualTrace); }
public void TraceSource_Accepts_Custom_TraceSource() { // Arrange SystemDiagnosticsTraceWriter writer = new SystemDiagnosticsTraceWriter(); TraceSource traceSource = new TraceSource("CustomTraceSource"); // Act writer.TraceSource = traceSource; // Assert Assert.Equal(traceSource, writer.TraceSource); }
public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor) { var traceWriter = new SystemDiagnosticsTraceWriter() { MinimumLevel = TraceLevel.Info, IsVerbose = false }; controllerSettings.Services.Replace(typeof(ITraceWriter), traceWriter); }
// Helper to create a new SystemDiagnosticsTraceWriter configured // to use a custom TraceSource to write its traces to a TestTraceListener. private static SystemDiagnosticsTraceWriter CreateTraceWriter() { TestTraceListener testTraceListener = new TestTraceListener(); TraceSource testTraceSource = new TraceSource("TestTraceSource", SourceLevels.All); testTraceSource.Listeners.Clear(); testTraceSource.Listeners.Add(testTraceListener); SystemDiagnosticsTraceWriter writer = new SystemDiagnosticsTraceWriter(); writer.TraceSource = testTraceSource; return(writer); }
/// <summary> /// Registers the <see cref="ITraceWriter"/> implementation to use /// for this application. /// </summary> /// <param name="configuration">The <see cref="HttpConfiguration"/> in which /// to register the trace writer.</param> public static void Register(HttpConfiguration configuration) { if (configuration == null) { throw new ArgumentNullException("configuration"); } SystemDiagnosticsTraceWriter traceWriter = new SystemDiagnosticsTraceWriter() { MinimumLevel = TraceLevel.Info, IsVerbose = false }; configuration.Services.Replace(typeof(ITraceWriter), traceWriter); }
public void Trace_Throws_With_Illegal_Level(TraceLevel level) { // Arrange SystemDiagnosticsTraceWriter writer = new SystemDiagnosticsTraceWriter(); // Act & Assert ArgumentOutOfRangeException exception = Assert.Throws <ArgumentOutOfRangeException>( () => writer.Trace(new HttpRequestMessage(), "MyCategory", level, (tr) => { })); Assert.Equal("level", exception.ParamName); Assert.Contains("The TraceLevel property must be a value between TraceLevel.Off and TraceLevel.Fatal, inclusive.", exception.Message); Assert.Equal(level, exception.ActualValue); }
public void Trace_Verbose_Writes_Correct_Message_To_TraceListeners_With_All_Fields_Set( TraceLevel level ) { // Arrange SystemDiagnosticsTraceWriter writer = CreateTraceWriter(); writer.MinimumLevel = level; writer.IsVerbose = true; HttpRequestMessage request = new HttpRequestMessage { RequestUri = new Uri("http://localhost"), Method = HttpMethod.Get }; InvalidOperationException exception = new InvalidOperationException("TestException"); // Act writer.Trace( request, "TestCategory", level, (tr) => { tr.Message = "TestMessage"; tr.Operation = "TestOperation"; tr.Operator = "TestOperator"; tr.Status = HttpStatusCode.Accepted; tr.Exception = exception; } ); // Assert string expected = String.Format( "Level={0}, Kind=Trace, Category='TestCategory', Id={1}, Message='TestMessage', Operation=TestOperator.TestOperation, Status=202 (Accepted), Exception={2}", level.ToString(), request.GetCorrelationId().ToString(), exception.ToString() ); string actual = ((TestTraceListener)writer.TraceSource.Listeners[0]).Messages[0].Trim(); string timePrefix = "] "; actual = actual.Substring(actual.IndexOf(timePrefix) + timePrefix.Length); Assert.Equal(expected, actual); }
public void Trace_Writes_To_Custom_TraceSource() { // Arrange SystemDiagnosticsTraceWriter writer = CreateTraceWriter(); HttpRequestMessage request = new HttpRequestMessage { RequestUri = new Uri("http://localhost"), Method = HttpMethod.Get }; // Act writer.Info(request, "TestCategory", "TestMessage"); // Assert Assert.Equal("Message='TestMessage'", ((TestTraceListener)writer.TraceSource.Listeners[0]).Messages[0]); }
public static void Register(HttpConfiguration config) { config.EnableSystemDiagnosticsTracing(); SystemDiagnosticsTraceWriter traceWriter = config.EnableSystemDiagnosticsTracing(); traceWriter.IsVerbose = true; traceWriter.MinimumLevel = TraceLevel.Debug; // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); }
/// <summary> /// Register /// </summary> /// <param name="config"></param> public static void Register(HttpConfiguration config) { // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); //EnableCors http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api config.EnableCors(); //Documents config.SetDocumentationProvider(new XmlDocumentationProvider( HttpContext.Current.Server.MapPath("~/App_Data/WebApi2.XML"))); config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); //http://stackoverflow.com/a/9521363 FilterConfig.RegisterWebApiFilters(GlobalConfiguration.Configuration.Filters); //http://www.asp.net/web-api/overview/testing-and-debugging/tracing-in-aspnet-web-api //IsVerbose: If false, each trace contains minimal information. If true, traces include more information. //MinimumLevel: Sets the minimum trace level. Trace levels, in order, are Debug, Info, Warn, Error, and Fatal. SystemDiagnosticsTraceWriter traceWriter = config.EnableSystemDiagnosticsTracing(); traceWriter.IsVerbose = false; traceWriter.MinimumLevel = TraceLevel.Info; config.EnableSystemDiagnosticsTracing(); config.Services.Replace(typeof(ITraceWriter), new LoggingTracer()); //WebAPI Throttle //https://github.com/stefanprodan/WebApiThrottle config.MessageHandlers.Add(new ThrottlingHandler() { Policy = ThrottlePolicy.FromStore(new PolicyConfigurationProvider()), Repository = new CacheRepository(), Logger = new CommonTracingThrottleLogger() }); }
public void Format_Builds_Trace_With_Null_Fields() { // Arrange TraceRecord traceRecord = new TraceRecord(request: null, category: null, level: TraceLevel.Info) { Message = null, Operation = null, Operator = null, }; // Act string formattedTrace = new SystemDiagnosticsTraceWriter() { IsVerbose = true }.Format(traceRecord); // Assert AssertContainsExactly(formattedTrace, new Dictionary<string, string> { { "Level", TraceLevel.Info.ToString() }, { "Kind", TraceKind.Trace.ToString() }, { "Id", new Guid().ToString() } }); }
public void Trace_Throws_With_Null_Category() { // Arrange SystemDiagnosticsTraceWriter writer = new SystemDiagnosticsTraceWriter(); // Act & Assert ArgumentNullException exception = Assert.Throws<ArgumentNullException>( () => writer.Trace(new HttpRequestMessage(), null, TraceLevel.Info, (tr) => { })); Assert.Equal("category", exception.ParamName); }
public void FormatRequestEnvelope_Verbose_Builds_Correct_End_Trace_With_Null_Fields() { // Arrange TraceRecord traceRecord = new TraceRecord(request: null, category: null, level: TraceLevel.Info) { Kind = TraceKind.End, }; // Act string actualTrace = new SystemDiagnosticsTraceWriter() { IsVerbose = true }.FormatRequestEnvelope(traceRecord); // Assert string timePrefix = "] "; actualTrace = actualTrace.Substring(actualTrace.IndexOf(timePrefix) + timePrefix.Length); string expectedTrace = String.Format("Sending response, Id={0}", traceRecord.RequestId.ToString()); Assert.Equal(expectedTrace, actualTrace); }
// Helper to create a new SystemDiagnosticsTraceWriter configured // to use a custom TraceSource to write its traces to a TestTraceListener. private static SystemDiagnosticsTraceWriter CreateTraceWriter() { TestTraceListener testTraceListener = new TestTraceListener(); TraceSource testTraceSource = new TraceSource("TestTraceSource", SourceLevels.All); testTraceSource.Listeners.Clear(); testTraceSource.Listeners.Add(testTraceListener); SystemDiagnosticsTraceWriter writer = new SystemDiagnosticsTraceWriter(); writer.TraceSource = testTraceSource; return writer; }
public void FormatRequestEnvelope_Verbose_Builds_Correct_End_Trace_With_All_Fields() { // Arrange HttpRequestMessage request = new HttpRequestMessage { RequestUri = new Uri("http://localhost"), Method = HttpMethod.Get }; Exception exception = null; try { throw new InvalidOperationException("ExceptionMessage"); } catch (Exception ex) { exception = ex; } TraceRecord traceRecord = new TraceRecord(request, "System.Web.Http.Request", TraceLevel.Info) { Kind = TraceKind.End, Status = HttpStatusCode.Accepted, Message = "EnvelopeMessage", Exception = exception }; // Act string actualTrace = new SystemDiagnosticsTraceWriter() { IsVerbose = true }.FormatRequestEnvelope(traceRecord); // Assert string timePrefix = "] "; actualTrace = actualTrace.Substring(actualTrace.IndexOf(timePrefix) + timePrefix.Length); string expectedTrace = String.Format("Sending response, Status=202 (Accepted), Method=GET, Url=http://localhost/, Id={0}, Message={1}, Exception={2}", traceRecord.RequestId.ToString(), "'EnvelopeMessage'", exception.ToString().Trim()); Assert.Equal(expectedTrace, actualTrace); }
public void Trace_Throws_With_Illegal_Level(TraceLevel level) { // Arrange SystemDiagnosticsTraceWriter writer = new SystemDiagnosticsTraceWriter(); // Act & Assert ArgumentOutOfRangeException exception = Assert.Throws<ArgumentOutOfRangeException>( () => writer.Trace(new HttpRequestMessage(), "MyCategory", level, (tr) => { })); Assert.Equal("level", exception.ParamName); Assert.Contains("The TraceLevel property must be a value between TraceLevel.Off and TraceLevel.Fatal, inclusive.", exception.Message); Assert.Equal(level, exception.ActualValue); }
public void Format_Verbose_Builds_Trace_With_All_TraceRecord_Properties(TraceLevel level) { // Arrange HttpRequestMessage request = new HttpRequestMessage { RequestUri = new Uri("http://localhost"), Method = HttpMethod.Get }; InvalidOperationException exception; try { // Want the full stack trace in the payload throw new InvalidOperationException("TestException"); } catch (InvalidOperationException ex) { exception = ex; } TraceRecord traceRecord = new TraceRecord(request, "TestCategory", level) { Message = "TestMessage", Operation = "TestOperation", Operator = "TestOperator", Status = HttpStatusCode.Accepted, Exception = exception }; // Act string formattedTrace = new SystemDiagnosticsTraceWriter() { IsVerbose = true }.Format(traceRecord); // Assert AssertContainsExactly(formattedTrace, new Dictionary<string, string> { { "Level", level.ToString() }, { "Kind", TraceKind.Trace.ToString() }, { "Category", "'TestCategory'"}, { "Id", request.GetCorrelationId().ToString() }, { "Message", "'TestMessage'" }, { "Operation", "TestOperator.TestOperation" }, { "Status", "202 (Accepted)" }, { "Exception", exception.ToString() }, }); }