Skip to content

Commit 3087ad3

Browse files
committed
unittests for the basic functionality of the library
1 parent c77a4d6 commit 3087ad3

1 file changed

Lines changed: 109 additions & 0 deletions

File tree

test_jamulus.py

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
#!/usr/bin/python3
2+
3+
import unittest
4+
5+
from jamulus import JamulusConnector
6+
7+
8+
class Test_JamulusConnector(unittest.TestCase):
9+
def setUp(self):
10+
self.jc = JamulusConnector(port=None)
11+
12+
def tearDown(self):
13+
self.jc.close()
14+
15+
def test_calc_crc(self):
16+
crc = self.jc.calc_crc(bytearray.fromhex("0000ef03000000"))
17+
self.assertEqual(crc, 51992)
18+
19+
def test_pack(self):
20+
data = self.jc.pack((("a", "L"), ("b", "H"), ("c", "B")), {"a": 1, "b": 2, "c": 3})
21+
self.assertEqual(data.hex(), "01000000020003")
22+
23+
data = self.jc.pack((("text", "U"),), {"text": "xyz"})
24+
self.assertEqual(data.hex(), "0378797a")
25+
26+
data = self.jc.pack((("text", "V"),), {"text": "xyz"})
27+
self.assertEqual(data.hex(), "030078797a")
28+
29+
data = self.jc.pack((("data", "v"),), {"data": bytearray.fromhex("616263")})
30+
self.assertEqual(data.hex(), "0300616263")
31+
32+
data = self.jc.pack((("ip", "A"),), {"ip": "127.0.0.1"})
33+
self.assertEqual(data.hex(), "0100007f")
34+
35+
def test_pack_failing(self):
36+
with self.assertRaises(ValueError):
37+
# invalid format
38+
data = self.jc.pack((("a",),), {"a": 1})
39+
40+
with self.assertRaises(ValueError):
41+
# value missing
42+
data = self.jc.pack((("a", "L"),), {})
43+
44+
with self.assertRaises(ValueError):
45+
# value with wrong type
46+
data = self.jc.pack((("a", "L"),), {"a": "string"})
47+
48+
def test_unpack(self):
49+
data = (
50+
bytearray.fromhex("01000000020003") # {"a": 1, "b": 2, "c": 3}
51+
+ bytearray.fromhex("0378797a") # {"text": "xyz"}
52+
+ bytearray.fromhex("030078797a") # {"text": "xyz"})
53+
+ bytearray.fromhex("0300616263") # {"data": bytearray.fromhex("616263")}
54+
+ bytearray.fromhex("0100007f") # {"ip": "127.0.0.1"}
55+
)
56+
offset = 0
57+
58+
values, offset = self.jc.unpack((("a", "L"), ("b", "H"), ("c", "B")), data, offset)
59+
self.assertEqual(values, {"a": 1, "b": 2, "c": 3})
60+
61+
values, offset = self.jc.unpack((("text", "U"),), data, offset)
62+
self.assertEqual(values, {"text": "xyz"})
63+
64+
values, offset = self.jc.unpack((("text", "V"),), data, offset)
65+
self.assertEqual(values, {"text": "xyz"})
66+
67+
values, offset = self.jc.unpack((("data", "v"),), data, offset)
68+
self.assertEqual(values, {"data": bytearray.fromhex("616263")})
69+
70+
values, offset = self.jc.unpack((("ip", "A"),), data, offset)
71+
self.assertEqual(values, {"ip": "127.0.0.1"})
72+
73+
self.assertEqual(offset, len(data))
74+
75+
def test_prot_pack(self):
76+
data = self.jc.prot_pack((("a", "B"), ("b", "B"), ("c", "B")), {"a": 1, "b": 2, "c": 3})
77+
self.assertEqual(data.hex(), "010203")
78+
79+
data = self.jc.prot_pack((("a", "B"), ("b", "B"), ("c", "B")), [{"a": 1, "b": 2, "c": 3}, {"a": 4, "b": 5, "c": 6}], repeat=True)
80+
self.assertEqual(data.hex(), "010203040506")
81+
82+
def test_prot_unpack(self):
83+
values = self.jc.prot_unpack((("a", "B"), ("b", "B"), ("c", "B")), bytearray.fromhex("010203"))
84+
self.assertEqual(values, {"a": 1, "b": 2, "c": 3})
85+
86+
values = self.jc.prot_unpack((("a", "B"), ("b", "B"), ("c", "B")), bytearray.fromhex("010203040506"), repeat=True)
87+
self.assertEqual(values, [{"a": 1, "b": 2, "c": 3}, {"a": 4, "b": 5, "c": 6}])
88+
89+
def test_main_pack(self):
90+
data = self.jc.main_pack("CLM_REQ_SERVER_LIST", values={}, count=0)
91+
self.assertEqual(data.hex(), "0000ef0300000018cb")
92+
93+
data = self.jc.main_pack("CLM_PING_MS", values={"time": 0}, count=0)
94+
self.assertEqual(data.hex(), "0000e903000400000000006f60")
95+
96+
def test_main_unpack(self):
97+
key, count, values = self.jc.main_unpack(bytearray.fromhex("0000ef0300000018cb"))
98+
self.assertEqual(key, "CLM_REQ_SERVER_LIST")
99+
self.assertEqual(count, 0)
100+
self.assertEqual(values, {})
101+
102+
key, count, values = self.jc.main_unpack(bytearray.fromhex("0000e903000400000000006f60"))
103+
self.assertEqual(key, "CLM_PING_MS")
104+
self.assertEqual(count, 0)
105+
self.assertEqual(values, {"time": 0})
106+
107+
108+
if __name__ == "__main__":
109+
unittest.main()

0 commit comments

Comments
 (0)