Skip to content

Commit 26e32ce

Browse files
Add snapshots tests (#34)
* Add snapshots tests * Add tests for async_reboot_device method * fixup! Add snapshots tests * fixup! fixup! Add snapshots tests
1 parent 3a073c9 commit 26e32ce

20 files changed

+1595
-6
lines changed

.github/workflows/python-app.yml

+8-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
runs-on: ubuntu-latest
1313
strategy:
1414
matrix:
15-
python-version: [ 3.9, "3.10", "3.11" ]
15+
python-version: [ "3.9", "3.10", "3.11" ]
1616

1717
steps:
1818
- uses: actions/checkout@v2
@@ -22,5 +22,11 @@ jobs:
2222
with:
2323
python-version: ${{ matrix.python-version }}
2424

25+
- name: Install Python packages
26+
run: pip install -e . -r ./requirements_tests.txt
27+
2528
- name: Black Code Formatter
26-
uses: jpetrucciani/[email protected]
29+
run: black --check .
30+
31+
- name: Run tests
32+
run: pytest --vcr-record=none

connect_box/__init__.py

-2
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,6 @@ async def _async_ws_get_function(self, function: int) -> Optional[str]:
555555
allow_redirects=False,
556556
timeout=10,
557557
) as response:
558-
559558
# If there is an error
560559
if response.status != 200:
561560
_LOGGER.debug("Receive HTTP code %d", response.status)
@@ -594,7 +593,6 @@ async def _async_ws_set_function(
594593
allow_redirects=False,
595594
timeout=10,
596595
) as response:
597-
598596
# If there is an error
599597
if response.status != 200:
600598
_LOGGER.debug("Receive HTTP code %d", response.status)

connect_box/data.py

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
"""Handle Data attributes."""
22
from datetime import datetime
3-
from ipaddress import IPv4Address, IPv6Address, ip_address as convert_ip
3+
from ipaddress import (
4+
IPv4Address,
5+
IPv6Address,
6+
IPv6Network,
7+
ip_address as convert_ip,
8+
ip_network as convert_ip_network,
9+
)
410
from typing import Iterable, Optional, Union
511

612
import attr
@@ -132,7 +138,7 @@ class LanStatus:
132138
upnp_enabled: bool = attr.ib()
133139
mac: str = attr.ib()
134140
ip4: IPv4Address = attr.ib(converter=convert_ip)
135-
ip6: IPv6Address = attr.ib(converter=convert_ip)
141+
ip6: IPv6Network = attr.ib(converter=lambda d: convert_ip_network(d, False))
136142

137143

138144
@attr.s

pytest.ini

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[pytest]
2+
asyncio_mode=auto

requirements_tests.txt

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
flake8>=3.8.4
22
pylint>=2.16.0
33
black>=23.1
4+
pytest>=7.4.4
5+
pytest-vcr>=1.0.2
6+
pytest-asyncio>=0.23.3
7+
syrupy>=4.6.0

