Esempio n. 1
0
        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();
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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);
        }
Esempio n. 13
0
        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"));
        }
Esempio n. 14
0
        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);
        }
Esempio n. 15
0
        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);
        }
Esempio n. 16
0
        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"));
        }
Esempio n. 18
0
        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);
        }
Esempio n. 19
0
        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();
        }
Esempio n. 21
0
        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);
        }
Esempio n. 22
0
        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);
        }
Esempio n. 23
0
        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]);
        }
Esempio n. 24
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);
        }
Esempio n. 25
0
        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();
        }
Esempio n. 26
0
        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();
        }