Skip to content

Commit 66a1f42

Browse files
authored
Use zigpy types where possible (#162)
* use zigpy types * tests for EUI64
1 parent 2f2e1ae commit 66a1f42

File tree

5 files changed

+235
-305
lines changed

5 files changed

+235
-305
lines changed

tests/test_api.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
import pytest
55
import serial
66
import zigpy.exceptions
7+
import zigpy.types as t
78

8-
from zigpy_xbee import api as xbee_api, types as t, uart
9+
from zigpy_xbee import api as xbee_api, types as xbee_t, uart
910
import zigpy_xbee.config
1011
from zigpy_xbee.zigbee.application import ControllerApplication
1112

@@ -335,19 +336,19 @@ def _send_modem_event(api, event):
335336
def test_handle_modem_status(api):
336337
api._running.clear()
337338
api._reset.set()
338-
_send_modem_event(api, xbee_api.ModemStatus.COORDINATOR_STARTED)
339+
_send_modem_event(api, xbee_t.ModemStatus.COORDINATOR_STARTED)
339340
assert api.is_running is True
340341
assert api.reset_event.is_set() is True
341342

342343
api._running.set()
343344
api._reset.set()
344-
_send_modem_event(api, xbee_api.ModemStatus.DISASSOCIATED)
345+
_send_modem_event(api, xbee_t.ModemStatus.DISASSOCIATED)
345346
assert api.is_running is False
346347
assert api.reset_event.is_set() is True
347348

348349
api._running.set()
349350
api._reset.clear()
350-
_send_modem_event(api, xbee_api.ModemStatus.HARDWARE_RESET)
351+
_send_modem_event(api, xbee_t.ModemStatus.HARDWARE_RESET)
351352
assert api.is_running is False
352353
assert api.reset_event.is_set() is True
353354

@@ -371,26 +372,28 @@ def test_handle_explicit_rx_indicator(api):
371372

372373

373374
def _handle_tx_status(api, status, wrong_frame_id=False):
374-
status = t.TXStatus(status)
375+
status = xbee_t.TXStatus(status)
375376
frame_id = 0x12
376377
send_fut = mock.MagicMock(spec=asyncio.Future)
377378
api._awaiting[frame_id] = (send_fut,)
378379
s = mock.sentinel
379380
if wrong_frame_id:
380381
frame_id += 1
381-
api._handle_tx_status(frame_id, s.dst_nwk, s.retries, status, t.DiscoveryStatus())
382+
api._handle_tx_status(
383+
frame_id, s.dst_nwk, s.retries, status, xbee_t.DiscoveryStatus()
384+
)
382385
return send_fut
383386

384387

385388
def test_handle_tx_status_success(api):
386-
fut = _handle_tx_status(api, t.TXStatus.SUCCESS)
389+
fut = _handle_tx_status(api, xbee_t.TXStatus.SUCCESS)
387390
assert len(api._awaiting) == 0
388391
assert fut.set_result.call_count == 1
389392
assert fut.set_exception.call_count == 0
390393

391394

392395
def test_handle_tx_status_except(api):
393-
fut = _handle_tx_status(api, t.TXStatus.ADDRESS_NOT_FOUND)
396+
fut = _handle_tx_status(api, xbee_t.TXStatus.ADDRESS_NOT_FOUND)
394397
assert len(api._awaiting) == 0
395398
assert fut.set_result.call_count == 0
396399
assert fut.set_exception.call_count == 1
@@ -404,7 +407,7 @@ def test_handle_tx_status_unexpected(api):
404407

405408

406409
def test_handle_tx_status_duplicate(api):
407-
status = t.TXStatus.SUCCESS
410+
status = xbee_t.TXStatus.SUCCESS
408411
frame_id = 0x12
409412
send_fut = mock.MagicMock(spec=asyncio.Future)
410413
send_fut.set_result.side_effect = asyncio.InvalidStateError
@@ -418,16 +421,16 @@ def test_handle_tx_status_duplicate(api):
418421

419422
def test_handle_registration_status(api):
420423
frame_id = 0x12
421-
status = xbee_api.RegistrationStatus.SUCCESS
424+
status = xbee_t.RegistrationStatus.SUCCESS
422425
fut = asyncio.Future()
423426
api._awaiting[frame_id] = (fut,)
424427
api._handle_registration_status(frame_id, status)
425428
assert fut.done() is True
426-
assert fut.result() == xbee_api.RegistrationStatus.SUCCESS
429+
assert fut.result() == xbee_t.RegistrationStatus.SUCCESS
427430
assert fut.exception() is None
428431

429432
frame_id = 0x13
430-
status = xbee_api.RegistrationStatus.KEY_TABLE_IS_FULL
433+
status = xbee_t.RegistrationStatus.KEY_TABLE_IS_FULL
431434
fut = asyncio.Future()
432435
api._awaiting[frame_id] = (fut,)
433436
api._handle_registration_status(frame_id, status)

tests/test_application.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import zigpy.types as t
77
import zigpy.zdo.types as zdo_t
88

9-
from zigpy_xbee.api import ModemStatus, XBee
9+
from zigpy_xbee.api import XBee
1010
import zigpy_xbee.config as config
1111
import zigpy_xbee.types as xbee_t
1212
from zigpy_xbee.zigbee import application
@@ -74,10 +74,10 @@ def app(monkeypatch):
7474

7575

7676
def test_modem_status(app):
77-
assert 0x00 in ModemStatus.__members__.values()
78-
app.handle_modem_status(ModemStatus(0x00))
79-
assert 0xEE not in ModemStatus.__members__.values()
80-
app.handle_modem_status(ModemStatus(0xEE))
77+
assert 0x00 in xbee_t.ModemStatus.__members__.values()
78+
app.handle_modem_status(xbee_t.ModemStatus(0x00))
79+
assert 0xEE not in xbee_t.ModemStatus.__members__.values()
80+
app.handle_modem_status(xbee_t.ModemStatus(0xEE))
8181

8282

8383
def _test_rx(

tests/test_types.py

Lines changed: 23 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,32 @@
11
import pytest
2+
import zigpy.types as t
23

3-
from zigpy_xbee import types as t
4-
5-
6-
def test_deserialize():
7-
extra = b"\xBE\xEF"
8-
data = b"\xff\xff\xfe01234567"
9-
schema = (t.uint8_t, t.int16s, t.EUI64)
10-
result, rest = t.deserialize(data + extra, schema)
11-
12-
assert rest == extra
13-
assert result[0] == 0xFF
14-
assert result[1] == -2
15-
assert result[2] == t.EUI64((0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30))
16-
17-
18-
def test_serialize():
19-
data = [0xFF, -2, t.EUI64([t.uint8_t(i) for i in range(0x30, 0x38)])]
20-
schema = (t.uint8_t, t.int16s, t.EUI64)
21-
result = t.serialize(data, schema)
22-
23-
assert result == b"\xff\xff\xfe76543210"
4+
import zigpy_xbee.types as xbee_t
245

256

267
def test_bytes_serialize():
278
data = 0x89AB.to_bytes(4, "big")
28-
result = t.Bytes(data).serialize()
9+
result = xbee_t.Bytes(data).serialize()
2910
assert result == data
3011

3112

3213
def test_bytes_deserialize():
33-
data, rest = t.Bytes.deserialize(0x89AB.to_bytes(3, "big"))
14+
data, rest = xbee_t.Bytes.deserialize(0x89AB.to_bytes(3, "big"))
3415
assert data == b"\x00\x89\xAB"
3516
assert rest == b""
3617

3718

3819
def test_atcommand():
3920
cmd = b"AI"
4021
data = 0x06.to_bytes(4, "big")
41-
r_cmd, r_data = t.ATCommand.deserialize(cmd + data)
22+
r_cmd, r_data = xbee_t.ATCommand.deserialize(cmd + data)
4223

4324
assert r_cmd == cmd
4425
assert r_data == data
4526

4627

4728
def test_undefined_enum_undefined_value():
48-
class undEnum(t.uint8_t, t.UndefinedEnum):
29+
class undEnum(t.uint8_t, xbee_t.UndefinedEnum):
4930
OK = 0
5031
ERROR = 2
5132
UNDEFINED_VALUE = 0xFF
@@ -67,7 +48,7 @@ class undEnum(t.uint8_t, t.UndefinedEnum):
6748

6849

6950
def test_undefined_enum_undefinede():
70-
class undEnum(t.uint8_t, t.UndefinedEnum):
51+
class undEnum(t.uint8_t, xbee_t.UndefinedEnum):
7152
OK = 0
7253
ERROR = 2
7354
UNDEFINED_VALUE = 0xFF
@@ -77,7 +58,22 @@ class undEnum(t.uint8_t, t.UndefinedEnum):
7758

7859

7960
def test_nwk():
80-
nwk = t.NWK(0x1234)
61+
nwk = xbee_t.NWK(0x1234)
8162

8263
assert str(nwk) == "0x1234"
8364
assert repr(nwk) == "0x1234"
65+
66+
67+
def test_eui64():
68+
extra = b"\xBE\xEF"
69+
data = b"01234567"
70+
71+
result, rest = xbee_t.EUI64.deserialize(data + extra)
72+
73+
assert rest == extra
74+
assert result == xbee_t.EUI64((0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30))
75+
76+
data = xbee_t.EUI64([t.uint8_t(i) for i in range(0x30, 0x38)])
77+
result = data.serialize()
78+
79+
assert result == b"76543210"

0 commit comments

Comments
 (0)