tplinkrouterc6u 5.4.2__py3-none-any.whl → 5.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- test/test_client_c6u.py +2 -0
- test/test_client_c80.py +455 -0
- test/test_client_mr.py +1 -0
- tplinkrouterc6u/__init__.py +2 -1
- tplinkrouterc6u/client/c6u.py +1 -0
- tplinkrouterc6u/client/c80.py +406 -0
- tplinkrouterc6u/client/ex.py +2 -2
- tplinkrouterc6u/client/mr.py +209 -208
- tplinkrouterc6u/client/vr.py +129 -0
- tplinkrouterc6u/common/dataclass.py +1 -0
- tplinkrouterc6u/provider.py +21 -15
- {tplinkrouterc6u-5.4.2.dist-info → tplinkrouterc6u-5.6.0.dist-info}/METADATA +8 -1
- {tplinkrouterc6u-5.4.2.dist-info → tplinkrouterc6u-5.6.0.dist-info}/RECORD +16 -13
- {tplinkrouterc6u-5.4.2.dist-info → tplinkrouterc6u-5.6.0.dist-info}/WHEEL +1 -1
- {tplinkrouterc6u-5.4.2.dist-info → tplinkrouterc6u-5.6.0.dist-info}/LICENSE +0 -0
- {tplinkrouterc6u-5.4.2.dist-info → tplinkrouterc6u-5.6.0.dist-info}/top_level.txt +0 -0
test/test_client_c6u.py
CHANGED
|
@@ -64,6 +64,7 @@ class TestTPLinkClient(TestCase):
|
|
|
64
64
|
],
|
|
65
65
|
"guest_5g_psk_key": "",
|
|
66
66
|
"cpu_usage": 0.28,
|
|
67
|
+
"conn_type": "1",
|
|
67
68
|
"guest_2g_encryption": "none",
|
|
68
69
|
"wireless_5g_encryption": "psk",
|
|
69
70
|
"guest_5g_ssid": "TP-Link_Guest_21CC_5G",
|
|
@@ -244,6 +245,7 @@ class TestTPLinkClient(TestCase):
|
|
|
244
245
|
self.assertEqual(status.wifi_5g_enable, True)
|
|
245
246
|
self.assertEqual(status.wan_ipv4_uptime, None)
|
|
246
247
|
self.assertEqual(status.mem_usage, 0.43)
|
|
248
|
+
self.assertEqual(status.conn_type, '1')
|
|
247
249
|
self.assertEqual(status.cpu_usage, 0.28)
|
|
248
250
|
self.assertEqual(len(status.devices), 5)
|
|
249
251
|
self.assertIsInstance(status.devices[0], Device)
|
test/test_client_c80.py
ADDED
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
from unittest import main, TestCase
|
|
2
|
+
from ipaddress import IPv4Address
|
|
3
|
+
from macaddress import EUI48
|
|
4
|
+
from tplinkrouterc6u.common.dataclass import Firmware, Status, Device
|
|
5
|
+
from tplinkrouterc6u.common.dataclass import IPv4Status, IPv4Reservation, IPv4DHCPLease, VPNStatus
|
|
6
|
+
from tplinkrouterc6u import Connection, ClientException
|
|
7
|
+
from tplinkrouterc6u.client.c80 import TplinkC80Router
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
IPV4_STATUS_RESPONSE = ('00000\r\nid 1|1,0,0\r\nauthKey token\r\nreserved\r\nsetWzd 8\r\nmode 1\r\nlogLevel 3\r\n'
|
|
11
|
+
'fastpath 1\r\nmac 0 00-00-00-00-00-00\r\nmac 1 00-00-00-00-00-01\r\nwanMacType 0\r\n'
|
|
12
|
+
'modelMergeCursor 8\r\nid 4|1,0,0\r\nip 192.168.0.1\r\nmask 255.255.255.0\r\nmode 0\r\n'
|
|
13
|
+
'smartIp 1\r\ngateway 192.168.0.1\r\nid 8|1,0,0\r\nenable 1\r\npoolStart 192.168.0.100\r\n'
|
|
14
|
+
'poolEnd 192.168.0.249\r\nleaseTime 120\r\ndns 0 0.0.0.0\r\ndns 1 0.0.0.0\r\ngateway 0.0.0.0'
|
|
15
|
+
'\r\nhostName\r\nrelayEnableAll 0\r\nrelayEnable 0\r\nrelayServer 0.0.0.0\r\nid 22|1,0,0'
|
|
16
|
+
'\r\nenable 1\r\nneedPnpDetect 0\r\nocnDetect 0\r\nreserved\r\nlinkMode 0\r\nlinkType 0\r\n'
|
|
17
|
+
'id 23|1,0,0\r\nip 1.0.1.1\r\nmask 255.255.252.0\r\ngateway 1.0.0.1\r\ndns 0 8.8.8.8\r\n'
|
|
18
|
+
'dns 1 8.8.8.8\r\nstatus 1\r\ncode 0\r\nupTime 42601\r\ninPkts 12018031\r\ninOctets 1549640652'
|
|
19
|
+
'\r\noutPkts 31192286\r\noutOctets 182616925\r\ninRates 939\r\noutRates 318\r\ndualMode 0\r\n'
|
|
20
|
+
'dualIp 0.0.0.0\r\ndualMask 0.0.0.0\r\ndualGateway 0.0.0.0\r\ndualDns 0 0.0.0.0\r\n'
|
|
21
|
+
'dualDns 1 0.0.0.0\r\ndualCode 1\r\ndualStatus 3\r\ninternetDnsDetect 1\r\nid 24|1,0,0\r\n'
|
|
22
|
+
'ip 1.0.0.1\r\nmask 255.255.255.0\r\ngateway 1.0.0.1\r\ndns 0 8.8.8.8\r\ndns 1 8.8.8.8\r\n'
|
|
23
|
+
'mtu 1500')
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
IPV4_RESPONSE_TEXT = ('00000\r\nid 1|1,0,0\r\nauthKey token\r\nreserved\r\nsetWzd 8\r\nmode 1\r\nlogLevel 3'
|
|
27
|
+
'\r\nfastpath 1\r\nmac 0 00-00-00-00-00-00\r\nmac 1 00-00-00-00-00-01\r\nwanMacType 0'
|
|
28
|
+
'\r\nmodelMergeCursor 8\r\nid 4|1,0,0\r\nip 192.168.0.1\r\nmask 255.255.255.0\r\n'
|
|
29
|
+
'mode 0\r\nsmartIp 1\r\ngateway 192.168.0.1\r\nid 8|1,0,0\r\nenable 1\r\n'
|
|
30
|
+
'poolStart 192.168.0.100\r\npoolEnd 192.168.0.249\r\nleaseTime 120\r\ndns 0 0.0.0.0'
|
|
31
|
+
'\r\ndns 1 0.0.0.0\r\ngateway 0.0.0.0\r\nhostName\r\nrelayEnableAll 0\r\n'
|
|
32
|
+
'relayEnable 0\r\nrelayServer 0.0.0.0\r\nid 22|1,0,0\r\nenable 1\r\nneedPnpDetect 0'
|
|
33
|
+
'\r\nocnDetect 0\r\nreserved\r\nlinkMode 0\r\nlinkType 0\r\nid 23|1,0,0\r\n'
|
|
34
|
+
'ip 1.1.1.1\r\nmask 255.255.252.0\r\ngateway 1.1.1.2\r\ndns 0 5.8.8.8\r\n'
|
|
35
|
+
'dns 1 5.8.8.8\r\nstatus 1\r\ncode 0\r\nupTime 15000\r\ninPkts 9537954\r\n'
|
|
36
|
+
'inOctets 327534332\r\noutPkts 24449491\r\noutOctets 2189487468\r\ninRates 42346'
|
|
37
|
+
'\r\noutRates 19222\r\ndualMode 0\r\ndualIp 0.0.0.0\r\ndualMask 0.0.0.0\r\n'
|
|
38
|
+
'dualGateway 0.0.0.0\r\ndualDns 0 0.0.0.0\r\ndualDns 1 0.0.0.0\r\ndualCode 1'
|
|
39
|
+
'\r\ndualStatus 3\r\ninternetDnsDetect 1\r\nid 24|1,0,0\r\nip 1.0.0.1\r\n'
|
|
40
|
+
'mask 255.255.255.0\r\ngateway 1.0.0.1\r\ndns 0 8.8.8.8\r\ndns 1 8.8.8.8\r\nmtu 1500')
|
|
41
|
+
|
|
42
|
+
STATUS_RESPONSE_TEXT = ('00000\r\nid 1|1,0,0\r\nauthKey aaa3eKKee\r\nreserved\r\nsetWzd 8\r\nmode 1\r\n'
|
|
43
|
+
'logLevel 3\r\nfastpath 1\r\nmac 0 00-00-00-00-00-00\r\nmac 1 00-00-00-00-00-01'
|
|
44
|
+
'\r\nwanMacType 0\r\nmodelMergeCursor 8\r\nid 4|1,0,0\r\nip 192.168.0.1\r\n'
|
|
45
|
+
'mask 255.255.255.0\r\nmode 0\r\nsmartIp 1\r\ngateway 192.168.0.1\r\nid 23|1,0,0'
|
|
46
|
+
'\r\nip 100.100.100.100\r\nmask 255.255.252.0\r\ngateway 100.100.105.1\r\n'
|
|
47
|
+
'dns 0 100.100.0.1\r\ndns 1 100.100.0.1\r\nstatus 1\r\ncode 0\r\nupTime 30814980'
|
|
48
|
+
'\r\ninPkts 3014881\r\ninOctets 1502000045\r\noutPkts 8216676\r\noutOctets 2500478193'
|
|
49
|
+
'\r\ninRates 337\r\noutRates 714\r\ndualMode 0\r\ndualIp 0.0.0.0\r\ndualMask 0.0.0.0'
|
|
50
|
+
'\r\ndualGateway 0.0.0.0\r\ndualDns 0 0.0.0.0\r\ndualDns 1 0.0.0.0\r\ndualCode 0'
|
|
51
|
+
'\r\ndualStatus 0\r\ninternetDnsDetect 1\r\nid 13|1,0,0\r\nip 0 192.168.0.1\r\n'
|
|
52
|
+
'ip 1 192.168.0.2\r\nip 2 192.168.0.3\r\nip 3 192.168.0.4\r\nip 4 192.168.0.5'
|
|
53
|
+
'\r\nip 5 192.168.0.6\r\nmac 0 00-00-00-00-00-02\r\nmac 1 00-00-00-00-00-03'
|
|
54
|
+
'\r\nmac 2 00-00-00-00-00-04\r\nmac 3 00-00-00-00-00-05\r\nmac 4 00-00-00-00-00-06'
|
|
55
|
+
'\r\nmac 5 00-00-00-00-00-07\r\nbindEntry 0 0\r\nbindEntry 1 0\r\nbindEntry 2 0'
|
|
56
|
+
'\r\nbindEntry 3 0\r\nbindEntry 4 0\r\nbindEntry 5 0\r\nstaMgtEntry 0 0\r\n'
|
|
57
|
+
'staMgtEntry 1 0\r\nstaMgtEntry 2 0\r\nstaMgtEntry 3 0\r\nstaMgtEntry 4 1'
|
|
58
|
+
'\r\nstaMgtEntry 5 0\r\ntype 0 3\r\ntype 1 1\r\ntype 2 2\r\ntype 3 1\r\ntype 4 13'
|
|
59
|
+
'\r\ntype 5 0\r\nonline 0 0\r\nonline 1 0\r\nonline 2 1\r\nonline 3 1\r\nonline 4 1'
|
|
60
|
+
'\r\nonline 5 1\r\nblocked 0 0\r\nblocked 1 0\r\nblocked 2 0\r\nblocked 3 0\r\n'
|
|
61
|
+
'blocked 4 0\r\nblocked 5 0\r\nqosPrior 0 0\r\nqosPrior 1 0\r\nqosPrior 2 0\r\n'
|
|
62
|
+
'qosPrior 3 0\r\nqosPrior 4 0\r\nqosPrior 5 0\r\nup 0 0\r\nup 1 0\r\nup 2 30\r\n'
|
|
63
|
+
'up 3 800\r\nup 4 1824\r\nup 5 600\r\ndown 0 0\r\ndown 1 0\r\ndown 2 200\r\n'
|
|
64
|
+
'down 3 400\r\ndown 4 800\r\ndown 5 50\r\nupLimit 0 204800\r\nupLimit 1 204800\r\n'
|
|
65
|
+
'upLimit 2 204800\r\nupLimit 3 204800\r\nupLimit 4 204800\r\nupLimit 5 204800\r\n'
|
|
66
|
+
'downLimit 0 1048576\r\ndownLimit 1 1048576\r\ndownLimit 2 1048576\r\n'
|
|
67
|
+
'downLimit 3 1048576\r\ndownLimit 4 1048576\r\ndownLimit 5 1048576\r\nname 0 Laptop'
|
|
68
|
+
'\r\nname 1 iPhone\r\nname 2 Laptop2\r\nname 3 iPhone2\r\nname 4 IoT_thing\r\n'
|
|
69
|
+
'name 5 PC\r\nuBandwidth 0 0\r\nuBandwidth 1 0\r\nuBandwidth 2 0\r\nuBandwidth 3 0'
|
|
70
|
+
'\r\nuBandwidth 4 0\r\nuBandwidth 5 0\r\nuStandard 0 0\r\nuStandard 1 0\r\n'
|
|
71
|
+
'uStandard 2 0\r\nuStandard 3 2\r\nuStandard 4 2\r\nuStandard 5 0\r\ndevType 0 0'
|
|
72
|
+
'\r\ndevType 1 0\r\ndevType 2 0\r\ndevType 3 0\r\ndevType 4 0\r\ndevType 5 0\r\n'
|
|
73
|
+
'priTime 0 0\r\npriTime 1 0\r\npriTime 2 0\r\npriTime 3 0\r\npriTime 4 0\r\n'
|
|
74
|
+
'priTime 5 0\r\nleaseTime 0 0\r\nleaseTime 1 0\r\nleaseTime 2 0\r\nleaseTime 3 0'
|
|
75
|
+
'\r\nleaseTime 4 0\r\nleaseTime 5 0\r\ntotalVal 0 450\r\ntotalVal 1 5\r\n'
|
|
76
|
+
'totalVal 2 13\r\ntotalVal 3 956\r\ntotalVal 4 13\r\ntotalVal 5 53\r\ntotalUnit 0 2'
|
|
77
|
+
'\r\ntotalUnit 1 2\r\ntotalUnit 2 2\r\ntotalUnit 3 2\r\ntotalUnit 4 2\r\n'
|
|
78
|
+
'totalUnit 5 2\r\ndhcpsEntry 0 0\r\ndhcpsEntry 1 0\r\ndhcpsEntry 2 0\r\n'
|
|
79
|
+
'dhcpsEntry 3 0\r\ndhcpsEntry 4 0\r\ndhcpsEntry 5 0\r\nduration 0 0\r\n'
|
|
80
|
+
'duration 1 0\r\nduration 2 0\r\nduration 3 73\r\nduration 4 5388\r\n'
|
|
81
|
+
'duration 5 8559\r\ntxRate 0 0\r\ntxRate 1 0\r\ntxRate 2 0\r\ntxRate 3 156\r\n'
|
|
82
|
+
'txRate 4 130\r\ntxRate 5 0\r\nrxRate 0 0\r\nrxRate 1 0\r\nrxRate 2 0\r\n'
|
|
83
|
+
'rxRate 3 130\r\nrxRate 4 173\r\nrxRate 5 0\r\naveRssi 0 0\r\naveRssi 1 0\r\n'
|
|
84
|
+
'aveRssi 2 0\r\naveRssi 3 33\r\naveRssi 4 46\r\naveRssi 5 0\r\nslEnable 0 0\r\n'
|
|
85
|
+
'slEnable 1 0\r\nslEnable 2 0\r\nslEnable 3 0\r\nslEnable 4 0\r\nslEnable 5 0'
|
|
86
|
+
'\r\npriScheStatus 0 0\r\npriScheStatus 1 0\r\npriScheStatus 2 0\r\n'
|
|
87
|
+
'priScheStatus 3 0\r\npriScheStatus 4 0\r\npriScheStatus 5 0\r\nstart 0 0\r\n'
|
|
88
|
+
'start 1 0\r\nstart 2 0\r\nstart 3 0\r\nstart 4 0\r\nstart 5 0\r\nend 0 0\r\n'
|
|
89
|
+
'end 1 0\r\nend 2 0\r\nend 3 0\r\nend 4 0\r\nend 5 0\r\nday 0 0\r\nday 1 0\r\n'
|
|
90
|
+
'day 2 0\r\nday 3 0\r\nday 4 0\r\nday 5 0\r\nstartMin 0 0\r\nstartMin 1 0\r\n'
|
|
91
|
+
'startMin 2 0\r\nstartMin 3 0\r\nstartMin 4 0\r\nstartMin 5 0\r\nendMin 0 0\r\n'
|
|
92
|
+
'endMin 1 0\r\nendMin 2 0\r\nendMin 3 0\r\nendMin 4 0\r\nendMin 5 0\r\nrate 0 0'
|
|
93
|
+
'\r\nrate 1 0\r\nrate 2 0\r\nrate 3 156\r\nrate 4 173\r\nrate 5 0\r\ntxPkt 0 0'
|
|
94
|
+
'\r\ntxPkt 1 0\r\ntxPkt 2 0\r\ntxPkt 3 42602\r\ntxPkt 4 119683\r\ntxPkt 5 0'
|
|
95
|
+
'\r\nrxPkt 0 0\r\nrxPkt 1 0\r\nrxPkt 2 0\r\nrxPkt 3 6343\r\nrxPkt 4 275076\r\n'
|
|
96
|
+
'rxPkt 5 0\r\nid 33|1,1,0\r\nuUnit 0\r\ncSsidPrefix\r\nuRadiusIp 0.0.0.0\r\n'
|
|
97
|
+
'uRadiusGKUpdateIntvl 0\r\nuPskGKUpdateIntvl 0\r\nuKeyLength 0 0\r\nuKeyLength 1 0'
|
|
98
|
+
'\r\nuKeyLength 2 0\r\nuKeyLength 3 0\r\ncKeyVal 0\r\ncKeyVal 1\r\ncKeyVal 2\r\n'
|
|
99
|
+
'cKeyVal 3\r\nuRadiusPort 1812\r\nuKeyType 0\r\nuDefaultKey 1\r\nbEnable 1\r\n'
|
|
100
|
+
'bBcastSsid 1\r\ncSsid TP-Link\r\nbSecurityEnable 1\r\nuAuthType 3\r\nuWEPSecOpt 3'
|
|
101
|
+
'\r\nuRadiusSecOpt 3\r\nuPSKSecOpt 2\r\nuRadiusEncryptType 1\r\nuPSKEncryptType 3'
|
|
102
|
+
'\r\ncRadiusSecret\r\ncPskSecret admin\r\nbSecCheck 0\r\nbEnabled 1\r\n'
|
|
103
|
+
'cUsrPIN 11100111\r\nbConfigured 1\r\nbIsLocked 0\r\nbEnRtPIN 1\r\n'
|
|
104
|
+
'bWifiBtnRecEnable 1\r\nuVid 0\r\nbMumimo 0\r\nbMwdsEnable 0\r\nbLanAccess 1'
|
|
105
|
+
'\r\nSecurityType 2\r\nbApIsolated 0\r\neffectiveTime 0\r\nuMaxUploadSpeed -1'
|
|
106
|
+
'\r\nuMaxDownloadSpeed -1\r\nbwCtrlEnable 0\r\nenableBackup 1\r\nbTr069APEnable 0'
|
|
107
|
+
'\r\nbTr069SSIDEnable 0\r\nid 33|2,1,0\r\nuUnit 0\r\ncSsidPrefix\r\nuRadiusIp 0.0.0.0'
|
|
108
|
+
'\r\nuRadiusGKUpdateIntvl 0\r\nuPskGKUpdateIntvl 0\r\nuKeyLength 0 0\r\nuKeyLength 1 0'
|
|
109
|
+
'\r\nuKeyLength 2 0\r\nuKeyLength 3 0\r\ncKeyVal 0\r\ncKeyVal 1\r\ncKeyVal 2\r\n'
|
|
110
|
+
'cKeyVal 3\r\nuRadiusPort 1812\r\nuKeyType 0\r\nuDefaultKey 1\r\nbEnable 1\r\n'
|
|
111
|
+
'bBcastSsid 1\r\ncSsid TP-Link\r\nbSecurityEnable 1\r\nuAuthType 3\r\nuWEPSecOpt 3'
|
|
112
|
+
'\r\nuRadiusSecOpt 3\r\nuPSKSecOpt 2\r\nuRadiusEncryptType 1\r\nuPSKEncryptType 3'
|
|
113
|
+
'\r\ncRadiusSecret\r\ncPskSecret admin\r\nbSecCheck 0\r\nbEnabled 1\r\n'
|
|
114
|
+
'cUsrPIN 11100111\r\nbConfigured 1\r\nbIsLocked 0\r\nbEnRtPIN 1\r\nbWifiBtnRecEnable 1'
|
|
115
|
+
'\r\nuVid 0\r\nbMumimo 0\r\nbMwdsEnable 0\r\nbLanAccess 1\r\nSecurityType 2\r\n'
|
|
116
|
+
'bApIsolated 0\r\neffectiveTime 0\r\nuMaxUploadSpeed -1\r\nuMaxDownloadSpeed -1\r\n'
|
|
117
|
+
'bwCtrlEnable 0\r\nenableBackup 1\r\nbTr069APEnable 0\r\nbTr069SSIDEnable 0\r\n'
|
|
118
|
+
'id 33|1,2,0\r\nuUnit 1\r\ncSsidPrefix Guest\r\nuRadiusIp 0.0.0.0\r\n'
|
|
119
|
+
'uRadiusGKUpdateIntvl 0\r\nuPskGKUpdateIntvl 0\r\nuKeyLength 0 0\r\nuKeyLength 1 0'
|
|
120
|
+
'\r\nuKeyLength 2 0\r\nuKeyLength 3 0\r\ncKeyVal 0\r\ncKeyVal 1\r\ncKeyVal 2\r\n'
|
|
121
|
+
'cKeyVal 3\r\nuRadiusPort 1812\r\nuKeyType 0\r\nuDefaultKey 1\r\nbEnable 0\r\n'
|
|
122
|
+
'bBcastSsid 1\r\ncSsid TP-Link_Guest\r\nbSecurityEnable 0\r\nuAuthType 3\r\n'
|
|
123
|
+
'uWEPSecOpt 3\r\nuRadiusSecOpt 3\r\nuPSKSecOpt 3\r\nuRadiusEncryptType 1\r\n'
|
|
124
|
+
'uPSKEncryptType 3\r\ncRadiusSecret\r\ncPskSecret\r\nbSecCheck 0\r\nbEnabled 1'
|
|
125
|
+
'\r\ncUsrPIN 11100111\r\nbConfigured 0\r\nbIsLocked 0\r\nbEnRtPIN 0\r\n'
|
|
126
|
+
'bWifiBtnRecEnable 1\r\nuVid 0\r\nbMumimo 0\r\nbMwdsEnable 0\r\nbLanAccess 0'
|
|
127
|
+
'\r\nSecurityType 1\r\nbApIsolated 1\r\neffectiveTime 0\r\nuMaxUploadSpeed -1'
|
|
128
|
+
'\r\nuMaxDownloadSpeed -1\r\nbwCtrlEnable 0\r\nenableBackup 0\r\nbTr069APEnable 0'
|
|
129
|
+
'\r\nbTr069SSIDEnable 0\r\nid 33|2,2,0\r\nuUnit 1\r\ncSsidPrefix Guest\r\n'
|
|
130
|
+
'uRadiusIp 0.0.0.0\r\nuRadiusGKUpdateIntvl 0\r\nuPskGKUpdateIntvl 0\r\n'
|
|
131
|
+
'uKeyLength 0 0\r\nuKeyLength 1 0\r\nuKeyLength 2 0\r\nuKeyLength 3 0\r\n'
|
|
132
|
+
'cKeyVal 0\r\ncKeyVal 1\r\ncKeyVal 2\r\ncKeyVal 3\r\nuRadiusPort 1812\r\n'
|
|
133
|
+
'uKeyType 0\r\nuDefaultKey 1\r\nbEnable 0\r\nbBcastSsid 1\r\ncSsid TP-Link_Guest_5G'
|
|
134
|
+
'\r\nbSecurityEnable 0\r\nuAuthType 3\r\nuWEPSecOpt 3\r\nuRadiusSecOpt 3\r\n'
|
|
135
|
+
'uPSKSecOpt 3\r\nuRadiusEncryptType 1\r\nuPSKEncryptType 3\r\ncRadiusSecret\r\n'
|
|
136
|
+
'cPskSecret\r\nbSecCheck 0\r\nbEnabled 1\r\ncUsrPIN 11100111\r\nbConfigured 0\r\n'
|
|
137
|
+
'bIsLocked 0\r\nbEnRtPIN 0\r\nbWifiBtnRecEnable 1\r\nuVid 0\r\nbMumimo 0\r\n'
|
|
138
|
+
'bMwdsEnable 0\r\nbLanAccess 0\r\nSecurityType 1\r\nbApIsolated 1\r\neffectiveTime 0'
|
|
139
|
+
'\r\nuMaxUploadSpeed -1\r\nuMaxDownloadSpeed -1\r\nbwCtrlEnable 0\r\nenableBackup 0'
|
|
140
|
+
'\r\nbTr069APEnable 0\r\nbTr069SSIDEnable 0\r\nid 33|1,9,0\r\nuUnit 9\r\n'
|
|
141
|
+
'cSsidPrefix IoT\r\nuRadiusIp 0.0.0.0\r\nuRadiusGKUpdateIntvl 0\r\n'
|
|
142
|
+
'uPskGKUpdateIntvl 0\r\nuKeyLength 0 0\r\nuKeyLength 1 0\r\nuKeyLength 2 0\r\n'
|
|
143
|
+
'uKeyLength 3 0\r\ncKeyVal 0\r\ncKeyVal 1\r\ncKeyVal 2\r\ncKeyVal 3\r\n'
|
|
144
|
+
'uRadiusPort 1812\r\nuKeyType 0\r\nuDefaultKey 1\r\nbEnable 1\r\nbBcastSsid 0'
|
|
145
|
+
'\r\ncSsid TP-Link_IoT\r\nbSecurityEnable 1\r\nuAuthType 3\r\nuWEPSecOpt 3\r\n'
|
|
146
|
+
'uRadiusSecOpt 3\r\nuPSKSecOpt 2\r\nuRadiusEncryptType 1\r\nuPSKEncryptType 3'
|
|
147
|
+
'\r\ncRadiusSecret\r\ncPskSecret 11100111\r\nbSecCheck 0\r\nbEnabled 1\r\n'
|
|
148
|
+
'cUsrPIN 11100111\r\nbConfigured 0\r\nbIsLocked 0\r\nbEnRtPIN 0\r\nbWifiBtnRecEnable 1'
|
|
149
|
+
'\r\nuVid 0\r\nbMumimo 0\r\nbMwdsEnable 0\r\nbLanAccess 1\r\nSecurityType 2\r\n'
|
|
150
|
+
'bApIsolated 0\r\neffectiveTime 0\r\nuMaxUploadSpeed -1\r\nuMaxDownloadSpeed -1'
|
|
151
|
+
'\r\nbwCtrlEnable 0\r\nenableBackup 0\r\nbTr069APEnable 0\r\nbTr069SSIDEnable 0'
|
|
152
|
+
'\r\nid 33|2,9,0\r\nuUnit 9\r\ncSsidPrefix IoT\r\nuRadiusIp 0.0.0.0\r\n'
|
|
153
|
+
'uRadiusGKUpdateIntvl 0\r\nuPskGKUpdateIntvl 0\r\nuKeyLength 0 0\r\nuKeyLength 1 0'
|
|
154
|
+
'\r\nuKeyLength 2 0\r\nuKeyLength 3 0\r\ncKeyVal 0\r\ncKeyVal 1\r\ncKeyVal 2\r\n'
|
|
155
|
+
'cKeyVal 3\r\nuRadiusPort 1812\r\nuKeyType 0\r\nuDefaultKey 1\r\nbEnable 1\r\n'
|
|
156
|
+
'bBcastSsid 0\r\ncSsid TP-Link_IoT\r\nbSecurityEnable 1\r\nuAuthType 3\r\n'
|
|
157
|
+
'uWEPSecOpt 3\r\nuRadiusSecOpt 3\r\nuPSKSecOpt 2\r\nuRadiusEncryptType 1\r\n'
|
|
158
|
+
'uPSKEncryptType 3\r\ncRadiusSecret\r\ncPskSecret 11100111\r\nbSecCheck 0\r\n'
|
|
159
|
+
'bEnabled 1\r\ncUsrPIN 11100111\r\nbConfigured 0\r\nbIsLocked 0\r\nbEnRtPIN 0'
|
|
160
|
+
'\r\nbWifiBtnRecEnable 1\r\nuVid 0\r\nbMumimo 0\r\nbMwdsEnable 0\r\nbLanAccess 1'
|
|
161
|
+
'\r\nSecurityType 2\r\nbApIsolated 0\r\neffectiveTime 0\r\nuMaxUploadSpeed -1'
|
|
162
|
+
'\r\nuMaxDownloadSpeed -1\r\nbwCtrlEnable 0\r\nenableBackup 0\r\nbTr069APEnable 0'
|
|
163
|
+
'\r\nbTr069SSIDEnable 0')
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
class ResponseMock():
|
|
167
|
+
def __init__(self, text, status_code=0):
|
|
168
|
+
self.text = text
|
|
169
|
+
self.status_code = status_code
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
class TplinkC80RouterTest(TplinkC80Router):
|
|
173
|
+
response = ''
|
|
174
|
+
|
|
175
|
+
def request(self, code: int, asyn: int, use_token: bool = False, data: str = None) -> dict | None:
|
|
176
|
+
|
|
177
|
+
# Responses
|
|
178
|
+
if code == 2 and asyn == 1:
|
|
179
|
+
if use_token is False:
|
|
180
|
+
if data == '0|1,0,0':
|
|
181
|
+
# Supports
|
|
182
|
+
return ResponseMock(self.response, 200)
|
|
183
|
+
else:
|
|
184
|
+
# Authorization
|
|
185
|
+
return ResponseMock('blabla\r\nblabla\r\nblabla\r\nauthinfo1\r\nauthinfo2')
|
|
186
|
+
elif use_token is True:
|
|
187
|
+
return ResponseMock(self.response)
|
|
188
|
+
elif (code == 16 or code == 7) and asyn == 0:
|
|
189
|
+
if use_token is False:
|
|
190
|
+
# Authorization
|
|
191
|
+
return ResponseMock('00000\r\n010001\r\nBC97577E65233B3E1137C61091D64176C334E52AD78FFBDDABC826B685435E'
|
|
192
|
+
'9D3DE83FE70C2AC62D6B13BD8EADA10B5623F9354DA0E99636A4F5519CA2DC2DC3\r\n12345656')
|
|
193
|
+
elif use_token is True:
|
|
194
|
+
# Authorization
|
|
195
|
+
return ResponseMock('00000')
|
|
196
|
+
|
|
197
|
+
raise ClientException()
|
|
198
|
+
|
|
199
|
+
def set_encrypted_response(self, response_text) -> None:
|
|
200
|
+
self.response = self._encrypt_body(response_text).split('data=')[1]
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
class TestTPLinkClient(TestCase):
|
|
204
|
+
|
|
205
|
+
def test_supports(self) -> None:
|
|
206
|
+
response = ('00000\r\nid 0|1,0,0\r\nfullName AC1900%20MU-MIMO%20Wi-Fi%20Router\r\nfacturer TP-Link\r\nmodelName'
|
|
207
|
+
' Archer%20C80\r\nmodelVer 2.20\r\nsoftVer 1.13.15%20Build%20240812%20Rel.53972n(4555)\r\nhardVer'
|
|
208
|
+
' Archer%20C80%202.20\r\nspecialId 0x5545\r\ncountryCode 0x455a\r\nmainVer 0x5a010d0f\r\nminorVer'
|
|
209
|
+
' 0x1\r\nfacturerType 0')
|
|
210
|
+
|
|
211
|
+
client = TplinkC80RouterTest('', '')
|
|
212
|
+
client.response = response
|
|
213
|
+
supports = client.supports()
|
|
214
|
+
self.assertTrue(supports)
|
|
215
|
+
|
|
216
|
+
def test_authorize(self) -> None:
|
|
217
|
+
client = TplinkC80RouterTest('', '')
|
|
218
|
+
client.authorize()
|
|
219
|
+
|
|
220
|
+
encryption = client._encryption
|
|
221
|
+
self.assertEqual(encryption.ee_rsa, '010001')
|
|
222
|
+
self.assertEqual(encryption.nn_rsa, 'BC97577E65233B3E1137C61091D64176C334E52AD78FFBDDABC826B685435E9D3DE83FE70C'
|
|
223
|
+
'2AC62D6B13BD8EADA10B5623F9354DA0E99636A4F5519CA2DC2DC3')
|
|
224
|
+
self.assertEqual(encryption.seq, '12345656')
|
|
225
|
+
|
|
226
|
+
def test_get_firmware(self) -> None:
|
|
227
|
+
response = ('00000\r\nid 0|1,0,0\r\nfullName AC1900%20MU-MIMO%20Wi-Fi%20Router\r\nfacturer TP-Link\r\nmodelName'
|
|
228
|
+
' Archer%20C80\r\nmodelVer 2.20\r\nsoftVer 1.13.15%20Build%20240812%20Rel.53972n(4555)\r\nhardVer'
|
|
229
|
+
' Archer%20C80%202.20\r\nspecialId 0x5545\r\ncountryCode 0x455a\r\nmainVer 0x5a010d0f\r\nminorVer'
|
|
230
|
+
' 0x1\r\nfacturerType 0')
|
|
231
|
+
|
|
232
|
+
client = TplinkC80RouterTest('', '')
|
|
233
|
+
client.authorize()
|
|
234
|
+
|
|
235
|
+
client.set_encrypted_response(response)
|
|
236
|
+
|
|
237
|
+
firmware = client.get_firmware()
|
|
238
|
+
|
|
239
|
+
self.assertIsInstance(firmware, Firmware)
|
|
240
|
+
self.assertEqual(firmware.hardware_version, 'Archer C80 2.20')
|
|
241
|
+
self.assertEqual(firmware.model, 'Archer C80')
|
|
242
|
+
self.assertEqual(firmware.firmware_version, '1.13.15 Build 240812 Rel.53972n(4555)')
|
|
243
|
+
|
|
244
|
+
def test_get_ipv4_status(self) -> None:
|
|
245
|
+
|
|
246
|
+
client = TplinkC80RouterTest('', '')
|
|
247
|
+
client.authorize()
|
|
248
|
+
|
|
249
|
+
client.set_encrypted_response(IPV4_STATUS_RESPONSE)
|
|
250
|
+
|
|
251
|
+
ipv4_status: IPv4Status = client.get_ipv4_status()
|
|
252
|
+
|
|
253
|
+
self.assertIsInstance(ipv4_status, IPv4Status)
|
|
254
|
+
self.assertEqual(ipv4_status.wan_macaddress, EUI48('00-00-00-00-00-01'))
|
|
255
|
+
self.assertEqual(ipv4_status._wan_ipv4_ipaddr, IPv4Address('1.0.1.1'))
|
|
256
|
+
self.assertEqual(ipv4_status._wan_ipv4_gateway, IPv4Address('1.0.0.1'))
|
|
257
|
+
self.assertEqual(ipv4_status._wan_ipv4_conntype, 'Dynamic IP')
|
|
258
|
+
self.assertEqual(ipv4_status._wan_ipv4_netmask, IPv4Address('255.255.252.0'))
|
|
259
|
+
self.assertEqual(ipv4_status._wan_ipv4_pridns, IPv4Address('8.8.8.8'))
|
|
260
|
+
self.assertEqual(ipv4_status._wan_ipv4_snddns, IPv4Address('8.8.8.8'))
|
|
261
|
+
self.assertEqual(ipv4_status._lan_macaddr, EUI48('00-00-00-00-00-00'))
|
|
262
|
+
self.assertEqual(ipv4_status._lan_ipv4_ipaddr, IPv4Address('192.168.0.1'))
|
|
263
|
+
self.assertEqual(ipv4_status.lan_ipv4_dhcp_enable, True)
|
|
264
|
+
self.assertEqual(ipv4_status._lan_ipv4_netmask, IPv4Address('255.255.255.0'))
|
|
265
|
+
|
|
266
|
+
def test_get_ipv4_reservations(self) -> None:
|
|
267
|
+
response = ('00000\r\nid 12|1,0,0\r\nip 0 192.168.0.112\r\nip 1 0.0.0.0\r\nmac 0 00-00-00-00-00-00\r\n'
|
|
268
|
+
'mac 1 00-00-00-00-00-01\r\nreserved 0\r\nreserved 1\r\nbindEntry 0 0\r\nbindEntry 1 0\r\n'
|
|
269
|
+
'staMgtEntry 0 0\r\nstaMgtEntry 1 1\r\nname 0 Galaxy-S21\r\nname 1 Camera\r\nreserved_name 0\r\n'
|
|
270
|
+
'reserved_name 1\r\nblocked 0 0\r\nblocked 1 0\r\nupLimit 0 0\r\nupLimit 1 0\r\ndownLimit 0 0'
|
|
271
|
+
'\r\ndownLimit 1 0\r\nqosEntry 0 0\r\nqosEntry 1 0\r\npriTime 0 0\r\npriTime 1 0\r\n'
|
|
272
|
+
'dhcpsEntry 0 1\r\ndhcpsEntry 1 0\r\ndhcpsEnable 0 1\r\ndhcpsEnable 1 0\r\nslEnable 0 0\r\n'
|
|
273
|
+
'slEnable 1 0\r\nstart 0 0\r\nstart 1 0\r\nend 0 0\r\nend 1 0\r\nday 0 0\r\nday 1 0\r\n'
|
|
274
|
+
'startMin 0 0\r\nstartMin 1 0\r\nendMin 0 0\r\nendMin 1 0\r\ndevType 0 0\r\ndevType 1 0\r\n'
|
|
275
|
+
'reserved2 0 0\r\nreserved2 1 0\r\ndisable 1')
|
|
276
|
+
|
|
277
|
+
client = TplinkC80RouterTest('', '')
|
|
278
|
+
client.authorize()
|
|
279
|
+
|
|
280
|
+
client.set_encrypted_response(response)
|
|
281
|
+
|
|
282
|
+
ipv4_reservations: list[IPv4Reservation] = client.get_ipv4_reservations()
|
|
283
|
+
ipv4_reservation: IPv4Reservation = ipv4_reservations[0]
|
|
284
|
+
|
|
285
|
+
self.assertIsInstance(ipv4_reservation, IPv4Reservation)
|
|
286
|
+
self.assertEqual(ipv4_reservation.macaddress, EUI48('00-00-00-00-00-00'))
|
|
287
|
+
self.assertEqual(ipv4_reservation.ipaddress, IPv4Address('192.168.0.112'))
|
|
288
|
+
self.assertEqual(ipv4_reservation.hostname, 'Galaxy-S21')
|
|
289
|
+
self.assertEqual(ipv4_reservation.enabled, True)
|
|
290
|
+
|
|
291
|
+
def test_get_dhcp_leases(self) -> None:
|
|
292
|
+
response = ('00000\r\nid 9|1,0,0\r\nhostName 0 Galaxy-S21\r\nhostName 1 iPhone\r\nhostName 2 PC\r\n'
|
|
293
|
+
'hostName 3 Laptop\r\nmac 0 00-00-00-00-00-00\r\nmac 1 00-00-00-00-00-01\r\n'
|
|
294
|
+
'mac 2 00-00-00-00-00-02\r\nmac 3 00-00-00-00-00-03\r\nreserved 0\r\nreserved 1'
|
|
295
|
+
'\r\nreserved 2\r\nreserved 3\r\nstate 0 5\r\nstate 1 5\r\nstate 2 5\r\nstate 3 5'
|
|
296
|
+
'\r\nip 0 192.168.0.112\r\nip 1 192.168.0.101\r\nip 2 192.168.0.245\r\nip 3 192.168.0.186'
|
|
297
|
+
'\r\nexpires 0 4294967295\r\nexpires 1 3669\r\nexpires 2 4025\r\nexpires 3 4202')
|
|
298
|
+
|
|
299
|
+
client = TplinkC80RouterTest('', '')
|
|
300
|
+
client.authorize()
|
|
301
|
+
|
|
302
|
+
client.set_encrypted_response(response)
|
|
303
|
+
|
|
304
|
+
dhcp_leases: list[IPv4DHCPLease] = client.get_dhcp_leases()
|
|
305
|
+
|
|
306
|
+
self.assertIsInstance(dhcp_leases[0], IPv4DHCPLease)
|
|
307
|
+
self.assertEqual(dhcp_leases[0].macaddress, EUI48('00-00-00-00-00-00'))
|
|
308
|
+
self.assertEqual(dhcp_leases[0].ipaddress, IPv4Address('192.168.0.112'))
|
|
309
|
+
self.assertEqual(dhcp_leases[0].hostname, 'Galaxy-S21')
|
|
310
|
+
self.assertEqual(dhcp_leases[0].lease_time, 'expires 4294967295')
|
|
311
|
+
|
|
312
|
+
self.assertIsInstance(dhcp_leases[1], IPv4DHCPLease)
|
|
313
|
+
self.assertEqual(dhcp_leases[1].macaddress, EUI48('00-00-00-00-00-01'))
|
|
314
|
+
self.assertEqual(dhcp_leases[1].ipaddress, IPv4Address('192.168.0.101'))
|
|
315
|
+
self.assertEqual(dhcp_leases[1].hostname, 'iPhone')
|
|
316
|
+
self.assertEqual(dhcp_leases[1].lease_time, 'expires 3669')
|
|
317
|
+
|
|
318
|
+
def test_get_vpn_status(self) -> None:
|
|
319
|
+
response = '00000\r\nid 22|1,0,0\r\nenable 1\r\nneedPnpDetect 0\r\nocnDetect 0\r\n' \
|
|
320
|
+
'reserved\r\nlinkMode 0\r\nlinkType 4'
|
|
321
|
+
|
|
322
|
+
client = TplinkC80RouterTest('', '')
|
|
323
|
+
client.authorize()
|
|
324
|
+
|
|
325
|
+
client.set_encrypted_response(response)
|
|
326
|
+
|
|
327
|
+
vpn_status: VPNStatus = client.get_vpn_status()
|
|
328
|
+
|
|
329
|
+
self.assertIsInstance(vpn_status, VPNStatus)
|
|
330
|
+
self.assertEqual(vpn_status.openvpn_clients_total, 0)
|
|
331
|
+
self.assertEqual(vpn_status.pptpvpn_clients_total, 0)
|
|
332
|
+
self.assertEqual(vpn_status.pptpvpn_enable, True)
|
|
333
|
+
|
|
334
|
+
def test_get_status(self) -> None:
|
|
335
|
+
client = TplinkC80RouterTest('', '')
|
|
336
|
+
client.authorize()
|
|
337
|
+
|
|
338
|
+
client.set_encrypted_response(STATUS_RESPONSE_TEXT)
|
|
339
|
+
status = client.get_status()
|
|
340
|
+
|
|
341
|
+
self.assertIsInstance(status, Status)
|
|
342
|
+
self.assertEqual(status.wan_macaddr, '00-00-00-00-00-01')
|
|
343
|
+
self.assertIsInstance(status.wan_macaddress, EUI48)
|
|
344
|
+
self.assertEqual(status.lan_macaddr, '00-00-00-00-00-00')
|
|
345
|
+
self.assertIsInstance(status.lan_macaddress, EUI48)
|
|
346
|
+
self.assertEqual(status.wan_ipv4_addr, '100.100.100.100')
|
|
347
|
+
self.assertIsInstance(status.lan_ipv4_address, IPv4Address)
|
|
348
|
+
self.assertEqual(status.lan_ipv4_addr, '192.168.0.1')
|
|
349
|
+
self.assertEqual(status.wan_ipv4_gateway, '100.100.105.1')
|
|
350
|
+
self.assertIsInstance(status.wan_ipv4_address, IPv4Address)
|
|
351
|
+
self.assertEqual(status.wired_total, 1)
|
|
352
|
+
self.assertEqual(status.wifi_clients_total, 1)
|
|
353
|
+
self.assertEqual(status.guest_clients_total, 1)
|
|
354
|
+
self.assertEqual(status.clients_total, 4)
|
|
355
|
+
self.assertEqual(status.iot_clients_total, 1)
|
|
356
|
+
self.assertFalse(status.guest_2g_enable)
|
|
357
|
+
self.assertFalse(status.guest_5g_enable)
|
|
358
|
+
self.assertTrue(status.iot_2g_enable)
|
|
359
|
+
self.assertTrue(status.iot_5g_enable)
|
|
360
|
+
self.assertTrue(status.wifi_2g_enable)
|
|
361
|
+
self.assertTrue(status.wifi_5g_enable)
|
|
362
|
+
self.assertEqual(status.wan_ipv4_uptime, 308149)
|
|
363
|
+
self.assertEqual(status.mem_usage, None)
|
|
364
|
+
self.assertEqual(status.cpu_usage, None)
|
|
365
|
+
self.assertEqual(len(status.devices), 6)
|
|
366
|
+
|
|
367
|
+
device = status.devices[0]
|
|
368
|
+
self.assertIsInstance(device, Device)
|
|
369
|
+
self.assertEqual(device.type, Connection.UNKNOWN)
|
|
370
|
+
self.assertEqual(device.macaddr, '00-00-00-00-00-02')
|
|
371
|
+
self.assertIsInstance(device.macaddress, EUI48)
|
|
372
|
+
self.assertEqual(device.ipaddr, '192.168.0.1')
|
|
373
|
+
self.assertIsInstance(device.ipaddress, IPv4Address)
|
|
374
|
+
self.assertEqual(device.hostname, 'Laptop')
|
|
375
|
+
self.assertEqual(device.up_speed, 0)
|
|
376
|
+
self.assertEqual(device.down_speed, 0)
|
|
377
|
+
|
|
378
|
+
device = status.devices[1]
|
|
379
|
+
self.assertIsInstance(device, Device)
|
|
380
|
+
self.assertEqual(device.type, Connection.UNKNOWN)
|
|
381
|
+
self.assertEqual(device.macaddr, '00-00-00-00-00-03')
|
|
382
|
+
self.assertIsInstance(device.macaddress, EUI48)
|
|
383
|
+
self.assertEqual(device.ipaddr, '192.168.0.2')
|
|
384
|
+
self.assertIsInstance(device.ipaddress, IPv4Address)
|
|
385
|
+
self.assertEqual(device.hostname, 'iPhone')
|
|
386
|
+
self.assertEqual(device.up_speed, 0)
|
|
387
|
+
self.assertEqual(device.down_speed, 0)
|
|
388
|
+
|
|
389
|
+
device = status.devices[2]
|
|
390
|
+
self.assertIsInstance(device, Device)
|
|
391
|
+
self.assertEqual(device.type, Connection.GUEST_2G)
|
|
392
|
+
self.assertEqual(device.macaddr, '00-00-00-00-00-04')
|
|
393
|
+
self.assertIsInstance(device.macaddress, EUI48)
|
|
394
|
+
self.assertEqual(device.ipaddr, '192.168.0.3')
|
|
395
|
+
self.assertIsInstance(device.ipaddress, IPv4Address)
|
|
396
|
+
self.assertEqual(device.hostname, 'Laptop2')
|
|
397
|
+
self.assertEqual(device.up_speed, 30)
|
|
398
|
+
self.assertEqual(device.down_speed, 200)
|
|
399
|
+
|
|
400
|
+
device = status.devices[3]
|
|
401
|
+
self.assertIsInstance(device, Device)
|
|
402
|
+
self.assertEqual(device.type, Connection.HOST_2G)
|
|
403
|
+
self.assertEqual(device.macaddr, '00-00-00-00-00-05')
|
|
404
|
+
self.assertIsInstance(device.macaddress, EUI48)
|
|
405
|
+
self.assertEqual(device.ipaddr, '192.168.0.4')
|
|
406
|
+
self.assertIsInstance(device.ipaddress, IPv4Address)
|
|
407
|
+
self.assertEqual(device.hostname, 'iPhone2')
|
|
408
|
+
self.assertEqual(device.up_speed, 800)
|
|
409
|
+
self.assertEqual(device.down_speed, 400)
|
|
410
|
+
|
|
411
|
+
device = status.devices[4]
|
|
412
|
+
self.assertIsInstance(device, Device)
|
|
413
|
+
self.assertEqual(device.type, Connection.IOT_2G)
|
|
414
|
+
self.assertEqual(device.macaddr, '00-00-00-00-00-06')
|
|
415
|
+
self.assertIsInstance(device.macaddress, EUI48)
|
|
416
|
+
self.assertEqual(device.ipaddr, '192.168.0.5')
|
|
417
|
+
self.assertIsInstance(device.ipaddress, IPv4Address)
|
|
418
|
+
self.assertEqual(device.hostname, 'IoT_thing')
|
|
419
|
+
self.assertEqual(device.up_speed, 1824)
|
|
420
|
+
self.assertEqual(device.down_speed, 800)
|
|
421
|
+
|
|
422
|
+
device = status.devices[5]
|
|
423
|
+
self.assertIsInstance(device, Device)
|
|
424
|
+
self.assertEqual(device.type, Connection.WIRED)
|
|
425
|
+
self.assertEqual(device.macaddr, '00-00-00-00-00-07')
|
|
426
|
+
self.assertIsInstance(device.macaddress, EUI48)
|
|
427
|
+
self.assertEqual(device.ipaddr, '192.168.0.6')
|
|
428
|
+
self.assertIsInstance(device.ipaddress, IPv4Address)
|
|
429
|
+
self.assertEqual(device.hostname, 'PC')
|
|
430
|
+
self.assertEqual(device.up_speed, 600)
|
|
431
|
+
self.assertEqual(device.down_speed, 50)
|
|
432
|
+
|
|
433
|
+
def test_get_ipv4(self) -> None:
|
|
434
|
+
client = TplinkC80RouterTest('', '')
|
|
435
|
+
client.authorize()
|
|
436
|
+
|
|
437
|
+
client.set_encrypted_response(IPV4_RESPONSE_TEXT)
|
|
438
|
+
ipv4status: IPv4Status = client.get_ipv4_status()
|
|
439
|
+
|
|
440
|
+
self.assertIsInstance(ipv4status, IPv4Status)
|
|
441
|
+
self.assertEqual(ipv4status._wan_macaddr, EUI48('00-00-00-00-00-01'))
|
|
442
|
+
self.assertEqual(ipv4status._wan_ipv4_ipaddr, IPv4Address('1.1.1.1'))
|
|
443
|
+
self.assertEqual(ipv4status._wan_ipv4_gateway, IPv4Address('1.1.1.2'))
|
|
444
|
+
self.assertEqual(ipv4status._wan_ipv4_conntype, 'Dynamic IP')
|
|
445
|
+
self.assertEqual(ipv4status._wan_ipv4_netmask, IPv4Address('255.255.252.0'))
|
|
446
|
+
self.assertEqual(ipv4status._wan_ipv4_pridns, IPv4Address('5.8.8.8'))
|
|
447
|
+
self.assertEqual(ipv4status._wan_ipv4_snddns, IPv4Address('5.8.8.8'))
|
|
448
|
+
self.assertEqual(ipv4status._lan_macaddr, EUI48('00-00-00-00-00-00'))
|
|
449
|
+
self.assertEqual(ipv4status._lan_ipv4_ipaddr, IPv4Address('192.168.0.1'))
|
|
450
|
+
self.assertEqual(ipv4status.lan_ipv4_dhcp_enable, True)
|
|
451
|
+
self.assertEqual(ipv4status._lan_ipv4_netmask, IPv4Address('255.255.255.0'))
|
|
452
|
+
|
|
453
|
+
|
|
454
|
+
if __name__ == '__main__':
|
|
455
|
+
main()
|
test/test_client_mr.py
CHANGED
|
@@ -310,6 +310,7 @@ X_TP_TotalPacketsReceived=467
|
|
|
310
310
|
self.assertEqual(status.wan_ipv4_addr, '192.168.30.55')
|
|
311
311
|
self.assertEqual(status.lan_ipv4_addr, '192.168.4.1')
|
|
312
312
|
self.assertEqual(status.wan_ipv4_gateway, '192.168.30.1')
|
|
313
|
+
self.assertEqual(status.conn_type, 'ipoe_1_d')
|
|
313
314
|
self.assertEqual(status.wired_total, 0)
|
|
314
315
|
self.assertEqual(status.wifi_clients_total, 1)
|
|
315
316
|
self.assertEqual(status.guest_clients_total, 0)
|
tplinkrouterc6u/__init__.py
CHANGED
|
@@ -3,7 +3,8 @@ from tplinkrouterc6u.client.deco import TPLinkDecoClient
|
|
|
3
3
|
from tplinkrouterc6u.client_abstract import AbstractRouter
|
|
4
4
|
from tplinkrouterc6u.client.mr import TPLinkMRClient
|
|
5
5
|
from tplinkrouterc6u.client.ex import TPLinkEXClient
|
|
6
|
-
from tplinkrouterc6u.client.
|
|
6
|
+
from tplinkrouterc6u.client.vr import TPLinkVRClient
|
|
7
|
+
from tplinkrouterc6u.client.c80 import TplinkC80Router
|
|
7
8
|
from tplinkrouterc6u.client.c5400x import TplinkC5400XRouter
|
|
8
9
|
from tplinkrouterc6u.client.c1200 import TplinkC1200Router
|
|
9
10
|
from tplinkrouterc6u.client.xdr import TPLinkXDRClient
|
tplinkrouterc6u/client/c6u.py
CHANGED
|
@@ -284,6 +284,7 @@ class TplinkBaseRouter(AbstractRouter, TplinkRequest):
|
|
|
284
284
|
status.wan_ipv4_uptime = data.get('wan_ipv4_uptime')
|
|
285
285
|
status.mem_usage = data.get('mem_usage')
|
|
286
286
|
status.cpu_usage = data.get('cpu_usage')
|
|
287
|
+
status.conn_type = data.get('conn_type')
|
|
287
288
|
status.wired_total = len(data.get('access_devices_wired', []))
|
|
288
289
|
status.wifi_clients_total = len(data.get('access_devices_wireless_host', []))
|
|
289
290
|
status.guest_clients_total = len(data.get('access_devices_wireless_guest', []))
|