From a01bab2b69d92892c751a6c13bd6a22f5f9d703d Mon Sep 17 00:00:00 2001 From: Stéphane Raimbault Date: Wed, 6 Aug 2008 16:16:19 +0200 Subject: [PATCH] Add a unit test for the bad response from the slave. --- tests/unit-test-master.c | 18 ++++++++++++++++++ tests/unit-test-slave.c | 8 ++++++++ tests/unit-test.h | 4 ++++ 3 files changed, 30 insertions(+), 0 deletions(-) diff --git a/tests/unit-test-master.c b/tests/unit-test-master.c index 2ec3bcc..f48bc09 100644 --- a/tests/unit-test-master.c +++ b/tests/unit-test-master.c @@ -398,6 +398,24 @@ int main(void) printf("FAILED\n"); } + /* BAD RESPONSE */ + + /* Allocate only the required space */ + uint16_t *tab_rp_registers_bad = (uint16_t *) malloc( + UT_HOLDING_REGISTERS_NB_POINTS_SPECIAL * sizeof(uint16_t)); + printf("1/1 read_holding_registers: "); + ret = read_holding_registers(&mb_param, + SLAVE, UT_HOLDING_REGISTERS_ADDRESS, + UT_HOLDING_REGISTERS_NB_POINTS_SPECIAL, + tab_rp_registers_bad); + if (ret > 0) { + /* Error not detected */ + printf("FAILED\n"); + } else { + printf("OK\n"); + } + free(tab_rp_registers_bad); + close: /* Free the memory */ free(tab_rp_status); diff --git a/tests/unit-test-slave.c b/tests/unit-test-slave.c index 753bcc0..6331c3f 100644 --- a/tests/unit-test-slave.c +++ b/tests/unit-test-slave.c @@ -67,6 +67,14 @@ int main(void) ret = modbus_listen(&mb_param, query, &query_size); if (ret == 0) { + if (((query[HEADER_LENGTH_TCP + 4] << 8) + query[HEADER_LENGTH_TCP + 5]) + == UT_HOLDING_REGISTERS_NB_POINTS_SPECIAL) { + /* Change the number of values (offset + TCP = 6) */ + query[HEADER_LENGTH_TCP + 4] = 0; + query[HEADER_LENGTH_TCP + 5] = UT_HOLDING_REGISTERS_NB_POINTS; + } + modbus_manage_query(&mb_param, query, query_size, &mb_mapping); } else if (ret == CONNECTION_CLOSED) { /* Connection closed by the client, end of server */ diff --git a/tests/unit-test.h b/tests/unit-test.h index dcd6976..92ceb4f 100644 --- a/tests/unit-test.h +++ b/tests/unit-test.h @@ -31,6 +31,10 @@ const uint8_t UT_INPUT_STATUS_TAB[] = { 0xAC, 0xDB, 0x35 }; const uint16_t UT_HOLDING_REGISTERS_ADDRESS = 0x6B; const uint16_t UT_HOLDING_REGISTERS_NB_POINTS = 0x3; const uint16_t UT_HOLDING_REGISTERS_TAB[] = { 0x022B, 0x0000, 0x0064 }; +/* If the following value is used, a bad response is sent. + It's better to test with a lower value than + UT_HOLDING_REGISTERS_NB_POINTS to try to raise a segfault. */ +const uint16_t UT_HOLDING_REGISTERS_NB_POINTS_SPECIAL = 0x2; const uint16_t UT_INPUT_REGISTERS_ADDRESS = 0x08; const uint16_t UT_INPUT_REGISTERS_NB_POINTS = 0x1; -- libgit2 0.21.4