Skip to content

Commit 4be8cc1

Browse files
committed
add annotations on test codes
1 parent e883427 commit 4be8cc1

File tree

1 file changed

+38
-10
lines changed

1 file changed

+38
-10
lines changed

pymysqlreplication/tests/test_util_bytes.py

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,49 @@
11
from pymysqlreplication.util import *
22
from pymysqlreplication.tests.base import PyMySQLReplicationTestCase
33

4+
"""
5+
These tests aim to cover some potential input scenarios, including valid inputs, edge cases, and error handling.
6+
This approach ensures that every line of the corresponding function is executed under test conditions,
7+
thereby improving the coverage.
8+
"""
9+
410

511
class TestIsDataShort(PyMySQLReplicationTestCase):
612
def test_data_is_shorter(self):
7-
data = bytearray([0x01])
13+
# Test with data shorter than expected.
14+
data = bytearray([0x01]) # 1-byte data
815
expected_length = 2
916
self.assertTrue(is_data_short(data, expected_length))
1017

1118
def test_data_is_equal_length(self):
12-
data = bytearray([0x01, 0x00])
19+
# Test with data equal to expected length.
20+
data = bytearray([0x01, 0x00]) # 2-byte data
1321
expected_length = 2
1422
self.assertFalse(is_data_short(data, expected_length))
1523

1624
def test_data_is_longer(self):
17-
data = bytearray([0x01, 0x00, 0x02])
25+
# Test with data longer than expected.
26+
data = bytearray([0x01, 0x00, 0x02]) # 3-byte data
1827
expected_length = 2
1928
self.assertFalse(is_data_short(data, expected_length))
2029

2130
def test_data_is_empty(self):
31+
# Test with empty data.
2232
data = bytearray([])
2333
expected_length = 1
2434
self.assertTrue(is_data_short(data, expected_length))
2535

2636

2737
class TestDecodeCount(PyMySQLReplicationTestCase):
2838
def test_small_format(self):
39+
# Test with 2-byte input and small format.
2940
data = bytearray([0x01, 0x00])
3041
is_small = True
3142
result = decode_count(data, is_small)
3243
self.assertEqual(result, 1)
3344

3445
def test_large_format(self):
46+
# Test with 4-byte input and large format.
3547
data = bytearray([0x01, 0x00, 0x00, 0x00])
3648
is_small = False
3749
result = decode_count(data, is_small)
@@ -40,11 +52,13 @@ def test_large_format(self):
4052

4153
class TestDecodeUint(PyMySQLReplicationTestCase):
4254
def test_valid_input(self):
55+
# Test with a known 2-byte input.
4356
data = bytearray([0x01, 0x00])
4457
result = decode_uint(data)
4558
self.assertEqual(result, 1)
4659

4760
def test_short_data(self):
61+
# Test with a 1-byte input, which is less than expected.
4862
data = bytearray([0x01])
4963
result = decode_uint(data)
5064
self.assertEqual(result, 0)
@@ -57,19 +71,29 @@ def test_empty_data(self):
5771

5872
class TestDecodeVariableLength(PyMySQLReplicationTestCase):
5973
def test_single_byte(self):
60-
data = bytearray([0x05])
74+
# Test with a single byte where the high bit is not set (indicating the end)
75+
data = bytearray([0x05]) # 5 with the high bit not set
6176
length, pos = decode_variable_length(data)
6277
self.assertEqual(length, 5)
6378
self.assertEqual(pos, 1)
6479

6580
def test_multiple_bytes(self):
81+
# Test with multiple bytes
82+
# 0x81 -> 1 with the high bit set, indicating more bytes
83+
# 0x01 -> 1 with the high bit not set, indicating the end
84+
# Combined value is 1 + (1 << 7) = 129
6685
data = bytearray([0x81, 0x01])
6786
length, pos = decode_variable_length(data)
6887
self.assertEqual(length, 129)
6988
self.assertEqual(pos, 2)
7089

7190
def test_max_length(self):
72-
data = bytearray([0x80, 0x80, 0x80, 0x80, 0x01])
91+
# Test with the maximum length (5 bytes)
92+
# This will test the boundary condition of the loop in the function
93+
data = bytearray(
94+
[0x80, 0x80, 0x80, 0x80, 0x01]
95+
) # Each 0x80 has the high bit set, 0x01 does not
96+
# The value is 1 << (7 * 4) = 2**28
7397
length, pos = decode_variable_length(data)
7498
self.assertEqual(length, 2**28)
7599
self.assertEqual(pos, 5)
@@ -82,7 +106,7 @@ def test_valid_input(self):
82106
self.assertEqual(result, 1)
83107

84108
def test_different_input(self):
85-
data = bytearray([0xFF, 0x00])
109+
data = bytearray([0xFF, 0x00]) # Represents the unsigned integer 255
86110
result = parse_uint16(data)
87111
self.assertEqual(result, 255)
88112

@@ -106,24 +130,28 @@ def test_three_bytes(self):
106130

107131
class TestDecodeTime(PyMySQLReplicationTestCase):
108132
def test_midnight(self):
109-
data = bytearray([0x00] * 8)
133+
data = bytearray([0x00] * 8) # Represents 00:00:00
110134
result = decode_time(data)
111135
self.assertEqual(result, datetime.time(0, 0, 0))
112136

113137
def test_valid_time(self):
114-
data = bytearray([0x00, 0x00, 0x00, 0xC0, 0x18, 0x01, 0x00, 0x00])
138+
data = bytearray(
139+
[0x00, 0x00, 0x00, 0xC0, 0x18, 0x01, 0x00, 0x00]
140+
) # Represents 17:35:00
115141
result = decode_time(data)
116142
self.assertEqual(result, datetime.time(17, 35, 0))
117143

118144

119145
class TestDecodeDatetime(PyMySQLReplicationTestCase):
120146
def test_zero_datetime(self):
121-
data = bytearray([0x00] * 8)
147+
data = bytearray([0x00] * 8) # Represents 0000-00-00 00:00:00
122148
result = decode_datetime(data)
123149
self.assertEqual(result, "0000-00-00 00:00:00")
124150

125151
def test_valid_datetime(self):
126-
data = bytearray([0x00, 0x00, 0x00, 0xC0, 0x18, 0x9B, 0xB1, 0x19])
152+
data = bytearray(
153+
[0x00, 0x00, 0x00, 0xC0, 0x18, 0x9B, 0xB1, 0x19]
154+
) # Represents 2023-11-13 17:35:00
127155
expected_datetime = datetime.datetime(
128156
year=2023, month=11, day=13, hour=17, minute=35, second=0
129157
)

0 commit comments

Comments
 (0)