示例#1
0
def test_check_multiple_interfaces_group_simple(value_store):
    params = type_defs.Parameters({
        'errors': (0.01, 0.1),
        'traffic': [('both', ('upper', ('perc', (5.0, 20.0))))],
        'aggregate': {
            'member_appearance': 'index',
            'inclusion_condition': {},
            'exclusion_conditions': [],
        },
        'discovered_oper_status': ['1'],
        'discovered_speed': 20000000,
        'state': ['8'],
        'speed': 123456,
    })
    with pytest.raises(IgnoreResultsError):
        list(
            interfaces.check_multiple_interfaces(
                'group',
                params,
                _create_interfaces(0),
                timestamp=0,
            ))
    assert list(
        interfaces.check_multiple_interfaces(
            'group',
            params,
            _create_interfaces(4000000),
            timestamp=5,
        )) == [
            Result(state=state.OK, notice='Interface group'),
            Result(state=state.OK, notice='Operational state: degraded'),
            Result(state=state.OK,
                   notice='Members: [1 (up), 2 (down), 3 (down), 4 (down), 5 (up), 6 (up)]'),
            Metric('in', 800000.0, levels=(62500.0, 250000.0), boundaries=(0.0, 1250000.0)),
            Metric('inmcast', 0.0),
            Metric('inbcast', 0.0),
            Metric('inucast', 0.0),
            Metric('innucast', 0.0),
            Metric('indisc', 0.0),
            Metric('inerr', 0.0, levels=(0.01, 0.1)),
            Metric('out', 3200000.0, levels=(62500.0, 250000.0), boundaries=(0.0, 1250000.0)),
            Metric('outmcast', 0.0),
            Metric('outbcast', 0.0),
            Metric('outucast', 0.0),
            Metric('outnucast', 0.0),
            Metric('outdisc', 0.0),
            Metric('outerr', 0.0, levels=(0.01, 0.1)),
            Metric('outqlen', 0.0),
            Result(state=state.CRIT,
                   summary='In: 800 kB/s (warn/crit at 62.5 kB/s/250 kB/s) (64.0%)'),
            Result(state=state.CRIT,
                   summary='Out: 3.20 MB/s (warn/crit at 62.5 kB/s/250 kB/s) (256%)'),
            Result(state=state.WARN, summary='Speed: 10 MBit/s (expected: 123 kBit/s)'),
        ]
示例#2
0
def test_check_multiple_interfaces_group_by_agent(value_store):
    params = type_defs.Parameters({
        'errors': (0.01, 0.1),
        'traffic': [('both', ('upper', ('perc', (5.0, 20.0))))],
        'aggregate': {
            'member_appearance': 'index',
        },
        'discovered_oper_status': ['1'],
        'discovered_speed': 20000000
    })
    with pytest.raises(IgnoreResultsError):
        ifaces = _create_interfaces(0)
        ifaces[3].group = 'group'
        ifaces[5].group = 'group'
        list(interfaces.check_multiple_interfaces(
            'group',
            params,
            ifaces,
            timestamp=0,
        ))

    ifaces = _create_interfaces(4000000)
    ifaces[3].group = 'group'
    ifaces[5].group = 'group'
    assert list(interfaces.check_multiple_interfaces(
        'group',
        params,
        ifaces,
        timestamp=5,
    )) == [
        Result(state=state.OK, notice='Interface group'),
        Result(state=state.CRIT, notice='Operational state: degraded'),
        Result(state=state.OK, notice='Members: [4 (down), 6 (up)]'),
        Metric('in', 800000.0, levels=(125000.0, 500000.0), boundaries=(0.0, 2500000.0)),
        Metric('inmcast', 0.0),
        Metric('inbcast', 0.0),
        Metric('inucast', 0.0),
        Metric('innucast', 0.0),
        Metric('indisc', 0.0),
        Metric('inerr', 0.0, levels=(0.01, 0.1)),
        Metric('out', 3200000.0, levels=(125000.0, 500000.0), boundaries=(0.0, 2500000.0)),
        Metric('outmcast', 0.0),
        Metric('outbcast', 0.0),
        Metric('outucast', 0.0),
        Metric('outnucast', 0.0),
        Metric('outdisc', 0.0),
        Metric('outerr', 0.0, levels=(0.01, 0.1)),
        Metric('outqlen', 0.0),
        Result(state=state.CRIT, summary='In: 800 kB/s (warn/crit at 125 kB/s/500 kB/s) (32.0%)'),
        Result(state=state.CRIT, summary='Out: 3.20 MB/s (warn/crit at 125 kB/s/500 kB/s) (128%)'),
        Result(state=state.OK, summary='Speed: 20 MBit/s (assumed)'),
    ]
