Commit d11d30a50af5ee688966fcbca525a804dfa6cf94
1 parent
1a9f8867
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
Showing
2 changed files
with
98 additions
and
68 deletions
tests/unit-test-master.c
| @@ -65,12 +65,57 @@ int main(void) | @@ -65,12 +65,57 @@ int main(void) | ||
| 65 | 65 | ||
| 66 | printf("** UNIT TESTING **\n"); | 66 | printf("** UNIT TESTING **\n"); |
| 67 | 67 | ||
| 68 | - printf("TEST READ FUNCTIONS:\n"); | 68 | + printf("\nTEST WRITE/READ:\n"); |
| 69 | 69 | ||
| 70 | /** COIL STATUS **/ | 70 | /** COIL STATUS **/ |
| 71 | + | ||
| 72 | + /* Single */ | ||
| 73 | + ret = force_single_coil(&mb_param, SLAVE, UT_COIL_STATUS_ADDRESS, ON); | ||
| 74 | + printf("1/2 force_single_coil: "); | ||
| 75 | + if (ret == 1) { | ||
| 76 | + printf("OK\n"); | ||
| 77 | + } else { | ||
| 78 | + printf("FAILED\n"); | ||
| 79 | + goto close; | ||
| 80 | + } | ||
| 81 | + | ||
| 82 | + ret = read_coil_status(&mb_param, SLAVE, UT_COIL_STATUS_ADDRESS, 1, | ||
| 83 | + tab_rp_status); | ||
| 84 | + printf("2/2 read_coil_status: "); | ||
| 85 | + if (ret != 1) { | ||
| 86 | + printf("FAILED (nb points %d)\n", ret); | ||
| 87 | + goto close; | ||
| 88 | + } | ||
| 89 | + | ||
| 90 | + if (tab_rp_status[0] != ON) { | ||
| 91 | + printf("FAILED (%0X = != %0X)\n", tab_rp_status[0], ON); | ||
| 92 | + goto close; | ||
| 93 | + } | ||
| 94 | + printf("OK\n"); | ||
| 95 | + /* End single */ | ||
| 96 | + | ||
| 97 | + /* Multiple coils */ | ||
| 98 | + { | ||
| 99 | + uint8_t tab_value[UT_COIL_STATUS_NB_POINTS]; | ||
| 100 | + | ||
| 101 | + set_bits_from_bytes(tab_value, 0, UT_COIL_STATUS_NB_POINTS, | ||
| 102 | + UT_COIL_STATUS_TAB); | ||
| 103 | + ret = force_multiple_coils(&mb_param, SLAVE, | ||
| 104 | + UT_COIL_STATUS_ADDRESS, | ||
| 105 | + UT_COIL_STATUS_NB_POINTS, | ||
| 106 | + tab_value); | ||
| 107 | + printf("1/2 force_multiple_coils: "); | ||
| 108 | + if (ret == UT_COIL_STATUS_NB_POINTS) { | ||
| 109 | + printf("OK\n"); | ||
| 110 | + } else { | ||
| 111 | + printf("FAILED\n"); | ||
| 112 | + goto close; | ||
| 113 | + } | ||
| 114 | + } | ||
| 115 | + | ||
| 71 | ret = read_coil_status(&mb_param, SLAVE, UT_COIL_STATUS_ADDRESS, | 116 | ret = read_coil_status(&mb_param, SLAVE, UT_COIL_STATUS_ADDRESS, |
| 72 | UT_COIL_STATUS_NB_POINTS, tab_rp_status); | 117 | UT_COIL_STATUS_NB_POINTS, tab_rp_status); |
| 73 | - printf("* coil status: "); | 118 | + printf("2/2 read_coil_status: "); |
| 74 | if (ret != UT_COIL_STATUS_NB_POINTS) { | 119 | if (ret != UT_COIL_STATUS_NB_POINTS) { |
| 75 | printf("FAILED (nb points %d)\n", ret); | 120 | printf("FAILED (nb points %d)\n", ret); |
| 76 | goto close; | 121 | goto close; |
| @@ -93,11 +138,12 @@ int main(void) | @@ -93,11 +138,12 @@ int main(void) | ||
| 93 | i++; | 138 | i++; |
| 94 | } | 139 | } |
| 95 | printf("OK\n"); | 140 | printf("OK\n"); |
| 141 | + /* End of multiple coils */ | ||
| 96 | 142 | ||
| 97 | /** INPUT STATUS **/ | 143 | /** INPUT STATUS **/ |
| 98 | ret = read_input_status(&mb_param, SLAVE, UT_INPUT_STATUS_ADDRESS, | 144 | ret = read_input_status(&mb_param, SLAVE, UT_INPUT_STATUS_ADDRESS, |
| 99 | UT_INPUT_STATUS_NB_POINTS, tab_rp_status); | 145 | UT_INPUT_STATUS_NB_POINTS, tab_rp_status); |
| 100 | - printf("* read_input_status: "); | 146 | + printf("1/1 read_input_status: "); |
| 101 | 147 | ||
| 102 | if (ret != UT_INPUT_STATUS_NB_POINTS) { | 148 | if (ret != UT_INPUT_STATUS_NB_POINTS) { |
| 103 | printf("FAILED (nb points %d)\n", ret); | 149 | printf("FAILED (nb points %d)\n", ret); |
| @@ -123,11 +169,53 @@ int main(void) | @@ -123,11 +169,53 @@ int main(void) | ||
| 123 | printf("OK\n"); | 169 | printf("OK\n"); |
| 124 | 170 | ||
| 125 | /** HOLDING REGISTERS **/ | 171 | /** HOLDING REGISTERS **/ |
| 172 | + | ||
| 173 | + /* Single register */ | ||
| 174 | + ret = preset_single_register(&mb_param, SLAVE, | ||
| 175 | + UT_HOLDING_REGISTERS_ADDRESS, 0x1234); | ||
| 176 | + printf("1/2 preset_single_register: "); | ||
| 177 | + if (ret == 1) { | ||
| 178 | + printf("OK\n"); | ||
| 179 | + } else { | ||
| 180 | + printf("FAILED\n"); | ||
| 181 | + goto close; | ||
| 182 | + } | ||
| 183 | + | ||
| 184 | + ret = read_holding_registers(&mb_param, SLAVE, | ||
| 185 | + UT_HOLDING_REGISTERS_ADDRESS, | ||
| 186 | + 1, tab_rp_registers); | ||
| 187 | + printf("2/2 read_holding_registers: "); | ||
| 188 | + if (ret != 1) { | ||
| 189 | + printf("FAILED (nb points %d)\n", ret); | ||
| 190 | + goto close; | ||
| 191 | + } | ||
| 192 | + | ||
| 193 | + if (tab_rp_registers[0] != 0x1234) { | ||
| 194 | + printf("FAILED (%0X != %0X)\n", | ||
| 195 | + tab_rp_registers[0], 0x1234); | ||
| 196 | + goto close; | ||
| 197 | + } | ||
| 198 | + printf("OK\n"); | ||
| 199 | + /* End of single register */ | ||
| 200 | + | ||
| 201 | + /* Many registers */ | ||
| 202 | + ret = preset_multiple_registers(&mb_param, SLAVE, | ||
| 203 | + UT_HOLDING_REGISTERS_ADDRESS, | ||
| 204 | + UT_HOLDING_REGISTERS_NB_POINTS, | ||
| 205 | + UT_HOLDING_REGISTERS_TAB); | ||
| 206 | + printf("1/2 preset_multiple_registers: "); | ||
| 207 | + if (ret == UT_HOLDING_REGISTERS_NB_POINTS) { | ||
| 208 | + printf("OK\n"); | ||
| 209 | + } else { | ||
| 210 | + printf("FAILED\n"); | ||
| 211 | + goto close; | ||
| 212 | + } | ||
| 213 | + | ||
| 126 | ret = read_holding_registers(&mb_param, | 214 | ret = read_holding_registers(&mb_param, |
| 127 | SLAVE, UT_HOLDING_REGISTERS_ADDRESS, | 215 | SLAVE, UT_HOLDING_REGISTERS_ADDRESS, |
| 128 | UT_HOLDING_REGISTERS_NB_POINTS, | 216 | UT_HOLDING_REGISTERS_NB_POINTS, |
| 129 | tab_rp_registers); | 217 | tab_rp_registers); |
| 130 | - printf("* read_holding_registers: "); | 218 | + printf("2/2 read_holding_registers: "); |
| 131 | if (ret != UT_HOLDING_REGISTERS_NB_POINTS) { | 219 | if (ret != UT_HOLDING_REGISTERS_NB_POINTS) { |
| 132 | printf("FAILED (nb points %d)\n", ret); | 220 | printf("FAILED (nb points %d)\n", ret); |
| 133 | goto close; | 221 | goto close; |
| @@ -142,13 +230,15 @@ int main(void) | @@ -142,13 +230,15 @@ int main(void) | ||
| 142 | } | 230 | } |
| 143 | } | 231 | } |
| 144 | printf("OK\n"); | 232 | printf("OK\n"); |
| 233 | + /* End of many registers */ | ||
| 234 | + | ||
| 145 | 235 | ||
| 146 | /** INPUT REGISTERS **/ | 236 | /** INPUT REGISTERS **/ |
| 147 | ret = read_input_registers(&mb_param, | 237 | ret = read_input_registers(&mb_param, |
| 148 | SLAVE, UT_INPUT_REGISTERS_ADDRESS, | 238 | SLAVE, UT_INPUT_REGISTERS_ADDRESS, |
| 149 | UT_INPUT_REGISTERS_NB_POINTS, | 239 | UT_INPUT_REGISTERS_NB_POINTS, |
| 150 | tab_rp_registers); | 240 | tab_rp_registers); |
| 151 | - printf("* read_input_registers: "); | 241 | + printf("1/1 read_input_registers: "); |
| 152 | if (ret != UT_INPUT_REGISTERS_NB_POINTS) { | 242 | if (ret != UT_INPUT_REGISTERS_NB_POINTS) { |
| 153 | printf("FAILED (nb points %d)\n", ret); | 243 | printf("FAILED (nb points %d)\n", ret); |
| 154 | goto close; | 244 | goto close; |
| @@ -162,57 +252,7 @@ int main(void) | @@ -162,57 +252,7 @@ int main(void) | ||
| 162 | } | 252 | } |
| 163 | } | 253 | } |
| 164 | printf("OK\n"); | 254 | printf("OK\n"); |
| 165 | - | ||
| 166 | - /** WRITE FUNCTIONS **/ | ||
| 167 | - printf("\nTEST WRITE FUNCTIONS:\n"); | ||
| 168 | 255 | ||
| 169 | - ret = force_single_coil(&mb_param, SLAVE, UT_COIL_STATUS_ADDRESS, ON); | ||
| 170 | - printf("* force_single_coil: "); | ||
| 171 | - if (ret == 1) { | ||
| 172 | - printf("OK\n"); | ||
| 173 | - } else { | ||
| 174 | - printf("FAILED\n"); | ||
| 175 | - goto close; | ||
| 176 | - } | ||
| 177 | - | ||
| 178 | - ret = preset_single_register(&mb_param, SLAVE, 0x01, 0x03); | ||
| 179 | - printf("* preset_single_register: "); | ||
| 180 | - if (ret == 1) { | ||
| 181 | - printf("OK\n"); | ||
| 182 | - } else { | ||
| 183 | - printf("FAILED\n"); | ||
| 184 | - goto close; | ||
| 185 | - } | ||
| 186 | - | ||
| 187 | - { | ||
| 188 | - int nb_points = 0x0A; | ||
| 189 | - uint8_t tab_value[] = { ON, OFF, ON, ON, | ||
| 190 | - OFF, OFF, ON, ON, | ||
| 191 | - ON, OFF }; | ||
| 192 | - ret = force_multiple_coils(&mb_param, SLAVE, 0x13, | ||
| 193 | - nb_points, tab_value); | ||
| 194 | - printf("* force_multiple_coils: "); | ||
| 195 | - if (ret == nb_points) { | ||
| 196 | - printf("OK\n"); | ||
| 197 | - } else { | ||
| 198 | - printf("FAILED\n"); | ||
| 199 | - goto close; | ||
| 200 | - } | ||
| 201 | - } | ||
| 202 | - | ||
| 203 | - { | ||
| 204 | - int nb_points = 2; | ||
| 205 | - uint16_t tab_value[] = { 0x000A, 0x0102 }; | ||
| 206 | - ret = preset_multiple_registers(&mb_param, SLAVE, | ||
| 207 | - 0x01, nb_points, tab_value); | ||
| 208 | - printf("* preset_multiple_registers: "); | ||
| 209 | - if (ret == nb_points) { | ||
| 210 | - printf("OK\n"); | ||
| 211 | - } else { | ||
| 212 | - printf("FAILED\n"); | ||
| 213 | - goto close; | ||
| 214 | - } | ||
| 215 | - } | ||
| 216 | 256 | ||
| 217 | /** ILLEGAL DATA ADDRESS */ | 257 | /** ILLEGAL DATA ADDRESS */ |
| 218 | printf("\nTEST ILLEGAL DATA ADDRESS:\n"); | 258 | printf("\nTEST ILLEGAL DATA ADDRESS:\n"); |
tests/unit-test-slave.c
| @@ -45,24 +45,14 @@ int main(void) | @@ -45,24 +45,14 @@ int main(void) | ||
| 45 | exit(1); | 45 | exit(1); |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | - /* Examples from PI_MODBUS_300.pdf */ | ||
| 49 | - | ||
| 50 | - /** COIL STATUS **/ | ||
| 51 | - set_bits_from_bytes(mb_mapping.tab_coil_status, | ||
| 52 | - UT_COIL_STATUS_ADDRESS, UT_COIL_STATUS_NB_POINTS, | ||
| 53 | - UT_COIL_STATUS_TAB); | ||
| 54 | - | 48 | + /* Examples from PI_MODBUS_300.pdf. |
| 49 | + Only the read-only input values are assigned. */ | ||
| 50 | + | ||
| 55 | /** INPUT STATUS **/ | 51 | /** INPUT STATUS **/ |
| 56 | set_bits_from_bytes(mb_mapping.tab_input_status, | 52 | set_bits_from_bytes(mb_mapping.tab_input_status, |
| 57 | UT_INPUT_STATUS_ADDRESS, UT_INPUT_STATUS_NB_POINTS, | 53 | UT_INPUT_STATUS_ADDRESS, UT_INPUT_STATUS_NB_POINTS, |
| 58 | UT_INPUT_STATUS_TAB); | 54 | UT_INPUT_STATUS_TAB); |
| 59 | 55 | ||
| 60 | - /** HOLDING REGISTERS **/ | ||
| 61 | - for (i=0; i < UT_HOLDING_REGISTERS_NB_POINTS; i++) { | ||
| 62 | - mb_mapping.tab_holding_registers[UT_HOLDING_REGISTERS_ADDRESS+i] = | ||
| 63 | - UT_HOLDING_REGISTERS_TAB[i];; | ||
| 64 | - } | ||
| 65 | - | ||
| 66 | /** INPUT REGISTERS **/ | 56 | /** INPUT REGISTERS **/ |
| 67 | for (i=0; i < UT_INPUT_REGISTERS_NB_POINTS; i++) { | 57 | for (i=0; i < UT_INPUT_REGISTERS_NB_POINTS; i++) { |
| 68 | mb_mapping.tab_input_registers[UT_INPUT_REGISTERS_ADDRESS+i] = | 58 | mb_mapping.tab_input_registers[UT_INPUT_REGISTERS_ADDRESS+i] = |