diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 0000000..4621d56 --- /dev/null +++ b/.coveragerc @@ -0,0 +1,2 @@ +[run] +source = custom_components/miwifi diff --git a/.gitignore b/.gitignore index 7f6b817..6b686c4 100644 --- a/.gitignore +++ b/.gitignore @@ -129,3 +129,4 @@ dmypy.json .pyre/ .DS_Store +.idea diff --git a/custom_components/__init__.py b/custom_components/__init__.py new file mode 100644 index 0000000..87d1a3c --- /dev/null +++ b/custom_components/__init__.py @@ -0,0 +1 @@ +"""MiWifi custom integration.""" diff --git a/custom_components/miwifi/luci.py b/custom_components/miwifi/luci.py index 9b5446d..ce468f6 100644 --- a/custom_components/miwifi/luci.py +++ b/custom_components/miwifi/luci.py @@ -162,7 +162,7 @@ async def get( self._debug("Successful request", _url, response.content, path) _data: dict = json.loads(response.content) - except (HTTPError, ValueError, TypeError) as _e: + except (HTTPError, ValueError, TypeError, json.JSONDecodeError) as _e: self._debug("Connection error", _url, _e, path) raise LuciConnectionException("Connection error") from _e diff --git a/custom_components/miwifi/updater.py b/custom_components/miwifi/updater.py index d33e393..83fbbc5 100644 --- a/custom_components/miwifi/updater.py +++ b/custom_components/miwifi/updater.py @@ -238,12 +238,14 @@ async def update(self, retry: int = 1) -> dict: await self._async_load_manufacturers() + self.code = codes.OK + _is_before_reauthorization: bool = self._is_reauthorization _err: LuciException | None = None try: if self._is_reauthorization or self._is_only_login or self._is_first_update: - if self._is_first_update: + if self._is_first_update and retry == 1: await self.luci.logout() await asyncio.sleep(DEFAULT_CALL_DELAY) @@ -263,8 +265,6 @@ async def update(self, retry: int = 1) -> dict: self._is_reauthorization = True self.code = codes.FORBIDDEN else: - self.code = codes.OK - self._is_reauthorization = False if self._is_first_update: @@ -279,7 +279,11 @@ async def update(self, retry: int = 1) -> dict: ): self.data[ATTR_STATE] = True - if self._is_first_update and not self.data[ATTR_STATE]: + if ( + not self._is_only_login + and self._is_first_update + and not self.data[ATTR_STATE] + ): if retry > DEFAULT_RETRY and _err is not None: raise _err @@ -403,6 +407,8 @@ async def _async_prepare_init(self, data: dict) -> None: self.code = codes.CONFLICT + return + data[ATTR_CAMERA_IMAGE] = await self.luci.image(response["hardware"]) return @@ -467,8 +473,6 @@ async def _async_prepare_rom_update(self, data: dict) -> None: if ATTR_UPDATE_CURRENT_VERSION not in data: return - response: dict = await self.luci.rom_update() - _rom_info: dict = { ATTR_UPDATE_CURRENT_VERSION: data[ATTR_UPDATE_CURRENT_VERSION], ATTR_UPDATE_LATEST_VERSION: data[ATTR_UPDATE_CURRENT_VERSION], @@ -477,7 +481,16 @@ async def _async_prepare_rom_update(self, data: dict) -> None: + f" ({data.get(ATTR_DEVICE_NAME, DEFAULT_NAME)})", } - if "needUpdate" not in response or response["needUpdate"] != 1: + try: + response: dict = await self.luci.rom_update() + except LuciException: + response = {} + + if ( + not isinstance(response, dict) + or "needUpdate" not in response + or response["needUpdate"] != 1 + ): data[ATTR_UPDATE_FIRMWARE] = _rom_info return @@ -549,7 +562,7 @@ async def _async_prepare_wifi(self, data: dict) -> None: response: dict = await self.luci.wifi_detail_all() if "bsd" in response: - data[ATTR_BINARY_SENSOR_DUAL_BAND] = response["bsd"] == 1 + data[ATTR_BINARY_SENSOR_DUAL_BAND] = int(response["bsd"]) == 1 else: data[ATTR_BINARY_SENSOR_DUAL_BAND] = False @@ -587,7 +600,7 @@ async def _async_prepare_wifi(self, data: dict) -> None: for data_field, field in ATTR_WIFI_DATA_FIELDS.items(): if "channelInfo" in data_field and "channelInfo" in wifi: - data_field = data_field.replace("channelInfo", "") + data_field = data_field.replace("channelInfo.", "") if data_field in wifi["channelInfo"]: wifi_data[field] = wifi["channelInfo"][data_field] diff --git a/requirements_test.txt b/requirements_test.txt new file mode 100644 index 0000000..0f6df02 --- /dev/null +++ b/requirements_test.txt @@ -0,0 +1,10 @@ +aiohttp_cors==0.7.0 +aiodiscover==1.4.8 +scapy==2.4.5 +async_upnp_client==0.27.0 + +codecov==2.1.12 +coverage==6.3.2 +pytest==7.1.1 +pytest-cov==2.12.1 +pytest-homeassistant-custom-component==0.8.11 \ No newline at end of file diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..722f696 --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1 @@ +"""Tests for the miwifi component.""" diff --git a/tests/fixtures/avaliable_channels_2g_data.json b/tests/fixtures/avaliable_channels_2g_data.json new file mode 100644 index 0000000..8282dd4 --- /dev/null +++ b/tests/fixtures/avaliable_channels_2g_data.json @@ -0,0 +1,103 @@ +{ + "list": [ + { + "c": "0", + "b": [ + "20", + "40" + ] + }, + { + "c": "1", + "b": [ + "20", + "40" + ] + }, + { + "c": "2", + "b": [ + "20", + "40" + ] + }, + { + "c": "3", + "b": [ + "20", + "40" + ] + }, + { + "c": "4", + "b": [ + "20", + "40" + ] + }, + { + "c": "5", + "b": [ + "20", + "40" + ] + }, + { + "c": "6", + "b": [ + "20", + "40" + ] + }, + { + "c": "7", + "b": [ + "20", + "40" + ] + }, + { + "c": "8", + "b": [ + "20", + "40" + ] + }, + { + "c": "9", + "b": [ + "20", + "40" + ] + }, + { + "c": "10", + "b": [ + "20", + "40" + ] + }, + { + "c": "11", + "b": [ + "20", + "40" + ] + }, + { + "c": "12", + "b": [ + "20", + "40" + ] + }, + { + "c": "13", + "b": [ + "20", + "40" + ] + } + ], + "code": 0 +} \ No newline at end of file diff --git a/tests/fixtures/avaliable_channels_5g_data.json b/tests/fixtures/avaliable_channels_5g_data.json new file mode 100644 index 0000000..6f90382 --- /dev/null +++ b/tests/fixtures/avaliable_channels_5g_data.json @@ -0,0 +1,76 @@ +{ + "list": [ + { + "c": "0", + "b": [ + "20", + "40" + ] + }, + { + "c": "36", + "b": [ + "20", + "40", + "80" + ] + }, + { + "c": "40", + "b": [ + "20", + "40", + "80" + ] + }, + { + "c": "44", + "b": [ + "20", + "40", + "80" + ] + }, + { + "c": "48", + "b": [ + "20", + "40", + "80" + ] + }, + { + "c": "149", + "b": [ + "20", + "40", + "80" + ] + }, + { + "c": "153", + "b": [ + "20", + "40", + "80" + ] + }, + { + "c": "157", + "b": [ + "20", + "40", + "80" + ] + }, + { + "c": "161", + "b": [ + "20", + "40", + "80" + ] + } + ], + "code": 0 +} \ No newline at end of file diff --git a/tests/fixtures/device_list_data.json b/tests/fixtures/device_list_data.json new file mode 100644 index 0000000..a048a5f --- /dev/null +++ b/tests/fixtures/device_list_data.json @@ -0,0 +1,102 @@ +{ + "mac": "00:00:00:00:00:00", + "list": [ + { + "mac": "00:00:00:00:00:01", + "oname": "Device 1", + "isap": 0, + "parent": "", + "authority": { + "wan": 1, + "pridisk": 0, + "admin": 1, + "lan": 1 + }, + "push": 0, + "online": 1, + "name": "Device 1", + "times": 0, + "ip": [ + { + "downspeed": "0", + "online": "29101", + "active": 1, + "upspeed": "0", + "ip": "192.168.31.2" + } + ], + "statistics": { + "downspeed": "0", + "online": "29101", + "upspeed": "0" + }, + "icon": "", + "type": 1 + }, + { + "mac": "00:00:00:00:00:02", + "oname": "Device 2", + "isap": 0, + "parent": "", + "authority": { + "wan": 1, + "pridisk": 0, + "admin": 1, + "lan": 1 + }, + "push": 0, + "online": 1, + "name": "Device 2", + "times": 0, + "ip": [ + { + "downspeed": "0", + "online": "29101", + "active": 1, + "upspeed": "0", + "ip": "192.168.31.3" + } + ], + "statistics": { + "downspeed": "0", + "online": "29101", + "upspeed": "0" + }, + "icon": "", + "type": 2 + }, + { + "mac": "00:00:00:00:00:03", + "oname": "Device 3", + "isap": 0, + "parent": "", + "authority": { + "wan": 1, + "pridisk": 0, + "admin": 1, + "lan": 1 + }, + "push": 0, + "online": 1, + "name": "Device 3", + "times": 0, + "ip": [ + { + "downspeed": "0", + "online": "29101", + "active": 1, + "upspeed": "0", + "ip": "192.168.31.4" + } + ], + "statistics": { + "downspeed": "0", + "online": "29101", + "upspeed": "0" + }, + "icon": "", + "type": 0 + } + ], + "code": 0 +} \ No newline at end of file diff --git a/tests/fixtures/image_data.txt b/tests/fixtures/image_data.txt new file mode 100644 index 0000000..1d08178 --- /dev/null +++ b/tests/fixtures/image_data.txt @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/tests/fixtures/init_info_data.json b/tests/fixtures/init_info_data.json new file mode 100644 index 0000000..4a80468 --- /dev/null +++ b/tests/fixtures/init_info_data.json @@ -0,0 +1,17 @@ +{ + "romversion": "3.0.34", + "countrycode": "CN", + "code": 0, + "id": "**REDACTED**", + "routername": "XIAOMI RA67", + "inited": 1, + "connect": 0, + "routerId": "**REDACTED**", + "model": "xiaomi.router.ra67", + "hardware": "RA67", + "bound": 0, + "language": "cn", + "modules": { + "replacement_assistant": "1" + } +} \ No newline at end of file diff --git a/tests/fixtures/init_info_undefined_router_data.json b/tests/fixtures/init_info_undefined_router_data.json new file mode 100644 index 0000000..a449732 --- /dev/null +++ b/tests/fixtures/init_info_undefined_router_data.json @@ -0,0 +1,17 @@ +{ + "romversion": "1.0.0", + "countrycode": "CN", + "code": 0, + "id": "**REDACTED**", + "routername": "XIAOMI NEW", + "inited": 1, + "connect": 0, + "routerId": "**REDACTED**", + "model": "xiaomi.router.ra999", + "hardware": "RA999", + "bound": 0, + "language": "cn", + "modules": { + "replacement_assistant": "1" + } +} \ No newline at end of file diff --git a/tests/fixtures/init_info_unsupported_methods_data.json b/tests/fixtures/init_info_unsupported_methods_data.json new file mode 100644 index 0000000..2ce3574 --- /dev/null +++ b/tests/fixtures/init_info_unsupported_methods_data.json @@ -0,0 +1,17 @@ +{ + "romversion": "1.0.0", + "countrycode": "CN", + "code": 0, + "id": "**REDACTED**", + "routername": "XIAOMI R1D", + "inited": 1, + "connect": 0, + "routerId": "**REDACTED**", + "model": "xiaomi.router.r1d", + "hardware": "R1D", + "bound": 0, + "language": "cn", + "modules": { + "replacement_assistant": "1" + } +} \ No newline at end of file diff --git a/tests/fixtures/init_info_without_hardware_data.json b/tests/fixtures/init_info_without_hardware_data.json new file mode 100644 index 0000000..e2e6dd8 --- /dev/null +++ b/tests/fixtures/init_info_without_hardware_data.json @@ -0,0 +1,16 @@ +{ + "romversion": "3.0.34", + "countrycode": "CN", + "code": 0, + "id": "**REDACTED**", + "routername": "XIAOMI RA67", + "inited": 1, + "connect": 0, + "routerId": "**REDACTED**", + "model": "xiaomi.router.ra67", + "bound": 0, + "language": "cn", + "modules": { + "replacement_assistant": "1" + } +} \ No newline at end of file diff --git a/tests/fixtures/init_info_without_model_data.json b/tests/fixtures/init_info_without_model_data.json new file mode 100644 index 0000000..66c8c6e --- /dev/null +++ b/tests/fixtures/init_info_without_model_data.json @@ -0,0 +1,16 @@ +{ + "romversion": "3.0.34", + "countrycode": "CN", + "code": 0, + "id": "**REDACTED**", + "routername": "XIAOMI RA67", + "inited": 1, + "connect": 0, + "routerId": "**REDACTED**", + "hardware": "RA67", + "bound": 0, + "language": "cn", + "modules": { + "replacement_assistant": "1" + } +} \ No newline at end of file diff --git a/tests/fixtures/led_data.json b/tests/fixtures/led_data.json new file mode 100644 index 0000000..2a32e30 --- /dev/null +++ b/tests/fixtures/led_data.json @@ -0,0 +1,4 @@ +{ + "status": 1, + "code": 0 +} \ No newline at end of file diff --git a/tests/fixtures/login_data.json b/tests/fixtures/login_data.json new file mode 100644 index 0000000..c7cffc3 --- /dev/null +++ b/tests/fixtures/login_data.json @@ -0,0 +1,5 @@ +{ + "url": "**REDACTED**", + "token": "**REDACTED**", + "code": 0 +} \ No newline at end of file diff --git a/tests/fixtures/mode_data.json b/tests/fixtures/mode_data.json new file mode 100644 index 0000000..d61f5db --- /dev/null +++ b/tests/fixtures/mode_data.json @@ -0,0 +1,4 @@ +{ + "mode": 0, + "code": 0 +} \ No newline at end of file diff --git a/tests/fixtures/rom_update_data.json b/tests/fixtures/rom_update_data.json new file mode 100644 index 0000000..223a86c --- /dev/null +++ b/tests/fixtures/rom_update_data.json @@ -0,0 +1,10 @@ +{ + "needUpdate": 0, + "code": 0, + "status": { + "status": 0, + "percent": 0 + }, + "changeLog": "", + "version": "3.0.34" +} \ No newline at end of file diff --git a/tests/fixtures/rom_update_need_update_data.json b/tests/fixtures/rom_update_need_update_data.json new file mode 100644 index 0000000..e69de29 diff --git a/tests/fixtures/status_data.json b/tests/fixtures/status_data.json new file mode 100644 index 0000000..4f81443 --- /dev/null +++ b/tests/fixtures/status_data.json @@ -0,0 +1,52 @@ +{ + "dev": [ + { + "mac": "00:00:00:00:00:00", + "maxdownloadspeed": "30541116", + "isap": 0, + "upload": "1128085312", + "upspeed": "11", + "downspeed": "0", + "online": "389", + "devname": "Phone", + "maxuploadspeed": "13220423", + "download": "2382101445" + } + ], + "code": 0, + "mem": { + "usage": 0.53, + "total": "256MB", + "hz": "1333MHz", + "type": "DDR3" + }, + "temperature": 0, + "count": { + "all_without_mash": 41, + "online": 23, + "all": 42, + "online_without_mash": 23 + }, + "hardware": { + "mac": "00:00:00:00:00:00", + "platform": "RA67", + "version": "3.0.34", + "channel": "release", + "sn": "29543/F0SW88385" + }, + "upTime": "29186.96", + "cpu": { + "core": 4, + "hz": "716MHz", + "load": 0 + }, + "wan": { + "downspeed": "225064", + "maxdownloadspeed": "30541558", + "devname": "nil", + "upload": "1314095390", + "upspeed": "19276", + "maxuploadspeed": "13221942", + "download": "3855068297" + } +} \ No newline at end of file diff --git a/tests/fixtures/status_without_version_data.json b/tests/fixtures/status_without_version_data.json new file mode 100644 index 0000000..2c4fbe5 --- /dev/null +++ b/tests/fixtures/status_without_version_data.json @@ -0,0 +1,51 @@ +{ + "dev": [ + { + "mac": "00:00:00:00:00:00", + "maxdownloadspeed": "30541116", + "isap": 0, + "upload": "1128085312", + "upspeed": "11", + "downspeed": "0", + "online": "389", + "devname": "Phone", + "maxuploadspeed": "13220423", + "download": "2382101445" + } + ], + "code": 0, + "mem": { + "usage": 0.53, + "total": "256MB", + "hz": "1333MHz", + "type": "DDR3" + }, + "temperature": 0, + "count": { + "all_without_mash": 41, + "online": 23, + "all": 42, + "online_without_mash": 23 + }, + "hardware": { + "mac": "00:00:00:00:00:00", + "platform": "RA67", + "channel": "release", + "sn": "29543/F0SW88385" + }, + "upTime": "29186.96", + "cpu": { + "core": 4, + "hz": "716MHz", + "load": 0 + }, + "wan": { + "downspeed": "225064", + "maxdownloadspeed": "30541558", + "devname": "nil", + "upload": "1314095390", + "upspeed": "19276", + "maxuploadspeed": "13221942", + "download": "3855068297" + } +} \ No newline at end of file diff --git a/tests/fixtures/wan_info_data.json b/tests/fixtures/wan_info_data.json new file mode 100644 index 0000000..c62e127 --- /dev/null +++ b/tests/fixtures/wan_info_data.json @@ -0,0 +1,29 @@ +{ + "info": { + "mac": "9C:9D:7E:30:95:F0", + "mtu": "1500", + "details": { + "wanType": "static", + "ifname": "eth4", + "ipaddr": "192.168.15.2", + "gateway": "192.168.15.1", + "netmask": "255.255.255.0", + "dns": [ + "192.168.15.1", + "8.8.8.8" + ] + }, + "gateWay": "**REDACTED**", + "dnsAddrs1": "8.8.8.8", + "status": 1, + "uptime": 29144, + "dnsAddrs": "192.168.15.1", + "ipv6_info": { + "wanType": "off" + }, + "ipv6_show": 1, + "link": 1, + "ipv4": "**REDACTED**" + }, + "code": 0 +} \ No newline at end of file diff --git a/tests/fixtures/wifi_connect_devices_data.json b/tests/fixtures/wifi_connect_devices_data.json new file mode 100644 index 0000000..063d8de --- /dev/null +++ b/tests/fixtures/wifi_connect_devices_data.json @@ -0,0 +1,15 @@ +{ + "list": [ + { + "mac": "00:00:00:00:00:01", + "wifiIndex": 1, + "signal": 100 + }, + { + "mac": "00:00:00:00:00:02", + "wifiIndex": 2, + "signal": 100 + } + ], + "code": 0 +} \ No newline at end of file diff --git a/tests/fixtures/wifi_detail_all_data.json b/tests/fixtures/wifi_detail_all_data.json new file mode 100644 index 0000000..300a695 --- /dev/null +++ b/tests/fixtures/wifi_detail_all_data.json @@ -0,0 +1,58 @@ +{ + "bsd": 0, + "info": [ + { + "ifname": "wl1", + "channelInfo": { + "bandwidth": "20", + "bandList": [ + "20", + "40" + ], + "channel": 2 + }, + "encryption": "psk2", + "iftype": 1, + "bandwidth": "20", + "status": "1", + "mode": "Master", + "bsd": "1", + "ssid": "**REDACTED**", + "device": "wifi1.network1", + "ax": "1", + "hidden": "0", + "password": "**REDACTED**", + "channel": "2", + "txpwr": "max", + "txbf": "3", + "signal": -99 + }, + { + "ifname": "wl0", + "channelInfo": { + "bandwidth": "0", + "bandList": [ + "20", + "40" + ], + "channel": 149 + }, + "encryption": "psk2", + "iftype": 2, + "bandwidth": "0", + "status": "1", + "mode": "Master", + "bsd": "1", + "ssid": "**REDACTED**", + "device": "wifi0.network1", + "ax": "1", + "hidden": "0", + "password": "**REDACTED**", + "channel": "0", + "txpwr": "max", + "txbf": "3", + "signal": -95 + } + ], + "code": 0 +} \ No newline at end of file diff --git a/tests/ra67/__init__.py b/tests/ra67/__init__.py new file mode 100644 index 0000000..945e8ab --- /dev/null +++ b/tests/ra67/__init__.py @@ -0,0 +1 @@ +"""Tests for the miwifi component for ra67.""" diff --git a/tests/ra67/fixtures/avaliable_channels_2g_data.json b/tests/ra67/fixtures/avaliable_channels_2g_data.json new file mode 100644 index 0000000..8282dd4 --- /dev/null +++ b/tests/ra67/fixtures/avaliable_channels_2g_data.json @@ -0,0 +1,103 @@ +{ + "list": [ + { + "c": "0", + "b": [ + "20", + "40" + ] + }, + { + "c": "1", + "b": [ + "20", + "40" + ] + }, + { + "c": "2", + "b": [ + "20", + "40" + ] + }, + { + "c": "3", + "b": [ + "20", + "40" + ] + }, + { + "c": "4", + "b": [ + "20", + "40" + ] + }, + { + "c": "5", + "b": [ + "20", + "40" + ] + }, + { + "c": "6", + "b": [ + "20", + "40" + ] + }, + { + "c": "7", + "b": [ + "20", + "40" + ] + }, + { + "c": "8", + "b": [ + "20", + "40" + ] + }, + { + "c": "9", + "b": [ + "20", + "40" + ] + }, + { + "c": "10", + "b": [ + "20", + "40" + ] + }, + { + "c": "11", + "b": [ + "20", + "40" + ] + }, + { + "c": "12", + "b": [ + "20", + "40" + ] + }, + { + "c": "13", + "b": [ + "20", + "40" + ] + } + ], + "code": 0 +} \ No newline at end of file diff --git a/tests/ra67/fixtures/avaliable_channels_5g_data.json b/tests/ra67/fixtures/avaliable_channels_5g_data.json new file mode 100644 index 0000000..6f90382 --- /dev/null +++ b/tests/ra67/fixtures/avaliable_channels_5g_data.json @@ -0,0 +1,76 @@ +{ + "list": [ + { + "c": "0", + "b": [ + "20", + "40" + ] + }, + { + "c": "36", + "b": [ + "20", + "40", + "80" + ] + }, + { + "c": "40", + "b": [ + "20", + "40", + "80" + ] + }, + { + "c": "44", + "b": [ + "20", + "40", + "80" + ] + }, + { + "c": "48", + "b": [ + "20", + "40", + "80" + ] + }, + { + "c": "149", + "b": [ + "20", + "40", + "80" + ] + }, + { + "c": "153", + "b": [ + "20", + "40", + "80" + ] + }, + { + "c": "157", + "b": [ + "20", + "40", + "80" + ] + }, + { + "c": "161", + "b": [ + "20", + "40", + "80" + ] + } + ], + "code": 0 +} \ No newline at end of file diff --git a/tests/ra67/fixtures/device_list_data.json b/tests/ra67/fixtures/device_list_data.json new file mode 100644 index 0000000..a048a5f --- /dev/null +++ b/tests/ra67/fixtures/device_list_data.json @@ -0,0 +1,102 @@ +{ + "mac": "00:00:00:00:00:00", + "list": [ + { + "mac": "00:00:00:00:00:01", + "oname": "Device 1", + "isap": 0, + "parent": "", + "authority": { + "wan": 1, + "pridisk": 0, + "admin": 1, + "lan": 1 + }, + "push": 0, + "online": 1, + "name": "Device 1", + "times": 0, + "ip": [ + { + "downspeed": "0", + "online": "29101", + "active": 1, + "upspeed": "0", + "ip": "192.168.31.2" + } + ], + "statistics": { + "downspeed": "0", + "online": "29101", + "upspeed": "0" + }, + "icon": "", + "type": 1 + }, + { + "mac": "00:00:00:00:00:02", + "oname": "Device 2", + "isap": 0, + "parent": "", + "authority": { + "wan": 1, + "pridisk": 0, + "admin": 1, + "lan": 1 + }, + "push": 0, + "online": 1, + "name": "Device 2", + "times": 0, + "ip": [ + { + "downspeed": "0", + "online": "29101", + "active": 1, + "upspeed": "0", + "ip": "192.168.31.3" + } + ], + "statistics": { + "downspeed": "0", + "online": "29101", + "upspeed": "0" + }, + "icon": "", + "type": 2 + }, + { + "mac": "00:00:00:00:00:03", + "oname": "Device 3", + "isap": 0, + "parent": "", + "authority": { + "wan": 1, + "pridisk": 0, + "admin": 1, + "lan": 1 + }, + "push": 0, + "online": 1, + "name": "Device 3", + "times": 0, + "ip": [ + { + "downspeed": "0", + "online": "29101", + "active": 1, + "upspeed": "0", + "ip": "192.168.31.4" + } + ], + "statistics": { + "downspeed": "0", + "online": "29101", + "upspeed": "0" + }, + "icon": "", + "type": 0 + } + ], + "code": 0 +} \ No newline at end of file diff --git a/tests/ra67/fixtures/image_data.txt b/tests/ra67/fixtures/image_data.txt new file mode 100644 index 0000000..1d08178 --- /dev/null +++ b/tests/ra67/fixtures/image_data.txt @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/tests/ra67/fixtures/init_info_data.json b/tests/ra67/fixtures/init_info_data.json new file mode 100644 index 0000000..4a80468 --- /dev/null +++ b/tests/ra67/fixtures/init_info_data.json @@ -0,0 +1,17 @@ +{ + "romversion": "3.0.34", + "countrycode": "CN", + "code": 0, + "id": "**REDACTED**", + "routername": "XIAOMI RA67", + "inited": 1, + "connect": 0, + "routerId": "**REDACTED**", + "model": "xiaomi.router.ra67", + "hardware": "RA67", + "bound": 0, + "language": "cn", + "modules": { + "replacement_assistant": "1" + } +} \ No newline at end of file diff --git a/tests/ra67/fixtures/led_data.json b/tests/ra67/fixtures/led_data.json new file mode 100644 index 0000000..2a32e30 --- /dev/null +++ b/tests/ra67/fixtures/led_data.json @@ -0,0 +1,4 @@ +{ + "status": 1, + "code": 0 +} \ No newline at end of file diff --git a/tests/ra67/fixtures/login_data.json b/tests/ra67/fixtures/login_data.json new file mode 100644 index 0000000..c7cffc3 --- /dev/null +++ b/tests/ra67/fixtures/login_data.json @@ -0,0 +1,5 @@ +{ + "url": "**REDACTED**", + "token": "**REDACTED**", + "code": 0 +} \ No newline at end of file diff --git a/tests/ra67/fixtures/mode_data.json b/tests/ra67/fixtures/mode_data.json new file mode 100644 index 0000000..d61f5db --- /dev/null +++ b/tests/ra67/fixtures/mode_data.json @@ -0,0 +1,4 @@ +{ + "mode": 0, + "code": 0 +} \ No newline at end of file diff --git a/tests/ra67/fixtures/rom_update_data.json b/tests/ra67/fixtures/rom_update_data.json new file mode 100644 index 0000000..223a86c --- /dev/null +++ b/tests/ra67/fixtures/rom_update_data.json @@ -0,0 +1,10 @@ +{ + "needUpdate": 0, + "code": 0, + "status": { + "status": 0, + "percent": 0 + }, + "changeLog": "", + "version": "3.0.34" +} \ No newline at end of file diff --git a/tests/ra67/fixtures/status_data.json b/tests/ra67/fixtures/status_data.json new file mode 100644 index 0000000..4f81443 --- /dev/null +++ b/tests/ra67/fixtures/status_data.json @@ -0,0 +1,52 @@ +{ + "dev": [ + { + "mac": "00:00:00:00:00:00", + "maxdownloadspeed": "30541116", + "isap": 0, + "upload": "1128085312", + "upspeed": "11", + "downspeed": "0", + "online": "389", + "devname": "Phone", + "maxuploadspeed": "13220423", + "download": "2382101445" + } + ], + "code": 0, + "mem": { + "usage": 0.53, + "total": "256MB", + "hz": "1333MHz", + "type": "DDR3" + }, + "temperature": 0, + "count": { + "all_without_mash": 41, + "online": 23, + "all": 42, + "online_without_mash": 23 + }, + "hardware": { + "mac": "00:00:00:00:00:00", + "platform": "RA67", + "version": "3.0.34", + "channel": "release", + "sn": "29543/F0SW88385" + }, + "upTime": "29186.96", + "cpu": { + "core": 4, + "hz": "716MHz", + "load": 0 + }, + "wan": { + "downspeed": "225064", + "maxdownloadspeed": "30541558", + "devname": "nil", + "upload": "1314095390", + "upspeed": "19276", + "maxuploadspeed": "13221942", + "download": "3855068297" + } +} \ No newline at end of file diff --git a/tests/ra67/fixtures/wan_info_data.json b/tests/ra67/fixtures/wan_info_data.json new file mode 100644 index 0000000..c62e127 --- /dev/null +++ b/tests/ra67/fixtures/wan_info_data.json @@ -0,0 +1,29 @@ +{ + "info": { + "mac": "9C:9D:7E:30:95:F0", + "mtu": "1500", + "details": { + "wanType": "static", + "ifname": "eth4", + "ipaddr": "192.168.15.2", + "gateway": "192.168.15.1", + "netmask": "255.255.255.0", + "dns": [ + "192.168.15.1", + "8.8.8.8" + ] + }, + "gateWay": "**REDACTED**", + "dnsAddrs1": "8.8.8.8", + "status": 1, + "uptime": 29144, + "dnsAddrs": "192.168.15.1", + "ipv6_info": { + "wanType": "off" + }, + "ipv6_show": 1, + "link": 1, + "ipv4": "**REDACTED**" + }, + "code": 0 +} \ No newline at end of file diff --git a/tests/ra67/fixtures/wifi_connect_devices_data.json b/tests/ra67/fixtures/wifi_connect_devices_data.json new file mode 100644 index 0000000..063d8de --- /dev/null +++ b/tests/ra67/fixtures/wifi_connect_devices_data.json @@ -0,0 +1,15 @@ +{ + "list": [ + { + "mac": "00:00:00:00:00:01", + "wifiIndex": 1, + "signal": 100 + }, + { + "mac": "00:00:00:00:00:02", + "wifiIndex": 2, + "signal": 100 + } + ], + "code": 0 +} \ No newline at end of file diff --git a/tests/ra67/fixtures/wifi_detail_all_data.json b/tests/ra67/fixtures/wifi_detail_all_data.json new file mode 100644 index 0000000..300a695 --- /dev/null +++ b/tests/ra67/fixtures/wifi_detail_all_data.json @@ -0,0 +1,58 @@ +{ + "bsd": 0, + "info": [ + { + "ifname": "wl1", + "channelInfo": { + "bandwidth": "20", + "bandList": [ + "20", + "40" + ], + "channel": 2 + }, + "encryption": "psk2", + "iftype": 1, + "bandwidth": "20", + "status": "1", + "mode": "Master", + "bsd": "1", + "ssid": "**REDACTED**", + "device": "wifi1.network1", + "ax": "1", + "hidden": "0", + "password": "**REDACTED**", + "channel": "2", + "txpwr": "max", + "txbf": "3", + "signal": -99 + }, + { + "ifname": "wl0", + "channelInfo": { + "bandwidth": "0", + "bandList": [ + "20", + "40" + ], + "channel": 149 + }, + "encryption": "psk2", + "iftype": 2, + "bandwidth": "0", + "status": "1", + "mode": "Master", + "bsd": "1", + "ssid": "**REDACTED**", + "device": "wifi0.network1", + "ax": "1", + "hidden": "0", + "password": "**REDACTED**", + "channel": "0", + "txpwr": "max", + "txbf": "3", + "signal": -95 + } + ], + "code": 0 +} \ No newline at end of file diff --git a/tests/ra67/test_updater_default_mode.py b/tests/ra67/test_updater_default_mode.py new file mode 100644 index 0000000..f3f8067 --- /dev/null +++ b/tests/ra67/test_updater_default_mode.py @@ -0,0 +1,211 @@ +"""Tests for the miwifi component.""" + +from __future__ import annotations + +from typing import Final +import logging +from unittest.mock import patch +import pytest + +from homeassistant.core import HomeAssistant +from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC +from httpx import codes + +from pytest_homeassistant_custom_component.common import MockConfigEntry, load_fixture + +from custom_components.miwifi.const import DOMAIN +from custom_components.miwifi.enum import Model, Mode, Connection +from custom_components.miwifi.updater import LuciUpdater + +from tests.setup import async_mock_luci_client, async_setup + +MOCK_IP_ADDRESS: Final = "192.168.31.1" +MOCK_PASSWORD: Final = "**REDACTED**" + +_LOGGER = logging.getLogger(__name__) + + +@pytest.fixture(autouse=True) +def auto_enable_custom_integrations(enable_custom_integrations): + """Enable custom integrations""" + + yield + + +async def test_updater(hass: HomeAssistant) -> None: + """Test updater. + + :param hass: HomeAssistant + """ + + with patch( + "custom_components.miwifi.updater.LuciClient" + ) as mock_luci_client, patch( + "custom_components.miwifi.updater.async_dispatcher_send" + ) as mock_async_dispatcher_send: + await async_mock_luci_client(mock_luci_client) + + setup_data: list = await async_setup(hass) + + updater: LuciUpdater = setup_data[0] + config_entry: MockConfigEntry = setup_data[1] + + await updater.async_config_entry_first_refresh() + await updater.async_stop() + + await hass.async_block_till_done() + + assert updater.last_update_success + assert updater.new_device_callback is not None + assert len(updater.data) > 0 + assert len(updater.devices) == 3 + assert len(updater._manufacturers) > 0 + assert len(updater._signals) == 2 + assert len(updater._moved_devices) == 0 + assert updater.code == codes.OK + assert not updater.is_repeater + + assert updater.device_info["identifiers"] == {(DOMAIN, "00:00:00:00:00:00")} + assert updater.device_info["connections"] == { + (CONNECTION_NETWORK_MAC, "00:00:00:00:00:00") + } + assert updater.device_info["name"] == "XIAOMI RA67" + assert updater.device_info["manufacturer"] == "Xiaomi" + assert updater.device_info["model"] == "xiaomi.router.ra67" + assert updater.device_info["sw_version"] == "3.0.34 (CN)" + assert updater.device_info["configuration_url"] == f"http://{MOCK_IP_ADDRESS}/" + + assert updater.data["device_model"] == "xiaomi.router.ra67" + assert updater.data["device_manufacturer"] == "Xiaomi" + assert updater.data["device_name"] == "XIAOMI RA67" + assert updater.data["device_sw_version"] == "3.0.34 (CN)" + assert updater.data["model"] == Model.RA67 + assert updater.data["image"] == load_fixture("image_data.txt") + assert updater.data["device_mac_address"] == "00:00:00:00:00:00" + assert updater.data["current_version"] == "3.0.34" + assert updater.data["uptime"] == "8:06:26" + assert updater.data["memory_usage"] == 53 + assert updater.data["memory_total"] == 256 + assert updater.data["temperature"] == 0.0 + assert updater.data["wan_download_speed"] == 225064.0 + assert updater.data["wan_upload_speed"] == 19276.0 + assert updater.data["firmware"]["current_version"] == "3.0.34" + assert updater.data["firmware"]["latest_version"] == "3.0.34" + assert updater.data["firmware"]["title"] == "Xiaomi RA67 (XIAOMI RA67)" + assert updater.data["mode"] == Mode.DEFAULT + assert updater.data["wan_state"] + assert updater.data["led"] + assert not updater.data["dual_band"] + assert updater.data["wifi_2_4"] + assert updater.data["wifi_2_4_channel"] == "2" + assert updater.data["wifi_2_4_signal_strength"] == "max" + assert updater.data["wifi_2_4_data"] == { + "ssid": "**REDACTED**", + "pwd": "**REDACTED**", + "bandwidth": "20", + "channel": 2, + "encryption": "psk2", + "txpwr": "max", + "hidden": "0", + "on": "1", + "txbf": "3", + } + assert updater.data["wifi_5_0"] + assert updater.data["wifi_5_0_channel"] == "149" + assert updater.data["wifi_2_4_signal_strength"] == "max" + assert updater.data["wifi_5_0_data"] == { + "ssid": "**REDACTED**", + "pwd": "**REDACTED**", + "bandwidth": "0", + "channel": 149, + "encryption": "psk2", + "txpwr": "max", + "hidden": "0", + "on": "1", + "txbf": "3", + } + assert updater.data["wifi_adapter_length"] == 2 + assert updater.data["wifi_2_4_channels"] == [ + "1", + "2", + "3", + "4", + "5", + "6", + "7", + "8", + "9", + "10", + "11", + "12", + "13", + ] + assert updater.data["wifi_5_0_channels"] == [ + "36", + "40", + "44", + "48", + "149", + "153", + "157", + "161", + ] + assert updater.data["devices"] == 3 + assert updater.data["devices_lan"] == 1 + assert updater.data["devices_guest"] == 0 + assert updater.data["devices_2_4"] == 1 + assert updater.data["devices_5_0"] == 1 + assert updater.data["devices_5_0_game"] == 0 + assert updater.data["state"] + + assert updater._signals == {"00:00:00:00:00:01": 100, "00:00:00:00:00:02": 100} + assert updater.devices == { + "00:00:00:00:00:01": { + "entry_id": config_entry.entry_id, + "updater_entry_id": config_entry.entry_id, + "mac": "00:00:00:00:00:01", + "router_mac": "00:00:00:00:00:00", + "signal": 100, + "name": "Device 1", + "ip": "192.168.31.2", + "connection": Connection.WIFI_2_4, + "down_speed": 0.0, + "up_speed": 0.0, + "online": "8:05:01", + "last_activity": updater.devices["00:00:00:00:00:01"]["last_activity"], + "optional_mac": None, + }, + "00:00:00:00:00:02": { + "entry_id": config_entry.entry_id, + "updater_entry_id": config_entry.entry_id, + "mac": "00:00:00:00:00:02", + "router_mac": "00:00:00:00:00:00", + "signal": 100, + "name": "Device 2", + "ip": "192.168.31.3", + "connection": Connection.WIFI_5_0, + "down_speed": 0.0, + "up_speed": 0.0, + "online": "8:05:01", + "last_activity": updater.devices["00:00:00:00:00:02"]["last_activity"], + "optional_mac": None, + }, + "00:00:00:00:00:03": { + "entry_id": config_entry.entry_id, + "updater_entry_id": config_entry.entry_id, + "mac": "00:00:00:00:00:03", + "router_mac": "00:00:00:00:00:00", + "signal": None, + "name": "Device 3", + "ip": "192.168.31.4", + "connection": Connection.LAN, + "down_speed": 0.0, + "up_speed": 0.0, + "online": "8:05:01", + "last_activity": updater.devices["00:00:00:00:00:03"]["last_activity"], + "optional_mac": None, + }, + } + + assert len(mock_async_dispatcher_send.mock_calls) == 3 + assert len(mock_luci_client.mock_calls) == 16 diff --git a/tests/setup.py b/tests/setup.py new file mode 100644 index 0000000..4827597 --- /dev/null +++ b/tests/setup.py @@ -0,0 +1,161 @@ +"""Tests for the miwifi component.""" + +from __future__ import annotations + +from typing import Final +import logging +import json +from unittest.mock import AsyncMock +from pytest_homeassistant_custom_component.common import load_fixture + +from homeassistant import setup +from homeassistant.const import ( + CONF_IP_ADDRESS, + CONF_PASSWORD, + CONF_SCAN_INTERVAL, + CONF_TIMEOUT, +) +from homeassistant.core import HomeAssistant, callback +from homeassistant.helpers.dispatcher import async_dispatcher_connect + +from pytest_homeassistant_custom_component.common import MockConfigEntry + +from custom_components.miwifi.const import ( + DOMAIN, + UPDATER, + RELOAD_ENTRY, + SIGNAL_NEW_DEVICE, + DEFAULT_SCAN_INTERVAL, + DEFAULT_TIMEOUT, + DEFAULT_ACTIVITY_DAYS, + CONF_IS_FORCE_LOAD, + CONF_ACTIVITY_DAYS, +) +from custom_components.miwifi.helper import get_config_value, get_store +from custom_components.miwifi.updater import LuciUpdater + +MOCK_IP_ADDRESS: Final = "192.168.31.1" +MOCK_PASSWORD: Final = "**REDACTED**" +OPTIONS_FLOW_DATA: Final = { + CONF_IP_ADDRESS: MOCK_IP_ADDRESS, + CONF_PASSWORD: MOCK_PASSWORD, + CONF_TIMEOUT: DEFAULT_TIMEOUT, + CONF_SCAN_INTERVAL: DEFAULT_SCAN_INTERVAL, +} + +_LOGGER = logging.getLogger(__name__) + + +async def async_setup(hass: HomeAssistant) -> list: + """Setup. + + :param hass: HomeAssistant + """ + + config_entry = MockConfigEntry( + domain=DOMAIN, + data=OPTIONS_FLOW_DATA, + options={}, + ) + config_entry.add_to_hass(hass) + + await setup.async_setup_component(hass, "http", {}) + + updater: LuciUpdater = LuciUpdater( + hass, + MOCK_IP_ADDRESS, + get_config_value(config_entry, CONF_PASSWORD), + get_config_value(config_entry, CONF_SCAN_INTERVAL, DEFAULT_SCAN_INTERVAL), + get_config_value(config_entry, CONF_TIMEOUT, DEFAULT_TIMEOUT), + get_config_value(config_entry, CONF_IS_FORCE_LOAD, False), + get_config_value(config_entry, CONF_ACTIVITY_DAYS, DEFAULT_ACTIVITY_DAYS), + get_store(hass, MOCK_IP_ADDRESS), + entry_id=config_entry.entry_id, + ) + + @callback + def add_device(device: dict) -> None: + """Add device. + + :param device: dict: Device object + """ + + return + + updater.new_device_callback = async_dispatcher_connect( + hass, SIGNAL_NEW_DEVICE, add_device + ) + + hass.data.setdefault(DOMAIN, {}) + hass.data[DOMAIN][config_entry.entry_id] = { + CONF_IP_ADDRESS: MOCK_IP_ADDRESS, + UPDATER: updater, + RELOAD_ENTRY: False, + } + + return [updater, config_entry] + + +async def async_mock_luci_client(mock_luci_client) -> None: + """Mock""" + + mock_luci_client.return_value.logout = AsyncMock(return_value=None) + mock_luci_client.return_value.login = AsyncMock( + return_value=json.loads(load_fixture("login_data.json")) + ) + mock_luci_client.return_value.init_info = AsyncMock( + return_value=json.loads(load_fixture("init_info_data.json")) + ) + mock_luci_client.return_value.image = AsyncMock( + return_value=load_fixture("image_data.txt") + ) + mock_luci_client.return_value.status = AsyncMock( + return_value=json.loads(load_fixture("status_data.json")) + ) + mock_luci_client.return_value.rom_update = AsyncMock( + return_value=json.loads(load_fixture("rom_update_data.json")) + ) + mock_luci_client.return_value.mode = AsyncMock( + return_value=json.loads(load_fixture("mode_data.json")) + ) + mock_luci_client.return_value.wan_info = AsyncMock( + return_value=json.loads(load_fixture("wan_info_data.json")) + ) + mock_luci_client.return_value.led = AsyncMock( + return_value=json.loads(load_fixture("led_data.json")) + ) + mock_luci_client.return_value.wifi_detail_all = AsyncMock( + return_value=json.loads(load_fixture("wifi_detail_all_data.json")) + ) + mock_luci_client.return_value.wifi_connect_devices = AsyncMock( + return_value=json.loads(load_fixture("wifi_connect_devices_data.json")) + ) + mock_luci_client.return_value.device_list = AsyncMock( + return_value=json.loads(load_fixture("device_list_data.json")) + ) + + async def mock_avaliable_channels(index: int = 1) -> dict: + """Mock channels""" + + if index == 2: + return json.loads(load_fixture("avaliable_channels_5g_data.json")) + + return json.loads(load_fixture("avaliable_channels_2g_data.json")) + + mock_luci_client.return_value.avaliable_channels = AsyncMock( + side_effect=mock_avaliable_channels + ) + + +class MultipleSideEffect: + """Multiple side effect""" + + def __init__(self, *fns): + """init""" + + self.fs = iter(fns) + + def __call__(self, *args, **kwargs): + """call""" + f = next(self.fs) + return f(*args, **kwargs) diff --git a/tests/test_config_flow.py b/tests/test_config_flow.py new file mode 100644 index 0000000..bce16a3 --- /dev/null +++ b/tests/test_config_flow.py @@ -0,0 +1,486 @@ +"""Tests for the miwifi component.""" + +from __future__ import annotations + +from typing import Final +import logging +import json +from unittest.mock import AsyncMock, patch +import pytest + +from homeassistant import data_entry_flow, config_entries, setup +from homeassistant.const import ( + CONF_IP_ADDRESS, + CONF_PASSWORD, + CONF_SCAN_INTERVAL, + CONF_TIMEOUT, +) +from homeassistant.core import HomeAssistant + +from pytest_homeassistant_custom_component.common import MockConfigEntry, load_fixture + +from custom_components.miwifi.const import ( + DOMAIN, + OPTION_IS_FROM_FLOW, + DEFAULT_SCAN_INTERVAL, + DEFAULT_TIMEOUT, +) +from custom_components.miwifi.exceptions import ( + LuciConnectionException, + LuciTokenException, +) + +MOCK_IP_ADDRESS: Final = "192.168.31.1" +MOCK_PASSWORD: Final = "**REDACTED**" +OPTIONS_FLOW_EDIT_DATA: Final = { + CONF_IP_ADDRESS: "127.0.0.1", + CONF_PASSWORD: "new", + CONF_TIMEOUT: 15, + CONF_SCAN_INTERVAL: 55, +} +OPTIONS_FLOW_DATA: Final = { + CONF_IP_ADDRESS: MOCK_IP_ADDRESS, + CONF_PASSWORD: MOCK_PASSWORD, + CONF_TIMEOUT: 10, + CONF_SCAN_INTERVAL: 50, +} + +_LOGGER = logging.getLogger(__name__) + + +@pytest.fixture(autouse=True) +def auto_enable_custom_integrations(enable_custom_integrations): + """Enable custom integrations""" + + yield + + +async def test_user(hass: HomeAssistant) -> None: + """Test user config. + + :param hass: HomeAssistant + """ + + await setup.async_setup_component(hass, "http", {}) + result_init = await hass.config_entries.flow.async_init( + DOMAIN, context={"source": config_entries.SOURCE_USER} + ) + + assert result_init["type"] == data_entry_flow.RESULT_TYPE_FORM + assert result_init["handler"] == DOMAIN + assert result_init["step_id"] == "discovery_confirm" + + with patch( + "custom_components.miwifi.async_setup_entry", + return_value=True, + ) as mock_async_setup_entry, patch( + "custom_components.miwifi.updater.LuciClient" + ) as mock_luci_client: + mock_luci_client.return_value.logout = AsyncMock(return_value=None) + mock_luci_client.return_value.login = AsyncMock( + return_value=json.loads(load_fixture("login_data.json")) + ) + mock_luci_client.return_value.init_info = AsyncMock( + return_value=json.loads(load_fixture("init_info_data.json")) + ) + mock_luci_client.return_value.image = AsyncMock( + return_value=load_fixture("image_data.txt") + ) + + result_configure = await hass.config_entries.flow.async_configure( + result_init["flow_id"], + {CONF_IP_ADDRESS: MOCK_IP_ADDRESS, CONF_PASSWORD: MOCK_PASSWORD}, + ) + await hass.async_block_till_done() + + assert result_configure["flow_id"] == result_init["flow_id"] + assert result_configure["title"] == MOCK_IP_ADDRESS + assert result_configure["data"][CONF_IP_ADDRESS] == MOCK_IP_ADDRESS + assert result_configure["data"][CONF_PASSWORD] == MOCK_PASSWORD + assert result_configure["data"][CONF_SCAN_INTERVAL] == DEFAULT_SCAN_INTERVAL + assert result_configure["data"][CONF_TIMEOUT] == DEFAULT_TIMEOUT + assert result_configure["options"][OPTION_IS_FROM_FLOW] + + assert len(mock_async_setup_entry.mock_calls) == 1 + + +async def test_user_ip_error(hass: HomeAssistant) -> None: + """Test user config ip error. + + :param hass: HomeAssistant + """ + + await setup.async_setup_component(hass, "http", {}) + result_init = await hass.config_entries.flow.async_init( + DOMAIN, context={"source": config_entries.SOURCE_USER} + ) + + with patch("custom_components.miwifi.updater.LuciClient") as mock_luci_client: + mock_luci_client.return_value.logout = AsyncMock(return_value=None) + mock_luci_client.return_value.login = AsyncMock( + side_effect=LuciConnectionException + ) + + result_configure = await hass.config_entries.flow.async_configure( + result_init["flow_id"], + {CONF_IP_ADDRESS: MOCK_IP_ADDRESS, CONF_PASSWORD: MOCK_PASSWORD}, + ) + await hass.async_block_till_done() + + assert result_configure["errors"] == {"base": "ip_address.not_matched"} + assert len(mock_luci_client.mock_calls) == 4 + + +async def test_token_error(hass: HomeAssistant) -> None: + """Test user config token error. + + :param hass: HomeAssistant + """ + + await setup.async_setup_component(hass, "http", {}) + result_init = await hass.config_entries.flow.async_init( + DOMAIN, context={"source": config_entries.SOURCE_USER} + ) + + with patch("custom_components.miwifi.updater.LuciClient") as mock_luci_client: + mock_luci_client.return_value.logout = AsyncMock(return_value=None) + mock_luci_client.return_value.login = AsyncMock(side_effect=LuciTokenException) + + result_configure = await hass.config_entries.flow.async_configure( + result_init["flow_id"], + {CONF_IP_ADDRESS: MOCK_IP_ADDRESS, CONF_PASSWORD: MOCK_PASSWORD}, + ) + await hass.async_block_till_done() + + assert result_configure["errors"] == {"base": "password.not_matched"} + assert len(mock_luci_client.mock_calls) == 4 + + +async def test_undefined_router(hass: HomeAssistant) -> None: + """Test user undefined router config. + + :param hass: HomeAssistant + """ + + await setup.async_setup_component(hass, "http", {}) + result_init = await hass.config_entries.flow.async_init( + DOMAIN, context={"source": config_entries.SOURCE_USER} + ) + + with patch( + "custom_components.miwifi.updater.LuciClient" + ) as mock_luci_client, patch( + "custom_components.miwifi.updater.async_self_check", return_value=None + ) as mock_async_self_check: + mock_luci_client.return_value.logout = AsyncMock(return_value=None) + mock_luci_client.return_value.login = AsyncMock( + return_value=json.loads(load_fixture("login_data.json")) + ) + mock_luci_client.return_value.init_info = AsyncMock( + return_value=json.loads( + load_fixture("init_info_undefined_router_data.json") + ) + ) + + result_configure = await hass.config_entries.flow.async_configure( + result_init["flow_id"], + {CONF_IP_ADDRESS: MOCK_IP_ADDRESS, CONF_PASSWORD: MOCK_PASSWORD}, + ) + await hass.async_block_till_done() + + assert result_configure["errors"] == {"base": "router.not.supported"} + assert len(mock_luci_client.mock_calls) == 5 + assert len(mock_async_self_check.mock_calls) == 1 + + +async def test_undefined_router_without_hardware_info(hass: HomeAssistant) -> None: + """Test user undefined router without hardware info config. + + :param hass: HomeAssistant + """ + + await setup.async_setup_component(hass, "http", {}) + result_init = await hass.config_entries.flow.async_init( + DOMAIN, context={"source": config_entries.SOURCE_USER} + ) + + with patch( + "custom_components.miwifi.updater.LuciClient" + ) as mock_luci_client, patch( + "custom_components.miwifi.updater.pn.async_create", return_value=None + ) as mock_async_create_pm: + mock_luci_client.return_value.logout = AsyncMock(return_value=None) + mock_luci_client.return_value.login = AsyncMock( + return_value=json.loads(load_fixture("login_data.json")) + ) + mock_luci_client.return_value.init_info = AsyncMock( + return_value=json.loads( + load_fixture("init_info_without_hardware_data.json") + ) + ) + + result_configure = await hass.config_entries.flow.async_configure( + result_init["flow_id"], + {CONF_IP_ADDRESS: MOCK_IP_ADDRESS, CONF_PASSWORD: MOCK_PASSWORD}, + ) + await hass.async_block_till_done() + + assert result_configure["errors"] == {"base": "router.not.supported"} + assert len(mock_luci_client.mock_calls) == 5 + assert len(mock_async_create_pm.mock_calls) == 1 + + +async def test_ssdp(hass: HomeAssistant) -> None: + """Test ssdp config. + + :param hass: HomeAssistant + """ + + await setup.async_setup_component(hass, "http", {}) + + with patch( + "custom_components.miwifi.config_flow.async_start_discovery", return_value=None + ) as mock_async_start_discovery: + result_init = await hass.config_entries.flow.async_init( + DOMAIN, context={"source": config_entries.SOURCE_SSDP} + ) + + assert result_init["type"] == data_entry_flow.RESULT_TYPE_ABORT + assert result_init["handler"] == DOMAIN + assert result_init["reason"] == "discovery_started" + assert len(mock_async_start_discovery.mock_calls) == 1 + + +async def test_dhcp(hass: HomeAssistant) -> None: + """Test dhcp config. + + :param hass: HomeAssistant + """ + + await setup.async_setup_component(hass, "http", {}) + + with patch( + "custom_components.miwifi.config_flow.async_start_discovery", return_value=None + ) as mock_async_start_discovery: + result_init = await hass.config_entries.flow.async_init( + DOMAIN, context={"source": config_entries.SOURCE_DHCP} + ) + + assert result_init["type"] == data_entry_flow.RESULT_TYPE_ABORT + assert result_init["handler"] == DOMAIN + assert result_init["reason"] == "discovery_started" + assert len(mock_async_start_discovery.mock_calls) == 1 + + +async def test_integration_discovery(hass: HomeAssistant) -> None: + """Test integration_discovery config. + + :param hass: HomeAssistant + """ + + await setup.async_setup_component(hass, "http", {}) + + result_init = await hass.config_entries.flow.async_init( + DOMAIN, + context={"source": config_entries.SOURCE_INTEGRATION_DISCOVERY}, + data={CONF_IP_ADDRESS: MOCK_IP_ADDRESS}, + ) + + assert result_init["type"] == data_entry_flow.RESULT_TYPE_FORM + assert result_init["handler"] == DOMAIN + assert result_init["step_id"] == "discovery_confirm" + + +async def test_options_flow(hass: HomeAssistant) -> None: + """Test options flow. + + :param hass: HomeAssistant + """ + + config_entry = MockConfigEntry( + domain=DOMAIN, + data=OPTIONS_FLOW_DATA, + options={}, + ) + config_entry.add_to_hass(hass) + + await setup.async_setup_component(hass, "http", {}) + + with patch( + "custom_components.miwifi.async_setup_entry", + return_value=True, + ) as mock_async_setup_entry, patch( + "custom_components.miwifi.updater.LuciClient" + ) as mock_luci_client: + mock_luci_client.return_value.logout = AsyncMock(return_value=None) + mock_luci_client.return_value.login = AsyncMock( + return_value=json.loads(load_fixture("login_data.json")) + ) + mock_luci_client.return_value.init_info = AsyncMock( + return_value=json.loads(load_fixture("init_info_data.json")) + ) + mock_luci_client.return_value.image = AsyncMock( + return_value=load_fixture("image_data.txt") + ) + + await hass.config_entries.async_setup(config_entry.entry_id) + await hass.async_block_till_done() + + result_init = await hass.config_entries.options.async_init( + config_entry.entry_id + ) + + assert result_init["type"] == data_entry_flow.RESULT_TYPE_FORM + assert result_init["step_id"] == "init" + + result_save = await hass.config_entries.options.async_configure( + result_init["flow_id"], + user_input=OPTIONS_FLOW_EDIT_DATA, + ) + + assert result_save["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY + assert ( + config_entry.options[CONF_IP_ADDRESS] == OPTIONS_FLOW_EDIT_DATA[CONF_IP_ADDRESS] + ) + assert config_entry.options[CONF_PASSWORD] == OPTIONS_FLOW_EDIT_DATA[CONF_PASSWORD] + assert config_entry.options[CONF_TIMEOUT] == OPTIONS_FLOW_EDIT_DATA[CONF_TIMEOUT] + assert ( + config_entry.options[CONF_SCAN_INTERVAL] + == OPTIONS_FLOW_EDIT_DATA[CONF_SCAN_INTERVAL] + ) + assert len(mock_async_setup_entry.mock_calls) == 1 + + +async def test_options_flow_ip_error(hass: HomeAssistant) -> None: + """Test options flow ip error. + + :param hass: HomeAssistant + """ + + config_entry = MockConfigEntry( + domain=DOMAIN, + data=OPTIONS_FLOW_DATA, + options={}, + ) + config_entry.add_to_hass(hass) + + await setup.async_setup_component(hass, "http", {}) + + with patch( + "custom_components.miwifi.async_setup_entry", + return_value=True, + ) as mock_async_setup_entry, patch( + "custom_components.miwifi.updater.LuciClient" + ) as mock_luci_client: + mock_luci_client.return_value.logout = AsyncMock(return_value=None) + mock_luci_client.return_value.login = AsyncMock( + side_effect=LuciConnectionException + ) + + await hass.config_entries.async_setup(config_entry.entry_id) + await hass.async_block_till_done() + + result_init = await hass.config_entries.options.async_init( + config_entry.entry_id + ) + + result_save = await hass.config_entries.options.async_configure( + result_init["flow_id"], + user_input=OPTIONS_FLOW_EDIT_DATA, + ) + + assert result_save["errors"] == {"base": "ip_address.not_matched"} + assert len(mock_async_setup_entry.mock_calls) == 1 + assert len(mock_luci_client.mock_calls) == 4 + + +async def test_options_flow_token_error(hass: HomeAssistant) -> None: + """Test options flow token error. + + :param hass: HomeAssistant + """ + + config_entry = MockConfigEntry( + domain=DOMAIN, + data=OPTIONS_FLOW_DATA, + options={}, + ) + config_entry.add_to_hass(hass) + + await setup.async_setup_component(hass, "http", {}) + + with patch( + "custom_components.miwifi.async_setup_entry", + return_value=True, + ) as mock_async_setup_entry, patch( + "custom_components.miwifi.updater.LuciClient" + ) as mock_luci_client: + mock_luci_client.return_value.logout = AsyncMock(return_value=None) + mock_luci_client.return_value.login = AsyncMock(side_effect=LuciTokenException) + + await hass.config_entries.async_setup(config_entry.entry_id) + await hass.async_block_till_done() + + result_init = await hass.config_entries.options.async_init( + config_entry.entry_id + ) + + result_save = await hass.config_entries.options.async_configure( + result_init["flow_id"], + user_input=OPTIONS_FLOW_EDIT_DATA, + ) + + assert result_save["errors"] == {"base": "password.not_matched"} + assert len(mock_async_setup_entry.mock_calls) == 1 + assert len(mock_luci_client.mock_calls) == 4 + + +async def test_options_flow_undefined_router(hass: HomeAssistant) -> None: + """Test options flow undefined router. + + :param hass: HomeAssistant + """ + + config_entry = MockConfigEntry( + domain=DOMAIN, + data=OPTIONS_FLOW_DATA, + options={}, + ) + config_entry.add_to_hass(hass) + + await setup.async_setup_component(hass, "http", {}) + + with patch( + "custom_components.miwifi.async_setup_entry", + return_value=True, + ) as mock_async_setup_entry, patch( + "custom_components.miwifi.updater.LuciClient" + ) as mock_luci_client, patch( + "custom_components.miwifi.updater.async_self_check", return_value=None + ) as mock_async_self_check: + mock_luci_client.return_value.logout = AsyncMock(return_value=None) + mock_luci_client.return_value.login = AsyncMock( + return_value=json.loads(load_fixture("login_data.json")) + ) + mock_luci_client.return_value.init_info = AsyncMock( + return_value=json.loads( + load_fixture("init_info_undefined_router_data.json") + ) + ) + + await hass.config_entries.async_setup(config_entry.entry_id) + await hass.async_block_till_done() + + result_init = await hass.config_entries.options.async_init( + config_entry.entry_id + ) + + result_save = await hass.config_entries.options.async_configure( + result_init["flow_id"], + user_input=OPTIONS_FLOW_EDIT_DATA, + ) + + assert result_save["errors"] == {"base": "router.not.supported"} + assert len(mock_async_setup_entry.mock_calls) == 1 + assert len(mock_async_self_check.mock_calls) == 1 + assert len(mock_luci_client.mock_calls) == 5 diff --git a/tests/test_updater.py b/tests/test_updater.py new file mode 100644 index 0000000..863a1d4 --- /dev/null +++ b/tests/test_updater.py @@ -0,0 +1,314 @@ +"""Tests for the miwifi component.""" + +from __future__ import annotations + +from typing import Final +import logging +import pytest +import json +from unittest.mock import Mock, AsyncMock, patch +from pytest_homeassistant_custom_component.common import load_fixture + +from homeassistant.core import HomeAssistant +from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC +from homeassistant.helpers.storage import Store +from httpx import codes + +from pytest_homeassistant_custom_component.common import MockConfigEntry + +from custom_components.miwifi.const import ( + DOMAIN, + ATTR_STATE, + DEFAULT_SCAN_INTERVAL, + DEFAULT_ACTIVITY_DAYS, + DEFAULT_NAME, + DEFAULT_MANUFACTURER, + ATTR_UPDATE_CURRENT_VERSION, +) +from custom_components.miwifi.exceptions import ( + LuciException, + LuciTokenException, +) +from custom_components.miwifi.luci import LuciClient +from custom_components.miwifi.updater import LuciUpdater + +from tests.setup import async_setup, async_mock_luci_client, MultipleSideEffect + +MOCK_IP_ADDRESS: Final = "192.168.31.1" +MOCK_PASSWORD: Final = "**REDACTED**" + +_LOGGER = logging.getLogger(__name__) + + +@pytest.fixture(autouse=True) +def auto_enable_custom_integrations(enable_custom_integrations): + """Enable custom integrations""" + + yield + + +async def test_updater(hass: HomeAssistant) -> None: + """Test updater. + + :param hass: HomeAssistant + """ + + setup_data: list = await async_setup(hass) + + updater: LuciUpdater = setup_data[0] + config_entry: MockConfigEntry = setup_data[1] + + assert updater._unsub_refresh is None + + updater.schedule_refresh(updater._update_interval) + updater.schedule_refresh(updater._update_interval) + + assert updater._unsub_refresh is not None + + assert isinstance(updater.luci, LuciClient) + assert updater.ip == MOCK_IP_ADDRESS + assert not updater.is_force_load + assert isinstance(updater._store, Store) + assert updater._entry_id == config_entry.entry_id + assert updater._scan_interval == DEFAULT_SCAN_INTERVAL + assert updater._activity_days == DEFAULT_ACTIVITY_DAYS + assert not updater._is_only_login + assert isinstance(updater.data, dict) + assert len(updater.data) == 0 + assert isinstance(updater.devices, dict) + assert len(updater.devices) == 0 + assert updater.code == codes.BAD_GATEWAY + assert updater.new_device_callback is not None + assert isinstance(updater._manufacturers, dict) + assert len(updater._manufacturers) == 0 + assert updater._is_reauthorization + assert updater._is_first_update + assert isinstance(updater._signals, dict) + assert len(updater._signals) == 0 + assert isinstance(updater._moved_devices, list) + assert len(updater._moved_devices) == 0 + assert str(updater._update_interval) == "0:00:30" + assert not updater.is_repeater + assert updater.device_info["identifiers"] == {(DOMAIN, MOCK_IP_ADDRESS)} + assert updater.device_info["connections"] == { + (CONNECTION_NETWORK_MAC, MOCK_IP_ADDRESS) + } + assert updater.device_info["name"] == DEFAULT_NAME + assert updater.device_info["manufacturer"] == DEFAULT_MANUFACTURER + assert updater.device_info["model"] is None + assert updater.device_info["sw_version"] is None + assert updater.device_info["configuration_url"] == f"http://{MOCK_IP_ADDRESS}/" + + +async def test_updater_login_fail(hass: HomeAssistant) -> None: + """Test updater login_fail. + + :param hass: HomeAssistant + """ + + with patch( + "custom_components.miwifi.updater.LuciClient" + ) as mock_luci_client, patch( + "custom_components.miwifi.updater.asyncio.sleep" + ) as mock_asyncio_sleep: + await async_mock_luci_client(mock_luci_client) + mock_luci_client.return_value.login = AsyncMock(side_effect=LuciTokenException) + mock_asyncio_sleep.return_value = Mock(return_value=None) + + setup_data: list = await async_setup(hass) + + updater: LuciUpdater = setup_data[0] + + with pytest.raises(LuciException): + await updater.async_config_entry_first_refresh() + + await hass.async_block_till_done() + + assert updater.code == codes.FORBIDDEN + assert len(mock_asyncio_sleep.mock_calls) == 14 + assert len(mock_luci_client.mock_calls) == 13 + + +async def test_updater_reauthorization(hass: HomeAssistant) -> None: + """Test updater reauthorization. + + :param hass: HomeAssistant + """ + + with patch("custom_components.miwifi.updater.LuciClient") as mock_luci_client: + await async_mock_luci_client(mock_luci_client) + + def login_success() -> dict: + return json.loads(load_fixture("status_data.json")) + + def login_error() -> None: + raise LuciTokenException + + mock_luci_client.return_value.status = AsyncMock( + side_effect=MultipleSideEffect(login_success, login_error, login_error) + ) + + setup_data: list = await async_setup(hass) + + updater: LuciUpdater = setup_data[0] + + await updater.async_config_entry_first_refresh() + await hass.async_block_till_done() + + assert updater.code == codes.OK + assert not updater._is_reauthorization + assert updater.data[ATTR_STATE] + + await updater.update() + await hass.async_block_till_done() + + assert updater.code == codes.FORBIDDEN + assert updater._is_reauthorization + assert updater.data[ATTR_STATE] + + await updater.update() + await hass.async_block_till_done() + + assert updater.code == codes.FORBIDDEN + assert updater._is_reauthorization + assert not updater.data[ATTR_STATE] + + +async def test_updater_skip_method(hass: HomeAssistant) -> None: + """Test updater skip unsupported method. + + :param hass: HomeAssistant + """ + + with patch( + "custom_components.miwifi.updater.LuciClient" + ) as mock_luci_client, patch( + "custom_components.miwifi.updater.LuciClient.new_status" + ) as mock_new_status: + await async_mock_luci_client(mock_luci_client) + + mock_luci_client.return_value.init_info = AsyncMock( + return_value=json.loads( + load_fixture("init_info_unsupported_methods_data.json") + ) + ) + + setup_data: list = await async_setup(hass) + + updater: LuciUpdater = setup_data[0] + + await updater.async_config_entry_first_refresh() + await hass.async_block_till_done() + + assert updater.code == codes.OK + assert len(mock_new_status.mock_calls) == 0 + + +async def test_updater_without_model_info(hass: HomeAssistant) -> None: + """Test updater without model info. + + :param hass: HomeAssistant + """ + + with patch("custom_components.miwifi.updater.LuciClient") as mock_luci_client: + await async_mock_luci_client(mock_luci_client) + + mock_luci_client.return_value.init_info = AsyncMock( + return_value=json.loads(load_fixture("init_info_without_model_data.json")) + ) + + setup_data: list = await async_setup(hass) + + updater: LuciUpdater = setup_data[0] + + await updater.async_config_entry_first_refresh() + await hass.async_block_till_done() + + assert updater.code == codes.OK + assert updater.device_info["model"] == "RA67" + assert updater.device_info["manufacturer"] == DEFAULT_MANUFACTURER + + +async def test_updater_undefined_router(hass: HomeAssistant) -> None: + """Test updater undefined router config. + + :param hass: HomeAssistant + """ + + with patch( + "custom_components.miwifi.updater.LuciClient" + ) as mock_luci_client, patch( + "custom_components.miwifi.updater.async_self_check", return_value=None + ) as mock_async_self_check: + await async_mock_luci_client(mock_luci_client) + + mock_luci_client.return_value.init_info = AsyncMock( + return_value=json.loads( + load_fixture("init_info_undefined_router_data.json") + ) + ) + + setup_data: list = await async_setup(hass) + + updater: LuciUpdater = setup_data[0] + + with pytest.raises(LuciException): + await updater.async_config_entry_first_refresh() + + await hass.async_block_till_done() + + assert len(mock_async_self_check.mock_calls) == 1 + + +async def test_updater_without_hardware_info(hass: HomeAssistant) -> None: + """Test updater without hardware info. + + :param hass: HomeAssistant + """ + + with patch( + "custom_components.miwifi.updater.LuciClient" + ) as mock_luci_client, patch( + "custom_components.miwifi.updater.pn.async_create", return_value=None + ) as mock_async_create_pm: + await async_mock_luci_client(mock_luci_client) + + mock_luci_client.return_value.init_info = AsyncMock( + return_value=json.loads( + load_fixture("init_info_without_hardware_data.json") + ) + ) + + setup_data: list = await async_setup(hass) + + updater: LuciUpdater = setup_data[0] + + with pytest.raises(LuciException): + await updater.async_config_entry_first_refresh() + + await hass.async_block_till_done() + + assert len(mock_async_create_pm.mock_calls) == 1 + + +async def test_updater_without_version_info(hass: HomeAssistant) -> None: + """Test updater without version info. + + :param hass: HomeAssistant + """ + + with patch("custom_components.miwifi.updater.LuciClient") as mock_luci_client: + await async_mock_luci_client(mock_luci_client) + + mock_luci_client.return_value.status = AsyncMock( + return_value=json.loads(load_fixture("status_without_version_data.json")) + ) + + setup_data: list = await async_setup(hass) + + updater: LuciUpdater = setup_data[0] + + await updater.async_config_entry_first_refresh() + await hass.async_block_till_done() + + assert ATTR_UPDATE_CURRENT_VERSION not in updater.data