示例#3
0
def test_check_multiple_interfaces(value_store, item, params, result):
    with pytest.raises(IgnoreResultsError):
        list(interfaces.check_multiple_interfaces(
            item,
            params,
            _create_interfaces(0),
            timestamp=0,
        ))
    assert list(
        interfaces.check_multiple_interfaces(
            item,
            params,
            _create_interfaces(4000000),
            timestamp=5,
        )) == result
示例#4
0
def test_check_lnx_if(monkeypatch, value_store):
    section_if = [INTERFACE]
    section: lnx_if.Section = (section_if, {})
    monkeypatch.setattr('time.time', lambda: 0)
    with pytest.raises(IgnoreResultsError):
        list(lnx_if.check_lnx_if(
            INTERFACE.index,
            PARAMS,
            section,
        ))
    monkeypatch.setattr('time.time', lambda: 1)
    result_lnx_if = list(
        lnx_if.check_lnx_if(
            INTERFACE.index,
            PARAMS,
            section,
        ))
    monkeypatch.setattr('time.time', lambda: 2)
    result_interfaces = list(
        interfaces.check_multiple_interfaces(
            INTERFACE.index,
            PARAMS,
            section_if,
        ))
    assert result_lnx_if == result_interfaces
示例#5
0
def test_cluster_check_lnx_if(monkeypatch, value_store):
    section: Dict[str, lnx_if.Section] = {}
    ifaces = []
    for i in range(3):
        iface = copy.copy(INTERFACE)
        iface.node = 'node%s' % i
        ifaces_node = [iface] * (i + 1)
        section[iface.node] = ifaces_node, {}
        ifaces += ifaces_node
    monkeypatch.setattr('time.time', lambda: 0)
    with pytest.raises(IgnoreResultsError):
        list(lnx_if.cluster_check_lnx_if(
            INTERFACE.index,
            PARAMS,
            section,
        ))
    monkeypatch.setattr('time.time', lambda: 1)
    result_lnx_if = list(
        lnx_if.cluster_check_lnx_if(
            INTERFACE.index,
            PARAMS,
            section,
        ))
    monkeypatch.setattr('time.time', lambda: 2)
    result_interfaces = list(
        interfaces.check_multiple_interfaces(
            INTERFACE.index,
            PARAMS,
            ifaces,
        ))
    assert result_lnx_if == result_interfaces
示例#6
0
def test_check_multiple_interfaces_w_node(value_store, item, params, result):
    node_name = 'node'
    with pytest.raises(IgnoreResultsError):
        list(
            interfaces.check_multiple_interfaces(
                item,
                params,
                _create_interfaces(0, node=node_name),
                timestamp=0,
            ))
    assert list(
        interfaces.check_multiple_interfaces(
            item,
            params,
            _create_interfaces(4000000, node=node_name),
            timestamp=5,
        )) == _add_node_name_to_results(result, node_name)
示例#7
0
def test_check_multiple_interfaces_duplicate_descr(value_store, item, params, result):
    description = 'description'
    item = '%s %s' % (description, item)
    with pytest.raises(IgnoreResultsError):
        list(
            interfaces.check_multiple_interfaces(
                item,
                params,
                _create_interfaces(0, descr=description),
                timestamp=0,
            ))
    assert list(
        interfaces.check_multiple_interfaces(
            item,
            params,
            _create_interfaces(4000000, descr=description),
            timestamp=5,
        )) == result
示例#8
0
def test_check_multiple_interfaces_same_item_twice_cluster(value_store, item, params, result):
    node_name_1 = 'node1'
    node_name_2 = 'node2'
    with pytest.raises(IgnoreResultsError):
        list(
            interfaces.check_multiple_interfaces(
                item,
                params,
                _create_interfaces(0, node=node_name_1) + _create_interfaces(0, node=node_name_2),
                timestamp=0,
            ))
    assert list(
        interfaces.check_multiple_interfaces(
            item,
            params,
            _create_interfaces(4000000, node=node_name_1) +
            _create_interfaces(4000000, node=node_name_2),
            timestamp=5,
        )) == _add_node_name_to_results(result, node_name_1)
示例#9
0
def test_check_multiple_interfaces_duplicate_alias(value_store, item, params, result):
    alias = 'alias'
    index = item
    item = '%s %s' % (alias, index)
    with pytest.raises(IgnoreResultsError):
        list(
            interfaces.check_multiple_interfaces(
                item,
                params,
                _create_interfaces(0, alias=alias),
                timestamp=0,
            ))
    ifaces = _create_interfaces(4000000, alias=alias)
    assert list(interfaces.check_multiple_interfaces(
        item,
        params,
        ifaces,
        timestamp=5,
    )) == [
        Result(
            state=state.OK,
            notice='[%s/%s]' % (alias, ifaces[int(index) - 1].descr),
        ),
    ] + result[1:]
