public void ProcessEvent_IgnoresUnprocessableEvents() { var option = new TraceEndpointOptions(); TraceDiagnosticObserver obs = new TraceDiagnosticObserver(option); // No current activity, event ignored obs.ProcessEvent("foobar", null); Activity current = new Activity("barfoo"); current.Start(); // Activity current, but no value provided, event ignored obs.ProcessEvent("foobar", null); // Activity current, value provided, event not stop event, event is ignored obs.ProcessEvent("foobar", new object()); // Activity current, event is stop event, no context in event value, event it ignored obs.ProcessEvent("Microsoft.AspNetCore.Hosting.HttpRequestIn.Stop", new object()); Assert.Empty(obs._queue); current.Stop(); }
public void MakeTrace_ReturnsExpected() { var option = new TraceEndpointOptions(); TraceDiagnosticObserver obs = new TraceDiagnosticObserver(option); HttpContext context = CreateRequest(); TimeSpan duration = TimeSpan.FromTicks(20000000 - 10000000); TraceResult result = obs.MakeTrace(context, duration); Assert.NotNull(result); Assert.NotNull(result.Info); Assert.NotEqual(0, result.TimeStamp); Assert.True(result.Info.ContainsKey("method")); Assert.True(result.Info.ContainsKey("path")); Assert.True(result.Info.ContainsKey("headers")); Assert.True(result.Info.ContainsKey("timeTaken")); Assert.Equal("GET", result.Info["method"]); Assert.Equal("/myPath", result.Info["path"]); var headers = result.Info["headers"] as Dictionary <string, object>; Assert.NotNull(headers); Assert.True(headers.ContainsKey("request")); Assert.True(headers.ContainsKey("response")); var timeTaken = result.Info["timeTaken"] as string; Assert.NotNull(timeTaken); var expected = duration.TotalMilliseconds.ToString(); Assert.Equal(expected, timeTaken); }
public void GetProperty_NoProperties_ReturnsExpected() { var option = new TraceEndpointOptions(); var obs = new TraceDiagnosticObserver(option); obs.GetProperty(new { foo = "bar" }, out var context); Assert.Null(context); }
public void GetProperty_NoProperties_ReturnsExpected() { TraceOptions option = new TraceOptions(); TraceDiagnosticObserver obs = new TraceDiagnosticObserver(option); obs.GetProperty(new { foo = "bar" }, out HttpContext context); Assert.Null(context); }
public void UseTraceActuator_ThrowsIfConfigNull() { IAppBuilder builder = new AppBuilder(); var traceRepo = new TraceDiagnosticObserver(new TraceOptions()); var exception = Assert.Throws <ArgumentNullException>(() => builder.UseTraceActuator(null, traceRepo)); Assert.Equal("config", exception.ParamName); }
public void UseTraceActuator_ThrowsIfConfigNull() { IAppBuilder builder = new AppBuilder(); var traceRepo = new TraceDiagnosticObserver(new TraceEndpointOptions()); #pragma warning disable CS0612 // Type or member is obsolete var exception = Assert.Throws <ArgumentNullException>(() => builder.UseTraceActuator(null, traceRepo)); #pragma warning restore CS0612 // Type or member is obsolete Assert.Equal("config", exception.ParamName); }
public void GetRequestUri_ReturnsExpected() { var option = new TraceEndpointOptions(); var obs = new TraceDiagnosticObserver(option); var context = CreateRequest(); var result = obs.GetRequestUri(context.Request); Assert.Equal("http://localhost:1111/myPath", result); }
public void GetRemoteAddress_NoConnection_ReturnsExpected() { var option = new TraceEndpointOptions(); var obs = new TraceDiagnosticObserver(option); var context = CreateRequest(); var result = obs.GetRemoteAddress(context); Assert.Null(result); }
public void GetSessionId_NoSession_ReturnsExpected() { var option = new TraceEndpointOptions(); TraceDiagnosticObserver obs = new TraceDiagnosticObserver(option); HttpContext context = CreateRequest(); var result = obs.GetSessionId(context); Assert.Null(result); }
public void GetUserPrincipal_NotAuthenticated_ReturnsExpected() { var option = new TraceEndpointOptions(); var obs = new TraceDiagnosticObserver(option); var context = CreateRequest(); var result = obs.GetUserPrincipal(context); Assert.Null(result); }
public void GetProperty_WithProperties_ReturnsExpected() { var option = new TraceEndpointOptions(); var obs = new TraceDiagnosticObserver(option); var expectedContext = CreateRequest(); obs.GetProperty(new { HttpContext = expectedContext }, out var context); Assert.True(object.ReferenceEquals(expectedContext, context)); }
public void UseTraceActuator_ThrowsIfBuilderNull() { IAppBuilder builder = null; var config = new ConfigurationBuilder().Build(); var traceRepo = new TraceDiagnosticObserver(new TraceOptions(config)); var exception = Assert.Throws <ArgumentNullException>(() => builder.UseTraceActuator(config, traceRepo)); Assert.Equal("builder", exception.ParamName); }
public void TraceEndpointMiddleware_PathAndVerbMatching_ReturnsExpected() { var opts = new TraceOptions(); TraceDiagnosticObserver obs = new TraceDiagnosticObserver(opts); var ep = new TraceEndpoint(opts, obs); var middle = new TraceEndpointMiddleware(null, ep); Assert.True(middle.RequestVerbAndPathMatch("GET", "/trace")); Assert.False(middle.RequestVerbAndPathMatch("PUT", "/trace")); Assert.False(middle.RequestVerbAndPathMatch("GET", "/badpath")); }
public void GetPathInfo_ReturnsExpected() { var option = new TraceEndpointOptions(); var obs = new TraceDiagnosticObserver(option); var context = CreateRequest(); var result = obs.GetPathInfo(context.Request); Assert.Equal("/myPath", result); }
public void GetTimeTaken_ReturnsExpected() { var option = new TraceEndpointOptions(); var obs = new TraceDiagnosticObserver(option); var context = CreateRequest(); var time = TimeSpan.FromTicks(10000000); var result = obs.GetTimeTaken(time); var expected = time.TotalMilliseconds.ToString(); Assert.Equal(expected, result); }
public void GetUserPrincipal_Authenticated_ReturnsExpected() { var option = new TraceEndpointOptions(); var obs = new TraceDiagnosticObserver(option); var context = CreateRequest(); context.User = new ClaimsPrincipal(new MyIdentity()); var result = obs.GetUserPrincipal(context); Assert.Equal("MyTestName", result); }
public void TraceEndpointMiddleware_PathAndVerbMatching_ReturnsExpected() { var opts = new TraceEndpointOptions(); var mopts = TestHelpers.GetManagementOptions(opts); TraceDiagnosticObserver obs = new TraceDiagnosticObserver(opts); var ep = new TraceEndpoint(opts, obs); var middle = new TraceEndpointMiddleware(null, ep, mopts); Assert.True(middle.RequestVerbAndPathMatch("GET", "/cloudfoundryapplication/trace")); Assert.False(middle.RequestVerbAndPathMatch("PUT", "/cloudfoundryapplication/trace")); Assert.False(middle.RequestVerbAndPathMatch("GET", "/cloudfoundryapplication/badpath")); }
public async void HandleTraceRequestAsync_ReturnsExpected() { var opts = new TraceOptions(); TraceDiagnosticObserver obs = new TraceDiagnosticObserver(opts); var ep = new TestTraceEndpoint(opts, obs); var middle = new TraceEndpointMiddleware(null, ep); var context = CreateRequest("GET", "/trace"); await middle.HandleTraceRequestAsync(context); context.Response.Body.Seek(0, SeekOrigin.Begin); StreamReader rdr = new StreamReader(context.Response.Body); string json = await rdr.ReadToEndAsync(); Assert.Equal("[]", json); }
public void ProcessEvent_HonorsCapacity() { var option = new TraceEndpointOptions(); var obs = new TraceDiagnosticObserver(option); var current = new Activity("Microsoft.AspNetCore.Hosting.HttpRequestIn"); current.Start(); for (var i = 0; i < 200; i++) { var context = CreateRequest(); obs.ProcessEvent("Microsoft.AspNetCore.Hosting.HttpRequestIn.Stop", new { HttpContext = context }); } Assert.Equal(option.Capacity, obs._queue.Count); }
public void Subscribe_Listener_StopActivity_AddsToQueue() { DiagnosticListener listener = new DiagnosticListener("Microsoft.AspNetCore"); var option = new TraceEndpointOptions(); TraceDiagnosticObserver obs = new TraceDiagnosticObserver(option); obs.Subscribe(listener); var context = CreateRequest(); string activityName = "Microsoft.AspNetCore.Hosting.HttpRequestIn"; Activity current = new Activity(activityName); listener.StartActivity(current, new { HttpContext = context }); Thread.Sleep(1000); listener.StopActivity(current, new { HttpContext = context }); Assert.Single(obs._queue); Assert.True(obs._queue.TryPeek(out TraceResult result)); Assert.NotNull(result.Info); Assert.NotEqual(0, result.TimeStamp); Assert.True(result.Info.ContainsKey("method")); Assert.True(result.Info.ContainsKey("path")); Assert.True(result.Info.ContainsKey("headers")); Assert.True(result.Info.ContainsKey("timeTaken")); Assert.Equal("GET", result.Info["method"]); Assert.Equal("/myPath", result.Info["path"]); var headers = result.Info["headers"] as Dictionary <string, object>; Assert.NotNull(headers); Assert.True(headers.ContainsKey("request")); Assert.True(headers.ContainsKey("response")); var timeTaken = result.Info["timeTaken"] as string; Assert.NotNull(timeTaken); Assert.StartsWith("10", timeTaken); obs.Dispose(); listener.Dispose(); }
public void GetSessionId_WithSession_ReturnsExpected() { var option = new TraceEndpointOptions(); var obs = new TraceDiagnosticObserver(option); var context = CreateRequest(); var session = new TestSession(); ISessionFeature sessFeature = new SessionFeature { Session = session }; context.Features.Set <ISessionFeature>(sessFeature); var result = obs.GetSessionId(context); Assert.Equal("TestSessionId", result); }
public async Task HandleTraceRequestAsync_OtherPathReturnsExpected() { var opts = new TraceEndpointOptions(); var mopts = new CloudFoundryManagementOptions(); mopts.EndpointOptions.Add(opts); var obs = new TraceDiagnosticObserver(opts); var ep = new TestTraceEndpoint(opts, obs); var middle = new TraceEndpointMiddleware(null, ep, mopts); var context = CreateRequest("GET", "/cloudfoundryapplication/trace"); await middle.HandleTraceRequestAsync(context); context.Response.Body.Seek(0, SeekOrigin.Begin); var rdr = new StreamReader(context.Response.Body); var json = await rdr.ReadToEndAsync(); Assert.Equal("[]", json); }
public void GetRequestParameters_ReturnsExpected() { var option = new TraceEndpointOptions(); var obs = new TraceDiagnosticObserver(option); var context = CreateRequest(); var result = obs.GetRequestParameters(context.Request); Assert.NotNull(result); Assert.True(result.ContainsKey("foo")); Assert.True(result.ContainsKey("bar")); var fooVal = result["foo"]; Assert.Single(fooVal); Assert.Equal("bar", fooVal[0]); var barVal = result["bar"]; Assert.Single(barVal); Assert.Equal("foo", barVal[0]); }
public void GetHeaders_ReturnsExpected() { var option = new TraceEndpointOptions(); var obs = new TraceDiagnosticObserver(option); var context = CreateRequest(); var result = obs.GetHeaders(100, context.Request.Headers); Assert.NotNull(result); Assert.True(result.ContainsKey("header1")); Assert.True(result.ContainsKey("header2")); Assert.True(result.ContainsKey("status")); var header1Val = result["header1"] as string; Assert.Equal("header1Value", header1Val); var header2Val = result["header2"] as string; Assert.Equal("header2Value", header2Val); var statusVal = result["status"] as string; Assert.Equal("100", statusVal); }
public void ProcessEvent_AddsToQueue() { var option = new TraceEndpointOptions(); var obs = new TraceDiagnosticObserver(option); var current = new Activity("Microsoft.AspNetCore.Hosting.HttpRequestIn"); current.Start(); var context = CreateRequest(); obs.ProcessEvent("Microsoft.AspNetCore.Hosting.HttpRequestIn.Stop", new { HttpContext = context }); Assert.Single(obs._queue); Assert.True(obs._queue.TryPeek(out var result)); Assert.NotNull(result.Info); Assert.NotEqual(0, result.TimeStamp); Assert.True(result.Info.ContainsKey("method")); Assert.True(result.Info.ContainsKey("path")); Assert.True(result.Info.ContainsKey("headers")); Assert.True(result.Info.ContainsKey("timeTaken")); Assert.Equal("GET", result.Info["method"]); Assert.Equal("/myPath", result.Info["path"]); var headers = result.Info["headers"] as Dictionary <string, object>; Assert.NotNull(headers); Assert.True(headers.ContainsKey("request")); Assert.True(headers.ContainsKey("response")); var timeTaken = result.Info["timeTaken"] as string; Assert.NotNull(timeTaken); Assert.Equal("0", timeTaken); // 0 because activity not stopped current.Stop(); }
public void GetTraces_ReturnsTraces() { var listener = new DiagnosticListener("test"); var option = new TraceEndpointOptions(); var obs = new TraceDiagnosticObserver(option); var current = new Activity("Microsoft.AspNetCore.Hosting.HttpRequestIn"); current.Start(); for (var i = 0; i < 200; i++) { var context = CreateRequest(); obs.ProcessEvent("Microsoft.AspNetCore.Hosting.HttpRequestIn.Stop", new { HttpContext = context }); } Assert.Equal(option.Capacity, obs._queue.Count); var traces = obs.GetTraces(); Assert.Equal(option.Capacity, traces.Count); Assert.Equal(option.Capacity, obs._queue.Count); listener.Dispose(); }