Example #1
0
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",
            ]),
        )
Example #2
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",
    )
Example #3
0
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",
            ]),
        )
Example #4
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
Example #5
0
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
Example #6
0
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"
Example #7
0
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"
Example #8
0
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
Example #9
0
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)
Example #10
0
    "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(