tplinkrouterc6u 5.1.0__py3-none-any.whl → 5.2.1__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.
@@ -0,0 +1,584 @@
1
+ import json
2
+ from ipaddress import IPv4Address
3
+ from unittest import TestCase, main
4
+
5
+ from macaddress import EUI48
6
+
7
+ from tplinkrouterc6u import IPv4Status
8
+ from tplinkrouterc6u.client.xdr import TPLinkXDRClient
9
+ from tplinkrouterc6u.common.dataclass import (Device, Firmware, IPv4DHCPLease,
10
+ IPv4Reservation, Status)
11
+ from tplinkrouterc6u.common.helper import get_ip, get_mac
12
+ from tplinkrouterc6u.common.package_enum import Connection
13
+
14
+
15
+ class TestTPLinkXDRClient(TestCase):
16
+
17
+ def test_supports_false(self) -> None:
18
+ class SessionTest:
19
+ def get(self, host, timeout, verify):
20
+ class ResponseTest:
21
+ def __init__(self):
22
+ self.text = 'text'
23
+
24
+ return ResponseTest()
25
+
26
+ client = TPLinkXDRClient('', '')
27
+ client._session = SessionTest()
28
+
29
+ self.assertEqual(client.supports(), False)
30
+
31
+ def test_supports_true(self) -> None:
32
+ response = '''<!DOCTYPE html>
33
+ <html xmlns="http://www.w3.org/1999/xhtml">
34
+ <head>
35
+ <title>TL-XDR3010易展版</title>
36
+ <meta name="MobileOptimized" content="240" />
37
+ <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, minimum-scale=0.5,
38
+ maximum-scale=2.0, user-scalable=yes" />
39
+ <link rel="shortcut Icon" href="../web-static/images/icon.ico" type="image/x-icon" />
40
+ <link rel="stylesheet" href="../web-static/dynaform/class.css">
41
+ <script type="text/javascript" src="../web-static/dynaform/class.js"></script>
42
+ <script type="text/javascript" src="../web-static/dynaform/jtopo.js"></script>
43
+ </head>
44
+ <body><div id="Error"></div><div id="Confirm"></div><div id="Con"></div><div id="Help"></div><div id="Cover"></div>
45
+ <div id="Login"></div><script type="text/javascript">var gBeInCNA = "NO";var proName="TL-XDR3010易展版";pageOnload();
46
+ </script>
47
+ </body>
48
+ </html>
49
+ '''
50
+
51
+ class SessionTest:
52
+ def get(self, host, timeout, verify):
53
+ class ResponseTest:
54
+ def __init__(self):
55
+ self.text = response
56
+
57
+ return ResponseTest()
58
+
59
+ client = TPLinkXDRClient('', '')
60
+ client._session = SessionTest()
61
+
62
+ self.assertEqual(client.supports(), True)
63
+
64
+ def test_logout(self) -> None:
65
+ mock_data = json.loads('''{"error_code":0}''')
66
+ check_payload = {}
67
+
68
+ class TPLinkXDRClientTest(TPLinkXDRClient):
69
+ def _request(self, payload: dict) -> dict:
70
+ nonlocal check_payload
71
+ check_payload = payload
72
+ return mock_data
73
+
74
+ client = TPLinkXDRClientTest('', '')
75
+ client.logout()
76
+
77
+ self.assertEqual(check_payload['method'], 'do')
78
+ self.assertIn('system', check_payload)
79
+ self.assertIn('logout', check_payload['system'])
80
+ self.assertEqual(check_payload['system']['logout'], None)
81
+
82
+ def test_get_firmware(self) -> None:
83
+ mock_data = json.loads('''
84
+ {
85
+ "device_info": {
86
+ "info": {
87
+ "sys_software_revision": "1342242834",
88
+ "sys_software_revision_minor": "0",
89
+ "device_name": "TP-LINK Wireless Router TL-XDR3010\u6613\u5c55\u7248",
90
+ "device_info": "XDR3010\u6613\u5c55\u7248V2 Wireless Router",
91
+ "device_model": "TL-XDR3010\u6613\u5c55\u7248",
92
+ "hw_version": "TL-XDR3010\u6613\u5c55\u7248 2.0",
93
+ "domain_name": "tplogin.cn",
94
+ "language": "CN",
95
+ "product_id": "806395938",
96
+ "vendor_id": "0",
97
+ "sw_version": "1.0.18 Build 220711 Rel.56168n",
98
+ "enable_dns": "1"
99
+ }
100
+ },
101
+ "error_code": 0
102
+ }''')
103
+ check_payload = {}
104
+
105
+ class TPLinkXDRClientTest(TPLinkXDRClient):
106
+ def _request(self, payload: dict) -> dict:
107
+ nonlocal check_payload
108
+ check_payload = payload
109
+ return mock_data
110
+
111
+ client = TPLinkXDRClientTest('', '')
112
+ firmware = client.get_firmware()
113
+
114
+ self.assertEqual(check_payload['method'], 'get')
115
+ self.assertIn('device_info', check_payload)
116
+ self.assertIn('name', check_payload['device_info'])
117
+ self.assertEqual(check_payload['device_info']['name'], 'info')
118
+
119
+ self.assertIsInstance(firmware, Firmware)
120
+ self.assertEqual(firmware.firmware_version, '1.0.18 Build 220711 Rel.56168n')
121
+ self.assertEqual(firmware.hardware_version, 'TL-XDR3010易展版 2.0')
122
+ self.assertEqual(firmware.model, 'TL-XDR3010易展版')
123
+
124
+ def test_get_status(self) -> None:
125
+ mock_data = json.loads('''{
126
+ "hosts_info": {
127
+ "host_info": [
128
+ {
129
+ "host_info_5": {
130
+ "mac": "b8-27-eb-0e-87-eb",
131
+ "parent_mac": "ec-60-73-2b-0b-ee",
132
+ "is_mesh": "0",
133
+ "wifi_mode": "0",
134
+ "type": "0",
135
+ "blocked": "0",
136
+ "ip": "192.168.1.200",
137
+ "hostname": "raspberrypi",
138
+ "up_speed": "0",
139
+ "down_speed": "0",
140
+ "up_limit": "0",
141
+ "down_limit": "0",
142
+ "is_cur_host": "1",
143
+ "ssid": "",
144
+ "forbid_domain": "",
145
+ "limit_time": "",
146
+ "plan_rule": []
147
+ }
148
+ },
149
+ {
150
+ "host_info_3": {
151
+ "mac": "24-59-e5-d0-21-8c",
152
+ "parent_mac": "ec-60-73-2b-0b-ee",
153
+ "is_mesh": "0",
154
+ "wifi_mode": "0",
155
+ "type": "1",
156
+ "blocked": "0",
157
+ "ip": "192.168.1.201",
158
+ "hostname": "midea%5Fac%5F0361",
159
+ "up_speed": "0",
160
+ "down_speed": "0",
161
+ "up_limit": "0",
162
+ "down_limit": "0",
163
+ "is_cur_host": "0",
164
+ "ssid": "",
165
+ "forbid_domain": "",
166
+ "limit_time": "",
167
+ "plan_rule": []
168
+ }
169
+ }
170
+ ]
171
+ },
172
+ "network": {
173
+ "wan_status": {
174
+ "ipaddr": "0.0.0.0",
175
+ "netmask": "0.0.0.0",
176
+ "gateway": "0.0.0.0",
177
+ "pri_dns": "0.0.0.0",
178
+ "snd_dns": "0.0.0.0",
179
+ "link_status": 0,
180
+ "error_code": 4,
181
+ "proto": "dhcp",
182
+ "up_time": 0,
183
+ "up_speed": 0,
184
+ "down_speed": 0,
185
+ "phy_status": 0
186
+ },
187
+ "lan": {
188
+ "ipaddr": "192.168.1.100",
189
+ "netmask": "255.255.255.0",
190
+ "ip_mode": "dynamic",
191
+ "fac_ipaddr": "192.168.1.1",
192
+ "fac_netmask": "255.255.255.0",
193
+ "macaddr": "ec-60-73-2b-0b-ee"
194
+ }
195
+ },
196
+ "wireless": {
197
+ "wlan_bs": {
198
+ "wifi_enable": "1",
199
+ "bs_enable": "1",
200
+ "ssid": "tx",
201
+ "ssidbrd": "1",
202
+ "encryption": "1",
203
+ "key": "123654789a.",
204
+ "auth": "0",
205
+ "cipher": "1"
206
+ },
207
+ "wlan_host_2g": {
208
+ "enable": "1",
209
+ "ssid": "tx",
210
+ "ssidbrd": "1",
211
+ "encryption": "1",
212
+ "key": "123654789a.",
213
+ "channel": "0",
214
+ "mode": "9",
215
+ "bandwidth": "1",
216
+ "power": "0",
217
+ "isolate": "0",
218
+ "turboon": "0",
219
+ "auth": "0",
220
+ "cipher": "1",
221
+ "twt": "0",
222
+ "ofdma": "1"
223
+ },
224
+ "wlan_wds_2g": {
225
+ "enable": "0",
226
+ "ssid": "",
227
+ "bssid": "00-00-00-00-00-00",
228
+ "encryption": "0",
229
+ "key": "",
230
+ "address_form": "0",
231
+ "in_wizard": "0"
232
+ },
233
+ "wlan_host_5g": {
234
+ "enable": "0",
235
+ "ssid": "TP-LINK_5G_0BEE",
236
+ "ssidbrd": "1",
237
+ "encryption": "0",
238
+ "key": "",
239
+ "channel": "0",
240
+ "mode": "10",
241
+ "bandwidth": "0",
242
+ "power": "0",
243
+ "isolate": "0",
244
+ "turboon": "0",
245
+ "auth": "0",
246
+ "cipher": "1",
247
+ "twt": "1",
248
+ "ofdma": "1"
249
+ },
250
+ "wlan_wds_5g": {
251
+ "enable": "0",
252
+ "ssid": "",
253
+ "bssid": "00-00-00-00-00-00",
254
+ "encryption": "0",
255
+ "key": "",
256
+ "address_form": "0",
257
+ "in_wizard": "0"
258
+ }
259
+ },
260
+ "guest_network": {
261
+ "guest_2g": {
262
+ "ssid": "TPGuest%5F0BEE",
263
+ "encrypt": "0",
264
+ "key": "",
265
+ "enable": "0",
266
+ "accright": "0",
267
+ "upload": "0",
268
+ "download": "0",
269
+ "time_limit": "0",
270
+ "limit_type": "timeout",
271
+ "duration": "0",
272
+ "auth": "0",
273
+ "cipher": "1"
274
+ }
275
+ },
276
+ "error_code": 0
277
+ }''')
278
+ check_payload = {}
279
+
280
+ class TPLinkXDRClientTest(TPLinkXDRClient):
281
+ def _request(self, payload: dict) -> dict:
282
+ nonlocal check_payload
283
+ check_payload = payload
284
+ return mock_data
285
+
286
+ client = TPLinkXDRClientTest('', '')
287
+ status = client.get_status()
288
+
289
+ self.assertEqual(check_payload['method'], 'get')
290
+ self.assertEqual(check_payload['hosts_info']['table'], 'host_info')
291
+ self.assertIn('network', check_payload)
292
+ self.assertIn('name', check_payload['network'])
293
+ self.assertEqual(check_payload['network']['name'], ['wan_status', 'lan'])
294
+ self.assertIn('wireless', check_payload)
295
+ self.assertIn('name', check_payload['wireless'])
296
+ self.assertEqual(check_payload['wireless']['name'], [
297
+ 'wlan_bs',
298
+ 'wlan_host_2g',
299
+ 'wlan_wds_2g',
300
+ 'wlan_host_5g',
301
+ 'wlan_wds_5g',
302
+ ])
303
+ self.assertIn('guest_network', check_payload)
304
+ self.assertIn('name', check_payload['guest_network'])
305
+ self.assertEqual(check_payload['guest_network']['name'], ['guest_2g'])
306
+
307
+ self.assertIsInstance(status, Status)
308
+ self.assertEqual(status.lan_ipv4_addr, '192.168.1.100')
309
+ self.assertIsInstance(status.lan_ipv4_address, IPv4Address)
310
+ self.assertEqual(status.lan_macaddr, 'EC-60-73-2B-0B-EE')
311
+ self.assertIsInstance(status.lan_macaddress, EUI48)
312
+ self.assertEqual(status.wan_ipv4_addr, '0.0.0.0')
313
+ self.assertIsInstance(status.wan_ipv4_address, IPv4Address)
314
+ self.assertTrue(status.wifi_2g_enable)
315
+ self.assertTrue(status.wifi_5g_enable)
316
+ self.assertEqual(len(status.devices), 2)
317
+ self.assertIsInstance(status.devices[0], Device)
318
+ self.assertEqual(status.devices[0].type, Connection.WIRED)
319
+ self.assertEqual(status.devices[0].macaddr, 'B8-27-EB-0E-87-EB')
320
+ self.assertIsInstance(status.devices[0].macaddress, EUI48)
321
+ self.assertEqual(status.devices[0].ipaddr, '192.168.1.200')
322
+ self.assertIsInstance(status.devices[0].ipaddress, IPv4Address)
323
+ self.assertEqual(status.devices[0].hostname, 'raspberrypi')
324
+ self.assertIsInstance(status.devices[1], Device)
325
+ self.assertEqual(status.devices[1].type, Connection.HOST_2G)
326
+ self.assertEqual(status.devices[1].macaddr, '24-59-E5-D0-21-8C')
327
+ self.assertIsInstance(status.devices[1].macaddress, EUI48)
328
+ self.assertEqual(status.devices[1].ipaddr, '192.168.1.201')
329
+ self.assertIsInstance(status.devices[1].ipaddress, IPv4Address)
330
+ self.assertEqual(status.devices[1].hostname, 'midea_ac_0361')
331
+
332
+ def test_reboot(self) -> None:
333
+ mock_data = json.loads('''{"error_code":0}''')
334
+ check_payload = {}
335
+
336
+ class TPLinkXDRClientTest(TPLinkXDRClient):
337
+ def _request(self, payload: dict) -> dict:
338
+ nonlocal check_payload
339
+ check_payload = payload
340
+ return mock_data
341
+
342
+ client = TPLinkXDRClientTest('', '')
343
+ client.reboot()
344
+
345
+ self.assertEqual(check_payload['method'], 'do')
346
+ self.assertIn('system', check_payload)
347
+ self.assertIn('reboot', check_payload['system'])
348
+ self.assertEqual(check_payload['system']['reboot'], None)
349
+
350
+ def test_set_wifi_enable_guest_2g(self) -> None:
351
+ mock_data = json.loads('''{"error_code":0}''')
352
+ check_payload = {}
353
+
354
+ class TPLinkXDRClientTest(TPLinkXDRClient):
355
+ def _request(self, payload: dict) -> dict:
356
+ nonlocal check_payload
357
+ check_payload = payload
358
+ return mock_data
359
+
360
+ client = TPLinkXDRClientTest('', '')
361
+ client.set_wifi(Connection.GUEST_2G, True)
362
+
363
+ self.assertEqual(check_payload['method'], 'set')
364
+ self.assertIn('guest_network', check_payload)
365
+ self.assertIn('guest_2g', check_payload['guest_network'])
366
+ self.assertEqual(check_payload['guest_network']['guest_2g']['enable'], '1')
367
+
368
+ def test_set_wifi_enable_host_2g(self) -> None:
369
+ mock_data = json.loads('''{"error_code":0}''')
370
+ check_payload = {}
371
+
372
+ class TPLinkXDRClientTest(TPLinkXDRClient):
373
+ def _request(self, payload: dict) -> dict:
374
+ nonlocal check_payload
375
+ check_payload = payload
376
+ return mock_data
377
+
378
+ client = TPLinkXDRClientTest('', '')
379
+ client.set_wifi(Connection.HOST_2G, True)
380
+
381
+ self.assertEqual(check_payload['method'], 'set')
382
+ self.assertIn('wireless', check_payload)
383
+ self.assertIn('wlan_host_2g', check_payload['wireless'])
384
+ self.assertEqual(check_payload['wireless']['wlan_host_2g']['enable'], 1)
385
+
386
+ def test_set_wifi_disable_host_5g(self) -> None:
387
+ mock_data = json.loads('''{"error_code":0}''')
388
+ check_payload = {}
389
+
390
+ class TPLinkXDRClientTest(TPLinkXDRClient):
391
+ def _request(self, payload: dict) -> dict:
392
+ nonlocal check_payload
393
+ check_payload = payload
394
+ return mock_data
395
+
396
+ client = TPLinkXDRClientTest('', '')
397
+ client.set_wifi(Connection.HOST_5G, False)
398
+
399
+ self.assertEqual(check_payload['method'], 'set')
400
+ self.assertIn('wireless', check_payload)
401
+ self.assertIn('wlan_host_5g', check_payload['wireless'])
402
+ self.assertEqual(check_payload['wireless']['wlan_host_5g']['enable'], 0)
403
+
404
+ def test_get_ipv4_reservations(self):
405
+ mock_data = json.loads('''{
406
+ "ip_mac_bind": {
407
+ "user_bind": [{"user_bind_3": {"mac": "24-59-E5-D0-21-8C", "ip": "192.168.2.202", "hostname": "midea_ac_0361"}}]
408
+ },
409
+ "error_code": 0}
410
+ ''')
411
+ check_payload = {}
412
+
413
+ class TPLinkXDRClientTest(TPLinkXDRClient):
414
+ def _request(self, payload: dict) -> dict:
415
+ nonlocal check_payload
416
+ check_payload = payload
417
+ return mock_data
418
+
419
+ client = TPLinkXDRClientTest('', '')
420
+ reservations = client.get_ipv4_reservations()
421
+
422
+ self.assertEqual(check_payload['method'], 'get')
423
+ self.assertIsInstance(check_payload['ip_mac_bind'], dict)
424
+ self.assertEqual(check_payload['ip_mac_bind']['table'], 'user_bind')
425
+
426
+ self.assertEqual(len(reservations), 1)
427
+ self.assertIsInstance(reservations[0], IPv4Reservation)
428
+ self.assertEqual(reservations[0].macaddr, '24-59-E5-D0-21-8C')
429
+ self.assertIsInstance(reservations[0].macaddress, EUI48)
430
+ self.assertEqual(reservations[0].macaddress, get_mac('24-59-E5-D0-21-8C'))
431
+ self.assertEqual(reservations[0].ipaddr, '192.168.2.202')
432
+ self.assertIsInstance(reservations[0].ipaddress, IPv4Address)
433
+ self.assertEqual(reservations[0].ipaddress, get_ip('192.168.2.202'))
434
+ self.assertEqual(reservations[0].hostname, 'midea_ac_0361')
435
+
436
+ def test_get_ipv4_dhcp_leases(self):
437
+ mock_data = json.loads('''
438
+ {
439
+ "dhcpd": {
440
+ "dhcp_clients": [
441
+ {
442
+ "dhcp_client_1": {
443
+ "mac": "24-59-e5-d0-21-8c",
444
+ "ip": "192.168.2.202",
445
+ "hostname": "midea_ac_0361",
446
+ "expires": "4294967295"
447
+ }
448
+ },
449
+ {
450
+ "dhcp_client_2": {
451
+ "mac": "b8-27-eb-0e-87-eb",
452
+ "ip": "192.168.2.200",
453
+ "hostname": "raspberrypi",
454
+ "expires": "3200"
455
+ }
456
+ }
457
+ ]
458
+ },
459
+ "error_code": 0
460
+ }''')
461
+ check_payload = {}
462
+
463
+ class TPLinkXDRClientTest(TPLinkXDRClient):
464
+ def _request(self, payload: dict) -> dict:
465
+ nonlocal check_payload
466
+ check_payload = payload
467
+ return mock_data
468
+
469
+ client = TPLinkXDRClientTest('', '')
470
+ dhcp_leases = client.get_ipv4_dhcp_leases()
471
+
472
+ self.assertEqual(check_payload['method'], 'get')
473
+ self.assertIsInstance(check_payload['dhcpd'], dict)
474
+ self.assertEqual(check_payload['dhcpd']['table'], 'dhcp_clients')
475
+
476
+ self.assertEqual(len(dhcp_leases), 2)
477
+ self.assertIsInstance(dhcp_leases[0], IPv4DHCPLease)
478
+ self.assertEqual(dhcp_leases[0].macaddr, '24-59-E5-D0-21-8C')
479
+ self.assertIsInstance(dhcp_leases[0].macaddress, EUI48)
480
+ self.assertEqual(dhcp_leases[0].macaddress, get_mac('24-59-e5-d0-21-8c'))
481
+ self.assertEqual(dhcp_leases[0].ipaddr, '192.168.2.202')
482
+ self.assertIsInstance(dhcp_leases[0].ipaddress, IPv4Address)
483
+ self.assertEqual(dhcp_leases[0].ipaddress, get_ip('192.168.2.202'))
484
+ self.assertEqual(dhcp_leases[0].hostname, 'midea_ac_0361')
485
+ self.assertEqual(dhcp_leases[0].lease_time, 'Permanent')
486
+ self.assertIsInstance(dhcp_leases[1], IPv4DHCPLease)
487
+ self.assertEqual(dhcp_leases[1].macaddr, 'B8-27-EB-0E-87-EB')
488
+ self.assertIsInstance(dhcp_leases[1].macaddress, EUI48)
489
+ self.assertEqual(dhcp_leases[1].macaddress, get_mac('b8-27-eb-0e-87-eb'))
490
+ self.assertEqual(dhcp_leases[1].ipaddr, '192.168.2.200')
491
+ self.assertIsInstance(dhcp_leases[1].ipaddress, IPv4Address)
492
+ self.assertEqual(dhcp_leases[1].ipaddress, get_ip('192.168.2.200'))
493
+ self.assertEqual(dhcp_leases[1].hostname, 'raspberrypi')
494
+ self.assertEqual(dhcp_leases[1].lease_time, '0:53:20')
495
+
496
+ def test_get_ipv4_status(self):
497
+ mock_data = json.loads('''
498
+ {
499
+ "dhcpd": {
500
+ "udhcpd": {
501
+ "auto": "1",
502
+ "enable": "0",
503
+ "pool_start": "192.168.1.2",
504
+ "pool_end": "192.168.1.254",
505
+ "lease_time": "7200",
506
+ "pri_dns": "211.136.192.6",
507
+ "snd_dns": "0.0.0.0",
508
+ "gateway": "192.168.2.1",
509
+ "pool_extend": "1"
510
+ }
511
+ },
512
+ "network": {
513
+ "lan": {
514
+ "ipaddr": "192.168.1.100",
515
+ "netmask": "255.255.255.0",
516
+ "ip_mode": "dynamic",
517
+ "fac_ipaddr": "192.168.1.1",
518
+ "fac_netmask": "255.255.255.0",
519
+ "macaddr": "ec-60-73-2b-0b-ee"
520
+ },
521
+ "wan_status": {
522
+ "ipaddr": "0.0.0.0",
523
+ "netmask": "0.0.0.0",
524
+ "gateway": "0.0.0.0",
525
+ "pri_dns": "0.0.0.0",
526
+ "snd_dns": "0.0.0.0",
527
+ "link_status": 0,
528
+ "error_code": 4,
529
+ "proto": "dhcp",
530
+ "up_time": 0,
531
+ "up_speed": 0,
532
+ "down_speed": 0,
533
+ "phy_status": 0
534
+ }
535
+ },
536
+ "error_code": 0
537
+ }''')
538
+ check_payload = {}
539
+
540
+ class TPLinkXDRClientTest(TPLinkXDRClient):
541
+ def _request(self, payload: dict) -> dict:
542
+ nonlocal check_payload
543
+ check_payload = payload
544
+ return mock_data
545
+
546
+ client = TPLinkXDRClientTest('', '')
547
+ ipv4_status = client.get_ipv4_status()
548
+
549
+ self.assertEqual(check_payload['method'], 'get')
550
+ self.assertIsInstance(check_payload['dhcpd'], dict)
551
+ self.assertEqual(check_payload['dhcpd']['name'], 'udhcpd')
552
+ self.assertIsInstance(check_payload['network'], dict)
553
+ self.assertEqual(check_payload['network']['name'], ['lan', 'wan_status'])
554
+
555
+ self.assertIsInstance(ipv4_status, IPv4Status)
556
+ self.assertEqual(ipv4_status.wan_ipv4_ipaddr, '0.0.0.0')
557
+ self.assertIsInstance(ipv4_status.wan_ipv4_ipaddress, IPv4Address)
558
+ self.assertEqual(ipv4_status.wan_ipv4_ipaddress, get_ip('0.0.0.0'))
559
+ self.assertEqual(ipv4_status.wan_ipv4_gateway, '0.0.0.0')
560
+ self.assertIsInstance(ipv4_status.wan_ipv4_gateway_address, IPv4Address)
561
+ self.assertEqual(ipv4_status.wan_ipv4_gateway_address, get_ip('0.0.0.0'))
562
+ self.assertEqual(ipv4_status.wan_ipv4_netmask, '0.0.0.0')
563
+ self.assertIsInstance(ipv4_status.wan_ipv4_netmask_address, IPv4Address)
564
+ self.assertEqual(ipv4_status.wan_ipv4_netmask_address, get_ip('0.0.0.0'))
565
+ self.assertEqual(ipv4_status.wan_ipv4_pridns, '0.0.0.0')
566
+ self.assertIsInstance(ipv4_status.wan_ipv4_pridns_address, IPv4Address)
567
+ self.assertEqual(ipv4_status.wan_ipv4_pridns_address, get_ip('0.0.0.0'))
568
+ self.assertEqual(ipv4_status.wan_ipv4_snddns, '0.0.0.0')
569
+ self.assertIsInstance(ipv4_status.wan_ipv4_snddns_address, IPv4Address)
570
+ self.assertEqual(ipv4_status.wan_ipv4_snddns_address, get_ip('0.0.0.0'))
571
+ self.assertEqual(ipv4_status.lan_macaddr, 'EC-60-73-2B-0B-EE')
572
+ self.assertIsInstance(ipv4_status.lan_macaddress, EUI48)
573
+ self.assertEqual(ipv4_status.lan_macaddress, get_mac('EC-60-73-2B-0B-EE'))
574
+ self.assertEqual(ipv4_status.lan_ipv4_ipaddr, '192.168.1.100')
575
+ self.assertIsInstance(ipv4_status.lan_ipv4_ipaddress, IPv4Address)
576
+ self.assertEqual(ipv4_status.lan_ipv4_ipaddress, get_ip('192.168.1.100'))
577
+ self.assertEqual(ipv4_status.lan_ipv4_dhcp_enable, False)
578
+ self.assertEqual(ipv4_status.lan_ipv4_netmask, '255.255.255.0')
579
+ self.assertIsInstance(ipv4_status.lan_ipv4_netmask_address, IPv4Address)
580
+ self.assertEqual(ipv4_status.lan_ipv4_netmask_address, get_ip('255.255.255.0'))
581
+
582
+
583
+ if __name__ == '__main__':
584
+ main()
@@ -1,4 +1,4 @@
1
- from tplinkrouterc6u.client.api_cgi_bin import TplinkRouter
1
+ from tplinkrouterc6u.client.c6u import TplinkRouter
2
2
  from tplinkrouterc6u.client.deco import TPLinkDecoClient
