예제 #1
0
        public void Assert_that_max_recompile_summary_ignores_other_metrics()
        {
            object[] metrics = { new SqlCpuUsage() };
            var      results = new SqlServerEndpoint(null, null, false).GetMaxRecompileSummaryMetric(metrics);

            Assert.That(results, Is.Null, "Implementation should have ignored bad data.");
        }
예제 #2
0
        public void Assert_that_max_recompile_summary_ignores_empty_metric_array()
        {
            object[] metrics = {};
            var      results = new SqlServerEndpoint(null, null, false).GetMaxRecompileSummaryMetric(metrics);

            Assert.That(results, Is.Null, "Implementation should have ignored empty data.");
        }
예제 #3
0
        public void Assert_that_max_recompile_summary_is_reported()
        {
            object[] metrics =
            {
                new RecompileSummary {
                    DatabaseName = "A", SingleUseObjects = 100, SingleUsePercent = 0, MultipleUseObjects = 1,
                },
                new RecompileSummary {
                    DatabaseName = "B", SingleUseObjects = 1, SingleUsePercent = 80, MultipleUseObjects = 1,
                },
                new RecompileSummary {
                    DatabaseName = "C", SingleUseObjects = 1, SingleUsePercent = 0, MultipleUseObjects = 50,
                },
            };
            var queryContext = new SqlServerEndpoint(null, null, false).GetMaxRecompileSummaryMetric(metrics);
            var results      = queryContext.Results.ToArray();

            Assert.That(queryContext, Is.Not.SameAs(metrics), "Expected a new Array");

            var max = results.OfType <RecompileMaximums>().SingleOrDefault();

            Assert.That(max, Is.Not.Null, "Expected a new metric in the results");
            Assert.That(max.SingleUseObjects, Is.EqualTo(100), "Wrong SingleUseObjects value");
            Assert.That(max.SingleUsePercent, Is.EqualTo(80m), "Wrong SingleUsePercent value");
            Assert.That(max.MultipleUseObjects, Is.EqualTo(50), "Wrong MultipleUseObjects value");
        }
예제 #4
0
        public void Assert_that_duration_is_reported_correctly()
        {
            var sqlServerToMonitor = new SqlServerEndpoint("", "", false);

            Assert.That(sqlServerToMonitor.Duration, Is.EqualTo(0), "Expected 0 second Duration immediately after .ctor called");

            Thread.Sleep(1000);
            Assert.That(sqlServerToMonitor.Duration, Is.EqualTo(1), "Expected 1 second Duration after Thread.Sleep(1000)");
        }
예제 #5
0
        public void Assert_include_exclude_lists_built_appropriately()
        {
            IEnumerable <Database> includedDbs = new[] { "FooDb", "BarDb" }.Select(x => new Database {
                Name = x,
            });
            var sqlServerToMonitor = new SqlServerEndpoint("FooServer", ".", false, includedDbs, new[] { "Baz" });

            Assert.That(sqlServerToMonitor.IncludedDatabaseNames, Is.EquivalentTo(new[] { "FooDb", "BarDb" }));
            Assert.That(sqlServerToMonitor.ExcludedDatabaseNames, Is.EquivalentTo(Constants.SystemDatabases.Concat(new[] { "Baz" })));
        }
