Эх сурвалжийг харах

Better unit tests.
- The coil and registers are wrote by the master and not assigned by the
slave anymore
- The data used to write are the ones in unit-test.h
- The read test is done after the write test

Stéphane Raimbault 17 жил өмнө
parent
commit
d11d30a50a

+ 95 - 55
tests/unit-test-master.c

@@ -65,12 +65,57 @@ int main(void)
 
         printf("** UNIT TESTING **\n");
 
-        printf("TEST READ FUNCTIONS:\n");
+        printf("\nTEST WRITE/READ:\n");
 
         /** COIL STATUS **/
+
+        /* Single */
+        ret = force_single_coil(&mb_param, SLAVE, UT_COIL_STATUS_ADDRESS, ON);
+        printf("1/2 force_single_coil: ");
+        if (ret == 1) {
+                printf("OK\n");
+        } else {
+                printf("FAILED\n");
+                goto close;
+        }
+
+        ret = read_coil_status(&mb_param, SLAVE, UT_COIL_STATUS_ADDRESS, 1,
+                               tab_rp_status);
+        printf("2/2 read_coil_status: ");
+        if (ret != 1) {
+                printf("FAILED (nb points %d)\n", ret); 
+                goto close;
+        }
+
+        if (tab_rp_status[0] != ON) {
+                printf("FAILED (%0X = != %0X)\n", tab_rp_status[0], ON);
+                goto close;
+        }
+        printf("OK\n");
+        /* End single */
+
+        /* Multiple coils */
+        {
+                uint8_t tab_value[UT_COIL_STATUS_NB_POINTS];
+                
+                set_bits_from_bytes(tab_value, 0, UT_COIL_STATUS_NB_POINTS,
+                                    UT_COIL_STATUS_TAB);
+                ret = force_multiple_coils(&mb_param, SLAVE,
+                                           UT_COIL_STATUS_ADDRESS,
+                                           UT_COIL_STATUS_NB_POINTS,
+                                           tab_value);
+                printf("1/2 force_multiple_coils: ");
+                if (ret == UT_COIL_STATUS_NB_POINTS) {
+                        printf("OK\n");
+                } else {
+                        printf("FAILED\n");
+                        goto close;
+                }
+        }
+
         ret = read_coil_status(&mb_param, SLAVE, UT_COIL_STATUS_ADDRESS,
                                UT_COIL_STATUS_NB_POINTS, tab_rp_status);
-        printf("* coil status: ");
+        printf("2/2 read_coil_status: ");
         if (ret != UT_COIL_STATUS_NB_POINTS) {
                 printf("FAILED (nb points %d)\n", ret); 
                 goto close;
@@ -93,11 +138,12 @@ int main(void)
                 i++;
         }
         printf("OK\n");
+        /* End of multiple coils */
 
         /** INPUT STATUS **/
         ret = read_input_status(&mb_param, SLAVE, UT_INPUT_STATUS_ADDRESS,
                                 UT_INPUT_STATUS_NB_POINTS, tab_rp_status);
-        printf("* read_input_status: ");
+        printf("1/1 read_input_status: ");
 
         if (ret != UT_INPUT_STATUS_NB_POINTS) {
                 printf("FAILED (nb points %d)\n", ret); 
@@ -123,11 +169,53 @@ int main(void)
         printf("OK\n");
 
         /** HOLDING REGISTERS **/
+
+        /* Single register */
+        ret = preset_single_register(&mb_param, SLAVE,
+                                     UT_HOLDING_REGISTERS_ADDRESS, 0x1234);
+        printf("1/2 preset_single_register: ");
+        if (ret == 1) {
+                printf("OK\n");
+        } else {
+                printf("FAILED\n");
+                goto close;
+        }
+
+        ret = read_holding_registers(&mb_param, SLAVE,
+                                     UT_HOLDING_REGISTERS_ADDRESS,
+                                     1, tab_rp_registers);
+        printf("2/2 read_holding_registers: ");
+        if (ret != 1) {
+                printf("FAILED (nb points %d)\n", ret); 
+                goto close;
+        }
+
+        if (tab_rp_registers[0] != 0x1234) {
+                printf("FAILED (%0X != %0X)\n",
+                       tab_rp_registers[0], 0x1234);
+                goto close;
+        }
+        printf("OK\n");
+        /* End of single register */
+
+        /* Many registers */
+        ret = preset_multiple_registers(&mb_param, SLAVE,
+                                        UT_HOLDING_REGISTERS_ADDRESS,
+                                        UT_HOLDING_REGISTERS_NB_POINTS,
+                                        UT_HOLDING_REGISTERS_TAB);
+        printf("1/2 preset_multiple_registers: ");
+        if (ret == UT_HOLDING_REGISTERS_NB_POINTS) {
+                printf("OK\n");
+        } else {
+                printf("FAILED\n");
+                goto close;
+        }
+
         ret = read_holding_registers(&mb_param,
                                      SLAVE, UT_HOLDING_REGISTERS_ADDRESS,
                                      UT_HOLDING_REGISTERS_NB_POINTS,
                                      tab_rp_registers);
-        printf("* read_holding_registers: ");
+        printf("2/2 read_holding_registers: ");
         if (ret != UT_HOLDING_REGISTERS_NB_POINTS) {
                 printf("FAILED (nb points %d)\n", ret); 
                 goto close;
@@ -142,13 +230,15 @@ int main(void)
                 }
         }
         printf("OK\n");
