private static void RunTests()

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();



            }
        }