-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathtests.py
119 lines (96 loc) · 4.76 KB
/
tests.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import unittest
from mock import patch
from rfid import RFIDClient, comma_format_to_ten_digit, ten_digit_to_comma_format
TEST_CONTROLLER_IP = "192.168.1.20"
TEST_CONTROLLER_SERIAL = 123106461
TEST_BADGE = 3126402
open_door_resp = (
b" A\xb9\x8c\x05\x00\x00\x00\x9dtV\x07\x00\x00\x00\x00\x01\x05\x02\x00\x01"
b"\x00\x00\x00"
)
add_badge_resp_1 = (
b" \x11\xd0\xfc(\x00\x00\x00\x9dtV\x07\x00\x00\x00\x00\x01\x05\x02\x00\x00"
b"\x00\x00\x00\x00\x00\x00\x00\xadN\x00\x00\x00\x00\x00\x00\x00\x90L\x00B"
b"\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00"
b"\x04\x00\x00\x00\x00A\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00"
b"\x00\x00\x00\x16\x10\x00\x00@\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00"
b"\x00\x00\x00\x00\x00\x16\x10\x00\x00?\x00\x00\x00\x01\x00\x00\x00\x00"
b"\x00\x00\x00\x00\x00\x00\x00\x16\x10\x00\x00>\x00\x00\x00\x01\x00\x00"
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x10\x00\x00=\x00\x00\x00\x01"
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x10\x00\x00<\x00\x00"
b"\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x10\x00\x00;"
b"\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00"
b"\x00:\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12"
b"\x83\x00\x009\x00\x00\x00\x02\x01\xa8\xc0\x00\x00\x00\x00\x1a\x1d\xf1"
b"\xba\x16\x10\x00\x008\x00\x00\x00X\xd6,\x00\x00\x00\x00\x00\x1a\x1dp\xac"
b"\x10\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xff\x00\x00\x00"
b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00h\x00\x00\x00"
b"\xff\x8f\xff_\x13\x86\xff\xfb\xff?\xff\x0f\xff\x1d\x00.\x00\x00\x00\x00"
b"\x00\x00\x00\x00\x00\x00\x00\x00"
)
add_badge_resp_2 = b"#!\xee\xb1)\x00\x00\x00\x9dtV\x07\x00\x00\x00\x00\x01\x05\x02\x00"
remove_user_resp = b'#!\xa9\x86"\x00\x00\x00\x9dtV\x07\x00\x00\x00\x00\x01\x05\x02\x00'
class TestTenDigitToCommaFormat(unittest.TestCase):
def test_happy_path(self):
result = ten_digit_to_comma_format(2058018)
self.assertEqual(result, TEST_BADGE)
class TestCommaFormatToTenDigit(unittest.TestCase):
def test_happy_path(self):
result = comma_format_to_ten_digit(TEST_BADGE)
expected_result = 2058018
self.assertEqual(result, expected_result)
class mock_socket(object):
def __init__(self, responses):
self.responses = responses
def recv(self, size):
return self.responses.pop()
def send(self, msg):
return len(msg)
def close(self):
return True
class TestRFIDClient(unittest.TestCase):
def test_invalid_ip(self):
with self.assertRaises(TypeError):
RFIDClient("blah")
@patch("rfid.RFIDClient.connect")
@patch("rfid.RFIDClient.check_valid_ipv4_address")
def test_controller_serial(self, mock_connect, mock_check_valid_ipv4_address):
rfid_client = RFIDClient(TEST_CONTROLLER_IP, TEST_CONTROLLER_SERIAL)
expected_controller_serial_hex = "9d745607"
self.assertEqual(rfid_client.controller_serial, expected_controller_serial_hex)
def test_crc_16_ibm(self):
test_controller_serial_hex = "9d745607"
test_data = (
"2010"
+ RFIDClient.source_port
+ "2800000000000000"
+ test_controller_serial_hex
+ "00000200ffffffff"
)
result = RFIDClient.crc_16_ibm(test_data)
expected_result = (
b" \x10f\xf2(\x00\x00\x00\x00\x00\x00\x00\x9dtV\x07\x00\x00\x02"
b"\x00\xff\xff\xff\xff"
)
self.assertEqual(result, expected_result)
@patch(
"rfid.RFIDClient.connect",
return_value=mock_socket([add_badge_resp_2, add_badge_resp_1]),
)
@patch("rfid.RFIDClient.check_valid_ipv4_address")
def test_add_user(self, mock_connect, mock_check_valid_ipv4_address):
rfid_client = RFIDClient(TEST_CONTROLLER_IP, TEST_CONTROLLER_SERIAL)
test_doors = [1, 2]
rfid_client.add_user(TEST_BADGE, test_doors)
@patch("rfid.RFIDClient.connect", return_value=mock_socket([remove_user_resp]))
@patch("rfid.RFIDClient.check_valid_ipv4_address")
def test_remove_user(self, mock_connect, mock_check_valid_ipv4_address):
rfid_client = RFIDClient(TEST_CONTROLLER_IP, TEST_CONTROLLER_SERIAL)
rfid_client.remove_user(TEST_BADGE)
@patch("rfid.RFIDClient.connect", return_value=mock_socket([open_door_resp]))
@patch("rfid.RFIDClient.check_valid_ipv4_address")
def test_open_door(self, mock_connect, mock_check_valid_ipv4_address):
rfid_client = RFIDClient(TEST_CONTROLLER_IP, TEST_CONTROLLER_SERIAL)
rfid_client.open_door(1)