File: test_security.py

package info (click to toggle)
python-asusrouter 1.21.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,856 kB
  • sloc: python: 20,497; makefile: 3
file content (121 lines) | stat: -rw-r--r-- 3,904 bytes parent folder | download
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
"""Tests for the security tools."""

from typing import Any

import pytest

from asusrouter.const import UNKNOWN_MEMBER
from asusrouter.tools.security import ARSecurityLevel


class TestARSecurityLevel:
    """Tests for the ARSecurityLevel enum."""

    @pytest.mark.parametrize(
        ("name", "value"),
        [
            ("UNKNOWN", UNKNOWN_MEMBER),
            ("STRICT", 0),
            ("DEFAULT", 1),
            ("SANITIZED", 5),
            ("UNSAFE", 9),
        ],
    )
    def test_enum_members_and_values(self, name: str, value: int) -> None:
        """Enum members exist and have the expected integer values."""

        member = getattr(ARSecurityLevel, name)
        assert member.name == name
        assert member.value == value

    def test_ordering_comparisons(self) -> None:
        """Numeric ordering between levels behaves as expected."""

        assert ARSecurityLevel.STRICT < ARSecurityLevel.DEFAULT
        assert ARSecurityLevel.DEFAULT < ARSecurityLevel.SANITIZED
        assert ARSecurityLevel.SANITIZED < ARSecurityLevel.UNSAFE

    def test_int_cast_and_lookup(self) -> None:
        """Casting from int and name lookup return the correct members."""

        assert ARSecurityLevel(1) is ARSecurityLevel.DEFAULT
        assert ARSecurityLevel["SANITIZED"] is ARSecurityLevel.SANITIZED

    def test_unique_values(self) -> None:
        """Ensure all enum values are unique (mirrors @unique contract)."""

        values = [member.value for member in ARSecurityLevel]
        assert len(values) == len(set(values))

    @pytest.mark.parametrize(
        ("value", "expected"),
        [
            # Real level already
            (ARSecurityLevel.DEFAULT, ARSecurityLevel.DEFAULT),
            # Int-compatible
            (1, ARSecurityLevel.DEFAULT),
            ("1", ARSecurityLevel.DEFAULT),
            ("5.0", ARSecurityLevel.SANITIZED),
            # Level which does not exist
            (861, ARSecurityLevel.UNKNOWN),
            # Name-compatible
            ("sanitized", ARSecurityLevel.SANITIZED),
            ("SANITIZED", ARSecurityLevel.SANITIZED),
            # Other
            (None, ARSecurityLevel.UNKNOWN),
            ("unknown-name", ARSecurityLevel.UNKNOWN),
            (object(), ARSecurityLevel.UNKNOWN),
        ],
    )
    def test_from_value(self, value: Any, expected: ARSecurityLevel) -> None:
        """Test from_value method."""

        assert ARSecurityLevel.from_value(value) is expected

    @pytest.mark.parametrize(
        ("level", "result"),
        [
            (ARSecurityLevel.STRICT, True),
            (ARSecurityLevel.DEFAULT, True),
            (ARSecurityLevel.SANITIZED, True),
            (ARSecurityLevel.UNSAFE, True),
        ],
    )
    def test_at_least_strict(
        self, level: ARSecurityLevel, result: bool
    ) -> None:
        """Test at_least_strict method."""

        assert ARSecurityLevel.at_least_strict(level) is result

    @pytest.mark.parametrize(
        ("level", "result"),
        [
            (ARSecurityLevel.STRICT, False),
            (ARSecurityLevel.DEFAULT, True),
            (ARSecurityLevel.SANITIZED, True),
            (ARSecurityLevel.UNSAFE, True),
        ],
    )
    def test_at_least_default(
        self, level: ARSecurityLevel, result: bool
    ) -> None:
        """Test at_least_default method."""

        assert ARSecurityLevel.at_least_default(level) is result

    @pytest.mark.parametrize(
        ("level", "result"),
        [
            (ARSecurityLevel.STRICT, False),
            (ARSecurityLevel.DEFAULT, False),
            (ARSecurityLevel.SANITIZED, True),
            (ARSecurityLevel.UNSAFE, True),
        ],
    )
    def test_at_least_sanitized(
        self, level: ARSecurityLevel, result: bool
    ) -> None:
        """Test at_least_sanitized method."""

        assert ARSecurityLevel.at_least_sanitized(level) is result