Module: check_mk
Branch: master
Commit: 1bd62c63ef5436f3b009551c8f65ef4b38b2ee22
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=1bd62c63ef5436…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Sun Feb 10 13:41:39 2019 +0100
Add some SNMP unit tests
Change-Id: Iacb549fe59a7814f7bbb4deb7051b24d644ba586
---
tests/unit/cmk_base/snmp/test_classic_snmp.py | 133 ++++++++++++++++++++++++++
tests/unit/cmk_base/snmp/test_snmp_unit.py | 21 ++++
2 files changed, 154 insertions(+)
diff --git a/tests/unit/cmk_base/snmp/test_classic_snmp.py
b/tests/unit/cmk_base/snmp/test_classic_snmp.py
new file mode 100644
index 0000000..98cd254
--- /dev/null
+++ b/tests/unit/cmk_base/snmp/test_classic_snmp.py
@@ -0,0 +1,133 @@
+import collections
+import pytest
+import cmk_base.config as config
+import cmk_base.classic_snmp as classic_snmp
+
+
+(a)pytest.mark.parametrize("port,expected"cted", [
+ (None, ""),
+ (1234, ":1234"),
+])
+def test_snmp_port_spec(monkeypatch, port, expected):
+ monkeypatch.setattr(config, "snmp_port_of", lambda h: port)
+ assert classic_snmp._snmp_port_spec("localhost") == expected
+
+
+(a)pytest.mark.parametrize("is_ipv6,expected"cted", [
+ (True, "udp6:"),
+ (False, ""),
+])
+def test_snmp_proto_spec(monkeypatch, is_ipv6, expected):
+ monkeypatch.setattr(config, "is_ipv6_primary", lambda h: is_ipv6)
+ assert classic_snmp._snmp_proto_spec("localhost") == expected
+
+
+SNMPSettings = collections.namedtuple("SNMPSettings", [
+ "access_data",
+ "is_bulkwalk_host",
+ "bulk_walk_size_of",
+ "is_snmpv2c_host",
+ "snmp_timing_of",
+ "context_name",
+])
+
+
+(a)pytest.mark.parametrize("settings,expected"cted", [
+ (SNMPSettings(
+ access_data={
+ "hostname": "localhost",
+ "ipaddress": "127.0.0.1",
+ "credentials": "public",
+ },
+ is_bulkwalk_host=True,
+ bulk_walk_size_of=10,
+ is_snmpv2c_host=True,
+ snmp_timing_of={
+ "timeout": 2,
+ "retries": 3
+ },
+ context_name=None,
+ ), [
+ 'snmpbulkwalk', '-Cr10', '-v2c', '-c',
'public', '-m', '', '-M', '', '-t',
'2.00', '-r',
+ '3', '-Cc'
+ ]),
+ (SNMPSettings(
+ access_data={
+ "hostname": "lohost",
+ "ipaddress": "127.0.0.1",
+ "credentials": "public",
+ },
+ is_bulkwalk_host=False,
+ bulk_walk_size_of=5,
+ is_snmpv2c_host=False,
+ snmp_timing_of={
+ "timeout": 5,
+ "retries": 1
+ },
+ context_name="blabla",
+ ), [
+ 'snmpwalk', '-v1', '-c', 'public', '-m',
'', '-M', '', '-t', '5.00', '-r',
'1', '-n',
+ 'blabla', '-Cc'
+ ]),
+ (SNMPSettings(
+ access_data={
+ "hostname": "lohost",
+ "ipaddress": "public",
+ "credentials": ("authNoPriv", "abc",
"md5", "abc"),
+ },
+ is_bulkwalk_host=False,
+ bulk_walk_size_of=5,
+ is_snmpv2c_host=False,
+ snmp_timing_of={
+ "timeout": 5,
+ "retries": 1
+ },
+ context_name="blabla",
+ ), [
+ 'snmpwalk', '-v3', '-l', 'authNoPriv',
'-a', 'abc', '-u', 'md5', '-A', 'abc',
'-m', '',
+ '-M', '', '-t', '5.00', '-r',
'1', '-n', 'blabla', '-Cc'
+ ]),
+ (SNMPSettings(
+ access_data={
+ "hostname": "lohost",
+ "ipaddress": "public",
+ "credentials": ('noAuthNoPriv', 'secname'),
+ },
+ is_bulkwalk_host=False,
+ bulk_walk_size_of=5,
+ is_snmpv2c_host=False,
+ snmp_timing_of={
+ "timeout": 5,
+ "retries": 1
+ },
+ context_name=None,
+ ), [
+ 'snmpwalk', '-v3', '-l', 'noAuthNoPriv',
'-u', 'secname', '-m', '', '-M', '',
'-t', '5.00',
+ '-r', '1', '-Cc'
+ ]),
+ (SNMPSettings(
+ access_data={
+ "hostname": "lohost",
+ "ipaddress": "127.0.0.1",
+ "credentials": ('authPriv', 'md5',
'secname', 'auhtpassword', 'DES', 'privacybla'),
+ },
+ is_bulkwalk_host=False,
+ bulk_walk_size_of=5,
+ is_snmpv2c_host=False,
+ snmp_timing_of={
+ "timeout": 5,
+ "retries": 1
+ },
+ context_name=None,
+ ), [
+ 'snmpwalk', '-v3', '-l', 'authPriv',
'-a', 'md5', '-u', 'secname', '-A',
'auhtpassword',
+ '-x', 'DES', '-X', 'privacybla', '-m',
'', '-M', '', '-t', '5.00', '-r',
'1', '-Cc'
+ ]),
+])
+def test_snmp_walk_command(monkeypatch, settings, expected):
+ monkeypatch.setattr(config, "is_bulkwalk_host", lambda h:
settings.is_bulkwalk_host)
+ monkeypatch.setattr(config, "bulk_walk_size_of", lambda h:
settings.bulk_walk_size_of)
+ monkeypatch.setattr(config, "is_snmpv2c_host", lambda h:
settings.is_snmpv2c_host)
+ monkeypatch.setattr(config, "snmp_timing_of", lambda h:
settings.snmp_timing_of)
+ monkeypatch.setattr(config, "snmp_timing_of", lambda h:
settings.snmp_timing_of)
+ assert classic_snmp._snmp_walk_command(settings.access_data, settings.context_name)
== expected
diff --git a/tests/unit/cmk_base/snmp/test_snmp_unit.py
b/tests/unit/cmk_base/snmp/test_snmp_unit.py
new file mode 100644
index 0000000..297eafb
--- /dev/null
+++ b/tests/unit/cmk_base/snmp/test_snmp_unit.py
@@ -0,0 +1,21 @@
+# encoding: utf-8
+
+import pytest
+import cmk_base.config as config
+import cmk_base.snmp as snmp
+
+
+(a)pytest.mark.parametrize(
+ "encoding,columns,expected",
+ [
+ (None, [(['\xc3\xbc'], "string")], [[u"ü"]]), #
utf-8
+ (None, [('\xc3\xbc', "binary")], [[[195], [188]]]), # utf-8
+ (None, [(["\xfc"], "string")], [[u"ü"]]), #
latin-1
+ (None, [('\xfc', "binary")], [[[252]]]), # latin-1
+ ("utf-8", [(['\xc3\xbc'], "string")],
[[u"ü"]]),
+ ("latin1", [(['\xfc'], "string")],
[[u"ü"]]),
+ ("cp437", [(['\x81'], "string")],
[[u"ü"]]),
+ ])
+def test_sanitize_snmp_encoding(monkeypatch, encoding, columns, expected):
+ monkeypatch.setattr(config, "snmp_character_encoding_of", lambda h:
encoding)
+ assert snmp._sanitize_snmp_encoding("localhost", columns) == expected