File: test_wlan.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 (150 lines) | stat: -rw-r--r-- 4,018 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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
"""Tests for the wlan module."""

from unittest.mock import AsyncMock, MagicMock, patch

import pytest

from asusrouter.modules.wlan import (
    MAP_GWLAN,
    MAP_WLAN,
    AsusWLAN,
    Wlan,
    _nvram_request,
    gwlan_nvram_request,
    set_state,
    wlan_nvram_request,
)


@pytest.mark.parametrize(
    ("wlan", "guest", "expected_request"),
    [
        # No wlan specified
        (None, False, None),
        ([], False, None),
        (None, True, None),
        ([], True, None),
        # WLAN
        ([Wlan.FREQ_2G], False, "wl0_auth_mode_x,wl0_bw"),
        ([Wlan.FREQ_5G], False, "wl1_auth_mode_x,wl1_bw"),
        ([Wlan.FREQ_6G], False, "wl3_auth_mode_x,wl3_bw"),
        # GWLAN
        (
            [Wlan.FREQ_2G],
            True,
            "wl0.1_auth_mode_x,wl0.1_bw",
        ),
        (
            [Wlan.FREQ_5G],
            True,
            "wl1.1_auth_mode_x,wl1.1_bw",
        ),
        (
            [Wlan.FREQ_6G],
            True,
            "wl3.1_auth_mode_x,wl3.1_bw",
        ),
    ],
)
def test_nvram_request(
    wlan: list[Wlan] | None, guest: bool, expected_request: str | None
) -> None:
    """Test _nvram_request."""

    with (
        patch("asusrouter.modules.wlan.nvram", return_value=expected_request),
        patch(
            "asusrouter.modules.wlan.MAP_WLAN",
            new_callable=lambda: [("wl{}_auth_mode_x"), ("wl{}_bw")],
        ),
    ):
        assert _nvram_request(wlan, MAP_WLAN, guest) == expected_request


def test_wlan_nvram_request() -> None:
    """Test wlan_nvram_request."""

    mock = MagicMock()
    with patch("asusrouter.modules.wlan._nvram_request", new=mock):
        wlan_nvram_request([Wlan.FREQ_2G])
        mock.assert_called_with([Wlan.FREQ_2G], MAP_WLAN)


def test_gwlan_nvram_request() -> None:
    """Test gwlan_nvram_request."""

    mock = MagicMock()
    with patch("asusrouter.modules.wlan._nvram_request", new=mock):
        gwlan_nvram_request([Wlan.FREQ_2G])
        mock.assert_called_with([Wlan.FREQ_2G], MAP_GWLAN, guest=True)


@pytest.mark.asyncio
@pytest.mark.parametrize(
    (
        "state",
        "api_type",
        "api_id",
        "expected_service",
        "expected_arguments",
        "expected_result",
    ),
    [
        # WLAN
        (AsusWLAN.ON, "wlan", 0, "restart_wireless", {"wl0_radio": 1}, True),
        (AsusWLAN.OFF, "wlan", 0, "restart_wireless", {"wl0_radio": 0}, True),
        # GWLAN
        (
            AsusWLAN.ON,
            "gwlan",
            0,
            "restart_wireless;restart_firewall",
            {"wl0_bss_enabled": 1, "wl0_expire": 0},
            True,
        ),
        (
            AsusWLAN.OFF,
            "gwlan",
            0,
            "restart_wireless;restart_firewall",
            {"wl0_bss_enabled": 0},
            True,
        ),
        # Invalid type
        (AsusWLAN.ON, "invalid", "invalid", None, None, False),
        # Missing api_type
        (AsusWLAN.ON, None, 0, None, None, False),
        # Missing api_id
        (AsusWLAN.ON, "wlan", None, None, None, False),
        # Missing both
        (AsusWLAN.ON, None, None, None, None, False),
    ],
)
async def test_set_state(  # noqa: PLR0913
    state: AsusWLAN,
    api_type: str | None,
    api_id: int | None,
    expected_service: str | None,
    expected_arguments: dict[str, int | None] | None,
    expected_result: bool,
) -> None:
    """Test set_state."""

    # Mock the callback function to return True
    callback = AsyncMock(return_value=True)

    result = await set_state(callback, state, api_type=api_type, api_id=api_id)

    # Check if the callback was called with the expected arguments
    if expected_service:
        callback.assert_called_once_with(
            expected_service,
            arguments=expected_arguments,
            apply=True,
            expect_modify=False,
        )
    else:
        callback.assert_not_called()

    # Check if the function returned the expected result
    assert result == expected_result