Commit d11d30a50af5ee688966fcbca525a804dfa6cf94

Authored by Stéphane Raimbault
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
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] =