예제 #6
0
        public void Assert_include_system_databases_works()
        {
            var sqlServerToMonitor = new SqlServerEndpoint("FooServer", ".", false);

            Assert.That(sqlServerToMonitor.IncludedDatabaseNames.Length, Is.EqualTo(0));
            Assert.That(sqlServerToMonitor.ExcludedDatabaseNames, Is.EquivalentTo(Constants.SystemDatabases));

            sqlServerToMonitor = new SqlServerEndpoint("FooServer", ".", true);
            Assert.That(sqlServerToMonitor.IncludedDatabaseNames.Length, Is.EqualTo(0));
            Assert.That(sqlServerToMonitor.ExcludedDatabaseNames.Length, Is.EqualTo(0));
        }
        public void Should_replace_where_with_included_databases()
        {
            var queryType = new SqlServerConnections();

            var sqlServer = new SqlServerEndpoint("foo", "foo", false, new[] {new Database {Name = "bar"},}, null);

            var queryLocator = new QueryLocator(null);
            IEnumerable<SqlQuery> queries = queryLocator.PrepareQueries(new[] {queryType.GetType()}, false);
            foreach (SqlQuery query in queries)
            {
                string actual = queryType.ParameterizeQuery(query.CommandText, sqlServer);
                Assert.That(actual, Is.StringContaining("AND (d.Name IN ('bar')"));
            }
        }
        public void Assert_external_file_can_be_loaded()
        {
            // Hate to do this, but the config manager will only load from disk
            string artifactDir   = TestHelper.GetArtifactDir();
            string xml           = Assembly.GetExecutingAssembly().SearchForStringResource("Configuration.app.config");
            string appConfigFile = Path.Combine(artifactDir, "ConfigurationTest.app.config");

            File.WriteAllText(appConfigFile, xml);

            Settings settings = ConfigurationParser.ParseSettings(Substitute.For <ILog>(), appConfigFile);

            Assert.That(settings, Is.Not.Null, "The settings from the config file should not be null");

            Assert.That(settings.LicenseKey, Is.EqualTo("FooGuid"), "LicenseKey not mapped correctly");
            Assert.That(settings.PollIntervalSeconds, Is.EqualTo(45), "PollIntervalSeconds not mapped correctly");
            Assert.That(settings.ServiceName, Is.EqualTo("NewRelicSqlPlugin"), "ServiceName not mapped correctly");

            string[] expectedSqlInstances = new[]
            {
                new
                {
                    Name              = "Local",
                    ConnectionString  = "Server=.;Database=master;Trusted_Connection=True;",
                    IncludedDatabases = new[] { "Northwind", "tempdb", "master", "model", "msdb" },
                    ExcludedDatabases = new string[0],
                },
                new
                {
                    Name              = "Important Server",
                    ConnectionString  = "Server=192.168.10.123,1234;Database=master;User Id=foo;Password=bar;",
                    IncludedDatabases = new string[0],
                    ExcludedDatabases = new[] { "foo", "bar" }.Concat(Constants.SystemDatabases).ToArray(),
                },
            }.Select(i => SqlServerEndpoint.FormatProperties(i.Name, i.ConnectionString, i.IncludedDatabases, i.ExcludedDatabases)).ToArray();

            SqlServerEndpoint[] sqlServers = settings.Endpoints.OfType <SqlServerEndpoint>().ToArray();

            string[] actualInstances = sqlServers.Select(s => s.ToString()).ToArray();
            Assert.That(actualInstances, Is.EquivalentTo(expectedSqlInstances), "Endpoints Found different from expected");

            Database databaseWithDisplayName = sqlServers.Single(e => e.Name == "Local").IncludedDatabases.Single(d => d.Name == "Northwind");

            Assert.That(databaseWithDisplayName.DisplayName, Is.EqualTo("Southbreeze"), "Display name cannot be configured");

            string[] azureSqlDatabases      = settings.Endpoints.OfType <AzureSqlEndpoint>().Select(a => a.ToString()).ToArray();
            var      expectedAzureDatabases = new[] { "Name: CloudFtw, ConnectionString: Server=zzz,1433;Database=CloudFtw;User ID=NewRelic;Password=aaa;Trusted_Connection=false;Encrypt=true;Connection Timeout=30;" };

            Assert.That(azureSqlDatabases, Is.EqualTo(expectedAzureDatabases));
        }
예제 #9
0
        public void Should_replace_where_with_excluded_databases()
        {
            var queryType = new SqlServerConnections();

            var sqlServer = new SqlServerEndpoint("foo", "foo", true, null, new[] { "blah" });

            var queryLocator = new QueryLocator(null);
            IEnumerable <SqlQuery> queries = queryLocator.PrepareQueries(new[] { queryType.GetType() }, false);

            foreach (SqlQuery query in queries)
            {
                string actual = queryType.ParameterizeQuery(query.CommandText, sqlServer);
                Assert.That(actual, Is.StringContaining("AND (d.Name NOT IN ('blah')"));
            }
        }
