tplinkrouterc6u 5.13.0__py3-none-any.whl → 5.14.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,706 @@
1
+ from ipaddress import IPv4Address
2
+ from typing import List
3
+ from unittest import main, TestCase
4
+
5
+ from macaddress import EUI48
6
+
7
+ from tplinkrouterc6u import (
8
+ TplinkC3200Router,
9
+ Connection,
10
+ Status,
11
+ IPv4Reservation,
12
+ IPv4DHCPLease,
13
+ IPv4Status,
14
+ )
15
+
16
+
17
+ class TestTPLinkC3200Router(TestCase):
18
+
19
+ # Testing the merge_response method
20
+ def test_merge_response(self) -> None:
21
+ response = '''[1,1,0,0,0,0]0
22
+ X_TP_MACAddress=mac1
23
+ IPInterfaceIPAddress=192.168.4.1
24
+ [1,1,1,0,0,0]1
25
+ enable=1
26
+ MACAddress=mac2
27
+ externalIPAddress=192.168.30.55
28
+ defaultGateway=192.168.30.1
29
+ name=ipoe_1_d
30
+ subnetMask=255.255.255.0
31
+ DNSServers=192.168.3.1,0.0.0.0
32
+ [2,1,1,0,0,0]1
33
+ enable=0
34
+ MACAddress=
35
+ externalIPAddress=0.0.0.0
36
+ defaultGateway=0.0.0.0
37
+ name=LTE
38
+ subnetMask=0.0.0.0
39
+ DNSServers=0.0.0.0,0.0.0.0
40
+ [1,1,0,0,0,0]2
41
+ enable=1
42
+ X_TP_Band=2.4GHz
43
+ [1,2,0,0,0,0]2
44
+ enable=1
45
+ X_TP_Band=5GHz
46
+ [1,1,0,0,0,0]3
47
+ enable=0
48
+ name=wlan1
49
+ [1,2,0,0,0,0]3
50
+ enable=1
51
+ name=wlan6
52
+ [1,2,0,0,0,0]5
53
+ test=10
54
+ [error]0'''
55
+ client = TplinkC3200Router('', '')
56
+ result = client._merge_response(response)
57
+ self.assertEqual(len(result), 5)
58
+ self.assertEqual(len(result['1']), 2)
59
+ self.assertEqual(len(result['2']), 2)
60
+ self.assertEqual(len(result['3']), 2)
61
+ self.assertEqual(result['0']['X_TP_MACAddress'], 'mac1')
62
+ self.assertEqual(result['1'][0]['name'], 'ipoe_1_d')
63
+ self.assertEqual(result['1'][1]['name'], 'LTE')
64
+ self.assertEqual(result['2'][0]['X_TP_Band'], '2.4GHz')
65
+ self.assertEqual(result['2'][1]['X_TP_Band'], '5GHz')
66
+ self.assertEqual(result['3'][0]['name'], 'wlan1')
67
+ self.assertEqual(result['3'][1]['name'], 'wlan6')
68
+ self.assertEqual(len(result['5']), 1)
69
+ self.assertEqual(result['5']['test'], '10')
70
+
71
+ def test_merge_response_no_response(self) -> None:
72
+ response = '''
73
+ name=wlan6
74
+ [error]0
75
+
76
+ '''
77
+ client = TplinkC3200Router('', '')
78
+ result = client._merge_response(response)
79
+
80
+ self.assertEqual(result, [])
81
+
82
+ def test_get_status_with_wlan_dev(self) -> None:
83
+ response = '''
84
+ [1,1,0,0,0,0]0
85
+ X_TP_MACAddress=a0:28:84:de:dd:5c
86
+ IPInterfaceIPAddress=192.168.4.1
87
+ [1,1,1,0,0,0]1
88
+ enable=0
89
+ MACAddress=bf:75:44:4c:dc:9e
90
+ externalIPAddress=192.168.30.55
91
+ defaultGateway=192.168.30.1
92
+ name=ipoe_1_d
93
+ subnetMask=255.255.255.0
94
+ DNSServers=192.168.3.1,0.0.0.0
95
+ [1,1,0,0,0,0]2
96
+ enable=1
97
+ X_TP_Band=2.4GHz
98
+ [1,1,0,0,0,0]3
99
+ enable=0
100
+ name=wlan1
101
+ [1,1,1,0,0,0]5
102
+ associatedDeviceMACAddress=f4:a3:86:2d:41:b8
103
+ X_TP_TotalPacketsSent=176
104
+ X_TP_TotalPacketsReceived=467
105
+ [error]0
106
+
107
+ '''
108
+
109
+ class TplinkC3200RouterTest(TplinkC3200Router):
110
+ def _request(self, url, method='POST', data_str=None, encrypt=False, is_login=False):
111
+ return 200, response
112
+
113
+ client = TplinkC3200RouterTest('', '')
114
+ status = client.get_status()
115
+
116
+ self.assertEqual(status.wan_macaddr, 'BF-75-44-4C-DC-9E')
117
+ self.assertEqual(status.lan_macaddr, 'A0-28-84-DE-DD-5C')
118
+ self.assertEqual(status.wan_ipv4_addr, '192.168.30.55')
119
+ self.assertEqual(status.lan_ipv4_addr, '192.168.4.1')
120
+ self.assertEqual(status.wan_ipv4_gateway, '192.168.30.1')
121
+ self.assertEqual(status.conn_type, 'ipoe_1_d')
122
+ self.assertEqual(status.wired_total, 0)
123
+ self.assertEqual(status.wifi_clients_total, 1)
124
+ self.assertEqual(status.guest_clients_total, 0)
125
+ self.assertEqual(status.clients_total, 1)
126
+ self.assertEqual(status.guest_2g_enable, False)
127
+ self.assertEqual(status.guest_5g_enable, None)
128
+ self.assertEqual(status.guest_6g_enable, None)
129
+ self.assertEqual(status.iot_2g_enable, None)
130
+ self.assertEqual(status.iot_5g_enable, None)
131
+ self.assertEqual(status.iot_6g_enable, None)
132
+ self.assertEqual(status.wifi_2g_enable, True)
133
+ self.assertEqual(status.wifi_5g_enable, None)
134
+ self.assertEqual(status.wifi_6g_enable, None)
135
+ self.assertEqual(status.wan_ipv4_uptime, None)
136
+ self.assertEqual(status.mem_usage, None)
137
+ self.assertEqual(status.cpu_usage, None)
138
+ self.assertEqual(len(status.devices), 1)
139
+ self.assertEqual(status.devices[0].type, Connection.HOST_2G)
140
+ self.assertEqual(status.devices[0].macaddr, 'F4-A3-86-2D-41-B8')
141
+ self.assertEqual(status.devices[0].ipaddr, '0.0.0.0')
142
+ self.assertEqual(status.devices[0].hostname, '')
143
+ self.assertEqual(status.devices[0].packets_sent, 176)
144
+ self.assertEqual(status.devices[0].packets_received, 467)
145
+
146
+ def test_get_status_C3200(self) -> None:
147
+ response = '''
148
+ [1,1,0,0,0,0]0
149
+ X_TP_MACAddress=30:DE:3B:15:D0:22
150
+ IPInterfaceIPAddress=192.168.1.1
151
+ [2,1,1,0,0,0]1
152
+ enable=0
153
+ MACAddress=
154
+ externalIPAddress=0.0.0.0
155
+ defaultGateway=0.0.0.0
156
+ [1,1,0,0,0,0]2
157
+ enable=0
158
+ X_TP_Band=2.4GHz
159
+ [1,1,0,0,0,0]3
160
+ enable=0
161
+ name=wlan1
162
+ [error]0
163
+
164
+ '''
165
+
166
+ class TplinkC3200RouterTest(TplinkC3200Router):
167
+ def _request(self, url, method='POST', data_str=None, encrypt=False, is_login=False):
168
+ return 200, response
169
+
170
+ client = TplinkC3200RouterTest('', '')
171
+ status = client.get_status()
172
+
173
+ self.assertEqual(status.wan_macaddr, None)
174
+ self.assertEqual(status.lan_macaddr, '30-DE-3B-15-D0-22')
175
+ self.assertEqual(status.wan_ipv4_addr, '0.0.0.0')
176
+ self.assertEqual(status.lan_ipv4_addr, '192.168.1.1')
177
+ self.assertEqual(status.wan_ipv4_gateway, '0.0.0.0')
178
+ self.assertEqual(status.wired_total, 0)
179
+ self.assertEqual(status.wifi_clients_total, 0)
180
+ self.assertEqual(status.guest_clients_total, 0)
181
+ self.assertEqual(status.clients_total, 0)
182
+ self.assertEqual(status.guest_2g_enable, False)
183
+ self.assertEqual(status.guest_5g_enable, None)
184
+ self.assertEqual(status.iot_2g_enable, None)
185
+ self.assertEqual(status.iot_5g_enable, None)
186
+ self.assertEqual(status.wifi_2g_enable, False)
187
+ self.assertEqual(status.wifi_5g_enable, None)
188
+ self.assertEqual(status.wan_ipv4_uptime, None)
189
+ self.assertEqual(status.mem_usage, None)
190
+ self.assertEqual(status.cpu_usage, None)
191
+ self.assertEqual(len(status.devices), 0)
192
+
193
+ def test_get_status_two_lan_ip(self) -> None:
194
+ response = '''[1,1,0,0,0,0]0
195
+ X_TP_MACAddress=f5:e4:3b:e9:bf:c7
196
+ IPInterfaceIPAddress=192.168.1.1
197
+ [1,2,0,0,0,0]0
198
+ X_TP_MACAddress=4f5:e4:3b:e9:bf:c7
199
+ IPInterfaceIPAddress=192.168.0.110
200
+ [1,1,1,0,0,0]1
201
+ enable=0
202
+ MACAddress=bf:75:44:4c:dc:9e
203
+ externalIPAddress=192.168.30.55
204
+ defaultGateway=192.168.30.1
205
+ name=ipoe_1_d
206
+ subnetMask=255.255.255.0
207
+ DNSServers=192.168.3.1,0.0.0.0
208
+ [1,1,0,0,0,0]2
209
+ enable=1
210
+ X_TP_Band=2.4GHz
211
+ [1,1,0,0,0,0]3
212
+ enable=0
213
+ name=wlan1
214
+ [error]0
215
+ '''
216
+
217
+ class TplinkC3200RouterTest(TplinkC3200Router):
218
+ def _request(self, url, method='POST', data_str=None, encrypt=False, is_login=False):
219
+ return 200, response
220
+
221
+ client = TplinkC3200RouterTest('', '')
222
+ status = client.get_status()
223
+
224
+ self.assertIsInstance(status, Status)
225
+ self.assertEqual(status.wan_macaddr, 'BF-75-44-4C-DC-9E')
226
+ self.assertIsInstance(status.wan_macaddress, EUI48)
227
+ self.assertEqual(status.lan_macaddr, 'F5-E4-3B-E9-BF-C7')
228
+ self.assertIsInstance(status.lan_macaddress, EUI48)
229
+ self.assertEqual(status.wan_ipv4_addr, '192.168.30.55')
230
+ self.assertIsInstance(status.lan_ipv4_address, IPv4Address)
231
+ self.assertEqual(status.lan_ipv4_addr, '192.168.1.1')
232
+ self.assertEqual(status.wan_ipv4_gateway, '192.168.30.1')
233
+ self.assertIsInstance(status.wan_ipv4_address, IPv4Address)
234
+ self.assertEqual(status.wired_total, 0)
235
+ self.assertEqual(status.wifi_clients_total, 0)
236
+ self.assertEqual(status.guest_clients_total, 0)
237
+ self.assertEqual(status.iot_clients_total, None)
238
+ self.assertEqual(status.clients_total, 0)
239
+ self.assertEqual(status.guest_2g_enable, False)
240
+ self.assertEqual(status.guest_5g_enable, None)
241
+ self.assertEqual(status.iot_2g_enable, None)
242
+ self.assertEqual(status.iot_5g_enable, None)
243
+ self.assertEqual(status.wifi_2g_enable, True)
244
+ self.assertEqual(status.wifi_5g_enable, None)
245
+ self.assertEqual(status.wan_ipv4_uptime, None)
246
+ self.assertEqual(status.mem_usage, None)
247
+ self.assertEqual(status.cpu_usage, None)
248
+ self.assertEqual(len(status.devices), 0)
249
+
250
+ def test_get_ipv4_reservations(self) -> None:
251
+ response = '''
252
+ [1,1,0,0,0,0]0
253
+ enable=1
254
+ chaddr=24:11:32:11:E4:0C
255
+ yiaddr=192.1.1.102
256
+ description=SAN
257
+ [1,3,0,0,0,0]0
258
+ enable=1
259
+ chaddr=D4:6A:6A:B9:F6:74
260
+ yiaddr=192.1.1.103
261
+ description=scan
262
+ [1,4,0,0,0,0]0
263
+ enable=1
264
+ chaddr=CC:32:52:44:62:3E
265
+ yiaddr=192.1.1.110
266
+ description=HS 110 Energie
267
+ [1,5,0,0,0,0]0
268
+ enable=1
269
+ chaddr=50:D4:F7:7A:89:23
270
+ yiaddr=192.1.1.109
271
+ description=hs124_box
272
+ [1,7,0,0,0,0]0
273
+ enable=1
274
+ chaddr=24:0C:29:E3:A6:89
275
+ yiaddr=192.1.1.120
276
+ description=vmdebiandev
277
+ [1,9,0,0,0,0]0
278
+ enable=1
279
+ chaddr=24:0C:29:48:15:C8
280
+ yiaddr=192.1.1.121
281
+ description=vmdebiantest
282
+ [1,10,0,0,0,0]0
283
+ enable=1
284
+ chaddr=24:04:20:2B:7A:D3
285
+ yiaddr=192.1.1.97
286
+ description=Radio
287
+ [1,11,0,0,0,0]0
288
+ enable=1
289
+ chaddr=F8:A2:6D:28:ED:06
290
+ yiaddr=192.1.1.96
291
+ description=imprimante
292
+ [1,12,0,0,0,0]0
293
+ enable=1
294
+ chaddr=B8:8A:60:D3:7A:17
295
+ yiaddr=192.1.1.125
296
+ description=XXX WIFI
297
+ [1,13,0,0,0,0]0
298
+ enable=1
299
+ chaddr=C8:6F:76:86:95:76
300
+ yiaddr=192.1.1.126
301
+ description=XXX FIXE ETHERNET
302
+ [1,14,0,0,0,0]0
303
+ enable=1
304
+ chaddr=D8:4D:17:1C:7E:41
305
+ yiaddr=192.1.1.111
306
+ description=hs124_SqBox
307
+ [1,15,0,0,0,0]0
308
+ enable=1
309
+ chaddr=AC:84:C6:D3:F6:40
310
+ yiaddr=192.1.1.112
311
+ description=HS124_Garage
312
+ [1,16,0,0,0,0]0
313
+ enable=1
314
+ chaddr=C4:6F:BF:6B:09:52
315
+ yiaddr=192.1.1.130
316
+ description=Shelly SDB
317
+ [1,17,0,0,0,0]0
318
+ enable=1
319
+ chaddr=C4:6F:BF:6B:89:B8
320
+ yiaddr=192.1.1.131
321
+ description=Shelly 2
322
+ [1,18,0,0,0,0]0
323
+ enable=1
324
+ chaddr=74:DA:88:7C:E6:4B
325
+ yiaddr=192.1.1.113
326
+ description=HS110 ChauffeEau
327
+ [1,19,0,0,0,0]0
328
+ enable=1
329
+ chaddr=20:F8:3D:01:6F:2F
330
+ yiaddr=192.1.1.107
331
+ description=homeassistant
332
+ [1,20,0,0,0,0]0
333
+ enable=1
334
+ chaddr=CC:32:52:F1:C1:FE
335
+ yiaddr=192.1.1.114
336
+ description=HS124 Sqz SDB
337
+ [error]0
338
+
339
+ '''
340
+
341
+ class TplinkC3200RouterTest(TplinkC3200Router):
342
+ def _request(self, url, method='POST', data_str=None, encrypt=False, is_login=False):
343
+ return 200, response
344
+
345
+ client = TplinkC3200RouterTest('', '')
346
+ result = client.get_ipv4_reservations()
347
+
348
+ # IPv4Reservation(_macaddr=EUI48('C4-6F-BF-6B-89-B8'), _ipaddr=IPv4Address('192.1.1.131'),
349
+ # hostname='Shelly 2', enabled=True)
350
+ self.assertEqual(len(result), 17)
351
+ self.assertIsInstance(result[13], IPv4Reservation)
352
+ self.assertEqual(result[13].macaddr, 'C4-6F-BF-6B-89-B8')
353
+ self.assertEqual(result[13].ipaddr, '192.1.1.131')
354
+ self.assertEqual(result[13].hostname, 'Shelly 2')
355
+ self.assertEqual(result[13].enabled, True)
356
+
357
+ def test_get_ipv4_reservations_no_reservations(self) -> None:
358
+ response = '''
359
+ [error]0
360
+
361
+ '''
362
+
363
+ class TplinkC3200RouterTest(TplinkC3200Router):
364
+ def _request(self, url, method='POST', data_str=None, encrypt=False, is_login=False):
365
+ return 200, response
366
+
367
+ client = TplinkC3200RouterTest('', '')
368
+ result = client.get_ipv4_reservations()
369
+
370
+ self.assertEqual(len(result), 0)
371
+
372
+ def test_get_ipv4_dhcp_leases_no_leases(self) -> None:
373
+ response = '''
374
+ [error]0
375
+
376
+ '''
377
+
378
+ class TplinkC3200RouterTest(TplinkC3200Router):
379
+ def _request(self, url, method='POST', data_str=None, encrypt=False, is_login=False):
380
+ return 200, response
381
+
382
+ client = TplinkC3200RouterTest('', '')
383
+ result = client.get_ipv4_dhcp_leases()
384
+
385
+ self.assertEqual(len(result), 0)
386
+
387
+ def test_get_ipv4_dhcp_leases(self) -> None:
388
+ response = '''
389
+ [1,0,0,0,0,0]0
390
+ IPAddress=192.1.1.5
391
+ MACAddress=23:DC:FF:45:61:25
392
+ hostName=Unknown
393
+ leaseTimeRemaining=86361
394
+ [2,0,0,0,0,0]0
395
+ IPAddress=192.1.1.2
396
+ MACAddress=24:04:20:2E:3F:90
397
+ hostName=Radio
398
+ leaseTimeRemaining=52243
399
+ [3,0,0,0,0,0]0
400
+ IPAddress=192.1.1.14
401
+ MACAddress=F4:6D:3F:09:11:4F
402
+ hostName=IFP325133986
403
+ leaseTimeRemaining=86360
404
+ [4,0,0,0,0,0]0
405
+ IPAddress=192.1.1.102
406
+ MACAddress=24:11:32:11:E4:0C
407
+ hostName=SAN
408
+ leaseTimeRemaining=-1
409
+ [5,0,0,0,0,0]0
410
+ IPAddress=192.1.1.24
411
+ MACAddress=04:EC:D8:44:6A:4E
412
+ hostName=jeremy-msi
413
+ leaseTimeRemaining=86371
414
+ [6,0,0,0,0,0]0
415
+ IPAddress=192.1.1.8
416
+ MACAddress=E4:4D:36:84:24:47
417
+ hostName=Samuel_Laptop
418
+ leaseTimeRemaining=86342
419
+ [7,0,0,0,0,0]0
420
+ IPAddress=192.1.1.113
421
+ MACAddress=74:DA:88:7C:E6:4B
422
+ hostName=HS110
423
+ leaseTimeRemaining=-1
424
+ [8,0,0,0,0,0]0
425
+ IPAddress=192.1.1.111
426
+ MACAddress=D8:4D:17:1C:7E:41
427
+ hostName=HS124
428
+ leaseTimeRemaining=-1
429
+ [9,0,0,0,0,0]0
430
+ IPAddress=192.1.1.103
431
+ MACAddress=D4:6A:6A:B9:F6:74
432
+ hostName=BRWD46A67A9F674
433
+ leaseTimeRemaining=-1
434
+ [10,0,0,0,0,0]0
435
+ IPAddress=192.1.1.4
436
+ MACAddress=DA:25:E8:42:61:62
437
+ hostName=Portable2
438
+ leaseTimeRemaining=82550
439
+ [11,0,0,0,0,0]0
440
+ IPAddress=192.1.1.6
441
+ MACAddress=06:52:77:4D:6D:7B
442
+ hostName=iPhone
443
+ leaseTimeRemaining=84961
444
+ [12,0,0,0,0,0]0
445
+ IPAddress=192.1.1.10
446
+ MACAddress=D8:FC:93:1A:4A:AF
447
+ hostName=jeremy-W54-55SU1-SUW
448
+ leaseTimeRemaining=79549
449
+ [13,0,0,0,0,0]0
450
+ IPAddress=192.1.1.131
451
+ MACAddress=C4:6F:BF:6B:89:B8
452
+ hostName=shellyswitch25-
453
+ leaseTimeRemaining=-1
454
+ [14,0,0,0,0,0]0
455
+ IPAddress=192.1.1.130
456
+ MACAddress=C4:6F:BF:6B:09:52
457
+ hostName=shellyswitch25-
458
+ leaseTimeRemaining=-1
459
+ [15,0,0,0,0,0]0
460
+ IPAddress=192.1.1.18
461
+ MACAddress=24:04:20:2E:60:AD
462
+ hostName=Radio
463
+ leaseTimeRemaining=86368
464
+ [16,0,0,0,0,0]0
465
+ IPAddress=192.1.1.11
466
+ MACAddress=42:FD:4D:23:26:9C
467
+ hostName=Portable1
468
+ leaseTimeRemaining=7A826
469
+ [17,0,0,0,0,0]0
470
+ IPAddress=192.1.1.109
471
+ MACAddress=50:D4:F7:7A:89:23
472
+ hostName=HS124
473
+ leaseTimeRemaining=-1
474
+ [18,0,0,0,0,0]0
475
+ IPAddress=192.1.1.112
476
+ MACAddress=AC:84:C6:D3:F6:40
477
+ hostName=HS124
478
+ leaseTimeRemaining=-1
479
+ [19,0,0,0,0,0]0
480
+ IPAddress=192.1.1.114
481
+ MACAddress=CC:32:52:F1:C1:FE
482
+ hostName=HS124
483
+ leaseTimeRemaining=-1
484
+ [20,0,0,0,0,0]0
485
+ IPAddress=192.1.1.15
486
+ MACAddress=F8:6F:3D:14:70:45
487
+ hostName=COM-MID1
488
+ leaseTimeRemaining=54031
489
+ [21,0,0,0,0,0]0
490
+ IPAddress=192.1.1.16
491
+ MACAddress=A2:42:58:24:80:D2
492
+ hostName=Portable2
493
+ leaseTimeRemaining=78484
494
+ [22,0,0,0,0,0]0
495
+ IPAddress=192.1.1.17
496
+ MACAddress=E8:6D:52:23:39:72
497
+ hostName=repeteur
498
+ leaseTimeRemaining=70825
499
+ [23,0,0,0,0,0]0
500
+ IPAddress=192.1.1.97
501
+ MACAddress=24:04:20:2B:7A:D3
502
+ hostName=Radio
503
+ leaseTimeRemaining=-1
504
+ [24,0,0,0,0,0]0
505
+ IPAddress=192.1.1.17
506
+ MACAddress=E8:6D:52:23:39:73
507
+ hostName=Unknown
508
+ leaseTimeRemaining=0
509
+ [25,0,0,0,0,0]0
510
+ IPAddress=192.1.1.107
511
+ MACAddress=20:F8:3D:01:6F:2F
512
+ hostName=Unknown
513
+ leaseTimeRemaining=0
514
+ [error]0
515
+
516
+ '''
517
+
518
+ class TplinkC3200RouterTest(TplinkC3200Router):
519
+ def _request(self, url, method='POST', data_str=None, encrypt=False, is_login=False):
520
+ return 200, response
521
+
522
+ client = TplinkC3200RouterTest('', '')
523
+ result: List[IPv4DHCPLease]
524
+ result = client.get_ipv4_dhcp_leases()
525
+
526
+ # #20 : IPv4DHCPLease(_macaddr=EUI48('A2-42-58-24-80-D2'), _ipaddr=IPv4Address('192.1.1.16'),
527
+ # hostname='Portable2', lease_time='21:48:04')
528
+ self.assertEqual(len(result), 25)
529
+ self.assertIsInstance(result[20], IPv4DHCPLease)
530
+ self.assertEqual(result[20].macaddr, 'A2-42-58-24-80-D2')
531
+ self.assertEqual(result[20].ipaddr, '192.1.1.16')
532
+ self.assertEqual(result[20].hostname, 'Portable2')
533
+ self.assertEqual(result[20].lease_time, '21:48:04')
534
+
535
+ def test_get_ipv4_dhcp_leases_permanent(self) -> None:
536
+ response = '''
537
+ [1,0,0,0,0,0]0
538
+ IPAddress=192.168.32.175
539
+ MACAddress=bf:75:44:4c:dc:9e
540
+ hostName=name1
541
+ leaseTimeRemaining=-1
542
+ [2,0,0,0,0,0]0
543
+ IPAddress=192.168.32.176
544
+ MACAddress=a0:28:84:de:dd:5c
545
+ hostName=name2
546
+ leaseTimeRemaining=86372
547
+ [error]0
548
+
549
+ '''
550
+
551
+ class TplinkC3200RouterTest(TplinkC3200Router):
552
+ def _request(self, url, method='POST', data_str=None, encrypt=False, is_login=False):
553
+ return 200, response
554
+
555
+ client = TplinkC3200RouterTest('', '')
556
+ result = client.get_ipv4_dhcp_leases()
557
+
558
+ self.assertEqual(len(result), 2)
559
+ self.assertEqual(result[0].macaddr, 'BF-75-44-4C-DC-9E')
560
+ self.assertEqual(result[0].ipaddr, '192.168.32.175')
561
+ self.assertEqual(result[0].hostname, 'name1')
562
+ self.assertEqual(result[0].lease_time, 'Permanent')
563
+ self.assertEqual(result[1].macaddr, 'A0-28-84-DE-DD-5C')
564
+ self.assertEqual(result[1].ipaddr, '192.168.32.176')
565
+ self.assertEqual(result[1].hostname, 'name2')
566
+ self.assertEqual(result[1].lease_time, '23:59:32')
567
+
568
+ def test_get_ipv4_status(self) -> None:
569
+ response = '''
570
+ [1,1,0,0,0,0]0
571
+ X_TP_MACAddress=bf:75:44:4c:dc:9e
572
+ IPInterfaceIPAddress=192.168.5.1
573
+ IPInterfaceSubnetMask=255.255.255.0
574
+ [1,0,0,0,0,0]1
575
+ DHCPServerEnable=1
576
+ [1,1,1,0,0,0]2
577
+ enable=0
578
+ MACAddress=
579
+ externalIPAddress=0.0.0.0
580
+ defaultGateway=0.0.0.0
581
+ name=ipoe_1_d
582
+ subnetMask=0.0.0.0
583
+ DNSServers=0.0.0.0,0.0.0.0
584
+ [2,1,1,0,0,0]2
585
+ enable=1
586
+ MACAddress=a0:28:84:de:dd:5c
587
+ externalIPAddress=10.10.11.5
588
+ defaultGateway=11.11.11.11
589
+ name=LTE
590
+ subnetMask=1.1.1.1
591
+ DNSServers=7.7.7.7,2.2.2.2
592
+ [error]0
593
+
594
+ '''
595
+
596
+ class TplinkC3200RouterTest(TplinkC3200Router):
597
+ def _request(self, url, method='POST', data_str=None, encrypt=False, is_login=False):
598
+ return 200, response
599
+
600
+ client = TplinkC3200RouterTest('', '')
601
+ result = client.get_ipv4_status()
602
+
603
+ self.assertIsInstance(result, IPv4Status)
604
+ self.assertEqual(result.wan_macaddr, 'A0-28-84-DE-DD-5C')
605
+ self.assertEqual(result.wan_ipv4_ipaddr, '10.10.11.5')
606
+ self.assertEqual(result.wan_ipv4_gateway, '11.11.11.11')
607
+ self.assertEqual(result.wan_ipv4_conntype, 'LTE')
608
+ self.assertEqual(result.wan_ipv4_netmask, '1.1.1.1')
609
+ self.assertEqual(result.wan_ipv4_pridns, '7.7.7.7')
610
+ self.assertEqual(result.wan_ipv4_snddns, '2.2.2.2')
611
+ self.assertEqual(result.lan_macaddr, 'BF-75-44-4C-DC-9E')
612
+ self.assertEqual(result.lan_ipv4_ipaddr, '192.168.5.1')
613
+ self.assertEqual(result.lan_ipv4_netmask, '255.255.255.0')
614
+ self.assertEqual(result.lan_ipv4_dhcp_enable, True)
615
+ self.assertEqual(result.remote, None)
616
+
617
+ def test_get_ipv4_status_empty(self) -> None:
618
+ response = '''
619
+ [1,1,0,0,0,0]0
620
+ [1,1,0,0,0,0]1
621
+ [1,1,1,0,0,0]2
622
+ [2,1,1,0,0,0]2
623
+ [error]0
624
+
625
+ '''
626
+
627
+ class TplinkC3200RouterTest(TplinkC3200Router):
628
+ def _request(self, url, method='POST', data_str=None, encrypt=False, is_login=False):
629
+ return 200, response
630
+
631
+ client = TplinkC3200RouterTest('', '')
632
+ result = client.get_ipv4_status()
633
+
634
+ self.assertIsInstance(result, IPv4Status)
635
+ self.assertEqual(result.lan_macaddr, '00-00-00-00-00-00')
636
+ self.assertEqual(result.wan_ipv4_conntype, '')
637
+ self.assertEqual(result.lan_ipv4_ipaddr, '0.0.0.0')
638
+ self.assertEqual(result.lan_ipv4_netmask, '0.0.0.0')
639
+ self.assertEqual(result.lan_ipv4_dhcp_enable, False)
640
+
641
+ def test_get_ipv4_status_one_wlan(self) -> None:
642
+ response = '''
643
+ [1,1,0,0,0,0]0
644
+ X_TP_MACAddress=bf:75:44:4c:dc:9e
645
+ IPInterfaceIPAddress=192.168.5.1
646
+ IPInterfaceSubnetMask=255.255.255.0
647
+ [1,0,0,0,0,0]1
648
+ DHCPServerEnable=1
649
+ [1,1,1,0,0,0]2
650
+ enable=0
651
+ MACAddress=bf:75:44:4c:dc:7e
652
+ externalIPAddress=0.0.0.0
653
+ defaultGateway=0.0.0.0
654
+ name=ipoe_1_d
655
+ subnetMask=0.0.0.0
656
+ DNSServers=0.0.0.0,0.0.0.0
657
+ [error]0
658
+
659
+ '''
660
+
661
+ class TplinkC3200RouterTest(TplinkC3200Router):
662
+ def _request(self, url, method='POST', data_str=None, encrypt=False, is_login=False):
663
+ return 200, response
664
+
665
+ client = TplinkC3200RouterTest('', '')
666
+ result = client.get_ipv4_status()
667
+
668
+ self.assertIsInstance(result, IPv4Status)
669
+ self.assertEqual(result.wan_macaddr, 'BF-75-44-4C-DC-7E')
670
+ self.assertEqual(result.wan_ipv4_ipaddr, '0.0.0.0')
671
+ self.assertEqual(result.wan_ipv4_gateway, '0.0.0.0')
672
+ self.assertEqual(result.wan_ipv4_conntype, 'ipoe_1_d')
673
+ self.assertEqual(result.wan_ipv4_netmask, '0.0.0.0')
674
+ self.assertEqual(result.wan_ipv4_pridns, '0.0.0.0')
675
+ self.assertEqual(result.wan_ipv4_snddns, '0.0.0.0')
676
+ self.assertEqual(result.lan_macaddr, 'BF-75-44-4C-DC-9E')
677
+ self.assertEqual(result.lan_ipv4_ipaddr, '192.168.5.1')
678
+ self.assertEqual(result.lan_ipv4_netmask, '255.255.255.0')
679
+ self.assertEqual(result.lan_ipv4_dhcp_enable, True)
680
+ self.assertEqual(result.remote, None)
681
+
682
+ def test_set_wifi(self) -> None:
683
+ response = '''
684
+ [error]0
685
+
686
+ '''
687
+
688
+ check_url = ''
689
+ check_data = ''
690
+
691
+ class TplinkC3200RouterTest(TplinkC3200Router):
692
+ def _request(self, url, method='POST', data_str=None, encrypt=False, is_login=False):
693
+ nonlocal check_url, check_data
694
+ check_url = url
695
+ check_data = data_str
696
+ return 200, response
697
+
698
+ client = TplinkC3200RouterTest('', '')
699
+ client.set_wifi(Connection.HOST_2G, True)
700
+
701
+ self.assertIn('http:///cgi?2', check_url)
702
+ self.assertEqual(check_data, '[LAN_WLAN#1,1,0,0,0,0#0,0,0,0,0,0]0,1\r\nenable=1\r\n')
703
+
704
+
705
+ if __name__ == '__main__':
706
+ main()