summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--snmptrap/mod/trapd_snmpv3.py14
-rw-r--r--snmptrap/snmptrapd.py2
-rw-r--r--spec/snmptrap-collector-component-spec.json428
-rw-r--r--tests/test_snmptrapd.py27
-rw-r--r--tests/test_trapd_http_session.py27
-rw-r--r--tests/test_trapd_snmpv3.py60
6 files changed, 282 insertions, 276 deletions
diff --git a/snmptrap/mod/trapd_snmpv3.py b/snmptrap/mod/trapd_snmpv3.py
index 97c048c..50da980 100644
--- a/snmptrap/mod/trapd_snmpv3.py
+++ b/snmptrap/mod/trapd_snmpv3.py
@@ -47,20 +47,6 @@ from trapd_io import stdout_logger, ecomp_logger
prog_name = os.path.basename(__file__)
-
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# module: init
-# FMDL: should this re-establish listener, with
-# blank V3 config attribs?
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-
-
-def init():
-
- global v3_config_dict
- v3_config_dict = {}
-
-
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# module: load_snmpv3_credentials
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
diff --git a/snmptrap/snmptrapd.py b/snmptrap/snmptrapd.py
index 66cc25f..70dc668 100644
--- a/snmptrap/snmptrapd.py
+++ b/snmptrap/snmptrapd.py
@@ -73,7 +73,7 @@ from trapd_runtime_pid import save_pid, rm_pid
from trapd_get_cbs_config import get_cbs_config
from trapd_exit import cleanup_and_exit
from trapd_http_session import init_session_obj, close_session_obj, reset_session_obj
-from trapd_snmpv3 import init, load_snmpv3_credentials
+from trapd_snmpv3 import load_snmpv3_credentials
from trapd_io import roll_all_logs, open_eelf_logs, roll_file, open_file, close_file, ecomp_logger, stdout_logger
prog_name = os.path.basename(__file__)
diff --git a/spec/snmptrap-collector-component-spec.json b/spec/snmptrap-collector-component-spec.json
index e9f827e..e87d800 100644
--- a/spec/snmptrap-collector-component-spec.json
+++ b/spec/snmptrap-collector-component-spec.json
@@ -1,261 +1,171 @@
{
- "self": {
- "version": "1.4.0",
- "name": "snmptrap-collector",
- "description": "Collector for receiving SNMP traps and publishing to DMAAP/MR",
- "component_type": "docker"
- },
- "streams": {
- "subscribes": [
-
- ],
- "publishes": [
- {
- "format": "snmptrap_output",
- "version": "1.3.0",
- "type": "message router",
- "config_key": "snmp_trap"
- }
- ]
- },
- "services": {
- "calls": [],
- "provides": []
- },
- "parameters": [
- {
- "name": "sw_interval_in_seconds",
- "value": "60",
- "description": "StormWatch sample interval",
- "designer_editable" : false,
- "policy_editable" : false,
- "sourced_at_deployment" : false
- },
- {
- "name": "StormWatchPolicy",
- "description": "Configure storm watch control parameters via Policy",
- "sourced_at_deployment": false,
- "designer_editable": true,
- "policy_editable": true,
- "policy_group": "DCAE.Config_StormWatch",
- "policy_schema": [
- {
- "name": "sw_trap_config",
- "description": "List of storm watch control rules",
- "type": "list",
- "entry_schema": [
- {
- "name": "sw_notify_oid",
- "description": "Stormwatch notify oid",
- "type": "string",
- "value": ""
- },
- {
- "name": "sw_high_water_in_interval",
- "description": "Onset number of traps in interval",
- "type": "string",
- "value": ""
- },
- {
- "name": "sw_low_water_in_interval",
- "description": "Clearing number of traps in interval",
- "type": "string",
- "value": ""
- }
- ]
- }
- ]
- },
- {
- "name": "Protocols",
- "description": "Protocol parameters",
- "sourced_at_deployment": false,
- "designer_editable": false,
- "policy_editable": false,
- "value": [
- {
- "name": "ipv4_interface",
- "description": "ipv4 address trap receiver should listen to (0.0.0.0 -> all)",
- "value": "0.0.0.0"
- },
- {
- "name": "ipv4_port",
- "description": "port trap receiver should bind to for ipv4 traps",
- "value": "162"
- },
- {
- "name": "ipv6_interface",
- "description": "ipv6 address trap receiver should listen to (::FFFF:0:0 -> all)",
- "value": "::FFFF:0:0"
- },
- {
- "name": "ipv6_port",
- "description": "port trap receiver should bind to for ipv6 traps",
- "value": "162"
- }
- ]
- },
- {
- "name": "Cache",
- "description": "Cache parameters",
- "sourced_at_deployment": false,
- "designer_editable": false,
- "policy_editable": false,
- "value": [
- {
- "name": "dns_cache_ttl_seconds",
- "description": "dns cache ttl in seconds",
- "value": "60"
- }
- ]
- },
- {
- "name": "Files",
- "description": "Files parameters",
- "sourced_at_deployment": false,
- "designer_editable": false,
- "policy_editable": false,
- "value": [
- {
- "name": "arriving_traps_log",
- "description": "log for all traps accepted by receiver",
- "value": "snmptrapd_arriving_traps.log"
- },
- {
- "name": "data_dir",
- "description": "directory for published traps (json)",
- "value": "data"
- },
- {
- "name": "eelf_audit",
- "description": "eelf audit log",
- "value": "audit.log"
- },
- {
- "name": "eelf_base_dir",
- "description": "base directory for eelf logs",
- "value": "/opt/app/snmptrap/logs"
- },
- {
- "name": "eelf_debug",
- "description": "eelf debug log",
- "value": "debug.log"
- },
- {
- "name": "eelf_error",
- "description": "eelf error log",
- "value": "error.log"
- },
- {
- "name": "eelf_metrics",
- "description": "eelf metrics log",
- "value": "metrics.log"
- },
- {
- "name": "log_dir",
- "description": "logs directory",
- "value": "logs"
- },
- {
- "name": "minimum_severity_to_log",
- "description": "minimun severity to log",
- "value": "2"
- },
- {
- "name": "perm_status_file",
- "description": "permanent status log",
- "value": "snmptrapd_status.log"
- },
- {
- "name": "pid_dir",
- "description": "directory for pid file",
- "value": "tmp"
- },
- {
- "name": "roll_frequency",
- "description": "frequency of log file rolls",
- "value": "hour"
- },
- {
- "name": "runtime_base_dir",
- "description": "base directory for runtime files",
- "value": "hour"
- },
- {
- "name": "snmptrapd_diag",
- "description": "diagnostic program log",
- "value": "snmptrapd_prog_diag.log"
- },
- {
- "name": "traps_stats_log",
- "description": "traps statistics log",
- "value": "snmptrapd_stats.csv"
- }
- ]
- },
- {
- "name": "Publisher",
- "description": "Publisher parameters",
- "sourced_at_deployment": false,
- "designer_editable": false,
- "policy_editable": false,
- "value": [
- {
- "name": "http_milliseconds_between_retries",
- "description": "milliseconds between publish retries",
- "value": "750"
- },
- {
- "name": "http_peer_publisher",
- "description": "peer publisher",
- "value": "unavailable"
- },
- {
- "name": "http_primary_publisher",
- "description": "primary publisher",
- "value": "true"
- },
- {
- "name": "http_retries",
- "description": "retries for publish attempts",
- "value": "3"
- },
- {
- "name": "http_timeout_milliseconds",
- "description": "milliseconds for publish timeout",
- "value": "1500"
- },
- {
- "name": "max_milliseconds_between_publishes",
- "description": "max milliseconds between publishes",
- "value": "10000"
- },
- {
- "name": "max_traps_between_publishes",
- "description": "max traps between publishes",
- "value": "10"
- }
- ]
- }
- ],
- "auxilary": {
- "healthcheck": {
- "type": "docker",
- "interval": "300s",
- "timeout": "120s",
- "script": "/opt/app/snmptrap/bin/healthcheck.sh"
- },
- "reconfigs": {
- "dti": "/opt/app/snmptrap/bin/snmptrapd.sh reloadCfg"
- },
- "ports": [
- "6162:162"
- ]
- },
- "artifacts": [
- {
- "type": "docker image",
- "uri": "nexus.onap.org:10001/snapshots/onap/org.onap.dcaegen2.collectors.snmptrap:1.4.0"
- }
- ]
+ "self": {
+ "version": "1.4.0",
+ "name": "snmptrap-collector",
+ "description": "Collector for receiving SNMP traps and publishing to DMAAP/MR",
+ "component_type": "docker"
+ },
+ "streams": {
+ "subscribes": [],
+ "publishes": [
+ {
+ "format": "snmptrap_output",
+ "version": "1.3.0",
+ "type": "message router",
+ "config_key": "sec_fault_unsecure"
+ }
+ ]
+ },
+ "services": {
+ "calls": [],
+ "provides": []
+ },
+ "parameters": [
+ {
+ "name": "sw_interval_in_seconds",
+ "value": "60",
+ "description": "StormWatch sample interval",
+ "designer_editable": false,
+ "policy_editable": false,
+ "sourced_at_deployment": false
+ },
+ {
+ "name": "StormWatchPolicy",
+ "value": "",
+ "description": "Configure storm watch control parameters via Policy",
+ "sourced_at_deployment": false,
+ "designer_editable": true,
+ "policy_editable": true,
+ "policy_group": "DCAE.Config_StormWatch",
+ "policy_schema": [
+ {
+ "name": "sw_trap_config",
+ "description": "List of storm watch control rules",
+ "type": "list",
+ "entry_schema": [
+ {
+ "name": "sw_notify_oid",
+ "description": "Stormwatch notify oid",
+ "type": "string",
+ "value": ""
+ },
+ {
+ "name": "sw_high_water_in_interval",
+ "description": "Onset number of traps in interval",
+ "type": "string",
+ "value": ""
+ },
+ {
+ "name": "sw_low_water_in_interval",
+ "description": "Clearing number of traps in interval",
+ "type": "string",
+ "value": ""
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "name": "cache",
+ "description": "Cache parameters",
+ "sourced_at_deployment": true,
+ "designer_editable": false,
+ "policy_editable": false,
+ "value": {
+ "dns_cache_ttl_seconds": "60"
+ }
+ },
+ {
+ "name": "files",
+ "description": "Files parameters",
+ "sourced_at_deployment": true,
+ "designer_editable": false,
+ "policy_editable": false,
+ "value": [
+ {
+ "arriving_traps_log": "snmptrapd_arriving_traps.log",
+ "data_dir": "data",
+ "eelf_audit": "audit.log",
+ "eelf_base_dir": "/opt/app/snmptrap/logs",
+ "eelf_debug": "debug.log",
+ "eelf_error": "error.log",
+ "eelf_metrics": "metrics.log",
+ "log_dir": "logs",
+ "minimum_severity_to_log": "2",
+ "perm_status_file": "snmptrapd_status.log",
+ "pid_dir": "tmp",
+ "roll_frequency": "day",
+ "runtime_base_dir": "/opt/app/snmptrap",
+ "snmptrapd_diag": "snmptrapd_prog_diag.log",
+ "traps_stats_log": "snmptrapd_stats.csv"
+ }
+ ]
+ },
+ {
+ "name": "publisher",
+ "description": "Publisher parameters",
+ "sourced_at_deployment": true,
+ "designer_editable": false,
+ "policy_editable": false,
+ "value": [
+ {
+ "http_milliseconds_between_retries": "750",
+ "http_peer_publisher": "unavailable",
+ "http_primary_publisher": "true",
+ "http_retries": "3",
+ "http_milliseconds_timeout": "1500",
+ "max_milliseconds_between_publishes": "10000",
+ "max_traps_between_publishes": "10"
+ }
+ ]
+ },
+ {
+ "name": "protocols",
+ "description": "Protocol parameters",
+ "sourced_at_deployment": true,
+ "designer_editable": false,
+ "policy_editable": false,
+ "value": [
+ {
+ "ipv4_interface": "0.0.0.0",
+ "ipv4_port": "6162",
+ "ipv6_interface": "::1",
+ "ipv6_port": "6162"
+ }
+ ]
+ },
+ {
+ "name": "snmptrapd",
+ "description": "application basics",
+ "sourced_at_deployment": true,
+ "designer_editable": false,
+ "policy_editable": false,
+ "value": [
+ {
+ "version": "1.4.0",
+ "title": "Collector for receiving SNMP traps and publishing to DMAAP/MR"
+ }
+ ]
+ }
+ ],
+ "auxilary": {
+ "healthcheck": {
+ "type": "docker",
+ "interval": "300s",
+ "timeout": "120s",
+ "script": "/opt/app/snmptrap/bin/snmptrapd.sh status"
+ },
+ "reconfigs": {
+ "dti": "/opt/app/snmptrap/bin/snmptrapd.sh reloadCfg"
+ },
+ "ports": [
+ "6162/udp:162"
+ ]
+ },
+ "artifacts": [
+ {
+ "type": "docker image",
+ "uri": "nexus01.research.att.com:18443/dcae-platform/snmptrap:1.4.0"
+ }
+ ]
}
diff --git a/tests/test_snmptrapd.py b/tests/test_snmptrapd.py
index 941c0ae..85681ea 100644
--- a/tests/test_snmptrapd.py
+++ b/tests/test_snmptrapd.py
@@ -10,6 +10,9 @@ import trapd_runtime_pid
import trapd_io
import trapd_get_cbs_config
+from pysnmp.hlapi import *
+from pysnmp import debug
+
class test_snmptrapd(unittest.TestCase):
"""
Test the save_pid mod
@@ -123,5 +126,29 @@ class test_snmptrapd(unittest.TestCase):
# open eelf logs
trapd_io.open_eelf_logs()
+ def test_v1_trap_receipt(self):
+ """
+ Test receiving traps
+ """
+
+ # init vars
+ tds.init()
+
+ # request load of CBS data
+ os.environ.update(CBS_SIM_JSON='/tmp/opt/app/snmptrap/etc/snmptrapd.json')
+ trapd_get_cbs_config.get_cbs_config()
+
+ errorIndication, errorStatus, errorIndex, varbinds = next(sendNotification(SnmpEngine(),
+ CommunityData('not_public'),
+ UdpTransportTarget(('localhost', 6162)),
+ ContextData(),
+ 'trap',
+ [ObjectType(ObjectIdentity('.1.3.6.1.4.1.999.1'), OctetString('test trap - ignore')),
+ ObjectType(ObjectIdentity('.1.3.6.1.4.1.999.2'), OctetString('ONAP pytest trap'))])
+ )
+
+ result = errorIndication
+ self.assertEqual(result, None)
+
if __name__ == '__main__':
unittest.main()
diff --git a/tests/test_trapd_http_session.py b/tests/test_trapd_http_session.py
index 8f61d08..a423be6 100644
--- a/tests/test_trapd_http_session.py
+++ b/tests/test_trapd_http_session.py
@@ -7,14 +7,37 @@ class test_init_session_obj(unittest.TestCase):
Test the init_session_obj mod
"""
- def test_correct_usage(self):
+ def init_session(self):
"""
- Test that attempt to create http session object works
+ test creation of http session
"""
result = trapd_http_session.init_session_obj()
compare = str(result).startswith("<requests.sessions.Session object at")
self.assertEqual(compare, True)
+ def test_reset(self):
+ """
+ test reset of existing http session
+ """
+ sess = trapd_http_session.init_session_obj()
+ result = trapd_http_session.reset_session_obj(sess)
+ compare = str(result).startswith("<requests.sessions.Session object at")
+ self.assertEqual(compare, True)
+
+ def close_existing_session(self):
+ """
+ test close of existing http session
+ """
+ sess = trapd_http_session.init_session_obj()
+ result = trapd_http_session.close_session_obj(sess)
+ self.assertEqual(result, True)
+
+ def close_nonexistent_session(self):
+ """
+ test close of non-existent http session
+ """
+ result = trapd_http_session.close_session_obj(None)
+ self.assertEqual(result, True)
if __name__ == '__main__':
unittest.main()
diff --git a/tests/test_trapd_snmpv3.py b/tests/test_trapd_snmpv3.py
new file mode 100644
index 0000000..2a0ef12
--- /dev/null
+++ b/tests/test_trapd_snmpv3.py
@@ -0,0 +1,60 @@
+import pytest
+import json
+import unittest
+import os
+
+from onap_dcae_cbs_docker_client.client import get_config
+from trapd_exit import cleanup_and_exit
+from trapd_io import stdout_logger, ecomp_logger
+import trapd_settings as tds
+import trapd_snmpv3
+
+from pysnmp.entity import engine, config
+
+class test_snmpv3_config(unittest.TestCase):
+ """
+ Test snmpv3 module
+ """
+
+ def test_v3_config_present(self):
+ """
+ Test that snmpv3 config is present
+ """
+ tds.c_config = json.loads("{ \"snmptrapd\": { \"version\": \"1.4.0\", \"title\": \"ONAP SNMP Trap Receiver\" }, \"protocols\": { \"transport\": \"udp\", \"ipv4_interface\": \"0.0.0.0\", \"ipv4_port\": 6162, \"ipv6_interface\": \"::1\", \"ipv6_port\": 6162 }, \"cache\": { \"dns_cache_ttl_seconds\": 60 }, \"publisher\": { \"http_timeout_milliseconds\": 1500, \"http_retries\": 3, \"http_milliseconds_between_retries\": 750, \"http_primary_publisher\": \"true\", \"http_peer_publisher\": \"unavailable\", \"max_traps_between_publishes\": 10, \"max_milliseconds_between_publishes\": 10000 }, \"streams_publishes\": { \"sec_fault_unsecure\": { \"type\": \"message_router\", \"aaf_password\": null, \"dmaap_info\": { \"location\": \"mtl5\", \"client_id\": null, \"client_role\": null, \"topic_url\": \"http://localhost:3904/events/ONAP-COLLECTOR-SNMPTRAP\" }, \"aaf_username\": null } }, \"files\": { \"runtime_base_dir\": \"/tmp/opt/app/snmptrap\", \"log_dir\": \"logs\", \"data_dir\": \"data\", \"pid_dir\": \"tmp\", \"arriving_traps_log\": \"snmptrapd_arriving_traps.log\", \"snmptrapd_diag\": \"snmptrapd_prog_diag.log\", \"traps_stats_log\": \"snmptrapd_stats.csv\", \"perm_status_file\": \"snmptrapd_status.log\", \"eelf_base_dir\": \"/tmp/opt/app/snmptrap/logs\", \"eelf_error\": \"error.log\", \"eelf_debug\": \"debug.log\", \"eelf_audit\": \"audit.log\", \"eelf_metrics\": \"metrics.log\", \"roll_frequency\": \"day\", \"minimum_severity_to_log\": 2 }, \"trap_config\": { \"sw_interval_in_seconds\": 60, \"notify_oids\": { \".1.3.6.1.4.1.9.0.1\": { \"sw_high_water_in_interval\": 102, \"sw_low_water_in_interval\": 7, \"category\": \"logonly\" }, \".1.3.6.1.4.1.9.0.2\": { \"sw_high_water_in_interval\": 101, \"sw_low_water_in_interval\": 7, \"category\": \"logonly\" }, \".1.3.6.1.4.1.9.0.3\": { \"sw_high_water_in_interval\": 102, \"sw_low_water_in_interval\": 7, \"category\": \"logonly\" }, \".1.3.6.1.4.1.9.0.4\": { \"sw_high_water_in_interval\": 10, \"sw_low_water_in_interval\": 3, \"category\": \"logonly\" } } }, \"snmpv3_config\": { \"usm_users\": [ { \"user\": \"usr-sha-aes256\", \"engineId\": \"8000000001020304\", \"usmHMACSHAAuth\": \"authkey1\", \"usmAesCfb256\": \"privkey1\" }, { \"user\": \"user1\", \"engineId\": \"8000000000000001\", \"usmHMACMD5Auth\": \"authkey1\", \"usmDESPriv\": \"privkey1\" }, { \"user\": \"user2\", \"engineId\": \"8000000000000002\", \"usmHMACSHAAuth\": \"authkey2\", \"usmAesCfb128\": \"privkey2\" }, { \"user\": \"user3\", \"engineId\": \"8000000000000003\", \"usmHMACSHAAuth\": \"authkey3\", \"usmAesCfb256\": \"privkey3\" }, { \"user\": \"user4\"} , { \"engineId\": \"1\"}, { \"user\": \"user6\", \"engineId\": \"8000000000000006\", \"usmNoAuth\": \"authkey3\", \"usmAesCfb192\": \"privkey6\" }, { \"user\": \"user7\", \"engineId\": \"8000000000000007\", \"usmNoAuth\": \"\", \"usmNoPriv\": \"\" }] } }")
+
+ # del os.environ['CBS_SIM_JSON']
+ # result = trapd_get_cbs_config.get_cbs_config()
+ # print("result: %s" % result)
+ # compare = str(result).startswith("{'snmptrap': ")
+ # self.assertEqual(compare, False)
+
+ with pytest.raises(Exception) as pytest_wrapped_sys_exit:
+ snmp_engine = engine.SnmpEngine()
+ result = trapd_snmpv3.load_snmpv3_credentials(config, snmp_engine, tds.c_config)
+ # config, snmp_engine=trapd_snmpv3.load_snmpv3_credentials(config, snmp_engine, pytest_json_data_with_v3)
+ assert pytest_wrapped_sys_exit.type == SystemExit
+ # assert pytest_wrapped_sys_exit.value.code == 1
+
+
+ def test_v3_config_not_present(self):
+ """
+ Test that app is ok if v3 config not present
+ """
+ tds.c_config = json.loads("{ \"snmptrapd\": { \"version\": \"1.4.0\", \"title\": \"ONAP SNMP Trap Receiver\" }, \"protocols\": { \"transport\": \"udp\", \"ipv4_interface\": \"0.0.0.0\", \"ipv4_port\": 6162, \"ipv6_interface\": \"::1\", \"ipv6_port\": 6162 }, \"cache\": { \"dns_cache_ttl_seconds\": 60 }, \"publisher\": { \"http_timeout_milliseconds\": 1500, \"http_retries\": 3, \"http_milliseconds_between_retries\": 750, \"http_primary_publisher\": \"true\", \"http_peer_publisher\": \"unavailable\", \"max_traps_between_publishes\": 10, \"max_milliseconds_between_publishes\": 10000 }, \"streams_publishes\": { \"sec_fault_unsecure\": { \"type\": \"message_router\", \"aaf_password\": null, \"dmaap_info\": { \"location\": \"mtl5\", \"client_id\": null, \"client_role\": null, \"topic_url\": \"http://localhost:3904/events/ONAP-COLLECTOR-SNMPTRAP\" }, \"aaf_username\": null } }, \"files\": { \"runtime_base_dir\": \"/tmp/opt/app/snmptrap\", \"log_dir\": \"logs\", \"data_dir\": \"data\", \"pid_dir\": \"tmp\", \"arriving_traps_log\": \"snmptrapd_arriving_traps.log\", \"snmptrapd_diag\": \"snmptrapd_prog_diag.log\", \"traps_stats_log\": \"snmptrapd_stats.csv\", \"perm_status_file\": \"snmptrapd_status.log\", \"eelf_base_dir\": \"/tmp/opt/app/snmptrap/logs\", \"eelf_error\": \"error.log\", \"eelf_debug\": \"debug.log\", \"eelf_audit\": \"audit.log\", \"eelf_metrics\": \"metrics.log\", \"roll_frequency\": \"day\", \"minimum_severity_to_log\": 2 }, \"trap_config\": { \"sw_interval_in_seconds\": 60, \"notify_oids\": { \".1.3.6.1.4.1.9.0.1\": { \"sw_high_water_in_interval\": 102, \"sw_low_water_in_interval\": 7, \"category\": \"logonly\" }, \".1.3.6.1.4.1.9.0.2\": { \"sw_high_water_in_interval\": 101, \"sw_low_water_in_interval\": 7, \"category\": \"logonly\" }, \".1.3.6.1.4.1.9.0.3\": { \"sw_high_water_in_interval\": 102, \"sw_low_water_in_interval\": 7, \"category\": \"logonly\" }, \".1.3.6.1.4.1.9.0.4\": { \"sw_high_water_in_interval\": 10, \"sw_low_water_in_interval\": 3, \"category\": \"logonly\" } } } }")
+
+ # del os.environ['CBS_SIM_JSON']
+ # result = trapd_get_cbs_config.get_cbs_config()
+ # print("result: %s" % result)
+ # compare = str(result).startswith("{'snmptrap': ")
+ # self.assertEqual(compare, False)
+
+ with pytest.raises(Exception) as pytest_wrapped_sys_exit:
+ snmp_engine = engine.SnmpEngine()
+ result = trapd_snmpv3.load_snmpv3_credentials(config, snmp_engine, tds.c_config)
+ # config, snmp_engine=trapd_snmpv3.load_snmpv3_credentials(config, snmp_engine, pytest_json_data_with_v3)
+ assert pytest_wrapped_sys_exit.type == SystemExit
+ # assert pytest_wrapped_sys_exit.value.code == 1
+
+
+if __name__ == '__main__':
+ unittest.main()