Beispiel #1
0
def test_snmptree(base, oids):
    tree = SNMPTree(base=base, oids=oids)

    assert tree.base == OIDSpec(base)
    assert isinstance(tree.oids, list)
    for oid in tree.oids:
        assert isinstance(oid, (OIDSpec, OIDEnd))
def test_create_snmp_section_plugin_from_legacy():

    plugin = section_plugins_legacy.create_snmp_section_plugin_from_legacy(
        "norris",
        {
            'parse_function': old_school_parse_function,
            'inventory_function': old_school_discover_function,
        },
        old_school_scan_function,
        (".1.2.3.4.5", ["2", 3]),
    )

    assert plugin.name == SectionName("norris")
    assert plugin.parsed_section_name == ParsedSectionName("norris")
    assert plugin.parse_function.__name__ == "old_school_parse_function"
    assert plugin.host_label_function.__name__ == "host_label_function"
    assert plugin.supersedes == []
    assert plugin.detect_spec == [[(".1.2.3.4.5", "norris.*", True)]]
    assert plugin.trees == [SNMPTree(base=".1.2.3.4.5", oids=["2", "3"])]
Beispiel #3
0
def _create_snmp_trees_from_tuple(snmp_info_element):
    # type: (tuple) -> Tuple[List[SNMPTree], Optional[LayoutRecoverSuboids]]
    """Create a SNMPTrees from (part of) a legacy definition

    Legacy definition *elements* can be 2-tuple or 3-tuple.
    We are quite generous here: we will make sure that
     * base will not end with '.'
     * subtrees are strings, starting but not ending with '.'
     * oids are not the empty string.
    """
    assert isinstance(snmp_info_element, tuple)
    assert len(snmp_info_element) in (2, 3)
    base = snmp_info_element[0].rstrip('.')

    # "Triple"-case: recursively return a list
    if len(snmp_info_element) == 3:
        tmp_base, suboids, oids = snmp_info_element
        base_list = [("%s.%s" % (tmp_base, str(i).strip('.')))
                     for i in suboids]
        return sum((_create_snmp_trees_from_tuple((base, oids))[0]
                    for base in base_list), []), suboids

    # this fixes 7 weird cases:
    oids = [
        "%d" % oid if isinstance(oid, int) and oid > 0 else oid
        for oid in snmp_info_element[1]
    ]

    if '' in oids:  # this fixes 19 cases
        base, tail = str(base).rsplit('.', 1)
        oids = [
            o if isinstance(o, int) else type(o)(
                ("%s.%s" % (tail, o)).strip('.')) for o in oids
        ]
    else:  # this fixes 21 cases
        common, oids = _extract_conmmon_part(oids)
        if common:
            base = "%s.%s" % (base, common)

    return [SNMPTree(base=base, oids=oids)], None
Beispiel #4
0
def test_execute_with_canned_responses(monkeypatch):
    # Beginning of setup.
    tree = SNMPTree(
        base='.1.3.6.1.4.1.13595.2.2.3.1',
        oids=[
            OIDEnd(),
            snmp_utils.OIDBytes("16"),
        ],
    )
    name = "acme_agent_sessions"  # Must be in config.registered_snmp_sections

    # Replace I/O with canned responses.
    monkeypatch.setattr(SNMPDataSource, "get_check_plugin_names",
                        lambda *args, **kwargs: {name})
    monkeypatch.setattr(snmp, "get_snmp_table_cached", lambda *args: tree)

    hostname = "testhost"
    ipaddress = "127.0.0.1"
    Scenario().add_host(hostname).apply(monkeypatch)
    source = SNMPDataSource(hostname, ipaddress)
    # End of setup.

    assert source._execute() == {name: [tree]}
    ['2.C0FEFE', 'C0FEFE'],
    ['2.C0FEFE', 'C0FEFE'],
]


@pytest.mark.parametrize("column", snmp_table.SPECIAL_COLUMNS)
def test_value_encoding(column):
    assert snmp_table._value_encoding(column) == "string"


@pytest.mark.parametrize("snmp_info, expected_values", [
    (
        SNMPTree(
            base='.1.3.6.1.4.1.13595.2.2.3.1',
            oids=[
                OIDEnd(),
                OIDBytes("16"),
            ],
        ),
        DATA_2TUPLE,
    ),
    (TREE_2TUPLE, DATA_2TUPLE),
    (TREE_3TUPLE, DATA_3TUPLE),
    ([TREE_2TUPLE, TREE_3TUPLE], [DATA_2TUPLE, DATA_3TUPLE]),
])
def test_get_snmp_table(monkeypatch, snmp_info, expected_values):
    def get_all_snmp_tables(info):
        backend = SNMPTestBackend()
        if not isinstance(info, list):
            return snmp_table.get_snmp_table(SNMPConfig,
                                             "unit-test",
Beispiel #6
0
def test_snmptree_valid(base, oids):
    with pytest.raises((ValueError, TypeError)):
        SNMPTree(base=base, oids=oids)
            ["3.1", "2"],
            ["3.3", "4"],
        ]],
    ),
])
def test_create_layout_recover_function(suboids_list, input_data, expected_output):
    layout_recover_func = _create_layout_recover_function(suboids_list)
    assert layout_recover_func(input_data) == expected_output


@pytest.mark.parametrize(
    "element, expected_tree, expected_suboids",
    [
        (
            (".1.2.3", ["4", "5"]),
            [SNMPTree(base=".1.2.3", oids=["4", "5"])],
            None,
        ),
        (
            (".1.2.3", ["4", ""]),
            [SNMPTree(base=".1.2", oids=["3.4", "3"])],
            None,
        ),
        (
            (".1.2", ["3.4", "3.5"]),
            [SNMPTree(base=".1.2.3", oids=["4", "5"])],
            None,
        ),
        (
            (".1.2.3", range(4, 6)),
            [SNMPTree(base=".1.2.3", oids=["4", "5"])],
Beispiel #8
0
            ["3.1", "2"],
            ["3.3", "4"],
        ]],
    ),
])
def test_create_layout_recover_function(suboids_list, input_data, expected_output):
    layout_recover_func = _create_layout_recover_function(suboids_list)
    assert layout_recover_func(input_data) == expected_output


@pytest.mark.parametrize(
    "element, expected_tree, expected_suboids",
    [
        (
            (".1.2.3", ["4", "5"]),
            [SNMPTree(base=".1.2.3", oids=["4", "5"])],
            None,
        ),
        (
            (".1.2.3", ["4", ""]),
            [SNMPTree(base=".1.2", oids=["3.4", "3"])],
            None,
        ),
        (
            (".1.2", ["3.4", "3.5"]),
            [SNMPTree(base=".1.2.3", oids=["4", "5"])],
            None,
        ),
        (
            (".1.2.3", range(4, 6)),
            [SNMPTree(base=".1.2.3", oids=["4", "5"])],