Ejemplo n.º 1
0
        public void Initialize_Repairs_Handler_Collection_If_RequestTracer_Inserted()
        {
            // Arrange
            HttpConfiguration config = new HttpConfiguration();

            config.Services.Replace(typeof(ITraceWriter), new TestTraceWriter());
            TestTraceWriter             traceWriter      = new TestTraceWriter();
            DelegatingHandler           messageHandler   = new Mock <DelegatingHandler>().Object;
            DelegatingHandler           msgHandlerTracer = new MessageHandlerTracer(messageHandler, traceWriter);
            RequestMessageHandlerTracer requestMsgtracer = new RequestMessageHandlerTracer(traceWriter);
            List <DelegatingHandler>    handlerList      = new List <DelegatingHandler>()
            {
                messageHandler, msgHandlerTracer, requestMsgtracer
            };

            foreach (var eachHandler in handlerList)
            {
                config.MessageHandlers.Add(eachHandler);
            }
            TraceManager traceManager = new TraceManager();

            traceManager.Initialize(config);
            Collection <DelegatingHandler> expectedMessageHandlers = config.MessageHandlers;

            // Act
            config.MessageHandlers.Insert(0, requestMsgtracer);
            traceManager.Initialize(config);

            // Assert
            Collection <DelegatingHandler> actualMessageHandlers = config.MessageHandlers;

            Assert.Equal(expectedMessageHandlers, actualMessageHandlers);
            Assert.True(IsMessageHandlerCollectionValid(config.MessageHandlers));
        }
Ejemplo n.º 2
0
        private static void CreateMessageHandlerTracers(
            HttpConfiguration configuration,
            ITraceWriter traceWriter
            )
        {
            int handlerCount = configuration.MessageHandlers.Count;

            // If message handlers have already been wired into the pipeline,
            // we do not install tracing message handlers. This scenario occurs
            // when initialization is attempted twice, such as per-controller configuration.
            if (handlerCount > 0 && configuration.MessageHandlers[0].InnerHandler != null)
            {
                return;
            }

            // RequestMessageHandlerTracer will be the first tracer to get executed and each messageHandlerTracer
            // will execute before its respective handler. For the MessageHandlerTracers to be registered,
            // the message handler list must be of the form:
            // requestMessageHandlerTracer
            // messageHandler1Tracer
            // messageHandler1
            // ...
            // ...
            // messageHandlerNTracer
            // messageHandlerN
            // Where "N" is a non-negative integer. That is, there could be zero or more pairs of handlers/tracers, plus a
            // request tracer at the beginning. If the state does not match this pattern, the tracer list is recreated.
            if (!AreMessageHandlerTracersRegistered(configuration.MessageHandlers))
            {
                // Removing the MessageHandlerTracer and RequestMessageHandlerTracer in the reverse order.
                for (int i = handlerCount - 1; i >= 0; i--)
                {
                    if (
                        configuration.MessageHandlers[i] is RequestMessageHandlerTracer ||
                        configuration.MessageHandlers[i] is MessageHandlerTracer
                        )
                    {
                        configuration.MessageHandlers.RemoveAt(i);
                    }
                }
                handlerCount = configuration.MessageHandlers.Count;

                // Insert a tracing handler before each existing message handler (in execution order)
                for (int i = 0; i < handlerCount * 2; i += 2)
                {
                    DelegatingHandler innerHandler  = configuration.MessageHandlers[i];
                    DelegatingHandler handlerTracer = new MessageHandlerTracer(
                        innerHandler,
                        traceWriter
                        );
                    configuration.MessageHandlers.Insert(i, handlerTracer);
                }

                configuration.MessageHandlers.Insert(
                    0,
                    new RequestMessageHandlerTracer(traceWriter)
                    );
            }
        }
Ejemplo n.º 3
0
            public ClientHandler(MessageHandlerTracer tracer, IDictionary <string, string> properties)
            {
                _tracer = tracer ?? throw new ArgumentNullException(nameof(tracer));
                _       = properties ?? throw new ArgumentNullException(nameof(properties));

                foreach (var kv in properties)
                {
                    Properties[kv.Key] = kv.Value;
                }
            }
Ejemplo n.º 4
0
        private static void CreateMessageHandlerTracers(HttpConfiguration configuration, ITraceWriter traceWriter)
        {
            // Insert a tracing handler before each existing message handler (in execution order)
            int handlerCount = configuration.MessageHandlers.Count;

            for (int i = 0; i < handlerCount * 2; i += 2)
            {
                DelegatingHandler innerHandler  = configuration.MessageHandlers[i];
                DelegatingHandler handlerTracer = new MessageHandlerTracer(innerHandler, traceWriter);
                configuration.MessageHandlers.Insert(i + 1, handlerTracer);
            }

            configuration.MessageHandlers.Add(new RequestMessageHandlerTracer(traceWriter));
        }
Ejemplo n.º 5
0
        private static void CreateMessageHandlerTracers(HttpConfiguration configuration, ITraceWriter traceWriter)
        {
            int handlerCount = configuration.MessageHandlers.Count;

            // If message handlers have already been wired into the pipeline,
            // we do not install tracing message handlers.  This scenario occurs
            // when initialization is attempted twice, such as per-controller configuration.
            if (handlerCount > 0 && configuration.MessageHandlers[0].InnerHandler != null)
            {
                return;
            }

            // Insert a tracing handler before each existing message handler (in execution order)
            for (int i = 0; i < handlerCount * 2; i += 2)
            {
                DelegatingHandler innerHandler  = configuration.MessageHandlers[i];
                DelegatingHandler handlerTracer = new MessageHandlerTracer(innerHandler, traceWriter);
                configuration.MessageHandlers.Insert(i + 1, handlerTracer);
            }

            configuration.MessageHandlers.Add(new RequestMessageHandlerTracer(traceWriter));
        }
Ejemplo n.º 6
0
 public CustomDelegatingHandler2(MessageHandlerTracer tracer)
 {
     _tracer = tracer ?? throw new ArgumentNullException(nameof(tracer));
 }