tests/__snapshots__/test_client.ambr

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# serializer version: 1
2+
# name: test_async_async_toggle_ipv6_filter
3+
None
4+
# ---
5+
# name: test_async_get_devices
6+
list([
7+
Device(mac='00:01:02:03:04:05', hostname='unknown', ip=IPv4Address('192.168.0.31'), interface='Other', speed='1000', interface_id='1', method='1', lease_time=datetime.datetime(1900, 1, 1, 23, 56, 46)),
8+
Device(mac='00:02:04:06:08:0A', hostname='MBP', ip=IPv4Address('192.168.0.129'), interface='UPC', speed='585', interface_id='19', method='1', lease_time=datetime.datetime(1900, 1, 1, 23, 59, 59)),
9+
])
10+
# ---
11+
# name: test_async_get_downstream
12+
list([
13+
DownstreamChannel(frequency=794000000, powerLevel=-3, modulation='256qam', id='24', snr=34.484, preRs=65471343180, postRs=6143480, qamLocked=True, fecLocked=True, mpegLocked=True),
14+
DownstreamChannel(frequency=786000000, powerLevel=-5, modulation='256qam', id='23', snr=34.484, preRs=65476818580, postRs=670720, qamLocked=True, fecLocked=True, mpegLocked=True),
15+
DownstreamChannel(frequency=778000000, powerLevel=-4, modulation='256qam', id='22', snr=34.926, preRs=65477054174, postRs=427162, qamLocked=True, fecLocked=True, mpegLocked=True),
16+
DownstreamChannel(frequency=770000000, powerLevel=-3, modulation='256qam', id='21', snr=35.595, preRs=65477255647, postRs=232536, qamLocked=True, fecLocked=True, mpegLocked=True),
17+
DownstreamChannel(frequency=762000000, powerLevel=-3, modulation='256qam', id='20', snr=35.78, preRs=65477318701, postRs=172105, qamLocked=True, fecLocked=True, mpegLocked=True),
18+
DownstreamChannel(frequency=754000000, powerLevel=-4, modulation='256qam', id='19', snr=34.926, preRs=65477045764, postRs=438973, qamLocked=True, fecLocked=True, mpegLocked=True),
19+
DownstreamChannel(frequency=746000000, powerLevel=-4, modulation='256qam', id='18', snr=34.346, preRs=65476479492, postRs=1011196, qamLocked=True, fecLocked=True, mpegLocked=True),
20+
DownstreamChannel(frequency=738000000, powerLevel=-3, modulation='256qam', id='17', snr=35.595, preRs=65477333381, postRs=158466, qamLocked=True, fecLocked=True, mpegLocked=True),
21+
DownstreamChannel(frequency=730000000, powerLevel=-3, modulation='256qam', id='16', snr=35.78, preRs=65477340289, postRs=144149, qamLocked=True, fecLocked=True, mpegLocked=True),
22+
DownstreamChannel(frequency=722000000, powerLevel=-2, modulation='256qam', id='15', snr=36.61, preRs=65477440415, postRs=45309, qamLocked=True, fecLocked=True, mpegLocked=True),
23+
DownstreamChannel(frequency=714000000, powerLevel=-2, modulation='256qam', id='14', snr=34.926, preRs=65476443083, postRs=1049850, qamLocked=True, fecLocked=True, mpegLocked=True),
24+
DownstreamChannel(frequency=706000000, powerLevel=-2, modulation='256qam', id='13', snr=33.487, preRs=65470830487, postRs=6658966, qamLocked=True, fecLocked=True, mpegLocked=True),
25+
DownstreamChannel(frequency=698000000, powerLevel=-2, modulation='256qam', id='12', snr=34.346, preRs=65477102100, postRs=391515, qamLocked=True, fecLocked=True, mpegLocked=True),
26+
DownstreamChannel(frequency=690000000, powerLevel=0, modulation='256qam', id='11', snr=34.346, preRs=65447317243, postRs=30138988, qamLocked=True, fecLocked=True, mpegLocked=True),
27+
DownstreamChannel(frequency=682000000, powerLevel=0, modulation='256qam', id='10', snr=36.387, preRs=65477467552, postRs=30148, qamLocked=True, fecLocked=True, mpegLocked=True),
28+
DownstreamChannel(frequency=674000000, powerLevel=-1, modulation='256qam', id='9', snr=36.387, preRs=65477459255, postRs=31177, qamLocked=True, fecLocked=True, mpegLocked=True),
29+
DownstreamChannel(frequency=666000000, powerLevel=0, modulation='256qam', id='8', snr=36.61, preRs=65477470925, postRs=25136, qamLocked=True, fecLocked=True, mpegLocked=True),
30+
DownstreamChannel(frequency=658000000, powerLevel=0, modulation='256qam', id='7', snr=36.61, preRs=65477468243, postRs=27236, qamLocked=True, fecLocked=True, mpegLocked=True),
31+
DownstreamChannel(frequency=650000000, powerLevel=0, modulation='256qam', id='6', snr=37.356, preRs=65477472275, postRs=24150, qamLocked=True, fecLocked=True, mpegLocked=True),
32+
DownstreamChannel(frequency=642000000, powerLevel=2, modulation='256qam', id='5', snr=37.356, preRs=65477475289, postRs=21606, qamLocked=True, fecLocked=True, mpegLocked=True),
33+
DownstreamChannel(frequency=634000000, powerLevel=1, modulation='256qam', id='4', snr=37.356, preRs=65477476542, postRs=20832, qamLocked=True, fecLocked=True, mpegLocked=True),
34+
DownstreamChannel(frequency=626000000, powerLevel=2, modulation='256qam', id='3', snr=37.356, preRs=65477477890, postRs=19152, qamLocked=True, fecLocked=True, mpegLocked=True),
35+
DownstreamChannel(frequency=610000000, powerLevel=2, modulation='256qam', id='1', snr=37.636, preRs=65477481554, postRs=16825, qamLocked=True, fecLocked=True, mpegLocked=True),
36+
DownstreamChannel(frequency=618000000, powerLevel=2, modulation='256qam', id='2', snr=37.636, preRs=65478719484, postRs=17895, qamLocked=True, fecLocked=True, mpegLocked=True),
37+
])
38+
# ---
39+
# name: test_async_get_eventlog
40+
list([
41+
LogEvent(evPrio='notice', evMsg='Illegal\n - Dropped FORWARD packet: SRC=2a03:2880:f216:00c6:face:b00c:0000:7260 MAC=56:2B:76:F0:19:86;CM-MAC=38:43:7d:d1:ff:ff;CMTS-MAC=00:56:2b:76:ff:ff;CM-QOS=1.1;CM-VER=3.0;', evTime='03-01-2024\n 19:25:43', evEpoch=1704306343),
42+
])
43+
# ---
44+
# name: test_async_get_global_settings
45+
GlobalSettings(logged_in=True, operator_id='[OPERATOR]', access_denied=False, sw_version=None)
46+
# ---
47+
# name: test_async_get_ipv6_filtering
48+
list([
49+
])
50+
# ---
51+
# name: test_async_get_lanstatus
52+
LanStatus(upnp_enabled=True, mac='38:43:7D:FF:FF:FF', ip4=IPv4Address('192.168.0.1'), ip6=IPv6Network('2a02:a317:2244:3400::/64'))
53+
# ---
54+
# name: test_async_get_temperature
55+
Temperature(tunerTemperature=31.111111111111114, temperature=20.0)
56+
# ---
57+
# name: test_async_get_wanstatus
58+
CmStatus(provisioningStatus='Online', cmComment='Operational', cmDocsisMode='DOCSIS\n 3.0', cmNetworkAccess='Allowed', firmwareFilename='CH7465LG_fiberpower008_v6.cfg', numberOfCpes=245, dMaxCpes=2, bpiEnable=1)
59+
# ---
60+
# name: test_async_get_wanstatus.1
61+
list([
62+
ServiceFlow(id=324, pMaxTrafficRate=768000000, pMaxTrafficBurst=42600, pMinReservedRate=0, pMaxConcatBurst=1522, pSchedulingType=1),
63+
ServiceFlow(id=23569, pMaxTrafficRate=53000000, pMaxTrafficBurst=16320, pMinReservedRate=0, pMaxConcatBurst=1522, pSchedulingType=1),
64+
])
65+
# ---
66+
# name: test_async_get_wanstatus.2
67+
list([
68+
ServiceFlow(id=323, pMaxTrafficRate=40960000, pMaxTrafficBurst=42600, pMinReservedRate=0, pMaxConcatBurst=42600, pSchedulingType=2),
69+
ServiceFlow(id=23568, pMaxTrafficRate=5300000, pMaxTrafficBurst=16320, pMinReservedRate=0, pMaxConcatBurst=16320, pSchedulingType=2),
70+
])
71+
# ---
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
interactions:
2+
- request:
3+
body: token=[SESSION_TOKEN]&fun=111
4+
headers:
5+
Referer:
6+
- http://192.168.0.1/index.html
7+
User-Agent:
8+
- Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
9+
Chrome/47.0.2526.106 Safari/537.36
10+
X-Requested-With:
11+
- XMLHttpRequest
12+
method: POST
13+
uri: http://192.168.0.1/xml/getter.xml
14+
response:
15+
body:
16+
string: |
17+
<?xml version="1.0" encoding="utf-8"?>
18+
<IPv6filtering>
19+
<ipv6_prefix>2a02:a317:2244:3400::</ipv6_prefix>
20+
<dir>0</dir>
21+
<time_mode>0</time_mode>
22+
<GeneralTime/>
23+
<DailyTime/>
24+
</IPv6filtering>
25+
headers:
26+
Cache-Control:
27+
- no-cache
28+
Connection:
29+
- close
30+
Date:
31+
- Wed, 03 Jan 2024 17:55:07 GMT
32+
Expires:
33+
- '-1'
34+
Last-Modified:
35+
- Fri, 27 Aug 2021 01:46:26 GMT
36+
Pragma:
37+
- no-cache
38+
Server:
39+
- NET-DK/1.0
40+
Set-Cookie:
41+
- sessionToken=[SESSION_TOKEN]; path=/;
42+
X-Frame-Options:
43+
- SAMEORIGIN
44+
status:
45+
code: 200
46+
message: Ok
47+
version: 1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
interactions:
2+
- request:
3+
body: token=[SESSION_TOKEN]&fun=16
4+
headers:
5+
Referer:
6+
- http://192.168.0.1/index.html
7+
User-Agent:
8+
- Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
9+
Chrome/47.0.2526.106 Safari/537.36
10+
X-Requested-With:
11+
- XMLHttpRequest
12+
method: POST
13+
uri: http://192.168.0.1/xml/setter.xml
14+
response:
15+
body:
16+
string: ''
17+
headers:
18+
Cache-Control:
19+
- no-cache
20+
Connection:
21+
- close
22+
Content-Type:
23+
- text/xml
24+
Date:
25+
- Wed, 03 Jan 2024 18:39:57 GMT
26+
Expires:
27+
- '-1'
28+
Last-Modified:
29+
- Fri, 27 Aug 2021 01:46:26 GMT
30+
Pragma:
31+
- no-cache
32+
Server:
33+
- NET-DK/1.0
34+
Set-Cookie:
35+
- sessionToken=[SESSION_TOKEN]; path=/;
36+
X-Frame-Options:
37+
- SAMEORIGIN
38+
status:
39+
code: 200
40+
message: Ok
41+
version: 1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
interactions:
2+
- request:
3+
body: token=[SESSION_TOKEN]&fun=123
4+
headers:
5+
Referer:
6+
- http://192.168.0.1/index.html
7+
User-Agent:
8+
- Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
9+
Chrome/47.0.2526.106 Safari/537.36
10+
X-Requested-With:
11+
- XMLHttpRequest
12+
method: POST
13+
uri: http://192.168.0.1/xml/getter.xml
14+
response:
15+
body:
16+
string: |
17+
<?xml version="1.0" encoding="utf-8"?>
18+
<LanUserTable>
19+
<Ethernet>
20+
<clientinfo>
21+
<interface>Other</interface>
22+
<IPv4Addr>192.168.0.31/24</IPv4Addr>
23+
<xmlhostname/>
24+
<xmlicon/>
25+
<index>1</index>
26+
<interfaceid>1</interfaceid>
27+
<hostname>unknown</hostname>
28+
<MACAddr>00:01:02:03:04:05</MACAddr>
29+
<method>1</method>
30+
<leaseTime>00:23:56:46</leaseTime>
31+
<speed>1000</speed>
32+
</clientinfo>
33+
</Ethernet>
34+
<WIFI>
35+
<clientinfo>
36+
<interface>UPC</interface>
37+
<IPv4Addr>192.168.0.129/24</IPv4Addr>
38+
<IPv6Addr>2a02:a317:2244:3400:b829:47c:3de1:7586</IPv6Addr>
39+
<xmlhostname/>
40+
<xmlicon/>
41+
<index>0</index>
42+
<interfaceid>19</interfaceid>
43+
<hostname>MBP</hostname>
44+
<MACAddr>00:02:04:06:08:0A</MACAddr>
45+
<method>1</method>
46+
<leaseTime>00:23:59:59</leaseTime>
47+
<speed>585</speed>
48+
</clientinfo>
49+
</WIFI>
50+
<totalClient>9</totalClient>
51+
<Customer>upc</Customer>
52+
</LanUserTable>
53+
headers:
54+
Cache-Control:
55+
- no-cache
56+
Connection:
57+
- close
58+
Content-Type:
59+
- text/xml
60+
Date:
61+
- Wed, 03 Jan 2024 18:39:35 GMT
62+
Expires:
63+
- '-1'
64+
Last-Modified:
65+
- Fri, 27 Aug 2021 01:46:26 GMT
66+
Pragma:
67+
- no-cache
68+
Server:
69+
- NET-DK/1.0
70+
Set-Cookie:
71+
- sessionToken=[SESSION_TOKEN]; path=/;
72+
X-Frame-Options:
73+
- SAMEORIGIN
74+
status:
75+
code: 200
76+
message: Ok
77+
version: 1

0 commit comments

Comments
 (0)