in aspnet/Microsoft.Samples.XMLA.HTTP/Tester/Program.cs [151:271]
private static void RunTests(List<Test> tests, string token, string userName, string password)
{
foreach (var test in tests)
{
var requestUri = test.RequestUri;
var qs = new List<Tuple<string, string>>();
if (test.HttpMethod == "get")
{
qs.Add(new Tuple<string, string>("query", test.Query));
}
qs.Add(new Tuple<string, string>("gzip", test.GZip.ToString()));
for (int i = 0; i < qs.Count; i++)
{
var q = qs[i];
string prefix = i > 0 ? "&" : "?";
requestUri += $"{prefix}{q.Item1}={q.Item2}";
}
var req = WebRequest.CreateHttp(requestUri);
req.Method = test.HttpMethod;
Console.WriteLine($"Running Test {test.HttpMethod}: {requestUri} with auth {test.AuthScheme} via {test.HttpMethod} ");
if (test.AuthScheme == "bearer")
{
req.Headers.Add("Authorization", $"bearer {token}");
}
else if (test.AuthScheme == "basic")
{
//System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(auth));
var cred = $"{userName}:{password}";
var auth = Convert.ToBase64String(Encoding.UTF8.GetBytes(cred));
req.Headers.Add("Authorization", $"basic {auth}");
}
Console.WriteLine($" HTTP Request Headers");
foreach (var h in req.Headers.AllKeys)
{
Console.WriteLine($" {h}: {req.Headers[h].Substring(0,50)}");
}
if (test.HttpMethod == "post")
{
using (var sr = new StreamWriter(req.GetRequestStream()))
{
sr.Write(test.Query);
}
}
HttpWebResponse resp;
try
{
resp = (HttpWebResponse)req.GetResponse();
}
catch (WebException ex)
{
Console.WriteLine(ex.Message);
resp = (HttpWebResponse)ex.Response;
if (resp == null)
throw ex;
}
Console.WriteLine($"Response {(int)resp.StatusCode}({resp.StatusDescription})");
for (int i = 0; i < resp.Headers.Count; ++i)
{
Console.WriteLine("{0}: {1}", resp.Headers.Keys[i], resp.Headers[i]);
}
Console.WriteLine();
var ms = new MemoryStream();
if (resp.ContentEncoding == "gzip")
{
using (var gs = new GZipStream(resp.GetResponseStream(), CompressionMode.Decompress))
{
gs.CopyTo(ms);
}
}
else
{
resp.GetResponseStream().CopyTo(ms);
}
ms.Position = 0;
var bytes = ms.ToArray();
Console.WriteLine($"Body Length {ms.Length}: Starts [{Encoding.UTF8.GetString(bytes,0,Math.Min(1000,bytes.Length))} . . .]");
if (resp.StatusCode == test.ExpectedResponse)
{
var color = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Test passed.");
Console.ForegroundColor = color;
}
else
{
var color = Console.ForegroundColor;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine($"Test Failed. Expected HTTP Response code:{test.ExpectedResponse} got:{resp.StatusCode}");
Console.ForegroundColor = color;
}
//if (resp.ContentEncoding != "gzip")
//{
// var body = Encoding.UTF8.GetString(ms.ToArray());
// Console.WriteLine(body);
//}
Console.WriteLine();
}
}