public void Setup()
 {
     _applicationName              = "ApplicationName";
     _addResponseHeaders           = true;
     _startAction                  = (context, information) => { };
     _finishAction                 = (context, information) => { };
     _testApmWebApiFilterAttribute = new TestApmWebApiFilterAttribute(_applicationName, _addResponseHeaders, _startAction, _finishAction);
 }
        public void WhenLoggingStartOfRequest()
        {
            var startActionLogged = false;
            var applicationName   = string.Empty;
            var eventName         = string.Empty;
            var flags             = string.Empty;
            var methodsIdentifier = string.Empty;
            var parentSpanId      = string.Empty;
            var sampled           = string.Empty;
            var spanId            = string.Empty;
            var traceId           = string.Empty;
            var httpRequest       = default(HttpRequestMessage);
            var actionContext     = ContextUtil.CreateActionContext();

            actionContext.Request.Headers.Add(Constants.TraceIdHeaderKey, "TestClient=1234");
            actionContext.Request.Headers.Add(Constants.SpanIdHeaderKey, "SpecialProcess=4321");
            actionContext.Request.Headers.Add(Constants.ParentSpanIdHeaderKey, "ParentSpecialProcess=5678");
            actionContext.Request.Headers.Add(Constants.SampledHeaderKey, "Sampled");
            actionContext.Request.Headers.Add(Constants.FlagsHeaderKey, "Flags");

            _startAction = (context, information) =>
            {
                startActionLogged = true;
                applicationName   = information.ApplicationName;
                eventName         = information.EventName;
                flags             = information.Flags;
                methodsIdentifier = information.MethodIdentifier;
                parentSpanId      = information.ParentSpanId;
                sampled           = information.Sampled;
                spanId            = information.SpanId;
                traceId           = information.TraceId;
                httpRequest       = information.Request;
            };

            _testApmWebApiFilterAttribute = new TestApmWebApiFilterAttribute(_applicationName, _addResponseHeaders, _startAction, _finishAction);
            _testApmWebApiFilterAttribute.OnActionExecuting(actionContext);

            Assert.IsNotNull(httpRequest);
            Assert.IsTrue(startActionLogged);
            Assert.IsNotEmpty(applicationName);
            Assert.IsNotEmpty(eventName);
            Assert.AreEqual("TestClient=1234", traceId);
            Assert.AreEqual("SpecialProcess=4321", spanId);
            Assert.AreEqual("ParentSpecialProcess=5678", parentSpanId);
            Assert.AreEqual("Sampled", sampled);
            Assert.AreEqual("Flags", flags);

            var controllerName = actionContext.ControllerContext.ControllerDescriptor.ControllerName;
            var methodType     = actionContext.Request.Method;
            var actionName     = actionContext.ActionDescriptor.ActionName;
            var arguments      = string.Empty;

            var expectedMethodIdentifier = string.Format("{0}.{1}({2}) - {3}", controllerName, actionName, arguments, methodType);

            Assert.AreEqual(expectedMethodIdentifier, methodsIdentifier);
        }