mirror of
https://github.com/TheNetworkGuy/netbox-zabbix-sync.git
synced 2025-07-13 07:24:47 -06:00
248 lines
9.5 KiB
Python
248 lines
9.5 KiB
Python
"""Tests for the ZabbixInterface class in the interface module."""
|
|
import unittest
|
|
from modules.interface import ZabbixInterface
|
|
from modules.exceptions import InterfaceConfigError
|
|
|
|
|
|
class TestZabbixInterface(unittest.TestCase):
|
|
"""Test class for ZabbixInterface functionality."""
|
|
|
|
def setUp(self):
|
|
"""Set up test fixtures."""
|
|
self.test_ip = "192.168.1.1"
|
|
self.empty_context = {}
|
|
self.default_interface = ZabbixInterface(self.empty_context, self.test_ip)
|
|
|
|
# Create some test contexts for different scenarios
|
|
self.snmpv2_context = {
|
|
"zabbix": {
|
|
"interface_type": 2,
|
|
"interface_port": "161",
|
|
"snmp": {
|
|
"version": 2,
|
|
"community": "public",
|
|
"bulk": 1
|
|
}
|
|
}
|
|
}
|
|
|
|
self.snmpv3_context = {
|
|
"zabbix": {
|
|
"interface_type": 2,
|
|
"snmp": {
|
|
"version": 3,
|
|
"securityname": "snmpuser",
|
|
"securitylevel": "authPriv",
|
|
"authprotocol": "SHA",
|
|
"authpassphrase": "authpass123",
|
|
"privprotocol": "AES",
|
|
"privpassphrase": "privpass123",
|
|
"contextname": "context1"
|
|
}
|
|
}
|
|
}
|
|
|
|
self.agent_context = {
|
|
"zabbix": {
|
|
"interface_type": 1,
|
|
"interface_port": "10050"
|
|
}
|
|
}
|
|
|
|
def test_init(self):
|
|
"""Test initialization of ZabbixInterface."""
|
|
interface = ZabbixInterface(self.empty_context, self.test_ip)
|
|
|
|
# Check basic properties
|
|
self.assertEqual(interface.ip, self.test_ip)
|
|
self.assertEqual(interface.context, self.empty_context)
|
|
self.assertEqual(interface.interface["ip"], self.test_ip)
|
|
self.assertEqual(interface.interface["main"], "1")
|
|
self.assertEqual(interface.interface["useip"], "1")
|
|
self.assertEqual(interface.interface["dns"], "")
|
|
|
|
def test_get_context_empty(self):
|
|
"""Test get_context with empty context."""
|
|
interface = ZabbixInterface(self.empty_context, self.test_ip)
|
|
result = interface.get_context()
|
|
self.assertFalse(result)
|
|
|
|
def test_get_context_with_interface_type(self):
|
|
"""Test get_context with interface_type but no port."""
|
|
context = {"zabbix": {"interface_type": 2}}
|
|
interface = ZabbixInterface(context, self.test_ip)
|
|
|
|
# Should set type and default port
|
|
result = interface.get_context()
|
|
self.assertTrue(result)
|
|
self.assertEqual(interface.interface["type"], 2)
|
|
self.assertEqual(interface.interface["port"], "161") # Default port for SNMP
|
|
|
|
def test_get_context_with_interface_type_and_port(self):
|
|
"""Test get_context with both interface_type and port."""
|
|
context = {"zabbix": {"interface_type": 1, "interface_port": "12345"}}
|
|
interface = ZabbixInterface(context, self.test_ip)
|
|
|
|
# Should set type and specified port
|
|
result = interface.get_context()
|
|
self.assertTrue(result)
|
|
self.assertEqual(interface.interface["type"], 1)
|
|
self.assertEqual(interface.interface["port"], "12345")
|
|
|
|
def test_set_default_port(self):
|
|
"""Test _set_default_port for different interface types."""
|
|
interface = ZabbixInterface(self.empty_context, self.test_ip)
|
|
|
|
# Test for agent type (1)
|
|
interface.interface["type"] = 1
|
|
interface._set_default_port() # pylint: disable=protected-access
|
|
self.assertEqual(interface.interface["port"], "10050")
|
|
|
|
# Test for SNMP type (2)
|
|
interface.interface["type"] = 2
|
|
interface._set_default_port() # pylint: disable=protected-access
|
|
self.assertEqual(interface.interface["port"], "161")
|
|
|
|
# Test for IPMI type (3)
|
|
interface.interface["type"] = 3
|
|
interface._set_default_port() # pylint: disable=protected-access
|
|
self.assertEqual(interface.interface["port"], "623")
|
|
|
|
# Test for JMX type (4)
|
|
interface.interface["type"] = 4
|
|
interface._set_default_port() # pylint: disable=protected-access
|
|
self.assertEqual(interface.interface["port"], "12345")
|
|
|
|
# Test for unsupported type
|
|
interface.interface["type"] = 99
|
|
result = interface._set_default_port() # pylint: disable=protected-access
|
|
self.assertFalse(result)
|
|
|
|
def test_set_snmp_v2(self):
|
|
"""Test set_snmp with SNMPv2 configuration."""
|
|
interface = ZabbixInterface(self.snmpv2_context, self.test_ip)
|
|
interface.get_context() # Set the interface type
|
|
|
|
# Call set_snmp
|
|
interface.set_snmp()
|
|
|
|
# Check SNMP details
|
|
self.assertEqual(interface.interface["details"]["version"], "2")
|
|
self.assertEqual(interface.interface["details"]["community"], "public")
|
|
self.assertEqual(interface.interface["details"]["bulk"], "1")
|
|
|
|
def test_set_snmp_v3(self):
|
|
"""Test set_snmp with SNMPv3 configuration."""
|
|
interface = ZabbixInterface(self.snmpv3_context, self.test_ip)
|
|
interface.get_context() # Set the interface type
|
|
|
|
# Call set_snmp
|
|
interface.set_snmp()
|
|
|
|
# Check SNMP details
|
|
self.assertEqual(interface.interface["details"]["version"], "3")
|
|
self.assertEqual(interface.interface["details"]["securityname"], "snmpuser")
|
|
self.assertEqual(interface.interface["details"]["securitylevel"], "authPriv")
|
|
self.assertEqual(interface.interface["details"]["authprotocol"], "SHA")
|
|
self.assertEqual(interface.interface["details"]["authpassphrase"], "authpass123")
|
|
self.assertEqual(interface.interface["details"]["privprotocol"], "AES")
|
|
self.assertEqual(interface.interface["details"]["privpassphrase"], "privpass123")
|
|
self.assertEqual(interface.interface["details"]["contextname"], "context1")
|
|
|
|
def test_set_snmp_no_snmp_config(self):
|
|
"""Test set_snmp with missing SNMP configuration."""
|
|
# Create context with interface type but no SNMP config
|
|
context = {"zabbix": {"interface_type": 2}}
|
|
interface = ZabbixInterface(context, self.test_ip)
|
|
interface.get_context() # Set the interface type
|
|
|
|
# Call set_snmp - should raise exception
|
|
with self.assertRaises(InterfaceConfigError):
|
|
interface.set_snmp()
|
|
|
|
def test_set_snmp_unsupported_version(self):
|
|
"""Test set_snmp with unsupported SNMP version."""
|
|
# Create context with invalid SNMP version
|
|
context = {
|
|
"zabbix": {
|
|
"interface_type": 2,
|
|
"snmp": {
|
|
"version": 4 # Invalid version
|
|
}
|
|
}
|
|
}
|
|
interface = ZabbixInterface(context, self.test_ip)
|
|
interface.get_context() # Set the interface type
|
|
|
|
# Call set_snmp - should raise exception
|
|
with self.assertRaises(InterfaceConfigError):
|
|
interface.set_snmp()
|
|
|
|
def test_set_snmp_no_version(self):
|
|
"""Test set_snmp with missing SNMP version."""
|
|
# Create context without SNMP version
|
|
context = {
|
|
"zabbix": {
|
|
"interface_type": 2,
|
|
"snmp": {
|
|
"community": "public" # No version specified
|
|
}
|
|
}
|
|
}
|
|
interface = ZabbixInterface(context, self.test_ip)
|
|
interface.get_context() # Set the interface type
|
|
|
|
# Call set_snmp - should raise exception
|
|
with self.assertRaises(InterfaceConfigError):
|
|
interface.set_snmp()
|
|
|
|
def test_set_snmp_non_snmp_interface(self):
|
|
"""Test set_snmp with non-SNMP interface type."""
|
|
interface = ZabbixInterface(self.agent_context, self.test_ip)
|
|
interface.get_context() # Set the interface type
|
|
|
|
# Call set_snmp - should raise exception
|
|
with self.assertRaises(InterfaceConfigError):
|
|
interface.set_snmp()
|
|
|
|
def test_set_default_snmp(self):
|
|
"""Test set_default_snmp method."""
|
|
interface = ZabbixInterface(self.empty_context, self.test_ip)
|
|
interface.set_default_snmp()
|
|
|
|
# Check interface properties
|
|
self.assertEqual(interface.interface["type"], "2")
|
|
self.assertEqual(interface.interface["port"], "161")
|
|
self.assertEqual(interface.interface["details"]["version"], "2")
|
|
self.assertEqual(interface.interface["details"]["community"], "{$SNMP_COMMUNITY}")
|
|
self.assertEqual(interface.interface["details"]["bulk"], "1")
|
|
|
|
def test_set_default_agent(self):
|
|
"""Test set_default_agent method."""
|
|
interface = ZabbixInterface(self.empty_context, self.test_ip)
|
|
interface.set_default_agent()
|
|
|
|
# Check interface properties
|
|
self.assertEqual(interface.interface["type"], "1")
|
|
self.assertEqual(interface.interface["port"], "10050")
|
|
|
|
def test_snmpv2_no_community(self):
|
|
"""Test SNMPv2 with no community string specified."""
|
|
# Create context with SNMPv2 but no community
|
|
context = {
|
|
"zabbix": {
|
|
"interface_type": 2,
|
|
"snmp": {
|
|
"version": 2
|
|
}
|
|
}
|
|
}
|
|
interface = ZabbixInterface(context, self.test_ip)
|
|
interface.get_context() # Set the interface type
|
|
|
|
# Call set_snmp
|
|
interface.set_snmp()
|
|
|
|
# Should use default community string
|
|
self.assertEqual(interface.interface["details"]["community"], "{$SNMP_COMMUNITY}")
|