浏览代码

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

Stéphane Raimbault 16 年之前
父节点
当前提交
a01bab2b69
共有 3 个文件被更改,包括 30 次插入0 次删除
  1. 18 0
      tests/unit-test-master.c
  2. 8 0
      tests/unit-test-slave.c
  3. 4 0
      tests/unit-test.h

+ 18 - 0
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);                                           

+ 8 - 0
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 */

+ 4 - 0
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;