예제 #1
0
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
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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
예제 #6
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
예제 #7
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
예제 #8
0
    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
예제 #9
0
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
예제 #10
0
    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()
예제 #11
0
    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()
예제 #12
0
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()