+        /* End of many registers */
+
 
         /** INPUT REGISTERS **/
         ret = read_input_registers(&mb_param,
                                    SLAVE, UT_INPUT_REGISTERS_ADDRESS,
                                    UT_INPUT_REGISTERS_NB_POINTS,
                                    tab_rp_registers);
-        printf("* read_input_registers: ");
+        printf("1/1 read_input_registers: ");
         if (ret != UT_INPUT_REGISTERS_NB_POINTS) {
                 printf("FAILED (nb points %d)\n", ret); 
                 goto close;
@@ -162,57 +252,7 @@ int main(void)
                 }
         }
         printf("OK\n");
-
-        /** WRITE FUNCTIONS **/
-        printf("\nTEST WRITE FUNCTIONS:\n");
         
-        ret = force_single_coil(&mb_param, SLAVE, UT_COIL_STATUS_ADDRESS, ON);
-        printf("* force_single_coil: ");
-        if (ret == 1) {
-                printf("OK\n");
-        } else {
-                printf("FAILED\n");
-                goto close;
-        }
-
-        ret = preset_single_register(&mb_param, SLAVE, 0x01, 0x03);
-        printf("* preset_single_register: ");
-        if (ret == 1) {
-                printf("OK\n");
-        } else {
-                printf("FAILED\n");
-                goto close;
-        }
-
-        {
-                int nb_points = 0x0A;
-                uint8_t tab_value[] = { ON, OFF, ON, ON,
-                                        OFF, OFF, ON, ON,
-                                        ON, OFF };
-                ret = force_multiple_coils(&mb_param, SLAVE, 0x13,
-                                           nb_points, tab_value);
-                printf("* force_multiple_coils: ");
-                if (ret == nb_points) {
-                        printf("OK\n");
-                } else {
-                        printf("FAILED\n");
-                        goto close;
-                }
-        }
-
-        {
-                int nb_points = 2;
-                uint16_t tab_value[] = { 0x000A, 0x0102 };
-                ret = preset_multiple_registers(&mb_param, SLAVE,
-                                                0x01, nb_points, tab_value);
-                printf("* preset_multiple_registers: ");
-                if (ret == nb_points) {
-                        printf("OK\n");
-                } else {
-                        printf("FAILED\n");
-                        goto close;
-                }
-        }
 
         /** ILLEGAL DATA ADDRESS */
         printf("\nTEST ILLEGAL DATA ADDRESS:\n");

+ 3 - 13
tests/unit-test-slave.c

@@ -45,24 +45,14 @@ int main(void)
                 exit(1);
         }
 
-        /* Examples from PI_MODBUS_300.pdf */
-
-        /** COIL STATUS **/
-        set_bits_from_bytes(mb_mapping.tab_coil_status,
-                            UT_COIL_STATUS_ADDRESS, UT_COIL_STATUS_NB_POINTS,
-                            UT_COIL_STATUS_TAB);
-
+        /* Examples from PI_MODBUS_300.pdf.
+           Only the read-only input values are assigned. */
+        
         /** INPUT STATUS **/
         set_bits_from_bytes(mb_mapping.tab_input_status,
                             UT_INPUT_STATUS_ADDRESS, UT_INPUT_STATUS_NB_POINTS,
                             UT_INPUT_STATUS_TAB);
 
-        /** HOLDING REGISTERS **/
-        for (i=0; i < UT_HOLDING_REGISTERS_NB_POINTS; i++) {
-                mb_mapping.tab_holding_registers[UT_HOLDING_REGISTERS_ADDRESS+i] =
-                        UT_HOLDING_REGISTERS_TAB[i];;
-        }
-
         /** INPUT REGISTERS **/
         for (i=0; i < UT_INPUT_REGISTERS_NB_POINTS; i++) {
                 mb_mapping.tab_input_registers[UT_INPUT_REGISTERS_ADDRESS+i] =