def test_get_simple_snmp_table_wrong_credentials(snmp_config): if snmp_config.is_usewalk_host: pytest.skip("Not relevant") cfg_dict = snmp_config._asdict() cfg_dict["credentials"] = "dingdong" snmp_config = snmp_utils.SNMPHostConfig(**cfg_dict) # TODO: Unify different error messages if snmp_config.is_inline_snmp_host: exc_match = "SNMP query timed out" elif not snmp_config.is_inline_snmp_host: exc_match = "Timeout: No Response from" else: raise NotImplementedError() with pytest.raises(MKSNMPError, match=exc_match): snmp.get_snmp_table( snmp_config, check_plugin_name=None, oid_info=(".1.3.6.1.2.1.1", [ "1.0", "2.0", "5.0", ]), )
def snmp_config(request, snmpsim, monkeypatch): backend_name = request.param if backend_name == "stored_snmp": source_data_dir = Path( request.fspath.dirname) / "snmp_data" / "cmk-walk" monkeypatch.setattr(cmk.utils.paths, "snmpwalks_dir", str(source_data_dir)) return snmp_utils.SNMPHostConfig( is_ipv6_primary=False, ipaddress="127.0.0.1", hostname="localhost", credentials="public", port=1337, # TODO: Use SNMPv2 over v1 for the moment is_bulkwalk_host=False, is_snmpv2or3_without_bulkwalk_host=True, bulk_walk_size_of=10, timing={}, oid_range_limits=[], snmpv3_contexts=[], character_encoding=None, is_usewalk_host=backend_name == "stored_snmp", is_inline_snmp_host=backend_name == "inline_snmp", )
def test_get_simple_snmp_table_not_resolvable(snmp_config): if snmp_config.is_usewalk_host: pytest.skip("Not relevant") cfg_dict = snmp_config._asdict() cfg_dict["ipaddress"] = "bla.local" snmp_config = snmp_utils.SNMPHostConfig(**cfg_dict) # TODO: Unify different error messages if snmp_config.is_inline_snmp_host: exc_match = "Failed to initiate SNMP" elif not snmp_config.is_inline_snmp_host: exc_match = "Unknown host" else: raise NotImplementedError() with pytest.raises(MKSNMPError, match=exc_match): snmp.get_snmp_table( snmp_config, check_plugin_name=None, oid_info=(".1.3.6.1.2.1.1", [ "1.0", "2.0", "5.0", ]), )
def test_get_single_oid_not_resolvable(snmp_config): if snmp_config.is_usewalk_host: pytest.skip("Not relevant") cfg_dict = snmp_config._asdict() cfg_dict["ipaddress"] = "bla.local" snmp_config = snmp_utils.SNMPHostConfig(**cfg_dict) assert snmp.get_single_oid(snmp_config, ".1.3.6.1.2.1.1.7.0") is None
def test_get_single_oid_wrong_credentials(snmp_config): if snmp_config.is_usewalk_host: pytest.skip("Not relevant") cfg_dict = snmp_config._asdict() cfg_dict["credentials"] = "dingdong" snmp_config = snmp_utils.SNMPHostConfig(**cfg_dict) result = snmp.get_single_oid(snmp_config, ".1.3.6.1.2.1.1.1.0") assert result is None
def test_get_single_oid_snmpv3(snmp_config): if snmp_config.is_usewalk_host: pytest.skip("Not relevant") cfg_dict = snmp_config._asdict() cfg_dict["credentials"] = ('authNoPriv', 'md5', 'authOnlyUser', 'authOnlyUser') snmp_config = snmp_utils.SNMPHostConfig(**cfg_dict) result = snmp.get_single_oid(snmp_config, ".1.3.6.1.2.1.1.1.0") assert result == "Linux zeus 4.8.6.5-smp #2 SMP Sun Nov 13 14:58:11 CDT 2016 i686"
def test_get_single_oid_ipv6(snmp_config): if snmp_config.is_usewalk_host: pytest.skip("Not relevant") cfg_dict = snmp_config._asdict() cfg_dict["is_ipv6_primary"] = True cfg_dict["ipaddress"] = "::1" snmp_config = snmp_utils.SNMPHostConfig(**cfg_dict) result = snmp.get_single_oid(snmp_config, ".1.3.6.1.2.1.1.1.0") assert result == "Linux zeus 4.8.6.5-smp #2 SMP Sun Nov 13 14:58:11 CDT 2016 i686"
def test_snmp_proto_spec(monkeypatch, is_ipv6, expected): snmp_config = snmp_utils.SNMPHostConfig( is_ipv6_primary=is_ipv6, hostname="localhost", ipaddress="127.0.0.1", credentials="public", port=161, is_bulkwalk_host=False, is_snmpv2or3_without_bulkwalk_host=False, bulk_walk_size_of=10, timing={}, oid_range_limits=[], snmpv3_contexts=[], character_encoding=None, is_usewalk_host=False, is_inline_snmp_host=False, ) assert classic_snmp.ClassicSNMPBackend()._snmp_proto_spec(snmp_config) == expected
def test_get_simple_snmp_table_bulkwalk(snmp_config, bulk): cfg_dict = snmp_config._asdict() cfg_dict["is_bulkwalk_host"] = bulk snmp_config = snmp_utils.SNMPHostConfig(**cfg_dict) table = snmp.get_snmp_table(snmp_config, check_plugin_name=None, oid_info=(".1.3.6.1.2.1.1", [ "1.0", "2.0", "5.0", ]), use_snmpwalk_cache=False) assert table == [ [ u'Linux zeus 4.8.6.5-smp #2 SMP Sun Nov 13 14:58:11 CDT 2016 i686', u'.1.3.6.1.4.1.8072.3.2.10', u'new system name', ], ] assert isinstance(table[0][0], six.text_type)
"context_name", ]) @pytest.mark.parametrize("settings,expected", [ (SNMPSettings( snmp_config=snmp_utils.SNMPHostConfig( is_ipv6_primary=False, hostname="localhost", ipaddress="127.0.0.1", credentials="public", port=161, is_bulkwalk_host=True, is_snmpv2or3_without_bulkwalk_host=True, bulk_walk_size_of=10, timing={ "timeout": 2, "retries": 3 }, oid_range_limits=[], snmpv3_contexts=[], character_encoding=None, is_usewalk_host=False, is_inline_snmp_host=False, ), context_name=None, ), [ 'snmpbulkwalk', '-Cr10', '-v2c', '-c', 'public', '-m', '', '-M', '', '-t', '2.00', '-r', '3', '-Cc' ]), (SNMPSettings(