示例#10
0
def test_cluster_check(monkeypatch, value_store):
    params = type_defs.Parameters({
        'errors': (0.01, 0.1),
        'speed': 10000000,
        'traffic': [('both', ('upper', ('perc', (5.0, 20.0))))],
        'state': ['1'],
    })
    section = {}
    ifaces = []
    for i in range(3):
        iface = _create_interfaces(0)[0]
        iface.node = 'node%s' % i
        ifaces_node = [iface] * (i + 1)
        section[iface.node] = ifaces_node
        ifaces += ifaces_node
    monkeypatch.setattr('time.time', lambda: 0)
    with pytest.raises(IgnoreResultsError):
        list(interfaces.cluster_check(
            '1',
            params,
            section,
        ))
    monkeypatch.setattr('time.time', lambda: 1)
    result_cluster_check = list(interfaces.cluster_check(
        '1',
        params,
        section,
    ))
    monkeypatch.setattr('time.time', lambda: 2)
    result_check_multiple_interfaces = list(
        interfaces.check_multiple_interfaces(
            '1',
            params,
            ifaces,
        ))
    assert result_cluster_check == result_check_multiple_interfaces
示例#11
0
def test_check_multiple_interfaces_group_exclude(value_store):
    params = type_defs.Parameters({
        'errors': (0.01, 0.1),
        'traffic': [('both', ('upper', ('perc', (5.0, 20.0))))],
        'aggregate': {
            'member_appearance': 'index',
            'inclusion_condition': {},
            'exclusion_conditions': [{
                'match_index': ['4', '5']
            }],
        },
        'discovered_state': ['1'],
        'discovered_speed':
        20000000,
    })
    with pytest.raises(IgnoreResultsError):
        list(
            interfaces.check_multiple_interfaces(
                'group',
                params,
                _create_interfaces(0),
                timestamp=0,
            ))
    assert list(
        interfaces.check_multiple_interfaces(
            'group',
            params,
            _create_interfaces(4000000),
            timestamp=5,
        )
    ) == [
        Result(state=state.CRIT,
               summary='Group Status (degraded)',
               details='Group Status (degraded)'),
        Result(state=state.OK,
               summary='Members: [1 (up), 2 (down), 3 (down), 6 (up)]',
               details='Members: [1 (up), 2 (down), 3 (down), 6 (up)]'),
        Result(state=state.OK,
               summary='assuming 20 MBit/s',
               details='assuming 20 MBit/s'),
        Metric('in',
               800000.0,
               levels=(
                   125000.0, 500000.0),
               boundaries=(0.0, 2500000.0)),
        Metric('inmcast', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('inbcast', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('inucast', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('innucast', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('indisc', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('inerr', 0.0, levels=(0.01, 0.1), boundaries=(None, None)),
        Metric('out',
               3200000.0,
               levels=(
                   125000.0, 500000.0),
               boundaries=(0.0, 2500000.0)),
        Metric('outmcast', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('outbcast', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('outucast', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('outnucast', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('outdisc', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('outerr', 0.0, levels=(0.01, 0.1), boundaries=(None, None)),
        Metric('outqlen', 0.0, levels=(None, None), boundaries=(None, None)),
        Result(
            state=state.CRIT,
            summary='In: 800 kB/s (warn/crit at 125 kB/s/500 kB/s) (32.0%)',
            details='In: 800 kB/s (warn/crit at 125 kB/s/500 kB/s) (32.0%)'),
        Result(
            state=state.CRIT,
            summary='Out: 3.20 MB/s (warn/crit at 125 kB/s/500 kB/s) (128.0%)',
            details='Out: 3.20 MB/s (warn/crit at 125 kB/s/500 kB/s) (128.0%)'
        ),
    ]
示例#12
0
def test_check_multiple_interfaces_group_multiple_nodes(value_store):
    params = type_defs.Parameters({
        'errors': (0.01, 0.1),
        'traffic': [('both', ('upper', ('perc', (5.0, 20.0))))],
        'aggregate': {
            'member_appearance': 'index',
            'inclusion_condition': {
                'match_index': ['5', '6']
            },
            'exclusion_conditions': [],
        },
        'discovered_state': ['1'],
        'discovered_speed':
        20000000,
    })
    node_names = ['node1', 'node2', 'node3']
    with pytest.raises(IgnoreResultsError):
        list(
            interfaces.check_multiple_interfaces(
                'group',
                params,
                sum((_create_interfaces(0, node=node_name)
                     for node_name in node_names), []),
                timestamp=0,
            ))
    assert list(
        interfaces.check_multiple_interfaces(
            'group',
            params,
            sum((_create_interfaces(4000000, node=node_name)
                 for node_name in node_names), []),
            timestamp=5,
        )
    ) == [
        Result(state=state.OK, summary='Group Status (up)'),
        Result(
            state=state.OK,
            summary=
            'Members: [5 (up), 6 (up) on node node1] [5 (up), 6 (up) on node node2] [5 (up), 6 (up) on node node3]'
        ),
        Result(state=state.OK, summary='30 MBit/s'),
        Metric('in',
               2400000.0,
               levels=(187500.0, 750000.0),
               boundaries=(0.0, 3750000.0)),
        Metric('inmcast', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('inbcast', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('inucast', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('innucast', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('indisc', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('inerr', 0.0, levels=(0.01, 0.1), boundaries=(None, None)),
        Metric('out',
               9600000.0,
               levels=(187500.0, 750000.0),
               boundaries=(0.0, 3750000.0)),
        Metric('outmcast', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('outbcast', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('outucast', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('outnucast', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('outdisc', 0.0, levels=(None, None), boundaries=(None, None)),
        Metric('outerr', 0.0, levels=(0.01, 0.1), boundaries=(None, None)),
        Metric('outqlen', 0.0, levels=(None, None), boundaries=(None, None)),
        Result(
            state=state.CRIT,
            summary='In: 2.40 MB/s (warn/crit at 188 kB/s/750 kB/s) (64.0%)'),
        Result(
            state=state.CRIT,
            summary='Out: 9.60 MB/s (warn/crit at 188 kB/s/750 kB/s) (256.0%)'
        ),
    ]
示例#13
0
def test_check_multiple_interfaces_group_multiple_nodes(value_store):
    params = type_defs.Parameters({
        'errors': (0.01, 0.1),
        'traffic': [('both', ('upper', ('perc', (5.0, 20.0))))],
        'aggregate': {
            'member_appearance': 'index',
            'inclusion_condition': {
                'match_index': ['5', '6']
            },
            'exclusion_conditions': [{
                'admin_states': ['3'],
            },],
        },
        'discovered_oper_status': ['1'],
        'discovered_speed': 20000000,
    })
    node_names = ['node1', 'node2', 'node3']
    with pytest.raises(IgnoreResultsError):
        list(
            interfaces.check_multiple_interfaces(
                'group',
                params,
                sum((_create_interfaces(
                    0,
                    admin_status=str(idx + 1),
                    node=node_name,
                ) for idx, node_name in enumerate(node_names)), []),
                timestamp=0,
            ))
    assert list(
        interfaces.check_multiple_interfaces(
            'group',
            params,
            sum((_create_interfaces(
                4000000,
                admin_status=str(idx + 1),
                node=node_name,
            ) for idx, node_name in enumerate(node_names)), []),
            timestamp=5,
        )
    ) == [
        Result(state=state.OK, notice='Interface group'),
        Result(state=state.OK, notice='Operational state: up'),
        Result(
            state=state.OK,
            notice='Members: [5 (op. state: up, admin state: up), 6 (op. state: up, admin state: '
            'up) on node node1] [5 (op. state: up, admin state: down), 6 (op. state: up, '
            'admin state: down) on node node2]'),
        Metric('in', 1600000.0, levels=(125000.0, 500000.0), boundaries=(0.0, 2500000.0)),
        Metric('inmcast', 0.0),
        Metric('inbcast', 0.0),
        Metric('inucast', 0.0),
        Metric('innucast', 0.0),
        Metric('indisc', 0.0),
        Metric('inerr', 0.0, levels=(0.01, 0.1)),
        Metric('out', 6400000.0, levels=(125000.0, 500000.0), boundaries=(0.0, 2500000.0)),
        Metric('outmcast', 0.0),
        Metric('outbcast', 0.0),
        Metric('outucast', 0.0),
        Metric('outnucast', 0.0),
        Metric('outdisc', 0.0),
        Metric('outerr', 0.0, levels=(0.01, 0.1)),
        Metric('outqlen', 0.0),
        Result(state=state.CRIT, summary='In: 1.60 MB/s (warn/crit at 125 kB/s/500 kB/s) (64.0%)'),
        Result(state=state.CRIT, summary='Out: 6.40 MB/s (warn/crit at 125 kB/s/500 kB/s) (256%)'),
        Result(state=state.OK, summary='Speed: 20 MBit/s'),
    ]