public void _6_Meashure_Download_Speed()
        {
            var list = SqlServers.OrderByVersionDesc().ToList();

            Debug.WriteLine($"Download speed test of {list.Count} sql servers:{Environment.NewLine}{list.AsBullets()}");

            Debug.WriteLine("");
            Debug.WriteLine("Download speed Report (KB per second)");
            StringBuilder errors = new StringBuilder();

            foreach (var sqlRef in list)
            {
                var blockSize          = SqlServiceExtentions.IsLocalDbOrLocalServer(sqlRef.ConnectionString) ? 4096 : 1024;
                var supportedProtocols = sqlRef.ProbeTransports(timeoutMillisecs: TRANSPORT_PROBE_DURATION);
                foreach (var supportedProtocol in supportedProtocols)
                {
                    try
                    {
                        SqlSpeedMeasurement test     = new SqlSpeedMeasurement(supportedProtocol.ConnectionString);
                        decimal             kbPerSec = test.GetDownloadSpeed(limitIterations: 100000, blockSizeInKb: blockSize, limitMilliSeconds: TestEnvironment.SqlDownloadDuration);
                        var transport = GetTransportInfo(supportedProtocol.ConnectionString);
                        Debug.WriteLine($"{(kbPerSec.ToString("f1")).PadLeft(9)} : {sqlRef.DataSource} ({transport})");
                    }
                    catch (Exception ex)
                    {
                        errors.AppendFormat("{0} {1}", supportedProtocol.DataSource, ex.GetExeptionDigest()).AppendLine();
                    }
                }
            }

            if (errors.Length > 0)
            {
                Debug.WriteLine(Environment.NewLine + "SpeedTest failed" + Environment.NewLine + errors);
            }
        }
        public void _2_Start_Local_Services()
        {
            var list = SqlServers.OrderByVersionDesc().ToList();

            Debug.WriteLine($"Check services status {list.Count} sql servers:{Environment.NewLine}{list.AsBullets()}");
            Debug.WriteLine("");

            IEnumerable <SqlServerRef> ordered = list.OrderByVersionDesc().ToList();
            List <SqlServerRef>        stopped = new List <SqlServerRef>();
            var localOrdered = ordered.Where(x => SqlServiceExtentions.IsLocalService(x.DataSource)).ToList();

            if (localOrdered.Any())
            {
                Debug.WriteLine("State of corresponding services");
                foreach (var sqlRef in localOrdered)
                {
                    var serviceStatus = SqlServiceExtentions.CheckServiceStatus(sqlRef.DataSource);
                    if (serviceStatus.State != SqlServiceStatus.ServiceStatus.Running)
                    {
                        stopped.Add(sqlRef);
                    }

                    Debug.WriteLine(" {0} ({1}): {2}", sqlRef.DataSource, sqlRef.Version, serviceStatus);
                }
            }


            // LocalDB is awsays assumed to be stopped.
            var localDB = ordered.FirstOrDefault(x => SqlServiceExtentions.IsLocalDB(x.DataSource));

            if (localDB != null)
            {
                stopped.Add(localDB);
            }

            if (stopped.Any())
            {
                Debug.WriteLine("");
                Debug.WriteLine("Start stopped sql services");
                {
                    foreach (var sqlRef in stopped)
                    {
                        Stopwatch sw     = Stopwatch.StartNew();
                        bool      ok     = SqlServiceExtentions.StartService(sqlRef.DataSource, TimeSpan.FromSeconds(30));
                        string    action = SqlServiceExtentions.IsLocalDB(sqlRef.DataSource) ? "Checking" : "Starting";
                        Debug.WriteLine(" {3} {0}: {1} ({2:0.00} secs)",
                                        sqlRef.DataSource, ok ? "OK" : "Fail", sw.ElapsedMilliseconds / 1000d, action);
                    }
                }
            }
        }