1717
1818TEST_MESSAGE = b"\x06 \x00 \x0a \x00 \x0b \x00 \x0c "
1919
20- # ---------------------------------------------------------------------------#
21- # Fixture
22- # ---------------------------------------------------------------------------#
23-
24-
2520class TestReadRegisterMessages :
2621 """Register Message Test Fixture.
2722
@@ -86,14 +81,15 @@ def test_register_read_response_decode_error(self):
8681 with pytest .raises (ModbusIOException ):
8782 reg .decode (b'\x14 \x00 \x03 \x00 \x11 ' )
8883
89- async def test_register_read_requests_count_errors (self ):
84+ async def test_register_read_requests_count_errors (self , mock_context ):
9085 """This tests that the register request messages.
9186
9287 will break on counts that are out of range
9388 """
89+ context = mock_context ()
9490 requests = [
95- # ReadHoldingRegistersRequest(address=1, count=0x800),
96- # ReadInputRegistersRequest(address=1, count=0x800),
91+ ReadHoldingRegistersRequest (address = 1 , count = 0x800 ),
92+ ReadInputRegistersRequest (address = 1 , count = 0x800 ),
9793 ReadWriteMultipleRegistersRequest (
9894 read_address = 1 , read_count = 0x800 , write_address = 1 , write_registers = [5 ]
9995 ),
@@ -102,7 +98,7 @@ async def test_register_read_requests_count_errors(self):
10298 ),
10399 ]
104100 for request in requests :
105- result = await request .update_datastore (None )
101+ result = await request .update_datastore (context )
106102 assert result .exception_code == ExcCodes .ILLEGAL_VALUE
107103
108104 async def test_register_read_requests_verify_errors (self , mock_context ):
@@ -114,8 +110,8 @@ async def test_register_read_requests_verify_errors(self, mock_context):
114110 requests = [
115111 ReadHoldingRegistersRequest (address = - 1 , count = 5 ),
116112 ReadInputRegistersRequest (address = - 1 , count = 5 ),
117- # ReadWriteMultipleRegistersRequest(-1,5,1,5 ),
118- # ReadWriteMultipleRegistersRequest(1,5,-1,5 ),
113+ ReadWriteMultipleRegistersRequest (- 1 ,5 ,1 ,[ 5 ] ),
114+ ReadWriteMultipleRegistersRequest (1 ,5 ,- 1 ,[ 5 ] ),
119115 ]
120116 for request in requests :
121117 await request .update_datastore (context )
@@ -147,17 +143,28 @@ async def test_read_write_multiple_registers_verify(self, mock_context):
147143 """Test read/write multiple registers."""
148144 context = mock_context ()
149145 request = ReadWriteMultipleRegistersRequest (
150- read_address = 1 , read_count = 10 , write_address = 2 , write_registers = [0x00 ]
146+ read_address = 1 , read_count = 0x200 , write_address = 2 , write_registers = [0x00 ]
151147 )
152- await request .update_datastore (context )
153- # assert response.exception_code == ExcCodes.ILLEGAL_ADDRESS
148+ response = await request .update_datastore (context )
149+ assert response .exception_code == ExcCodes .ILLEGAL_VALUE
154150
155151 await request .update_datastore (context )
156- # assert response.exception_code == ExcCodes.ILLEGAL_ADDRESS
152+ assert response .exception_code == ExcCodes .ILLEGAL_VALUE
157153
158154 request .write_byte_count = 0x100
159155 await request .update_datastore (context )
160- #assert response.exception_code == ExcCodes.ILLEGAL_VALUE
156+ assert response .exception_code == ExcCodes .ILLEGAL_VALUE
157+
158+ async def test_register_datastore_exceptions (self , mock_context ):
159+ """Test exception response from datastore."""
160+ context = mock_context ()
161+ context .async_getValues = mock .AsyncMock (return_value = ExcCodes .ILLEGAL_VALUE )
162+ for pdu in (
163+ ReadHoldingRegistersRequest (address = - 1 , count = 5 ),
164+ ReadInputRegistersRequest (address = - 1 , count = 5 ),
165+ ReadWriteMultipleRegistersRequest (- 1 , 5 , 1 , [5 ], 1 ),
166+ ):
167+ await pdu .update_datastore (context )
161168
162169 def test_serializing_to_string (self ):
163170 """Test serializing to string."""
0 commit comments