File: test_enums.py

package info (click to toggle)
zabbix-cli 3.6.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,980 kB
  • sloc: python: 19,920; makefile: 5
file content (122 lines) | stat: -rw-r--r-- 4,604 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
from __future__ import annotations

import pytest
from zabbix_cli.pyzabbix.enums import AckStatus
from zabbix_cli.pyzabbix.enums import ActiveInterface
from zabbix_cli.pyzabbix.enums import APIStr
from zabbix_cli.pyzabbix.enums import APIStrEnum
from zabbix_cli.pyzabbix.enums import DataCollectionMode
from zabbix_cli.pyzabbix.enums import EventStatus
from zabbix_cli.pyzabbix.enums import ExportFormat
from zabbix_cli.pyzabbix.enums import GUIAccess
from zabbix_cli.pyzabbix.enums import HostgroupFlag
from zabbix_cli.pyzabbix.enums import HostgroupType
from zabbix_cli.pyzabbix.enums import InterfaceConnectionMode
from zabbix_cli.pyzabbix.enums import InterfaceType
from zabbix_cli.pyzabbix.enums import InventoryMode
from zabbix_cli.pyzabbix.enums import ItemType
from zabbix_cli.pyzabbix.enums import MacroType
from zabbix_cli.pyzabbix.enums import MaintenanceStatus
from zabbix_cli.pyzabbix.enums import MaintenanceType
from zabbix_cli.pyzabbix.enums import MaintenanceWeekType
from zabbix_cli.pyzabbix.enums import MonitoredBy
from zabbix_cli.pyzabbix.enums import MonitoringStatus
from zabbix_cli.pyzabbix.enums import ProxyCompatibility
from zabbix_cli.pyzabbix.enums import ProxyGroupState
from zabbix_cli.pyzabbix.enums import ProxyMode
from zabbix_cli.pyzabbix.enums import ProxyModePre70
from zabbix_cli.pyzabbix.enums import SNMPAuthProtocol
from zabbix_cli.pyzabbix.enums import SNMPPrivProtocol
from zabbix_cli.pyzabbix.enums import SNMPSecurityLevel
from zabbix_cli.pyzabbix.enums import TriggerPriority
from zabbix_cli.pyzabbix.enums import UsergroupPermission
from zabbix_cli.pyzabbix.enums import UserRole
from zabbix_cli.pyzabbix.enums import ValueType

APISTR_ENUMS = [
    AckStatus,
    ActiveInterface,
    DataCollectionMode,
    EventStatus,
    GUIAccess,
    HostgroupFlag,
    HostgroupType,
    InterfaceConnectionMode,
    InterfaceType,
    InventoryMode,
    ItemType,
    MacroType,
    MaintenanceStatus,
    MaintenanceType,
    MaintenanceWeekType,
    MonitoredBy,
    MonitoringStatus,
    ProxyCompatibility,
    ProxyGroupState,
    ProxyMode,
    ProxyModePre70,
    SNMPSecurityLevel,
    SNMPAuthProtocol,
    SNMPPrivProtocol,
    TriggerPriority,
    UsergroupPermission,
    UserRole,
    ValueType,
]


@pytest.mark.parametrize("enum", APISTR_ENUMS)
def test_apistrenum(enum: type[APIStrEnum]) -> None:
    assert enum.__members__
    members = list(enum)
    assert members
    for member in members:
        # Narrow down type
        assert isinstance(member, enum)
        assert isinstance(member.value, str)
        assert isinstance(member.value, APIStr)

        # Methods
        assert member.as_api_value() is not None
        assert member.__choice_name__ is not None
        assert member.__fmt_name__()  # non-empty string

        # Test instantiation
        assert enum(member) == member
        assert enum(member.value) == member
        # NOTE: to support multiple versions of the Zabbix API, some enums
        # have multiple members with the same API value, and we cannot blindly
        # test instantiation with the API value for those specific enums.
        # To not overcomplicate things, we just skip that test for the affected members
        if member in (SNMPPrivProtocol.AES, SNMPPrivProtocol.AES128):
            continue
        assert enum(member.as_api_value()) == member
        assert enum(member.value.api_value) == member

        # Test string_from_value
        for value in [member.as_api_value(), member.value]:
            s = enum.string_from_value(value)
            if member.name != "UNKNOWN":
                assert "Unknown" not in s, f"{value} can't be converted to string"
            assert s == member.as_status()


def test_interfacetype() -> None:
    # We already test normal behavior in test_apistrenum, check special behavior here
    for member in InterfaceType:
        assert member.value.metadata
        assert member.get_port()
    assert InterfaceType.AGENT.get_port() == "10050"
    assert InterfaceType.SNMP.get_port() == "161"
    assert InterfaceType.IPMI.get_port() == "623"
    assert InterfaceType.JMX.get_port() == "12345"


def test_exportformat() -> None:
    assert ExportFormat.PHP not in ExportFormat.get_importables()
    assert ExportFormat("json") == ExportFormat("JSON")
    assert ExportFormat("xml") == ExportFormat("XML")
    assert ExportFormat("yaml") == ExportFormat("YAML")
    assert ExportFormat.JSON in ExportFormat.get_importables()
    assert ExportFormat.XML in ExportFormat.get_importables()
    assert ExportFormat.YAML in ExportFormat.get_importables()