private async Task VerifyHttpResponseFromContainer(string containerName) { var retries = 30; var url = !s_isRunningInContainer && DockerHelper.IsLinuxContainerModeEnabled ? $"http://localhost:{_dockerHelper.GetContainerHostPort(containerName)}" : $"http://{_dockerHelper.GetContainerAddress(containerName)}"; using (HttpClient client = new HttpClient()) { while (retries > 0) { retries--; await Task.Delay(TimeSpan.FromSeconds(2)); try { using (HttpResponseMessage result = await client.GetAsync(url)) { _outputHelper.WriteLine($"HTTP {result.StatusCode}\n{(await result.Content.ReadAsStringAsync())}"); result.EnsureSuccessStatusCode(); } return; } catch (Exception ex) { _outputHelper.WriteLine($"Request to {url} failed - retrying: {ex.ToString()}"); } } } throw new TimeoutException($"Timed out attempting to access the endpoint {url} on container {containerName}"); }
public static async Task VerifyHttpResponseFromContainerAsync(string containerName, DockerHelper dockerHelper, ITestOutputHelper outputHelper) { int retries = 30; // Can't use localhost when running inside containers or Windows. string url = !Config.IsRunningInContainer && DockerHelper.IsLinuxContainerModeEnabled ? $"http://localhost:{dockerHelper.GetContainerHostPort(containerName)}" : $"http://{dockerHelper.GetContainerAddress(containerName)}"; using (HttpClient client = new HttpClient()) { while (retries > 0) { retries--; await Task.Delay(TimeSpan.FromSeconds(2)); try { using (HttpResponseMessage result = await client.GetAsync(url)) { outputHelper.WriteLine($"HTTP {result.StatusCode}\n{(await result.Content.ReadAsStringAsync())}"); result.EnsureSuccessStatusCode(); } return; } catch (Exception ex) { outputHelper.WriteLine($"Request to {url} failed - retrying: {ex}"); } } } throw new TimeoutException($"Timed out attempting to access the endpoint {url} on container {containerName}"); }
public static async Task <HttpResponseMessage> GetHttpResponseFromContainerAsync(string containerName, DockerHelper dockerHelper, ITestOutputHelper outputHelper, int containerPort = 80, string pathAndQuery = null, Action <HttpResponseMessage> validateCallback = null) { int retries = 30; // Can't use localhost when running inside containers or Windows. string url = !Config.IsRunningInContainer && DockerHelper.IsLinuxContainerModeEnabled ? $"http://localhost:{dockerHelper.GetContainerHostPort(containerName, containerPort)}/{pathAndQuery}" : $"http://{dockerHelper.GetContainerAddress(containerName)}:{containerPort}/{pathAndQuery}"; using (HttpClient client = new HttpClient()) { while (retries > 0) { retries--; await Task.Delay(TimeSpan.FromSeconds(2)); HttpResponseMessage result = null; try { result = await client.GetAsync(url); outputHelper.WriteLine($"HTTP {result.StatusCode}\n{(await result.Content.ReadAsStringAsync())}"); if (null == validateCallback) { result.EnsureSuccessStatusCode(); } else { validateCallback(result); } // Store response in local that will not be disposed HttpResponseMessage returnResult = result; result = null; return(returnResult); } catch (Exception ex) { outputHelper.WriteLine($"Request to {url} failed - retrying: {ex}"); } finally { result?.Dispose(); } } } throw new TimeoutException($"Timed out attempting to access the endpoint {url} on container {containerName}"); }