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)); }
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) ); } }
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; } }
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)); }
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)); }
public CustomDelegatingHandler2(MessageHandlerTracer tracer) { _tracer = tracer ?? throw new ArgumentNullException(nameof(tracer)); }