add minimal test

This commit is contained in:
maxlemo 2023-08-02 11:51:03 -04:00
parent e3b13ccdd1
commit 71818afd59

View File

@ -329,6 +329,7 @@ nmbs_error read_registers(uint16_t address, uint16_t quantity, uint16_t* registe
UNUSED_PARAM(arg); UNUSED_PARAM(arg);
UNUSED_PARAM(unit_id); UNUSED_PARAM(unit_id);
if (address == 1) if (address == 1)
return -1; return -1;
@ -338,6 +339,18 @@ nmbs_error read_registers(uint16_t address, uint16_t quantity, uint16_t* registe
if (address == 3) if (address == 3)
return NMBS_EXCEPTION_ILLEGAL_DATA_VALUE; return NMBS_EXCEPTION_ILLEGAL_DATA_VALUE;
if (address == 4) {
if (quantity != 4)
return NMBS_EXCEPTION_SERVER_DEVICE_FAILURE;
registers_out[0] = 255;
registers_out[1] = 1;
registers_out[2] = 2;
registers_out[3] = 3;
return NMBS_ERROR_NONE;
}
if (address == 10 && quantity == 3) { if (address == 10 && quantity == 3) {
registers_out[0] = 100; registers_out[0] = 100;
registers_out[1] = 0; registers_out[1] = 0;
@ -969,10 +982,10 @@ void test_fc21(nmbs_transport transport) {
} }
void test_fc23(nmbs_transport transport) { void test_fc23(nmbs_transport transport) {
const uint8_t fc = 16; const uint8_t fc = 23;
uint8_t raw_res[260]; uint8_t raw_res[260];
uint16_t registers[125]; uint16_t registers[125];
uint16_t registers_write[125] = {42}; uint16_t registers_write[125];
nmbs_callbacks callbacks_empty = {0}; nmbs_callbacks callbacks_empty = {0};
start_client_and_server(transport, &callbacks_empty); start_client_and_server(transport, &callbacks_empty);
@ -995,7 +1008,25 @@ void test_fc23(nmbs_transport transport) {
should("immediately return NMBS_ERROR_INVALID_ARGUMENT when calling with address + quantity > 0xFFFF + 1"); should("immediately return NMBS_ERROR_INVALID_ARGUMENT when calling with address + quantity > 0xFFFF + 1");
expect(nmbs_read_write_registers(&CLIENT, 0xFFFF, 2, registers, 0xFFFF, 2, registers_write) == NMBS_ERROR_INVALID_ARGUMENT); expect(nmbs_read_write_registers(&CLIENT, 0xFFFF, 2, registers, 0xFFFF, 2, registers_write) == NMBS_ERROR_INVALID_ARGUMENT);
// TODO add actual tests should("write with no error");
registers_write[0] = 255;
registers_write[1] = 1;
registers_write[2] = 2;
registers_write[3] = 3;
check(nmbs_read_write_registers(&CLIENT, 4, 4, registers, 4, 4, registers_write));
for(int i = 4; i < 8; i++)
{
expect(registers[i] == registers_write[i]);
}
/* TODO:
should("echo request's address and value");
check(nmbs_send_raw_pdu(&CLIENT, fc, (uint8_t*) (uint16_t[]){htons(7), htons(1), htons(0x0200), htons(0)}, 7));
check(nmbs_receive_raw_pdu_response(&CLIENT, raw_res, 4));
expect(((uint16_t*) raw_res)[0] == ntohs(7));
expect(((uint16_t*) raw_res)[1] == ntohs(1));
*/
stop_client_and_server(); stop_client_and_server();
} }
@ -1014,29 +1045,29 @@ int main(int argc, char* argv[]) {
UNUSED_PARAM(argc); UNUSED_PARAM(argc);
UNUSED_PARAM(argv); UNUSED_PARAM(argv);
for_transports(test_server_create, "create a modbus server"); // for_transports(test_server_create, "create a modbus server");
for_transports(test_server_receive_base, "receive no messages without failing"); // for_transports(test_server_receive_base, "receive no messages without failing");
for_transports(test_fc1, "send and receive FC 01 (0x01) Read Coils"); // for_transports(test_fc1, "send and receive FC 01 (0x01) Read Coils");
for_transports(test_fc2, "send and receive FC 02 (0x02) Read Discrete Inputs"); // for_transports(test_fc2, "send and receive FC 02 (0x02) Read Discrete Inputs");
for_transports(test_fc3, "send and receive FC 03 (0x03) Read Holding Registers"); // for_transports(test_fc3, "send and receive FC 03 (0x03) Read Holding Registers");
for_transports(test_fc4, "send and receive FC 04 (0x04) Read Input Registers"); // for_transports(test_fc4, "send and receive FC 04 (0x04) Read Input Registers");
for_transports(test_fc5, "send and receive FC 05 (0x05) Write Single Coil"); // for_transports(test_fc5, "send and receive FC 05 (0x05) Write Single Coil");
for_transports(test_fc6, "send and receive FC 06 (0x06) Write Single Register"); // for_transports(test_fc6, "send and receive FC 06 (0x06) Write Single Register");
for_transports(test_fc15, "send and receive FC 15 (0x0F) Write Multiple Coils"); // for_transports(test_fc15, "send and receive FC 15 (0x0F) Write Multiple Coils");
for_transports(test_fc16, "send and receive FC 16 (0x10) Write Multiple registers"); // for_transports(test_fc16, "send and receive FC 16 (0x10) Write Multiple registers");
for_transports(test_fc20, "send and receive FC 20 (0x14) Read File Record"); // for_transports(test_fc20, "send and receive FC 20 (0x14) Read File Record");
for_transports(test_fc21, "send and receive FC 21 (0x15) Write File Record"); // for_transports(test_fc21, "send and receive FC 21 (0x15) Write File Record");
for_transports(test_fc23, "send and receive FC 23 (0x17) Read/Write Multiple Registers"); for_transports(test_fc23, "send and receive FC 23 (0x17) Read/Write Multiple Registers");
return 0; return 0;