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)'), ]
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)'), ]
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
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
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
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)
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
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)
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:]
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
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%)' ), ]
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%)' ), ]
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'), ]