public static MediaTypeFormatter CreateTracer(MediaTypeFormatter formatter, ITraceWriter traceWriter, HttpRequestMessage request) { // If we have been asked to wrap a tracer around a formatter, it could be // already wrapped, and there is nothing to do. But if we see it is a tracer // that is not associated with a request, we wrap it into a new tracer that // does have a request. The only formatter tracers without requests are the // ones in the default MediaTypeFormatterCollection in the HttpConfiguration. IFormatterTracer formatterTracer = formatter as IFormatterTracer; if (formatterTracer != null) { if (formatterTracer.Request == request) { return formatter; } formatter = formatterTracer.InnerFormatter; } MediaTypeFormatter tracer = null; // We special-case Xml, Json and FormUrlEncoded formatters because we expect to be able // to find them with IsAssignableFrom in the MediaTypeFormatterCollection. if (formatter is XmlMediaTypeFormatter) { tracer = new XmlMediaTypeFormatterTracer(formatter, traceWriter, request); } else if (formatter is JsonMediaTypeFormatter) { tracer = new JsonMediaTypeFormatterTracer(formatter, traceWriter, request); } else if (formatter is FormUrlEncodedMediaTypeFormatter) { tracer = new FormUrlEncodedMediaTypeFormatterTracer(formatter, traceWriter, request); } else if (formatter is BufferedMediaTypeFormatter) { tracer = new BufferedMediaTypeFormatterTracer(formatter, traceWriter, request); } else { tracer = new MediaTypeFormatterTracer(formatter, traceWriter, request); } // Copy SupportedMediaTypes and MediaTypeMappings because they are publically visible tracer.SupportedMediaTypes.Clear(); foreach (MediaTypeHeaderValue mediaType in formatter.SupportedMediaTypes) { tracer.SupportedMediaTypes.Add(mediaType); } tracer.MediaTypeMappings.Clear(); foreach (MediaTypeMapping mapping in formatter.MediaTypeMappings) { tracer.MediaTypeMappings.Add(mapping); } return tracer; }
public void ReadFromStream_Traces_And_Throws_When_Inner_Throws() { // Arrange InvalidOperationException exception = new InvalidOperationException("test"); Mock<BufferedMediaTypeFormatter> mockFormatter = new Mock<BufferedMediaTypeFormatter>() { CallBase = true }; mockFormatter.Setup( f => f.ReadFromStream(It.IsAny<Type>(), It.IsAny<Stream>(), It.IsAny<HttpContent>(), It.IsAny<IFormatterLogger>())).Throws(exception); TestTraceWriter traceWriter = new TestTraceWriter(); HttpRequestMessage request = new HttpRequestMessage(); request.Content = new StringContent(""); BufferedMediaTypeFormatterTracer tracer = new BufferedMediaTypeFormatterTracer(mockFormatter.Object, traceWriter, request); TraceRecord[] expectedTraces = new TraceRecord[] { new TraceRecord(request, TraceCategories.FormattingCategory, TraceLevel.Info) { Kind = TraceKind.Begin, Operation = "ReadFromStream" }, new TraceRecord(request, TraceCategories.FormattingCategory, TraceLevel.Error) { Kind = TraceKind.End, Operation = "ReadFromStream" } }; // Act Exception thrown = Assert.Throws<InvalidOperationException>(() => tracer.ReadFromStream(typeof(string), new MemoryStream(), request.Content, null)); // Assert Assert.Equal<TraceRecord>(expectedTraces, traceWriter.Traces, new TraceRecordComparer()); Assert.Same(exception, thrown); Assert.Same(exception, traceWriter.Traces[1].Exception); }
public void BufferSize_Uses_Inners() { // Arrange HttpRequestMessage request = new HttpRequestMessage(); Mock<BufferedMediaTypeFormatter> mockFormatter = new Mock<BufferedMediaTypeFormatter>() { CallBase = true }; BufferedMediaTypeFormatter innerFormatter = mockFormatter.Object; innerFormatter.BufferSize = innerFormatter.BufferSize + 1; BufferedMediaTypeFormatterTracer tracer = new BufferedMediaTypeFormatterTracer(innerFormatter, new TestTraceWriter(), request); // Act & Assert Assert.Equal(innerFormatter.BufferSize, tracer.BufferSize); }
public static MediaTypeFormatter CreateTracer(MediaTypeFormatter formatter, ITraceWriter traceWriter, HttpRequestMessage request) { // If we have been asked to wrap a tracer around a formatter, it could be // already wrapped, and there is nothing to do. But if we see it is a tracer // that is not associated with a request, we wrap it into a new tracer that // does have a request. The only formatter tracers without requests are the // ones in the default MediaTypeFormatterCollection in the HttpConfiguration. IFormatterTracer formatterTracer = formatter as IFormatterTracer; if (formatterTracer != null) { if (formatterTracer.Request == request) { return(formatter); } formatter = formatterTracer.InnerFormatter; } MediaTypeFormatter tracer = null; XmlMediaTypeFormatter xmlFormatter = formatter as XmlMediaTypeFormatter; JsonMediaTypeFormatter jsonFormatter = formatter as JsonMediaTypeFormatter; FormUrlEncodedMediaTypeFormatter formUrlFormatter = formatter as FormUrlEncodedMediaTypeFormatter; BufferedMediaTypeFormatter bufferedFormatter = formatter as BufferedMediaTypeFormatter; // We special-case Xml, Json and FormUrlEncoded formatters because we expect to be able // to find them with IsAssignableFrom in the MediaTypeFormatterCollection. if (xmlFormatter != null) { tracer = new XmlMediaTypeFormatterTracer(xmlFormatter, traceWriter, request); } else if (jsonFormatter != null) { tracer = new JsonMediaTypeFormatterTracer(jsonFormatter, traceWriter, request); } else if (formUrlFormatter != null) { tracer = new FormUrlEncodedMediaTypeFormatterTracer(formUrlFormatter, traceWriter, request); } else if (bufferedFormatter != null) { tracer = new BufferedMediaTypeFormatterTracer(bufferedFormatter, traceWriter, request); } else { tracer = new MediaTypeFormatterTracer(formatter, traceWriter, request); } return(tracer); }
public void BufferSize_Uses_Inners() { // Arrange HttpRequestMessage request = new HttpRequestMessage(); Mock <BufferedMediaTypeFormatter> mockFormatter = new Mock <BufferedMediaTypeFormatter>() { CallBase = true }; BufferedMediaTypeFormatter innerFormatter = mockFormatter.Object; innerFormatter.BufferSize = innerFormatter.BufferSize + 1; BufferedMediaTypeFormatterTracer tracer = new BufferedMediaTypeFormatterTracer(innerFormatter, new TestTraceWriter(), request); // Act & Assert Assert.Equal(innerFormatter.BufferSize, tracer.BufferSize); }
public void Inner_Property_On_BufferedMediaTypeFormatterTracer_Returns_BufferedMediaTypeFormatter() { // Arrange BufferedMediaTypeFormatter expectedInner = new Mock <BufferedMediaTypeFormatter>().Object; BufferedMediaTypeFormatterTracer productUnderTest = new BufferedMediaTypeFormatterTracer( expectedInner, new TestTraceWriter(), new HttpRequestMessage() ); // Act BufferedMediaTypeFormatter actualInner = productUnderTest.Inner; // Assert Assert.Same(expectedInner, actualInner); }
public void WriteToStream_Traces_And_Throws_When_Inner_Throws() { // Arrange InvalidOperationException exception = new InvalidOperationException("test"); Mock <BufferedMediaTypeFormatter> mockFormatter = new Mock <BufferedMediaTypeFormatter>() { CallBase = true }; mockFormatter.Setup(f => f.WriteToStream(It.IsAny <Type>(), It.IsAny <Object>(), It.IsAny <Stream>(), It.IsAny <HttpContent>())) .Throws(exception); TestTraceWriter traceWriter = new TestTraceWriter(); HttpRequestMessage request = new HttpRequestMessage(); request.Content = new StringContent(""); BufferedMediaTypeFormatterTracer tracer = new BufferedMediaTypeFormatterTracer(mockFormatter.Object, traceWriter, request); TraceRecord[] expectedTraces = new TraceRecord[] { new TraceRecord(request, TraceCategories.FormattingCategory, TraceLevel.Info) { Kind = TraceKind.Begin, Operation = "WriteToStream" }, new TraceRecord(request, TraceCategories.FormattingCategory, TraceLevel.Error) { Kind = TraceKind.End, Operation = "WriteToStream" } }; // Act Exception thrown = Assert.Throws <InvalidOperationException>(() => tracer.WriteToStream(typeof(string), "sampleValue", new MemoryStream(), request.Content)); // Assert Assert.Equal <TraceRecord>(expectedTraces, traceWriter.Traces, new TraceRecordComparer()); Assert.Same(exception, thrown); Assert.Same(exception, traceWriter.Traces[1].Exception); }
public void ReadFromStream_Traces() { // Arrange Mock<BufferedMediaTypeFormatter> mockFormatter = new Mock<BufferedMediaTypeFormatter>() { CallBase = true }; mockFormatter.Setup(f => f.ReadFromStream(It.IsAny<Type>(), It.IsAny<Stream>(), It.IsAny<HttpContent>(), It.IsAny<IFormatterLogger>())) .Returns("sampleValue"); TestTraceWriter traceWriter = new TestTraceWriter(); HttpRequestMessage request = new HttpRequestMessage(); request.Content = new StringContent(""); BufferedMediaTypeFormatterTracer tracer = new BufferedMediaTypeFormatterTracer(mockFormatter.Object, traceWriter, request); TraceRecord[] expectedTraces = new TraceRecord[] { new TraceRecord(request, TraceCategories.FormattingCategory, TraceLevel.Info) { Kind = TraceKind.Begin, Operation = "ReadFromStream" }, new TraceRecord(request, TraceCategories.FormattingCategory, TraceLevel.Info) { Kind = TraceKind.End, Operation = "ReadFromStream" } }; // Act string valueReturned = tracer.ReadFromStream(typeof(string), new MemoryStream(), request.Content, null) as string; // Assert Assert.Equal<TraceRecord>(expectedTraces, traceWriter.Traces, new TraceRecordComparer()); Assert.Equal("sampleValue", valueReturned); }
public static MediaTypeFormatter CreateTracer(MediaTypeFormatter formatter, ITraceWriter traceWriter, HttpRequestMessage request) { // If we have been asked to wrap a tracer around a formatter, it could be // already wrapped, and there is nothing to do. But if we see it is a tracer // that is not associated with a request, we wrap it into a new tracer that // does have a request. The only formatter tracers without requests are the // ones in the default MediaTypeFormatterCollection in the HttpConfiguration. IFormatterTracer formatterTracer = formatter as IFormatterTracer; if (formatterTracer != null) { if (formatterTracer.Request == request) { return formatter; } formatter = formatterTracer.InnerFormatter; } MediaTypeFormatter tracer = null; XmlMediaTypeFormatter xmlFormatter = formatter as XmlMediaTypeFormatter; JsonMediaTypeFormatter jsonFormatter = formatter as JsonMediaTypeFormatter; FormUrlEncodedMediaTypeFormatter formUrlFormatter = formatter as FormUrlEncodedMediaTypeFormatter; BufferedMediaTypeFormatter bufferedFormatter = formatter as BufferedMediaTypeFormatter; // We special-case Xml, Json and FormUrlEncoded formatters because we expect to be able // to find them with IsAssignableFrom in the MediaTypeFormatterCollection. if (xmlFormatter != null) { tracer = new XmlMediaTypeFormatterTracer(xmlFormatter, traceWriter, request); } else if (jsonFormatter != null) { tracer = new JsonMediaTypeFormatterTracer(jsonFormatter, traceWriter, request); } else if (formUrlFormatter != null) { tracer = new FormUrlEncodedMediaTypeFormatterTracer(formUrlFormatter, traceWriter, request); } else if (bufferedFormatter != null) { tracer = new BufferedMediaTypeFormatterTracer(bufferedFormatter, traceWriter, request); } else { tracer = new MediaTypeFormatterTracer(formatter, traceWriter, request); } return tracer; }
public void Decorator_GetInner_On_BufferedMediaTypeFormatterTracer_Returns_BufferedMediaTypeFormatter() { // Arrange BufferedMediaTypeFormatter expectedInner = new Mock<BufferedMediaTypeFormatter>().Object; BufferedMediaTypeFormatterTracer productUnderTest = new BufferedMediaTypeFormatterTracer(expectedInner, new TestTraceWriter(), new HttpRequestMessage()); // Act BufferedMediaTypeFormatter actualInner = Decorator.GetInner(productUnderTest as BufferedMediaTypeFormatter); // Assert Assert.Same(expectedInner, actualInner); }
public static MediaTypeFormatter CreateTracer(MediaTypeFormatter formatter, ITraceWriter traceWriter, HttpRequestMessage request) { // If we have been asked to wrap a tracer around a formatter, it could be // already wrapped, and there is nothing to do. But if we see it is a tracer // that is not associated with a request, we wrap it into a new tracer that // does have a request. The only formatter tracers without requests are the // ones in the default MediaTypeFormatterCollection in the HttpConfiguration. IFormatterTracer formatterTracer = formatter as IFormatterTracer; if (formatterTracer != null) { if (formatterTracer.Request == request) { return(formatter); } formatter = formatterTracer.InnerFormatter; } MediaTypeFormatter tracer = null; // We special-case Xml, Json and FormUrlEncoded formatters because we expect to be able // to find them with IsAssignableFrom in the MediaTypeFormatterCollection. if (formatter is XmlMediaTypeFormatter) { tracer = new XmlMediaTypeFormatterTracer(formatter, traceWriter, request); } else if (formatter is JsonMediaTypeFormatter) { tracer = new JsonMediaTypeFormatterTracer(formatter, traceWriter, request); } else if (formatter is FormUrlEncodedMediaTypeFormatter) { tracer = new FormUrlEncodedMediaTypeFormatterTracer(formatter, traceWriter, request); } else if (formatter is BufferedMediaTypeFormatter) { tracer = new BufferedMediaTypeFormatterTracer(formatter, traceWriter, request); } else { tracer = new MediaTypeFormatterTracer(formatter, traceWriter, request); } // Copy SupportedMediaTypes and MediaTypeMappings and SupportedEncodings because they are publically visible tracer.SupportedMediaTypes.Clear(); foreach (MediaTypeHeaderValue mediaType in formatter.SupportedMediaTypes) { tracer.SupportedMediaTypes.Add(mediaType); } tracer.MediaTypeMappings.Clear(); foreach (MediaTypeMapping mapping in formatter.MediaTypeMappings) { tracer.MediaTypeMappings.Add(mapping); } tracer.SupportedEncodings.Clear(); foreach (var encoding in formatter.SupportedEncodings) { tracer.SupportedEncodings.Add(encoding); } // Copy IRequiredMemberSelector tracer.RequiredMemberSelector = formatter.RequiredMemberSelector; return(tracer); }
public void ReadFromStreamWithCancellationToken_Traces() { // Arrange Mock <BufferedMediaTypeFormatter> mockFormatter = new Mock <BufferedMediaTypeFormatter>() { CallBase = true }; mockFormatter .Setup( f => f.ReadFromStream( It.IsAny <Type>(), It.IsAny <Stream>(), It.IsAny <HttpContent>(), It.IsAny <IFormatterLogger>() ) ) .Returns("sampleValue"); TestTraceWriter traceWriter = new TestTraceWriter(); HttpRequestMessage request = new HttpRequestMessage(); request.Content = new StringContent(""); BufferedMediaTypeFormatterTracer tracer = new BufferedMediaTypeFormatterTracer( mockFormatter.Object, traceWriter, request ); TraceRecord[] expectedTraces = new TraceRecord[] { new TraceRecord(request, TraceCategories.FormattingCategory, TraceLevel.Info) { Kind = TraceKind.Begin, Operation = "ReadFromStream" }, new TraceRecord(request, TraceCategories.FormattingCategory, TraceLevel.Info) { Kind = TraceKind.End, Operation = "ReadFromStream" } }; // Act string valueReturned = tracer.ReadFromStream( typeof(string), new MemoryStream(), request.Content, null, CancellationToken.None ) as string; // Assert Assert.Equal <TraceRecord>( expectedTraces, traceWriter.Traces, new TraceRecordComparer() ); Assert.Equal("sampleValue", valueReturned); }