public void TestBasicSqlRewriteRuleServiceWithAutoRefreshTimer()
 {
     using var repo    = new SqlRewriteDbRepository(Settings.Default.ConnectionString);
     using var service = new SqlRewriteRuleService(repo, true);
     service.AutoRefreshTimerInterval           = 1000;
     service.AutoRefreshRulesAndSettingsEnabled = true;
     using var con = new SqlConnection(Settings.Default.ConnectionString);
     con.Open();
     using (var cmd = new SqlCommand(Stm, con))
     {
         var version = cmd.ExecuteScalar().ToString();
         Assert.IsTrue(version.Contains("Microsoft"));
     }
     Assert.AreNotEqual(0, service.AddRule(".*", "NO MATCH", "SELECT GETDATE()"));
     Thread.Sleep(1100);
     using (var cmd = new SqlCommand(Stm, con))
     {
         var version = cmd.ExecuteScalar().ToString();
         Assert.IsTrue(version.Contains("Microsoft"));
     }
     Assert.AreNotEqual(0, service.AddRule(".*", Stm, "SELECT GETDATE()"));
     Thread.Sleep(1100);
     using (var cmd = new SqlCommand(Stm, con))
     {
         var version = cmd.ExecuteScalar().ToString();
         Assert.IsFalse(version.Contains("Microsoft"));
     }
 }
        public void TestPerformanceImpact()
        {
            using var repo    = new SqlRewriteDbRepository(Settings.Default.ConnectionString);
            using var service = new SqlRewriteRuleService(repo, true);
            using var conn    = new SqlConnection(Settings.Default.ConnectionString);
            conn.Open();
            var stopWatch = new Stopwatch();

            stopWatch.Start();
            Assert.AreNotEqual(0, service.AddRule(".*", Stm, "SELECT GETDATE()"));
            service.RefreshRulesFromRepository();
            for (var i = 0; i < 10000; i++)
            {
                using var cmd = new SqlCommand(Stm, conn);
                var version = cmd.ExecuteScalar().ToString();
                Assert.IsNotNull(version.Contains("Microsoft"));
            }
            stopWatch.Stop();
            var intervalFullInjection = stopWatch.Elapsed;

            stopWatch.Reset();
            stopWatch.Start();
            service.Enabled = false;
            for (var i = 0; i < 10000; i++)
            {
                using var cmd = new SqlCommand(Stm, conn);
                var version = cmd.ExecuteScalar().ToString();
                Assert.IsNotNull(version.Contains("Microsoft"));
            }
            stopWatch.Stop();
            Assert.IsTrue(Math.Abs(intervalFullInjection.TotalMilliseconds / stopWatch.Elapsed.TotalMilliseconds) < 3, $"{intervalFullInjection.TotalMilliseconds} vs {stopWatch.Elapsed.TotalMilliseconds}");
        }