3
3
  from tplinkrouterc6u.client_abstract import AbstractRouter
4
4
  from tplinkrouterc6u.client.mr import TPLinkMRClient
@@ -6,8 +6,9 @@ from tplinkrouterc6u.client.ex import TPLinkEXClient
6
6
  from tplinkrouterc6u.client.c6v4 import TplinkC6V4Router
7
7
  from tplinkrouterc6u.client.c5400x import TplinkC5400XRouter
8
8
  from tplinkrouterc6u.client.c1200 import TplinkC1200Router
9
+ from tplinkrouterc6u.client.xdr import TPLinkXDRClient
9
10
  from tplinkrouterc6u.provider import TplinkRouterProvider
10
- from tplinkrouterc6u.common.package_enum import Connection
11
+ from tplinkrouterc6u.common.package_enum import Connection, VPN
11
12
  from tplinkrouterc6u.common.dataclass import (
12
13
  Firmware,
13
14
  Status,
@@ -16,5 +17,7 @@ from tplinkrouterc6u.common.dataclass import (
16
17
  IPv4DHCPLease,
17
18
  IPv4Status,
18
19
  SMS,
20
+ LTEStatus,
21
+ VPNStatus,
19
22
  )
20
23
  from tplinkrouterc6u.common.exception import ClientException, ClientError, AuthorizeError
@@ -2,7 +2,7 @@ from re import search
2
2
  from requests import post
3
3
  from tplinkrouterc6u.common.package_enum import Connection
4
4
  from tplinkrouterc6u.common.exception import ClientException
5
- from tplinkrouterc6u.client.api_cgi_bin import TplinkBaseRouter
5
+ from tplinkrouterc6u.client.c6u import TplinkBaseRouter
6
6
 
7
7
 
8
8
  class TplinkC5400XRouter(TplinkBaseRouter):
@@ -344,6 +344,7 @@ class TplinkBaseRouter(AbstractRouter, TplinkRequest):
344
344
 
345
345
  devices[item['mac']].down_speed = item.get('downloadSpeed')
346
346
  devices[item['mac']].up_speed = item.get('uploadSpeed')
347
+ devices[item['mac']].signal = int(item.get('signal')) if item.get('signal') else None
347
348
 
348
349
  for item in self.request('admin/wireless?form=statistics', 'operation=load'):
349
350
  if item['mac'] not in devices:
@@ -7,7 +7,7 @@ from tplinkrouterc6u.common.helper import get_ip, get_mac
7
7
  from tplinkrouterc6u.common.package_enum import Connection
8
8
  from tplinkrouterc6u.common.dataclass import Firmware, Status, Device, IPv4Status
9
9
  from tplinkrouterc6u.client_abstract import AbstractRouter
10
- from tplinkrouterc6u.client.api_cgi_bin import TplinkEncryption
10
+ from tplinkrouterc6u.client.c6u import TplinkEncryption
11
11
 
12
12
 
13
13
  class TPLinkDecoClient(TplinkEncryption, AbstractRouter):