def setUp(self): config = get_collector_config('TokuMXCollector', { 'host': 'localhost:27017', 'databases': '^db', }) self.collector = TokuMXCollector(config, None) self.connection = MagicMock()
class TestTokuMXCollector(CollectorTestCase): def setUp(self): config = get_collector_config('TokuMXCollector', { 'host': 'localhost:27017', 'databases': '^db', }) self.collector = TokuMXCollector(config, None) self.connection = MagicMock() def test_import(self): self.assertTrue(TokuMXCollector) @run_only_if_pymongo_is_available @patch('pymongo.Connection') @patch.object(Collector, 'publish') def test_should_publish_nested_keys_for_server_stats( self, publish_mock, connector_mock): data = {'more_keys': {'nested_key': 1}, 'key': 2, 'string': 'str'} self._annotate_connection(connector_mock, data) self.collector.collect() self.connection.db.command.assert_has_calls( [call('serverStatus'), call('engineStatus')], any_order=False) self.assertPublishedMany(publish_mock, { 'more_keys.nested_key': 1, 'key': 2 }) @run_only_if_pymongo_is_available @patch('pymongo.Connection') @patch.object(Collector, 'publish') def test_should_publish_nested_keys_for_db_stats(self, publish_mock, connector_mock): data = {'db_keys': {'db_nested_key': 1}, 'dbkey': 2, 'dbstring': 'str'} self._annotate_connection(connector_mock, data) self.collector.collect() self.connection['db1'].command.assert_called_once_with('dbStats') metrics = {'db_keys.db_nested_key': 1, 'dbkey': 2} self.setDocExample(collector=self.collector.__class__.__name__, metrics=metrics, defaultpath=self.collector.config['path']) self.assertPublishedMany(publish_mock, metrics) @run_only_if_pymongo_is_available @patch('pymongo.Connection') @patch.object(Collector, 'publish') def test_should_publish_stats_with_long_type(self, publish_mock, connector_mock): data = {'more_keys': long(1), 'key': 2, 'string': 'str'} self._annotate_connection(connector_mock, data) self.collector.collect() self.connection.db.command.assert_has_calls( [call('serverStatus'), call('engineStatus')], any_order=False) self.assertPublishedMany(publish_mock, {'more_keys': 1, 'key': 2}) @run_only_if_pymongo_is_available @patch('pymongo.Connection') @patch.object(Collector, 'publish') def test_should_ignore_unneeded_databases(self, publish_mock, connector_mock): self._annotate_connection(connector_mock, {}) self.collector.collect() assert call('baddb') not in self.connection.__getitem__.call_args_list @run_only_if_pymongo_is_available @patch('pymongo.Connection') @patch.object(Collector, 'publish') def test_should_ignore_unneeded_collections(self, publish_mock, connector_mock): data = {'more_keys': long(1), 'key': 2, 'string': 'str'} self._annotate_connection(connector_mock, data) self.connection['db1'].collection_names.return_value = [ 'collection1', 'tmp.mr.tmp1' ] self.connection['db1'].command.return_value = { 'key': 2, 'string': 'str' } self.collector.collect() self.connection.db.command.assert_has_calls( [call('serverStatus'), call('engineStatus')], any_order=False) self.connection['db1'].collection_names.assert_called_once_with() self.connection['db1'].command.assert_any_call('dbStats') self.connection['db1'].command.assert_any_call('collstats', 'collection1') assert call( 'collstats', 'tmp.mr.tmp1' ) not in self.connection['db1'].command.call_args_list # NOQA metrics = { 'databases.db1.collection1.key': 2, } self.assertPublishedMany(publish_mock, metrics) def _annotate_connection(self, connector_mock, data): connector_mock.return_value = self.connection self.connection.db.command.return_value = data self.connection.database_names.return_value = ['db1', 'baddb']
class TestTokuMXCollector(CollectorTestCase): def setUp(self): config = get_collector_config('TokuMXCollector', { 'host': 'localhost:27017', 'databases': '^db', }) self.collector = TokuMXCollector(config, None) self.connection = MagicMock() def test_import(self): self.assertTrue(TokuMXCollector) @run_only_if_pymongo_is_available @patch('pymongo.Connection') @patch.object(Collector, 'publish') def test_should_publish_nested_keys_for_server_stats(self, publish_mock, connector_mock): data = {'more_keys': {'nested_key': 1}, 'key': 2, 'string': 'str'} self._annotate_connection(connector_mock, data) self.collector.collect() self.connection.db.command.assert_has_calls( [call('serverStatus'), call('engineStatus')], any_order=False) self.assertPublishedMany(publish_mock, { 'more_keys.nested_key': 1, 'key': 2 }) @run_only_if_pymongo_is_available @patch('pymongo.Connection') @patch.object(Collector, 'publish') def test_should_publish_nested_keys_for_db_stats(self, publish_mock, connector_mock): data = {'db_keys': {'db_nested_key': 1}, 'dbkey': 2, 'dbstring': 'str'} self._annotate_connection(connector_mock, data) self.collector.collect() self.connection['db1'].command.assert_called_once_with('dbStats') metrics = { 'db_keys.db_nested_key': 1, 'dbkey': 2 } self.setDocExample(collector=self.collector.__class__.__name__, metrics=metrics, defaultpath=self.collector.config['path']) self.assertPublishedMany(publish_mock, metrics) @run_only_if_pymongo_is_available @patch('pymongo.Connection') @patch.object(Collector, 'publish') def test_should_publish_stats_with_long_type(self, publish_mock, connector_mock): data = {'more_keys': long(1), 'key': 2, 'string': 'str'} self._annotate_connection(connector_mock, data) self.collector.collect() self.connection.db.command.assert_has_calls( [call('serverStatus'), call('engineStatus')], any_order=False) self.assertPublishedMany(publish_mock, { 'more_keys': 1, 'key': 2 }) @run_only_if_pymongo_is_available @patch('pymongo.Connection') @patch.object(Collector, 'publish') def test_should_ignore_unneeded_databases(self, publish_mock, connector_mock): self._annotate_connection(connector_mock, {}) self.collector.collect() assert call('baddb') not in self.connection.__getitem__.call_args_list @run_only_if_pymongo_is_available @patch('pymongo.Connection') @patch.object(Collector, 'publish') def test_should_ignore_unneeded_collections(self, publish_mock, connector_mock): data = {'more_keys': long(1), 'key': 2, 'string': 'str'} self._annotate_connection(connector_mock, data) self.connection['db1'].collection_names.return_value = ['collection1', 'tmp.mr.tmp1'] self.connection['db1'].command.return_value = {'key': 2, 'string': 'str'} self.collector.collect() self.connection.db.command.assert_has_calls( [call('serverStatus'), call('engineStatus')], any_order=False) self.connection['db1'].collection_names.assert_called_once_with() self.connection['db1'].command.assert_any_call('dbStats') self.connection['db1'].command.assert_any_call('collstats', 'collection1') assert call('collstats', 'tmp.mr.tmp1') not in self.connection['db1'].command.call_args_list # NOQA metrics = { 'databases.db1.collection1.key': 2, } self.assertPublishedMany(publish_mock, metrics) def _annotate_connection(self, connector_mock, data): connector_mock.return_value = self.connection self.connection.db.command.return_value = data self.connection.database_names.return_value = ['db1', 'baddb']