Commit a01bab2b69d92892c751a6c13bd6a22f5f9d703d

Authored by Stéphane Raimbault
1 parent 53c93ae2

Add a unit test for the bad response from the slave.

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;
... ...