#include "CppUTest/TestHarness.h" extern "C" { #include "modbus_regs_file.h" } #define U16_DATA_SIMPLE 0x3465 #define U16_DATA_MAX 0xFFFF #define U16_DATA_ZERO 0x0000 #define ADDR_SIMPLE 0x0023 #define ADDR_MAX 0xFFFF #define ADDR_ZERO 0x0000 TEST_GROUP(modbus_regs_file) { uint16_t u16_data_simple; uint16_t u16_data_max; uint16_t u16_data_zero; void setup() { u16_data_simple = U16_DATA_SIMPLE; u16_data_max = U16_DATA_MAX; u16_data_zero = U16_DATA_ZERO; } void teardown() { MBRF_clear_file(); } }; // TEST(modbus_regs_file, read_wire_non_init_i_reg_zero_addr) // { // MBRF_init_start(); // CHECK_EQUAL(MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_input), MBR_OK); // CHECK_EQUAL(MBRF_create_reg(ADDR_ZERO,&u16_data_simple,MBR_input), MBR_OK); // MBRF_init_end(); // } // TEST(modbus_regs_file, read_i_reg) // { // MBRF_init_start(); // MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_input); // MBRF_create_reg(ADDR_ZERO,&u16_data_zero,MBR_input); // MBRF_create_reg(ADDR_MAX,&u16_data_max,MBR_input); // MBRF_init_end(); // uint16_t data; // CHECK_EQUAL(MBRF_read_reg(ADDR_SIMPLE,&data,MBR_input), MBR_OK); // CHECK_EQUAL(data,U16_DATA_SIMPLE); // CHECK_EQUAL(MBRF_read_reg(ADDR_ZERO,&data,MBR_input), MBR_OK); // CHECK_EQUAL(data,U16_DATA_ZERO); // CHECK_EQUAL(MBRF_read_reg(ADDR_MAX,&data,MBR_input), MBR_OK); // CHECK_EQUAL(data,U16_DATA_MAX); // } // TEST(modbus_regs_file, read_multiple_i_reg) // { // #define START_ADDR 32u // #define PLUS 23u // uint16_t reg[6]={0,1,2,3,4,5}; // MBRF_init_start(); // //некрасиво но нормально // MBRF_create_reg(START_ADDR,®[0],MBR_input); // MBRF_create_reg(START_ADDR+1,®[1],MBR_input); // MBRF_create_reg(START_ADDR+2,®[2],MBR_input); // MBRF_create_reg(START_ADDR+3,®[3],MBR_input); // MBRF_init_end(); // uint8_t data[8]={0}; // CHECK_EQUAL(MBRF_multiple_read_reg(START_ADDR, 4, data, MBR_input), MBR_OK); // CHECK_EQUAL(data[0],(uint8_t)((reg[0])>>8)); // CHECK_EQUAL(data[1],(uint8_t)(reg[0])); // CHECK_EQUAL(data[2],(uint8_t)((reg[1])>>8)); // CHECK_EQUAL(data[3],(uint8_t)(reg[1])); // CHECK_EQUAL(data[4],(uint8_t)((reg[2])>>8)); // CHECK_EQUAL(data[5],(uint8_t)(reg[2])); // CHECK_EQUAL(data[6],(uint8_t)((reg[3])>>8)); // CHECK_EQUAL(data[7],(uint8_t)(reg[3])); // } TEST(modbus_regs_file, read_wire_non_init_i_reg_zero_addr) { MBRF_init_start(); MBRF_init_end(); uint16_t data=0; CHECK_EQUAL(MBRF_write_reg(ADDR_ZERO,data,MBR_input), MBR_ERROR); CHECK_EQUAL(MBRF_read_reg(ADDR_ZERO,&data,MBR_input), MBR_ERROR); CHECK_EQUAL(data,0); } ///////////////////////////input//////////////////// TEST(modbus_regs_file, create_i_reg_before_init_file) { CHECK_EQUAL(MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_input),MBR_CEATE_DISABLE); } TEST(modbus_regs_file, create_i_reg_defore_init_end) { MBRF_init_start(); CHECK_EQUAL(MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_input), MBR_OK); CHECK_EQUAL(MBRF_create_reg(ADDR_ZERO,&u16_data_simple,MBR_input), MBR_OK); MBRF_init_end(); CHECK_EQUAL(MBRF_create_reg(ADDR_MAX,&u16_data_simple,MBR_input), MBR_CEATE_DISABLE); } TEST(modbus_regs_file, create_i_reg_simple) { MBRF_init_start(); CHECK_EQUAL(MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_input), MBR_OK); CHECK_EQUAL(MBRF_create_reg(ADDR_ZERO,&u16_data_simple,MBR_input), MBR_OK); CHECK_EQUAL(MBRF_create_reg(ADDR_MAX,&u16_data_simple,MBR_input), MBR_OK); CHECK_EQUAL(MBRF_init_end(), MBR_OK); } TEST(modbus_regs_file, create_i_reg_len_max) { MBRF_init_start(); for(uint32_t i=0; i>8)); CHECK_EQUAL(data[1],(uint8_t)(reg[0])); CHECK_EQUAL(data[2],(uint8_t)((reg[1])>>8)); CHECK_EQUAL(data[3],(uint8_t)(reg[1])); CHECK_EQUAL(data[4],(uint8_t)((reg[2])>>8)); CHECK_EQUAL(data[5],(uint8_t)(reg[2])); CHECK_EQUAL(data[6],(uint8_t)((reg[3])>>8)); CHECK_EQUAL(data[7],(uint8_t)(reg[3])); } TEST(modbus_regs_file, read_multiple_i_reg_zero_len) { MBRF_init_start(); MBRF_create_reg(ADDR_ZERO,&u16_data_zero,MBR_input); MBRF_init_end(); uint8_t data[8]={0}; CHECK_EQUAL(MBRF_multiple_read_reg(ADDR_ZERO, 0, data, MBR_input), MBR_LEN_ERROR); } TEST(modbus_regs_file, read_multiple_i_reg_one_len) { MBRF_init_start(); MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_input); MBRF_init_end(); uint8_t data[8]={0}; CHECK_EQUAL(MBRF_multiple_read_reg(ADDR_SIMPLE, 1, data, MBR_input), MBR_OK); CHECK_EQUAL(data[0],(uint8_t)(U16_DATA_SIMPLE>>8)); CHECK_EQUAL(data[1],(uint8_t)(U16_DATA_SIMPLE)); CHECK_EQUAL(data[2],0); CHECK_EQUAL(data[3],0); CHECK_EQUAL(data[4],0); CHECK_EQUAL(data[5],0); CHECK_EQUAL(data[6],0); CHECK_EQUAL(data[7],0); } TEST(modbus_regs_file, read_multiple_window_i_reg) { #define START_ADDR 32u #define PLUS 23u uint16_t buf=1; MBRF_init_start(); //некрасиво но нормально MBRF_create_reg(START_ADDR,&buf,MBR_input); MBRF_create_reg(START_ADDR+1,&buf,MBR_input); MBRF_create_reg(START_ADDR+3,&buf,MBR_input); MBRF_init_end(); uint8_t data[8]={0}; CHECK_EQUAL(MBRF_multiple_read_reg(START_ADDR, 3, data, MBR_input), MBR_ERROR); CHECK_EQUAL(data[0],0); CHECK_EQUAL(data[1],0); CHECK_EQUAL(data[2],0); CHECK_EQUAL(data[3],0); CHECK_EQUAL(data[4],0); CHECK_EQUAL(data[5],0); CHECK_EQUAL(data[6],0); CHECK_EQUAL(data[7],0); } TEST(modbus_regs_file, read_multiple_non_create_i_reg) { MBRF_init_start(); MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_input); MBRF_create_reg(ADDR_ZERO,&u16_data_simple,MBR_input); MBRF_init_end(); uint8_t data[8]={0}; CHECK_EQUAL(MBRF_multiple_read_reg(ADDR_MAX, 1, data, MBR_input), MBR_ERROR); CHECK_EQUAL(data[0],0); CHECK_EQUAL(data[1],0); CHECK_EQUAL(data[2],0); CHECK_EQUAL(data[3],0); CHECK_EQUAL(data[4],0); CHECK_EQUAL(data[5],0); CHECK_EQUAL(data[6],0); CHECK_EQUAL(data[7],0); } ///////////////////////////holding//////////////////// TEST(modbus_regs_file, create_h_reg_before_init_file) { CHECK_EQUAL(MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_holding),MBR_CEATE_DISABLE); } TEST(modbus_regs_file, create_h_reg_defore_init_end) { MBRF_init_start(); CHECK_EQUAL(MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_holding), MBR_OK); CHECK_EQUAL(MBRF_create_reg(ADDR_ZERO,&u16_data_simple,MBR_holding), MBR_OK); MBRF_init_end(); CHECK_EQUAL(MBRF_create_reg(ADDR_MAX,&u16_data_simple,MBR_holding), MBR_CEATE_DISABLE); } TEST(modbus_regs_file, create_h_reg_simple) { MBRF_init_start(); CHECK_EQUAL(MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_holding), MBR_OK); CHECK_EQUAL(MBRF_create_reg(ADDR_ZERO,&u16_data_simple,MBR_holding), MBR_OK); CHECK_EQUAL(MBRF_create_reg(ADDR_MAX,&u16_data_simple,MBR_holding), MBR_OK); CHECK_EQUAL(MBRF_init_end(), MBR_OK); } TEST(modbus_regs_file, create_h_reg_len_max) { MBRF_init_start(); for(uint32_t i=0; i>8)); CHECK_EQUAL(data[1],(uint8_t)(reg[0])); CHECK_EQUAL(data[2],(uint8_t)((reg[1])>>8)); CHECK_EQUAL(data[3],(uint8_t)(reg[1])); CHECK_EQUAL(data[4],(uint8_t)((reg[2])>>8)); CHECK_EQUAL(data[5],(uint8_t)(reg[2])); CHECK_EQUAL(data[6],(uint8_t)((reg[3])>>8)); CHECK_EQUAL(data[7],(uint8_t)(reg[3])); } TEST(modbus_regs_file, read_multiple_h_reg_zero_len) { MBRF_init_start(); MBRF_create_reg(ADDR_ZERO,&u16_data_zero,MBR_holding); MBRF_init_end(); uint8_t data[8]={0}; CHECK_EQUAL(MBRF_multiple_read_reg(ADDR_ZERO, 0, data, MBR_holding), MBR_LEN_ERROR); } TEST(modbus_regs_file, read_multiple_h_reg_one_len) { MBRF_init_start(); MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_holding); MBRF_init_end(); uint8_t data[8]={0}; CHECK_EQUAL(MBRF_multiple_read_reg(ADDR_SIMPLE, 1, data, MBR_holding), MBR_OK); CHECK_EQUAL(data[0],(uint8_t)(U16_DATA_SIMPLE>>8)); CHECK_EQUAL(data[1],(uint8_t)(U16_DATA_SIMPLE)); CHECK_EQUAL(data[2],0); CHECK_EQUAL(data[3],0); CHECK_EQUAL(data[4],0); CHECK_EQUAL(data[5],0); CHECK_EQUAL(data[6],0); CHECK_EQUAL(data[7],0); } TEST(modbus_regs_file, read_multiple_window_h_reg) { #define START_ADDR 32u #define PLUS 23u uint16_t buf=1; MBRF_init_start(); //некрасиво но нормально MBRF_create_reg(START_ADDR,&buf,MBR_holding); MBRF_create_reg(START_ADDR+1,&buf,MBR_holding); MBRF_create_reg(START_ADDR+3,&buf,MBR_holding); MBRF_init_end(); uint8_t data[8]={0}; CHECK_EQUAL(MBRF_multiple_read_reg(START_ADDR, 3, data, MBR_holding), MBR_ERROR); CHECK_EQUAL(data[0],0); CHECK_EQUAL(data[1],0); CHECK_EQUAL(data[2],0); CHECK_EQUAL(data[3],0); CHECK_EQUAL(data[4],0); CHECK_EQUAL(data[5],0); CHECK_EQUAL(data[6],0); CHECK_EQUAL(data[7],0); } TEST(modbus_regs_file, read_multiple_non_create_h_reg) { MBRF_init_start(); MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_holding); MBRF_create_reg(ADDR_ZERO,&u16_data_simple,MBR_holding); MBRF_init_end(); uint8_t data[8]={0}; CHECK_EQUAL(MBRF_multiple_read_reg(ADDR_MAX, 1, data, MBR_holding), MBR_ERROR); CHECK_EQUAL(data[0],0); CHECK_EQUAL(data[1],0); CHECK_EQUAL(data[2],0); CHECK_EQUAL(data[3],0); CHECK_EQUAL(data[4],0); CHECK_EQUAL(data[5],0); CHECK_EQUAL(data[6],0); CHECK_EQUAL(data[7],0); } ///////////////////////////input_discrete//////////////////// TEST(modbus_regs_file, create_id_reg_before_init_file) { CHECK_EQUAL(MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_input_discrete),MBR_CEATE_DISABLE); } TEST(modbus_regs_file, create_id_reg_defore_init_end) { MBRF_init_start(); CHECK_EQUAL(MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_input_discrete), MBR_OK); CHECK_EQUAL(MBRF_create_reg(ADDR_ZERO,&u16_data_simple,MBR_input_discrete), MBR_OK); MBRF_init_end(); CHECK_EQUAL(MBRF_create_reg(ADDR_MAX,&u16_data_simple,MBR_input_discrete), MBR_CEATE_DISABLE); } TEST(modbus_regs_file, create_id_reg_simple) { MBRF_init_start(); CHECK_EQUAL(MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_input_discrete), MBR_OK); CHECK_EQUAL(MBRF_create_reg(ADDR_ZERO,&u16_data_simple,MBR_input_discrete), MBR_OK); CHECK_EQUAL(MBRF_create_reg(ADDR_MAX,&u16_data_simple,MBR_input_discrete), MBR_OK); CHECK_EQUAL(MBRF_init_end(), MBR_OK); } TEST(modbus_regs_file, create_id_reg_len_max) { MBRF_init_start(); for(uint32_t i=0; i>8)); CHECK_EQUAL(data[1],(uint8_t)(reg[0])); CHECK_EQUAL(data[2],(uint8_t)((reg[1])>>8)); CHECK_EQUAL(data[3],(uint8_t)(reg[1])); CHECK_EQUAL(data[4],(uint8_t)((reg[2])>>8)); CHECK_EQUAL(data[5],(uint8_t)(reg[2])); CHECK_EQUAL(data[6],(uint8_t)((reg[3])>>8)); CHECK_EQUAL(data[7],(uint8_t)(reg[3])); } TEST(modbus_regs_file, read_multiple_id_reg_zero_len) { MBRF_init_start(); MBRF_create_reg(ADDR_ZERO,&u16_data_zero,MBR_input_discrete); MBRF_init_end(); uint8_t data[8]={0}; CHECK_EQUAL(MBRF_multiple_read_reg(ADDR_ZERO, 0, data, MBR_input_discrete), MBR_LEN_ERROR); } TEST(modbus_regs_file, read_multiple_id_reg_one_len) { MBRF_init_start(); MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_input_discrete); MBRF_init_end(); uint8_t data[8]={0}; CHECK_EQUAL(MBRF_multiple_read_reg(ADDR_SIMPLE, 1, data, MBR_input_discrete), MBR_OK); CHECK_EQUAL(data[0],(uint8_t)(U16_DATA_SIMPLE>>8)); CHECK_EQUAL(data[1],(uint8_t)(U16_DATA_SIMPLE)); CHECK_EQUAL(data[2],0); CHECK_EQUAL(data[3],0); CHECK_EQUAL(data[4],0); CHECK_EQUAL(data[5],0); CHECK_EQUAL(data[6],0); CHECK_EQUAL(data[7],0); } TEST(modbus_regs_file, read_multiple_window_id_reg) { #define START_ADDR 32u #define PLUS 23u uint16_t buf=1; MBRF_init_start(); //некрасиво но нормально MBRF_create_reg(START_ADDR,&buf,MBR_input_discrete); MBRF_create_reg(START_ADDR+1,&buf,MBR_input_discrete); MBRF_create_reg(START_ADDR+3,&buf,MBR_input_discrete); MBRF_init_end(); uint8_t data[8]={0}; CHECK_EQUAL(MBRF_multiple_read_reg(START_ADDR, 3, data, MBR_input_discrete), MBR_ERROR); CHECK_EQUAL(data[0],0); CHECK_EQUAL(data[1],0); CHECK_EQUAL(data[2],0); CHECK_EQUAL(data[3],0); CHECK_EQUAL(data[4],0); CHECK_EQUAL(data[5],0); CHECK_EQUAL(data[6],0); CHECK_EQUAL(data[7],0); } TEST(modbus_regs_file, read_multiple_non_create_id_reg) { MBRF_init_start(); MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_input_discrete); MBRF_create_reg(ADDR_ZERO,&u16_data_simple,MBR_input_discrete); MBRF_init_end(); uint8_t data[8]={0}; CHECK_EQUAL(MBRF_multiple_read_reg(ADDR_MAX, 1, data, MBR_input_discrete), MBR_ERROR); CHECK_EQUAL(data[0],0); CHECK_EQUAL(data[1],0); CHECK_EQUAL(data[2],0); CHECK_EQUAL(data[3],0); CHECK_EQUAL(data[4],0); CHECK_EQUAL(data[5],0); CHECK_EQUAL(data[6],0); CHECK_EQUAL(data[7],0); } ///////////////////////////coils//////////////////// TEST(modbus_regs_file, create_c_reg_before_init_file) { CHECK_EQUAL(MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_coils),MBR_CEATE_DISABLE); } TEST(modbus_regs_file, create_c_reg_defore_init_end) { MBRF_init_start(); CHECK_EQUAL(MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_coils), MBR_OK); CHECK_EQUAL(MBRF_create_reg(ADDR_ZERO,&u16_data_simple,MBR_coils), MBR_OK); MBRF_init_end(); CHECK_EQUAL(MBRF_create_reg(ADDR_MAX,&u16_data_simple,MBR_coils), MBR_CEATE_DISABLE); } TEST(modbus_regs_file, create_c_reg_simple) { MBRF_init_start(); CHECK_EQUAL(MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_coils), MBR_OK); CHECK_EQUAL(MBRF_create_reg(ADDR_ZERO,&u16_data_simple,MBR_coils), MBR_OK); CHECK_EQUAL(MBRF_create_reg(ADDR_MAX,&u16_data_simple,MBR_coils), MBR_OK); CHECK_EQUAL(MBRF_init_end(), MBR_OK); } TEST(modbus_regs_file, create_c_reg_len_max) { MBRF_init_start(); for(uint32_t i=0; i>8)); CHECK_EQUAL(data[1],(uint8_t)(reg[0])); CHECK_EQUAL(data[2],(uint8_t)((reg[1])>>8)); CHECK_EQUAL(data[3],(uint8_t)(reg[1])); CHECK_EQUAL(data[4],(uint8_t)((reg[2])>>8)); CHECK_EQUAL(data[5],(uint8_t)(reg[2])); CHECK_EQUAL(data[6],(uint8_t)((reg[3])>>8)); CHECK_EQUAL(data[7],(uint8_t)(reg[3])); } TEST(modbus_regs_file, read_multiple_c_reg_zero_len) { MBRF_init_start(); MBRF_create_reg(ADDR_ZERO,&u16_data_zero,MBR_coils); MBRF_init_end(); uint8_t data[8]={0}; CHECK_EQUAL(MBRF_multiple_read_reg(ADDR_ZERO, 0, data, MBR_coils), MBR_LEN_ERROR); } TEST(modbus_regs_file, read_multiple_c_reg_one_len) { MBRF_init_start(); MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_coils); MBRF_init_end(); uint8_t data[8]={0}; CHECK_EQUAL(MBRF_multiple_read_reg(ADDR_SIMPLE, 1, data, MBR_coils), MBR_OK); CHECK_EQUAL(data[0],(uint8_t)(U16_DATA_SIMPLE>>8)); CHECK_EQUAL(data[1],(uint8_t)(U16_DATA_SIMPLE)); CHECK_EQUAL(data[2],0); CHECK_EQUAL(data[3],0); CHECK_EQUAL(data[4],0); CHECK_EQUAL(data[5],0); CHECK_EQUAL(data[6],0); CHECK_EQUAL(data[7],0); } TEST(modbus_regs_file, read_multiple_window_c_reg) { #define START_ADDR 32u #define PLUS 23u uint16_t buf=1; MBRF_init_start(); //некрасиво но нормально MBRF_create_reg(START_ADDR,&buf,MBR_coils); MBRF_create_reg(START_ADDR+1,&buf,MBR_coils); MBRF_create_reg(START_ADDR+3,&buf,MBR_coils); MBRF_init_end(); uint8_t data[8]={0}; CHECK_EQUAL(MBRF_multiple_read_reg(START_ADDR, 3, data, MBR_coils), MBR_ERROR); CHECK_EQUAL(data[0],0); CHECK_EQUAL(data[1],0); CHECK_EQUAL(data[2],0); CHECK_EQUAL(data[3],0); CHECK_EQUAL(data[4],0); CHECK_EQUAL(data[5],0); CHECK_EQUAL(data[6],0); CHECK_EQUAL(data[7],0); } TEST(modbus_regs_file, read_multiple_non_create_c_reg) { MBRF_init_start(); MBRF_create_reg(ADDR_SIMPLE,&u16_data_simple,MBR_coils); MBRF_create_reg(ADDR_ZERO,&u16_data_simple,MBR_coils); MBRF_init_end(); uint8_t data[8]={0}; CHECK_EQUAL(MBRF_multiple_read_reg(ADDR_MAX, 1, data, MBR_coils), MBR_ERROR); CHECK_EQUAL(data[0],0); CHECK_EQUAL(data[1],0); CHECK_EQUAL(data[2],0); CHECK_EQUAL(data[3],0); CHECK_EQUAL(data[4],0); CHECK_EQUAL(data[5],0); CHECK_EQUAL(data[6],0); CHECK_EQUAL(data[7],0); }