예제 #10
0
        public void Should_replace_where_with_excluded_databases()
        {
            var queryType = new TQuery();

            var sqlServer = new SqlServerEndpoint("foo", "foo", true, null, new[] { "exclude" });

            var queryLocator = new QueryLocator(null);
            IEnumerable <SqlQuery> queries = sqlServer.FilterQueries(queryLocator.PrepareQueries(new[] { queryType.GetType() }, false));

            foreach (SqlQuery query in queries)
            {
                string actual = queryType.ParameterizeQuery(query.CommandText, sqlServer);
                Assert.That(actual, Is.StringContaining(ExcludedDatabaseExpectedSql));
            }
        }
예제 #11
0
        public void Assert_complex_include_system_databases_works()
        {
            var includeDbNames = new[] { "FooDb", "BarDb" };
            IEnumerable <Database> includedDbs = includeDbNames.Select(x => new Database {
                Name = x,
            });

            var sqlServerToMonitor = new SqlServerEndpoint("FooServer", ".", true, includedDbs, null);

            Assert.That(sqlServerToMonitor.ExcludedDatabaseNames.Length, Is.EqualTo(0));

            IEnumerable <string> expectedIncludes = Constants.SystemDatabases.ToList().Concat(includeDbNames);

            Assert.That(sqlServerToMonitor.IncludedDatabaseNames, Is.EquivalentTo(expectedIncludes));
        }
예제 #12
0
        public void Should_replace_where_with_included_and_system_databases()
        {
            var queryType = new SqlServerConnections();

            var sqlServer = new SqlServerEndpoint("foo", "foo", true, new[] { new Database {
                                                                                  Name = "bar"
                                                                              }, }, null);

            var queryLocator = new QueryLocator(null);
            IEnumerable <SqlQuery> queries = queryLocator.PrepareQueries(new[] { queryType.GetType() }, false);

            foreach (SqlQuery query in queries)
            {
                string actual = queryType.ParameterizeQuery(query.CommandText, sqlServer);
                Assert.That(actual, Is.StringContaining("AND (d.Name IN ('bar', 'tempdb', 'master', 'model', 'msdb')"));
            }
        }
