Module: check_mk
Branch: master
Commit: 9d5aabffc91da8f9ee680b5c71e2af6600ab1659
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=9d5aabffc91da8…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Thu Feb 14 20:15:12 2019 +0100
Fix new SNMP integration tests
* Use SNMPv2 for the moment instead of v1
* Start one snmpsim instance for all tests
* Wait until snmpsim is ready before starting the tests
Change-Id: I88661114b6b7054536e9c6d64f24135f5376d701
---
.../cmk_base/snmp/snmp_data/cmk-walk/localhost | 5 +--
tests/integration/cmk_base/snmp/test_snmp.py | 42 ++++++++++++++++++----
2 files changed, 38 insertions(+), 9 deletions(-)
diff --git a/tests/integration/cmk_base/snmp/snmp_data/cmk-walk/localhost
b/tests/integration/cmk_base/snmp/snmp_data/cmk-walk/localhost
index 154d0e8..22f13cc 100644
--- a/tests/integration/cmk_base/snmp/snmp_data/cmk-walk/localhost
+++ b/tests/integration/cmk_base/snmp/snmp_data/cmk-walk/localhost
@@ -1,6 +1,6 @@
.1.3.6.1.2.1.1.1.0 Linux zeus 4.8.6.5-smp #2 SMP Sun Nov 13 14:58:11 CDT 2016 i686
.1.3.6.1.2.1.1.2.0 .1.3.6.1.4.1.8072.3.2.10
-.1.3.6.1.2.1.1.3.0 452596856
+.1.3.6.1.2.1.1.3.0 449613886
.1.3.6.1.2.1.1.4.0 SNMP Laboratories, info(a)snmplabs.com
.1.3.6.1.2.1.1.5.0 new system name
.1.3.6.1.2.1.1.6.0 San Francisco, California, United States
@@ -268,6 +268,7 @@
.1.3.6.1.2.1.4.31.1.1.18.2 0
.1.3.6.1.2.1.4.31.1.1.20.1 15833452
.1.3.6.1.2.1.4.31.1.1.20.2 6
+.1.3.6.1.2.1.4.31.1.1.21.1 15833452
.1.3.6.1.2.1.4.31.1.1.22.1 0
.1.3.6.1.2.1.4.31.1.1.22.2 0
.1.3.6.1.2.1.4.31.1.1.25.1 0
@@ -552,4 +553,4 @@
.1.3.6.1.2.1.7.5.1.1.195.218.254.105.53 195.218.254.105
.1.3.6.1.2.1.7.5.1.1.195.218.254.105.123 195.218.254.105
.1.3.6.1.2.1.7.5.1.2.0.0.0.0.37 37
-.1.3.6.1.2.1.7.5.1.2.0.0.0.
\ No newline at end of file
+.1.3.6.1.2.1.7.5.1.2.0.0.0.
diff --git a/tests/integration/cmk_base/snmp/test_snmp.py
b/tests/integration/cmk_base/snmp/test_snmp.py
index b057a14..2199b19 100644
--- a/tests/integration/cmk_base/snmp/test_snmp.py
+++ b/tests/integration/cmk_base/snmp/test_snmp.py
@@ -3,7 +3,7 @@ import logging
import os
import pytest # type: ignore
from pathlib2 import Path
-from testlib import cmk_path
+from testlib import cmk_path, wait_until
from cmk.utils.exceptions import MKGeneralException
import cmk.utils.paths
@@ -24,15 +24,30 @@ logger = logging.getLogger(__name__)
# SNMP device and back.
-(a)pytest.fixture()
-def snmpsim(site, request, tmp_path, monkeypatch):
+# Found no other way to archieve this
+#
https://github.com/pytest-dev/pytest/issues/363
+(a)pytest.fixture(scope="module")
+def monkeymodule(request):
+ from _pytest.monkeypatch import MonkeyPatch
+ mpatch = MonkeyPatch()
+ yield mpatch
+ mpatch.undo()
+
+
+(a)pytest.fixture(scope="module")
+def snmpsim(site, request, tmp_path_factory, monkeymodule):
+ tmp_path = tmp_path_factory.getbasetemp()
+
cmd = "%s/.venv/bin/snmpsimd.py" % cmk_path()
source_data_dir = Path(request.fspath.dirname) / "snmp_data"
- monkeypatch.setattr(config, "snmp_port_of", lambda h: 1337)
+ monkeymodule.setattr(config, "snmp_port_of", lambda h: 1337)
log.set_verbosity(2)
debug.enable()
+ # TODO: Use SNMPv2 over v1 for the moment
+ monkeymodule.setattr(config, "is_snmpv2c_host", lambda h: True)
+
p = subprocess.Popen(
[
cmd,
@@ -51,8 +66,8 @@ def snmpsim(site, request, tmp_path, monkeypatch):
],
close_fds=True,
# Silence the very noisy output. May be useful to enable this for debugging
tests
- stdout=open(os.devnull, "w"),
- stderr=subprocess.STDOUT,
+ #stdout=open(os.devnull, "w"),
+ #stderr=subprocess.STDOUT,
)
access_data = {
@@ -61,6 +76,19 @@ def snmpsim(site, request, tmp_path, monkeypatch):
"credentials": "public",
}
+ # Ensure that snmpsim is ready for clients before starting with the tests
+ def is_listening():
+ num_sockets = 0
+ for e in os.listdir("/proc/%d/fd" % p.pid):
+ try:
+ if os.readlink("/proc/%d/fd/%s" % (p.pid,
e)).startswith("socket:"):
+ num_sockets += 1
+ except OSError:
+ pass
+ return num_sockets >= 2
+
+ wait_until(is_listening, timeout=20)
+
yield p, access_data
log.set_verbosity(0)
@@ -74,7 +102,7 @@ def snmpsim(site, request, tmp_path, monkeypatch):
# Execute all tests for all SNMP backends
@pytest.fixture(params=["inline_snmp", "classic_snmp",
"stored_snmp"], autouse=True)
-def backend(request, monkeypatch, tmp_path):
+def backend(request, monkeypatch):
backend_name = request.param
source_data_dir = Path(request.fspath.dirname) / "snmp_data" /
"cmk-walk"