public async Task ValuesController_Behavior_Unchanged_By_Tracing(ITestTraceWriter traceWriter) { HttpConfiguration config = new HttpConfiguration(); config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new { id = RouteParameter.Optional }); // The null trace writer case is tested as well to verify the // ValuesController works as expected without tracing. if (traceWriter != null) { config.Services.Replace(typeof(ITraceWriter), traceWriter); traceWriter.Start(); } ValuesController valuesController = new ValuesController(); using (HttpServer server = new HttpServer(config)) { using (HttpClient client = new HttpClient(server)) { if (traceWriter != null) { traceWriter.Start(); } // Calls ValuesController.Get() string uri = _baseAddress + "/api/Values"; HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, uri); HttpResponseMessage response = await client.SendAsync(request); Assert.Equal(HttpStatusCode.OK, response.StatusCode); string[] expectedGetResponse = valuesController.Get().ToArray(); string[] actualGetResponse = await response.Content.ReadAsAsync <string[]>(); Assert.Equal(expectedGetResponse, actualGetResponse); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); traceWriter.Start(); } // Calls ValuesController.Get(id) using query string uri = _baseAddress + "/api/Values?id=5"; request = new HttpRequestMessage(HttpMethod.Get, uri); response = await client.SendAsync(request); Assert.Equal(HttpStatusCode.OK, response.StatusCode); string expectedGetQueryStringResponse = valuesController.Get(5); string actualGetQueryStringResponse = await response.Content.ReadAsAsync <string>(); Assert.Equal(expectedGetQueryStringResponse, actualGetQueryStringResponse); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); traceWriter.Start(); } // Calls ValuesController.Get(id) using route uri = _baseAddress + "/api/Values/5"; request = new HttpRequestMessage(HttpMethod.Get, uri); response = await client.SendAsync(request); Assert.Equal(HttpStatusCode.OK, response.StatusCode); string expectedGetRouteResponse = valuesController.Get(5); string actualGetRouteResponse = await response.Content.ReadAsAsync <string>(); Assert.Equal(expectedGetQueryStringResponse, actualGetRouteResponse); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); traceWriter.Start(); } // Calls ValuesController.Get(id) using query string that causes model binding error uri = _baseAddress + "/api/Values?id=x"; request = new HttpRequestMessage(HttpMethod.Get, uri); response = await client.SendAsync(request); Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); traceWriter.Start(); } // Calls ValuesController.Post(value) with no parameters uri = _baseAddress + "/api/Values"; request = new HttpRequestMessage(HttpMethod.Post, uri); response = await client.SendAsync(request); Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); traceWriter.Start(); } // Calls ValuesController.Post(value) using query string uri = _baseAddress + "/api/Values?value=hello"; request = new HttpRequestMessage(HttpMethod.Post, uri); response = await client.SendAsync(request); Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); traceWriter.Start(); } // Calls ValuesController.Put(id, value) using query strings uri = _baseAddress + "/api/Values?id=5&value=hello"; request = new HttpRequestMessage(HttpMethod.Put, uri); response = await client.SendAsync(request); Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); traceWriter.Start(); } // Calls ValuesController.Put(id, value) using route + query string uri = _baseAddress + "/api/Values/5?value=hello"; request = new HttpRequestMessage(HttpMethod.Put, uri); response = await client.SendAsync(request); Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); traceWriter.Start(); } // Calls ValuesController.Delete(id) using query string uri = _baseAddress + "/api/Values?id=5"; request = new HttpRequestMessage(HttpMethod.Delete, uri); response = await client.SendAsync(request); Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); traceWriter.Start(); } // Calls ValuesController.Delete(id) using route uri = _baseAddress + "/api/Values/5"; request = new HttpRequestMessage(HttpMethod.Delete, uri); response = await client.SendAsync(request); Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); } } } }
public void ValuesController_Behavior_Unchanged_By_Tracing(ITestTraceWriter traceWriter) { HttpConfiguration config = new HttpConfiguration(); config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new { id = RouteParameter.Optional }); // The null trace writer case is tested as well to verify the // ValuesController works as expected without tracing. if (traceWriter != null) { config.Services.Replace(typeof(ITraceWriter), traceWriter); traceWriter.Start(); } ValuesController valuesController = new ValuesController(); using (HttpServer server = new HttpServer(config)) { using (HttpClient client = new HttpClient(server)) { if (traceWriter != null) { traceWriter.Start(); } // Calls ValuesController.Get() string uri = _baseAddress + "/api/Values"; HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, uri); HttpResponseMessage response = client.SendAsync(request).Result; Assert.Equal(HttpStatusCode.OK, response.StatusCode); string[] expectedGetResponse = valuesController.Get().ToArray(); string[] actualGetResponse = response.Content.ReadAsAsync<string[]>().Result; Assert.Equal(expectedGetResponse, actualGetResponse); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); traceWriter.Start(); } // Calls ValuesController.Get(id) using query string uri = _baseAddress + "/api/Values?id=5"; request = new HttpRequestMessage(HttpMethod.Get, uri); response = client.SendAsync(request).Result; Assert.Equal(HttpStatusCode.OK, response.StatusCode); string expectedGetQueryStringResponse = valuesController.Get(5); string actualGetQueryStringResponse = response.Content.ReadAsAsync<string>().Result; Assert.Equal(expectedGetQueryStringResponse, actualGetQueryStringResponse); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); traceWriter.Start(); } // Calls ValuesController.Get(id) using route uri = _baseAddress + "/api/Values/5"; request = new HttpRequestMessage(HttpMethod.Get, uri); response = client.SendAsync(request).Result; Assert.Equal(HttpStatusCode.OK, response.StatusCode); string expectedGetRouteResponse = valuesController.Get(5); string actualGetRouteResponse = response.Content.ReadAsAsync<string>().Result; Assert.Equal(expectedGetQueryStringResponse, actualGetRouteResponse); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); traceWriter.Start(); } // Calls ValuesController.Get(id) using query string that causes model binding error uri = _baseAddress + "/api/Values?id=x"; request = new HttpRequestMessage(HttpMethod.Get, uri); response = client.SendAsync(request).Result; Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); traceWriter.Start(); } // Calls ValuesController.Post(value) with no parameters uri = _baseAddress + "/api/Values"; request = new HttpRequestMessage(HttpMethod.Post, uri); response = client.SendAsync(request).Result; Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); traceWriter.Start(); } // Calls ValuesController.Post(value) using query string uri = _baseAddress + "/api/Values?value=hello"; request = new HttpRequestMessage(HttpMethod.Post, uri); response = client.SendAsync(request).Result; Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); traceWriter.Start(); } // Calls ValuesController.Put(id, value) using query strings uri = _baseAddress + "/api/Values?id=5&value=hello"; request = new HttpRequestMessage(HttpMethod.Put, uri); response = client.SendAsync(request).Result; Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); traceWriter.Start(); } // Calls ValuesController.Put(id, value) using route + query string uri = _baseAddress + "/api/Values/5?value=hello"; request = new HttpRequestMessage(HttpMethod.Put, uri); response = client.SendAsync(request).Result; Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); traceWriter.Start(); } // Calls ValuesController.Delete(id) using query string uri = _baseAddress + "/api/Values?id=5"; request = new HttpRequestMessage(HttpMethod.Delete, uri); response = client.SendAsync(request).Result; Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); traceWriter.Start(); } // Calls ValuesController.Delete(id) using route uri = _baseAddress + "/api/Values/5"; request = new HttpRequestMessage(HttpMethod.Delete, uri); response = client.SendAsync(request).Result; Assert.Equal(HttpStatusCode.NoContent, response.StatusCode); if (traceWriter != null) { traceWriter.Finish(); Assert.True(traceWriter.DidReceiveTraceRequests); } } } }