예제 #13
0
        public string[] Assert_that_query_history_updated_appropriately(string[][] queryNames)
        {
            var sqlServerToMonitor = new SqlServerEndpoint("Best_DB_Ever", "", false);

            Assert.That(sqlServerToMonitor.QueryHistory.Count, Is.EqualTo(0), "History Should start off empty");

            queryNames.ForEach(queryNamesPass =>
            {
                IQueryContext[] queryContexts = queryNamesPass.Select(queryName =>
                {
                    var queryContext = Substitute.For <IQueryContext>();
                    queryContext.QueryName.Returns(queryName);
                    return(queryContext);
                }).ToArray();
                sqlServerToMonitor.UpdateHistory(queryContexts);
            });

            string[] actual = sqlServerToMonitor.QueryHistory.Select(qh => string.Format("{0}:{1}", qh.Key, qh.Value.Count)).ToArray();

            return(actual);
        }
        public void Assert_that_max_recompile_summary_is_reported()
        {
            object[] metrics =
            {
                new RecompileSummary { DatabaseName = "A", SingleUseObjects = 100, SingleUsePercent = 0, MultipleUseObjects = 1, },
                new RecompileSummary { DatabaseName = "B", SingleUseObjects = 1, SingleUsePercent = 80, MultipleUseObjects = 1, },
                new RecompileSummary { DatabaseName = "C", SingleUseObjects = 1, SingleUsePercent = 0, MultipleUseObjects = 50, },
            };
            var queryContext = new SqlServerEndpoint(null, null, false).GetMaxRecompileSummaryMetric(metrics);
            var results = queryContext.Results.ToArray();

            Assert.That(queryContext, Is.Not.SameAs(metrics), "Expected a new Array");

            var max = results.OfType<RecompileMaximums>().SingleOrDefault();
            Assert.That(max, Is.Not.Null, "Expected a new metric in the results");
            Assert.That(max.SingleUseObjects, Is.EqualTo(100), "Wrong SingleUseObjects value");
            Assert.That(max.SingleUsePercent, Is.EqualTo(80m), "Wrong SingleUsePercent value");
            Assert.That(max.MultipleUseObjects, Is.EqualTo(50), "Wrong MultipleUseObjects value");
        }
        public void Assert_complex_include_system_databases_works()
        {
            var includeDbNames = new[] {"FooDb", "BarDb"};
            IEnumerable<Database> includedDbs = includeDbNames.Select(x => new Database {Name = x,});

            var sqlServerToMonitor = new SqlServerEndpoint("FooServer", ".", true, includedDbs, null);
            Assert.That(sqlServerToMonitor.ExcludedDatabaseNames.Length, Is.EqualTo(0));

            IEnumerable<string> expectedIncludes = Constants.SystemDatabases.ToList().Concat(includeDbNames);
            Assert.That(sqlServerToMonitor.IncludedDatabaseNames, Is.EquivalentTo(expectedIncludes));
        }
 public void Assert_include_exclude_lists_built_appropriately()
 {
     IEnumerable<Database> includedDbs = new[] {"FooDb", "BarDb"}.Select(x => new Database {Name = x,});
     var sqlServerToMonitor = new SqlServerEndpoint("FooServer", ".", false, includedDbs, new[] {"Baz"});
     Assert.That(sqlServerToMonitor.IncludedDatabaseNames, Is.EquivalentTo(new[] {"FooDb", "BarDb"}));
     Assert.That(sqlServerToMonitor.ExcludedDatabaseNames, Is.EquivalentTo(Constants.SystemDatabases.Concat(new[] {"Baz"})));
 }
        public void Assert_include_system_databases_works()
        {
            var sqlServerToMonitor = new SqlServerEndpoint("FooServer", ".", false);
            Assert.That(sqlServerToMonitor.IncludedDatabaseNames.Length, Is.EqualTo(0));
            Assert.That(sqlServerToMonitor.ExcludedDatabaseNames, Is.EquivalentTo(Constants.SystemDatabases));

            sqlServerToMonitor = new SqlServerEndpoint("FooServer", ".", true);
            Assert.That(sqlServerToMonitor.IncludedDatabaseNames.Length, Is.EqualTo(0));
            Assert.That(sqlServerToMonitor.ExcludedDatabaseNames.Length, Is.EqualTo(0));
        }
        public void Assert_that_duration_is_reported_correctly()
        {
            var sqlServerToMonitor = new SqlServerEndpoint("", "", false);
            Assert.That(sqlServerToMonitor.Duration, Is.EqualTo(0), "Expected 0 second Duration immediately after .ctor called");

            Thread.Sleep(1000);
            Assert.That(sqlServerToMonitor.Duration, Is.EqualTo(1), "Expected 1 second Duration after Thread.Sleep(1000)");
        }
 public void Assert_that_max_recompile_summary_ignores_empty_metric_array()
 {
     object[] metrics = {};
     var results = new SqlServerEndpoint(null, null, false).GetMaxRecompileSummaryMetric(metrics);
     Assert.That(results, Is.Null, "Implementation should have ignored empty data.");
 }
        public string[] Assert_that_query_history_updated_appropriately(string[][] queryNames)
        {
            var sqlServerToMonitor = new SqlServerEndpoint("Best_DB_Ever", "", false);

            Assert.That(sqlServerToMonitor.QueryHistory.Count, Is.EqualTo(0), "History Should start off empty");

            queryNames.ForEach(queryNamesPass =>
                               {
                                   IQueryContext[] queryContexts = queryNamesPass.Select(queryName =>
                                                                                         {
                                                                                             var queryContext = Substitute.For<IQueryContext>();
                                                                                             queryContext.QueryName.Returns(queryName);
                                                                                             return queryContext;
                                                                                         }).ToArray();
                                   sqlServerToMonitor.UpdateHistory(queryContexts);
                               });

            string[] actual = sqlServerToMonitor.QueryHistory.Select(qh => string.Format("{0}:{1}", qh.Key, qh.Value.Count)).ToArray();

            return actual;
        }
 public void Assert_that_max_recompile_summary_ignores_other_metrics()
 {
     object[] metrics = {new SqlCpuUsage()};
     var results = new SqlServerEndpoint(null, null, false).GetMaxRecompileSummaryMetric(metrics);
     Assert.That(results, Is.Null, "Implementation should have ignored bad data.");
 }