def test_set_up_query_manager_error(instance):
    check = IbmICheck('ibm_i', {}, [instance])
    check.log = mock.MagicMock()
    with mock.patch('datadog_checks.ibm_i.IbmICheck.fetch_system_info',
                    return_value=None):
        check.set_up_query_manager()
    assert check._query_manager is None
def test_check(aggregator, instance):
    # type: (AggregatorStub, Dict[str, Any]) -> None
    check = IbmICheck('ibm_i', {}, [instance])
    check.check(instance)

    aggregator.assert_all_metrics_covered()
    aggregator.assert_metrics_using_metadata(get_metadata_metrics())
def test_connnection_string_no_fields(instance):
    instance = {
        **instance,
        **{
            'driver': 'driver',
        },
    }
    check = IbmICheck('ibm_i', {}, [instance])
    check.load_configuration_models()
    assert check.connection_string == 'Driver={driver};'
def test_connection_subprocess(instance):
    check = IbmICheck('ibm_i', {}, [instance])
    check.load_configuration_models()
    with mock.patch(
            'datadog_checks.ibm_i.IbmICheck._create_connection_subprocess'
    ) as m:
        check.connection_subprocess
        check._subprocess = mock.MagicMock()
        check.connection_subprocess
    m.assert_called_once()
def test_connnection_string(instance):
    instance = {
        **instance,
        **{
            'driver': 'driver',
            'system': 'system',
            'username': '******',
            'password': '******',
        },
    }
    check = IbmICheck('ibm_i', {}, [instance])
    check.load_configuration_models()
    assert check.connection_string == 'Driver={driver};System=system;UID=username;PWD=password;'
def test_connnection_string_defined(instance):
    instance = {
        **instance,
        **{
            'connection_string': 'constring',
            'driver': 'driver',
            'system': 'system',
            'username': '******',
            'password': '******',
        },
    }
    check = IbmICheck('ibm_i', {}, [instance])
    check.load_configuration_models()
    assert check.connection_string == 'constring'
    check._connection_string = 'modified'
    assert check.connection_string == 'modified'
def test_check_no_query_manager(aggregator, instance):
    check = IbmICheck('ibm_i', {}, [instance])
    check.log = mock.MagicMock()
    check.load_configuration_models()
    with mock.patch('datadog_checks.ibm_i.IbmICheck.fetch_system_info',
                    return_value=None):
        check.check(instance)
    assert check._query_manager is None
    check.log.warning.assert_called_once()
    aggregator.assert_all_metrics_covered()
def test_set_up_query_manager_7_4(instance):
    check = IbmICheck('ibm_i', {}, [instance])
    check.log = mock.MagicMock()
    check.load_configuration_models()
    with mock.patch('datadog_checks.ibm_i.IbmICheck.fetch_system_info',
                    return_value=SystemInfo("host", 7, 4)):
        check.set_up_query_manager()
    assert check._query_manager is not None
    assert check._query_manager.hostname == "host"
    assert len(check._query_manager.queries) == 10
def test_check_query_error(aggregator, instance):
    check = IbmICheck('ibm_i', {}, [instance])
    check.log = mock.MagicMock()
    check.load_configuration_models()

    with mock.patch('datadog_checks.ibm_i.IbmICheck.fetch_system_info',
                    return_value=SystemInfo("host", 7, 4)), mock.patch(
                        'datadog_checks.ibm_i.IbmICheck.execute_query',
                        side_effect=Exception("boom")):
        assert check._query_manager is None
        check.check(instance)
        assert check._query_manager is not None
        assert check._query_manager.hostname == "host"
        check.check(instance)
    aggregator.assert_service_check("ibm_i.can_connect",
                                    count=2,
                                    status=AgentCheck.CRITICAL)
    aggregator.assert_all_metrics_covered()
def test_cancel(instance):
    check = IbmICheck('ibm_i', {}, [instance])
    check.load_configuration_models()

    with mock.patch(
            'datadog_checks.ibm_i.IbmICheck._delete_connection_subprocess'
    ) as m:
        check.cancel()
    m.assert_called_once()
def test_query_error_system_info(instance):
    check = IbmICheck('ibm_i', {}, [instance])
    check.log = mock.MagicMock()
    check.load_configuration_models()
    exc = Exception("boom")
    with mock.patch('datadog_checks.ibm_i.IbmICheck.execute_query',
                    side_effect=exc):
        system_info = check.fetch_system_info()

    assert system_info is None
    check.log.error.assert_called_once()
def test_execute_query(instance):
    """Check that execute_query reads and parses the process stdout."""
    check = IbmICheck('ibm_i', {}, [instance])
    check.load_configuration_models()
    check._subprocess = mock.MagicMock()
    check._subprocess.stdout = mock.MagicMock()
    check._subprocess.stdout.readline = mock.MagicMock(
        return_value='{"a": "b"}')
    assert next(check.execute_query({
        'text': 'query',
        'timeout': 2
    })) == {
        'a': 'b'
    }
def test_failed_fetch_system_info(instance):
    check = IbmICheck('ibm_i', {}, [instance])
    check.log = mock.MagicMock()
    check.load_configuration_models()
    with mock.patch(
            'datadog_checks.ibm_i.IbmICheck.execute_query',
            return_value=[]), mock.patch(
                'datadog_checks.ibm_i.IbmICheck._delete_connection_subprocess'
            ) as delete_conn:
        system_info = check.fetch_system_info()

    assert system_info is None
    delete_conn.assert_not_called()
    check.log.error.assert_called_once()
def test_fetch_system_info(instance):
    check = IbmICheck('ibm_i', {}, [instance])
    check.log = mock.MagicMock()
    check.load_configuration_models()
    with mock.patch(
            'datadog_checks.ibm_i.IbmICheck.execute_query',
            return_value=[("hostname", "7", "3")]), mock.patch(
                'datadog_checks.ibm_i.IbmICheck._delete_connection_subprocess'
            ) as delete_conn:
        system_info = check.fetch_system_info()

    assert system_info == SystemInfo(hostname="hostname",
                                     os_version=7,
                                     os_release=3)
    delete_conn.assert_not_called()
    check.log.assert_not_called()
def test_set_up_query_manager_7_2_queries_list(instance):
    instance = {
        **instance,
        **{
            'queries': [
                {
                    'name': 'disk_usage'
                },
                {
                    'name': 'cpu_usage'
                },
                {
                    'name': 'job_memory_usage'
                },
                {
                    'name': 'memory_info'
                },
                {
                    'name': 'subsystem'
                },
                {
                    'name': 'job_queue'
                },
                {
                    'name': 'message_queue_info'
                },
            ]
        },
    }
    check = IbmICheck('ibm_i', {}, [instance])
    check.log = mock.MagicMock()
    check.load_configuration_models()
    with mock.patch('datadog_checks.ibm_i.IbmICheck.fetch_system_info',
                    return_value=SystemInfo("host", 7, 2)):
        check.set_up_query_manager()
    assert check._query_manager is not None
    # disk_usage counts like 1, subsystem like 0 (not available on 7.2), the rest (5 queries) count as 1
    assert len(check._query_manager.queries) == 5 + 0 + 1