Commit a01bab2b69d92892c751a6c13bd6a22f5f9d703d
1 parent
53c93ae2
Add a unit test for the bad response from the slave.
Showing
3 changed files
with
30 additions
and
0 deletions
tests/unit-test-master.c
| ... | ... | @@ -398,6 +398,24 @@ int main(void) |
| 398 | 398 | printf("FAILED\n"); |
| 399 | 399 | } |
| 400 | 400 | |
| 401 | + /* BAD RESPONSE */ | |
| 402 | + | |
| 403 | + /* Allocate only the required space */ | |
| 404 | + uint16_t *tab_rp_registers_bad = (uint16_t *) malloc( | |
| 405 | + UT_HOLDING_REGISTERS_NB_POINTS_SPECIAL * sizeof(uint16_t)); | |
| 406 | + printf("1/1 read_holding_registers: "); | |
| 407 | + ret = read_holding_registers(&mb_param, | |
| 408 | + SLAVE, UT_HOLDING_REGISTERS_ADDRESS, | |
| 409 | + UT_HOLDING_REGISTERS_NB_POINTS_SPECIAL, | |
| 410 | + tab_rp_registers_bad); | |
| 411 | + if (ret > 0) { | |
| 412 | + /* Error not detected */ | |
| 413 | + printf("FAILED\n"); | |
| 414 | + } else { | |
| 415 | + printf("OK\n"); | |
| 416 | + } | |
| 417 | + free(tab_rp_registers_bad); | |
| 418 | + | |
| 401 | 419 | close: |
| 402 | 420 | /* Free the memory */ |
| 403 | 421 | free(tab_rp_status); | ... | ... |
tests/unit-test-slave.c
| ... | ... | @@ -67,6 +67,14 @@ int main(void) |
| 67 | 67 | |
| 68 | 68 | ret = modbus_listen(&mb_param, query, &query_size); |
| 69 | 69 | if (ret == 0) { |
| 70 | + if (((query[HEADER_LENGTH_TCP + 4] << 8) + query[HEADER_LENGTH_TCP + 5]) | |
| 71 | + == UT_HOLDING_REGISTERS_NB_POINTS_SPECIAL) { | |
| 72 | + /* Change the number of values (offset | |
| 73 | + TCP = 6) */ | |
| 74 | + query[HEADER_LENGTH_TCP + 4] = 0; | |
| 75 | + query[HEADER_LENGTH_TCP + 5] = UT_HOLDING_REGISTERS_NB_POINTS; | |
| 76 | + } | |
| 77 | + | |
| 70 | 78 | modbus_manage_query(&mb_param, query, query_size, &mb_mapping); |
| 71 | 79 | } else if (ret == CONNECTION_CLOSED) { |
| 72 | 80 | /* Connection closed by the client, end of server */ | ... | ... |
tests/unit-test.h
| ... | ... | @@ -31,6 +31,10 @@ const uint8_t UT_INPUT_STATUS_TAB[] = { 0xAC, 0xDB, 0x35 }; |
| 31 | 31 | const uint16_t UT_HOLDING_REGISTERS_ADDRESS = 0x6B; |
| 32 | 32 | const uint16_t UT_HOLDING_REGISTERS_NB_POINTS = 0x3; |
| 33 | 33 | const uint16_t UT_HOLDING_REGISTERS_TAB[] = { 0x022B, 0x0000, 0x0064 }; |
| 34 | +/* If the following value is used, a bad response is sent. | |
| 35 | + It's better to test with a lower value than | |
| 36 | + UT_HOLDING_REGISTERS_NB_POINTS to try to raise a segfault. */ | |
| 37 | +const uint16_t UT_HOLDING_REGISTERS_NB_POINTS_SPECIAL = 0x2; | |
| 34 | 38 | |
| 35 | 39 | const uint16_t UT_INPUT_REGISTERS_ADDRESS = 0x08; |
| 36 | 40 | const uint16_t UT_INPUT_REGISTERS_NB_POINTS = 0x1; | ... | ... |