def test_service_check_ko(aggregator, instance): check = disable_thread_pool(VSphereCheck('disk', {}, {}, [instance])) with mock.patch('datadog_checks.vsphere.vsphere.connect.SmartConnect') as SmartConnect: # SmartConnect fails SmartConnect.side_effect = Exception() with pytest.raises(Exception) as e: check.check(instance) # FIXME: the check should raise a more meaningful exception so we don't # need to check the message assert "Connection to None failed:" in str(e.value) assert len(aggregator.service_checks(VSphereCheck.SERVICE_CHECK_NAME)) == 1 sc = aggregator.service_checks(VSphereCheck.SERVICE_CHECK_NAME)[0] assert sc.status == check.CRITICAL assert 'foo:bar' in sc.tags aggregator.reset() # SmartConnect succeeds, RetrieveContent fails server = MagicMock() server.RetrieveContent.side_effect = Exception() SmartConnect.side_effect = None SmartConnect.return_value = server with pytest.raises(Exception) as e: check.check(instance) assert "Connection to None died unexpectedly:" in str(e.value) assert len(aggregator.service_checks(VSphereCheck.SERVICE_CHECK_NAME)) == 1 sc = aggregator.service_checks(VSphereCheck.SERVICE_CHECK_NAME)[0] assert sc.status == check.CRITICAL assert 'foo:bar' in sc.tags
def test_service_check_ok(aggregator, instance): check = disable_thread_pool(VSphereCheck('disk', {}, {}, [instance])) with mock.patch('datadog_checks.vsphere.vsphere.connect.SmartConnect') as SmartConnect: SmartConnect.return_value = get_mocked_server() check.check(instance) assert len(aggregator.service_checks(VSphereCheck.SERVICE_CHECK_NAME)) > 0 sc = aggregator.service_checks(VSphereCheck.SERVICE_CHECK_NAME)[0] assert sc.status == check.OK assert 'foo:bar' in sc.tags
def test_service_ok(check, aggregator, memcached): """ Service is up """ tags = ["host:{}".format(HOST), "port:11211", "foo:bar"] check.check({'url': "{}".format(HOST), 'port': PORT, 'tags': ["foo:bar"]}) assert len(aggregator.service_checks(SERVICE_CHECK)) == 1 sc = aggregator.service_checks(SERVICE_CHECK)[0] assert sc.status == check.OK assert sc.tags == tags
def test_service_ok(check, instance, aggregator, memcached): """ Service is up """ tags = ["host:{}".format(HOST), "port:{}".format(PORT), "foo:bar"] check.check(instance) assert len(aggregator.service_checks(SERVICE_CHECK)) == 1 sc = aggregator.service_checks(SERVICE_CHECK)[0] assert sc.status == check.OK assert sc.tags == tags
def test_check(aggregator, spin_up_apache): apache_check = Apache(CHECK_NAME, {}, {}) apache_check.check(STATUS_CONFIG) tags = STATUS_CONFIG['tags'] for mname in APACHE_GAUGES + APACHE_RATES: aggregator.assert_metric(mname, tags=tags, count=1) assert aggregator.service_checks( 'apache.can_connect')[0].status == Apache.OK sc_tags = ['host:' + HOST, 'port:' + PORT] + tags for sc in aggregator.service_checks('apache.can_connect'): for tag in sc.tags: assert tag in sc_tags assert aggregator.metrics_asserted_pct == 100.0
def test_connection_failure(aggregator, spin_up_apache): apache_check = Apache(CHECK_NAME, {}, {}) with pytest.raises(Exception): apache_check.check(BAD_CONFIG) assert aggregator.service_checks( 'apache.can_connect')[0].status == Apache.CRITICAL assert len(aggregator._metrics) == 0
def test_service_ko(check, aggregator): """ If the service is down, the service check should be sent accordingly """ tags = ["host:{}".format(HOST), "port:11211", "foo:bar"] with pytest.raises(Exception) as e: check.check({ 'url': "{}".format(HOST), 'port': PORT, 'tags': ["foo:bar"] }) # FIXME: the check should raise a more precise exception and there should be # no need to assert the content of the message! assert "Unable to retrieve stats from memcache instance" in e.message assert len(aggregator.service_checks(SERVICE_CHECK)) == 1 sc = aggregator.service_checks(SERVICE_CHECK)[0] assert sc.status == check.CRITICAL assert sc.tags == tags
def test_service_check(self, aggregator): instance = self.INSTANCES['main'] c = Envoy(self.CHECK_NAME, None, {}, [instance]) with mock.patch('requests.get', return_value=response('multiple_services')): c.check(instance) assert aggregator.service_checks( Envoy.SERVICE_CHECK_NAME)[0].status == Envoy.OK
def test_bad_config(aggregator, spin_up_riak): riak_check = Riak(CHECK_NAME, {}, {}) with pytest.raises(socket.error): riak_check.check({"url": "http://localhost:5985"}) sc_tags = ['url:http://localhost:5985'] for sc in aggregator.service_checks(SERVICE_CHECK_NAME): assert sc.status == Riak.CRITICAL for tag in sc.tags: assert tag in sc_tags
def test_ssh(self, aggregator): c = CheckSSH('ssh_check', {}, {}, list(self.INSTANCES.values())) nb_threads = threading.active_count() c.check(self.INSTANCES['main']) for sc in aggregator.service_checks(CheckSSH.SSH_SERVICE_CHECK_NAME): assert sc.status == CheckSSH.OK for tag in sc.tags: assert tag in ('instance:io.netgarage.org-22', 'optional:tag1') # Check that we've closed all connections, if not we're leaking threads assert nb_threads == threading.active_count()
def test_ssh_bad_config(self, aggregator): c = CheckSSH('ssh_check', {}, {}, list(self.INSTANCES.values())) nb_threads = threading.active_count() with pytest.raises(Exception): c.check(self.INSTANCES['bad_auth']) with pytest.raises(Exception): c.check(self.INSTANCES['bad_hostname']) for sc in aggregator.service_checks(CheckSSH.SSH_SERVICE_CHECK_NAME): assert sc.status == CheckSSH.CRITICAL # Check that we've closed all connections, if not we're leaking threads assert nb_threads == threading.active_count()
def test_check(aggregator, spin_up_riak): riak_check = Riak(CHECK_NAME, {}, {}) config = {"url": "{0}/stats".format(BASE_URL), "tags": ["my_tag"]} riak_check.check(config) riak_check.check(config) tags = ['my_tag'] sc_tags = tags + ['url:' + config['url']] for gauge in CHECK_GAUGES + CHECK_GAUGES_STATS: aggregator.assert_metric(gauge, tags=tags, count=2) for sc in aggregator.service_checks(SERVICE_CHECK_NAME): assert sc.status == Riak.OK for tag in sc.tags: assert tag in sc_tags for gauge in GAUGE_OTHER: aggregator.assert_metric(gauge, count=1) aggregator.all_metrics_asserted()