public void ApplyControllerSettings_Clone_Can_Enable_Tracing_When_Original_Disabled_It() { // Arrange bool calledTrace = false; HttpConfiguration config = new HttpConfiguration(); Mock <ITraceWriter> mockTracer = new Mock <ITraceWriter>() { CallBase = true }; mockTracer.Setup(m => m.Trace(It.IsAny <HttpRequestMessage>(), It.IsAny <string>(), It.IsAny <TraceLevel>(), It.IsAny <Action <TraceRecord> >())).Callback(() => { calledTrace = true; }); config.Initializer(config); // ensures TraceManager is called, but it will be a NOP HttpControllerSettings settings = new HttpControllerSettings(config); settings.Services.Replace(typeof(ITraceWriter), mockTracer.Object); // Act HttpConfiguration clonedConfig = HttpConfiguration.ApplyControllerSettings(settings, config); clonedConfig.Services.GetContentNegotiator().Negotiate(typeof(string), new HttpRequestMessage(), Enumerable.Empty <MediaTypeFormatter>()); // Assert Assert.True(calledTrace); }
public void ApplyControllerSettings_Clone_Inherits_Tracing_On_PerController_Services() { // Arrange bool calledTrace = false; HttpConfiguration config = new HttpConfiguration(); Mock <ITraceWriter> mockTracer = new Mock <ITraceWriter>() { CallBase = true }; mockTracer.Setup(m => m.Trace(It.IsAny <HttpRequestMessage>(), It.IsAny <string>(), It.IsAny <TraceLevel>(), It.IsAny <Action <TraceRecord> >())).Callback(() => { calledTrace = true; }); config.Services.Replace(typeof(ITraceWriter), mockTracer.Object); config.Initializer(config); // installs tracer on original config HttpControllerSettings settings = new HttpControllerSettings(config); Mock <IContentNegotiator> mockNegotiator = new Mock <IContentNegotiator>() { CallBase = true }; settings.Services.Replace(typeof(IContentNegotiator), mockNegotiator.Object); // Act HttpConfiguration clonedConfig = HttpConfiguration.ApplyControllerSettings(settings, config); clonedConfig.Services.GetContentNegotiator().Negotiate(typeof(string), new HttpRequestMessage(), Enumerable.Empty <MediaTypeFormatter>()); // Assert Assert.True(calledTrace); }
public void ApplyControllerSettings_Clone_Inherits_Tracing_On_PerController_Formatters() { // Arrange bool calledTrace = false; HttpConfiguration config = new HttpConfiguration(); Mock <ITraceWriter> mockTracer = new Mock <ITraceWriter>() { CallBase = true }; mockTracer.Setup(m => m.Trace(It.IsAny <HttpRequestMessage>(), It.IsAny <string>(), It.IsAny <TraceLevel>(), It.IsAny <Action <TraceRecord> >())).Callback(() => { calledTrace = true; }); config.Services.Replace(typeof(ITraceWriter), mockTracer.Object); config.Initializer(config); // installs tracer on original config HttpControllerSettings settings = new HttpControllerSettings(config); Mock <MediaTypeFormatter> mockFormatter = new Mock <MediaTypeFormatter>() { CallBase = true }; settings.Formatters.Clear(); settings.Formatters.Add(mockFormatter.Object); // Act HttpConfiguration clonedConfig = HttpConfiguration.ApplyControllerSettings(settings, config); clonedConfig.Formatters[0].GetPerRequestFormatterInstance(typeof(string), new HttpRequestMessage(), new MediaTypeHeaderValue("application/mine")); // Assert Assert.True(calledTrace); }
/// <summary> /// Prepares the server for operation. /// </summary> /// <remarks> /// This method must be called after all configuration is complete /// but before the first request is processed. /// </remarks> protected virtual void Initialize() { // Do final initialization of the configuration. // It is considered immutable from this point forward. _configuration.Initializer(_configuration); // Create pipeline InnerHandler = HttpClientFactory.CreatePipeline(_dispatcher, _configuration.MessageHandlers); }
internal static HttpConfiguration ApplyControllerSettings(HttpControllerSettings settings, HttpConfiguration configuration) { if (!settings.IsFormatterCollectionInitialized && !settings.IsParameterBindingRuleCollectionInitialized && !settings.IsServiceCollectionInitialized) { return(configuration); } // Create a clone of the original configuration, including its initialization rules. // Invoking Initialize therefore initializes the cloned config the same way as the original. HttpConfiguration newConfiguration = new HttpConfiguration(configuration, settings); newConfiguration.Initializer(newConfiguration); return(newConfiguration); }
public void Initialize_Initializer_Can_Be_Reused() { // Arrange HttpConfiguration config1 = new HttpConfiguration(); HttpConfiguration configPassedToAction = null; config1.Initializer = (c) => configPassedToAction = c; HttpConfiguration config2 = new HttpConfiguration(); config2.Initializer = config1.Initializer; // Act config2.Initializer(config2); // Assert Assert.Same(config2, configPassedToAction); }
public void Initializer_Initializes_TraceManager_By_Default() { // Arrange var config = new HttpConfiguration(); Mock <ITraceManager> mock = new Mock <ITraceManager>() { CallBase = true }; mock.Setup(m => m.Initialize(config)).Verifiable(); config.Services.Replace(typeof(ITraceManager), mock.Object); // Act config.Initializer(config); // Assert mock.Verify(); }
public void Initializer_Sets_Formatter_RequiredMemberSelector_By_Default() { // Arrange var config = new HttpConfiguration(); Mock <MediaTypeFormatter> mockFormatter = new Mock <MediaTypeFormatter>() { CallBase = true }; mockFormatter.Object.RequiredMemberSelector = null; config.Formatters.Clear(); config.Formatters.Add(mockFormatter.Object); // Act config.Initializer(config); // Assert Assert.NotNull(mockFormatter.Object.RequiredMemberSelector); }
public void Initialize_Can_Be_Chained() { // Arrange HttpConfiguration config1 = new HttpConfiguration(); HttpConfiguration configPassedToAction1 = null; config1.Initializer = (c) => configPassedToAction1 = c; HttpConfiguration config2 = new HttpConfiguration(); HttpConfiguration configPassedToAction2 = null; config2.Initializer = (c) => { config1.Initializer(config1); configPassedToAction2 = c; }; // Act config2.Initializer(config2); // Assert Assert.Same(config1, configPassedToAction1); Assert.Same(config2, configPassedToAction2); }
public void Initialize_Default_Initializer_Can_Be_Removed() { // Arrange var config = new HttpConfiguration(); config.Initializer = (c) => { }; bool initializeCalled = false; Mock <ITraceManager> mock = new Mock <ITraceManager>() { CallBase = true }; mock.Setup(m => m.Initialize(config)).Callback(() => initializeCalled = true); config.Services.Replace(typeof(ITraceManager), mock.Object); // Act config.Initializer(config); // Assert Assert.False(initializeCalled); }
public void ApplyControllerSettings_Clone_Can_Enable_Tracing_When_Original_Disabled_It() { // Arrange bool calledTrace = false; HttpConfiguration config = new HttpConfiguration(); Mock<ITraceWriter> mockTracer = new Mock<ITraceWriter>() { CallBase = true }; mockTracer.Setup(m => m.Trace(It.IsAny<HttpRequestMessage>(), It.IsAny<string>(), It.IsAny<TraceLevel>(), It.IsAny<Action<TraceRecord>>())).Callback(() => { calledTrace = true; }); config.Initializer(config); // ensures TraceManager is called, but it will be a NOP HttpControllerSettings settings = new HttpControllerSettings(config); settings.Services.Replace(typeof(ITraceWriter), mockTracer.Object); // Act HttpConfiguration clonedConfig = HttpConfiguration.ApplyControllerSettings(settings, config); clonedConfig.Services.GetContentNegotiator().Negotiate(typeof(string), new HttpRequestMessage(), Enumerable.Empty<MediaTypeFormatter>()); // Assert Assert.True(calledTrace); }
public void ApplyControllerSettings_Clone_Inherits_Tracing_On_PerController_Formatters() { // Arrange bool calledTrace = false; HttpConfiguration config = new HttpConfiguration(); Mock<ITraceWriter> mockTracer = new Mock<ITraceWriter>() { CallBase = true }; mockTracer.Setup(m => m.Trace(It.IsAny<HttpRequestMessage>(), It.IsAny<string>(), It.IsAny<TraceLevel>(), It.IsAny<Action<TraceRecord>>())).Callback(() => { calledTrace = true; }); config.Services.Replace(typeof(ITraceWriter), mockTracer.Object); config.Initializer(config); // installs tracer on original config HttpControllerSettings settings = new HttpControllerSettings(config); Mock<MediaTypeFormatter> mockFormatter = new Mock<MediaTypeFormatter>() { CallBase = true }; settings.Formatters.Clear(); settings.Formatters.Add(mockFormatter.Object); // Act HttpConfiguration clonedConfig = HttpConfiguration.ApplyControllerSettings(settings, config); clonedConfig.Formatters[0].GetPerRequestFormatterInstance(typeof(string), new HttpRequestMessage(), new MediaTypeHeaderValue("application/mine")); // Assert Assert.True(calledTrace); }
public void ApplyControllerSettings_Clone_Inherits_Tracing_On_PerController_Services() { // Arrange bool calledTrace = false; HttpConfiguration config = new HttpConfiguration(); Mock<ITraceWriter> mockTracer = new Mock<ITraceWriter>() { CallBase = true }; mockTracer.Setup(m => m.Trace(It.IsAny<HttpRequestMessage>(), It.IsAny<string>(), It.IsAny<TraceLevel>(), It.IsAny<Action<TraceRecord>>())).Callback(() => { calledTrace = true; }); config.Services.Replace(typeof(ITraceWriter), mockTracer.Object); config.Initializer(config); // installs tracer on original config HttpControllerSettings settings = new HttpControllerSettings(config); Mock<IContentNegotiator> mockNegotiator = new Mock<IContentNegotiator>() { CallBase = true }; settings.Services.Replace(typeof(IContentNegotiator), mockNegotiator.Object); // Act HttpConfiguration clonedConfig = HttpConfiguration.ApplyControllerSettings(settings, config); clonedConfig.Services.GetContentNegotiator().Negotiate(typeof(string), new HttpRequestMessage(), Enumerable.Empty<MediaTypeFormatter>()); // Assert Assert.True(calledTrace); }
public void Initializer_Initializes_TraceManager_By_Default() { // Arrange var config = new HttpConfiguration(); Mock<ITraceManager> mock = new Mock<ITraceManager>() { CallBase = true }; mock.Setup(m => m.Initialize(config)).Verifiable(); config.Services.Replace(typeof(ITraceManager), mock.Object); // Act config.Initializer(config); // Assert mock.Verify(); }
public void MapHttpAttributeRoutes_AddsLinkGenerationRoutes() { // Arrange HttpConfiguration config = new HttpConfiguration(); var routePrefixes = new Collection<IRoutePrefix>() { }; var routeProviders = new Collection<RouteAttribute>() { new RouteAttribute("get1") { Name = "one" }, new RouteAttribute("get2") { Name = "two" }, new RouteAttribute("get3") { Name = "three" } }; SetUpConfiguration(config, routePrefixes, routeProviders); // Act config.MapHttpAttributeRoutes(); config.Initializer(config); // Assert HttpRouteCollection routes = config.Routes; Assert.Equal(4, routes.Count); // 1 attr route, plus 3 generation routes Assert.IsType<RouteCollectionRoute>(routes.ElementAt(0)); for (int i = 1; i < 4; i++) { Assert.IsType<LinkGenerationRoute>(routes.ElementAt(i)); } Assert.IsType<LinkGenerationRoute>(routes["one"]); Assert.IsType<LinkGenerationRoute>(routes["two"]); Assert.IsType<LinkGenerationRoute>(routes["three"]); }
public void Initializer_Sets_Formatter_RequiredMemberSelector_By_Default() { // Arrange var config = new HttpConfiguration(); Mock<MediaTypeFormatter> mockFormatter = new Mock<MediaTypeFormatter>() { CallBase = true }; mockFormatter.Object.RequiredMemberSelector = null; config.Formatters.Clear(); config.Formatters.Add(mockFormatter.Object); // Act config.Initializer(config); // Assert Assert.NotNull(mockFormatter.Object.RequiredMemberSelector); }
internal static HttpConfiguration ApplyControllerSettings(HttpControllerSettings settings, HttpConfiguration configuration) { if (!settings.IsFormatterCollectionInitialized && !settings.IsParameterBindingRuleCollectionInitialized && !settings.IsServiceCollectionInitialized) { return configuration; } // Create a clone of the original configuration, including its initialization rules. // Invoking Initialize therefore initializes the cloned config the same way as the original. HttpConfiguration newConfiguration = new HttpConfiguration(configuration, settings); newConfiguration.Initializer(newConfiguration); return newConfiguration; }
public void Initialize_Default_Initializer_Can_Be_Removed() { // Arrange var config = new HttpConfiguration(); config.Initializer = (c) => { }; bool initializeCalled = false; Mock<ITraceManager> mock = new Mock<ITraceManager>() { CallBase = true }; mock.Setup(m => m.Initialize(config)).Callback(() => initializeCalled = true); config.Services.Replace(typeof(ITraceManager), mock.Object); // Act config.Initializer(config); // Assert Assert.False(initializeCalled); }