18 #include <gtest/gtest.h> 25 #include <modbus/modbus.h> 50 static void SetUpTestCase();
51 void TearDown()
override;
52 unsigned int testPort();
71 std::iota(PORTS_FOR_TEST.begin(), PORTS_FOR_TEST.end(),
START_PORT);
77 RegCont reg_to_write_by_client{ 1 };
119 server->startAsync(
LOCALHOST, testPort());
123 shutdownModbusServer(server.get(), client);
143 server->startAsync(
LOCALHOST, testPort());
151 EXPECT_EQ(res_expected, res);
153 shutdownModbusServer(server.get(), client);
164 server->startAsync(
LOCALHOST, testPort());
166 const RegCont write_reg{ 1, 2 };
171 RegCont reg_to_write_by_client{ 8, 3, 7 };
174 static_cast<int>(write_reg.size()));
178 EXPECT_EQ(res_expected, res);
181 for (RegCont::size_type i = 0; i < reg_to_write_by_client.size(); ++i)
183 EXPECT_EQ(reg_to_write_by_client.at(i), actual_hold_reg.at(i));
186 shutdownModbusServer(server.get(), client);
199 server->startAsync(
LOCALHOST, testPort());
205 const int negative_read_nb{ -2 };
206 RegCont reg_to_write_by_client{ 8, 3, 7 };
209 std::invalid_argument);
211 shutdownModbusServer(server.get(), client);
223 server->startAsync(
LOCALHOST, testPort());
225 const RegCont write_reg{ 1, 2 };
230 RegCont reg_to_write_by_client(static_cast<unsigned int>(std::numeric_limits<int>::max()) + 1u, 0);
232 static_cast<int>(write_reg.size())),
233 std::invalid_argument);
235 shutdownModbusServer(server.get(), client);
261 server->startAsync(
LOCALHOST, testPort());
263 const RegCont write_reg{ 1, 2 };
267 shutdownModbusServer(server.get(), client);
269 RegCont reg_to_write_by_client{ 8, 3, 7 };
271 static_cast<int>(write_reg.size())),
295 server->startAsync(
LOCALHOST, testPort());
299 shutdownModbusServer(server.get(), client);
312 server->startAsync(
LOCALHOST, testPort());
314 unsigned long timeout_ms = 3;
320 shutdownModbusServer(server.get(), client);
326 int main(
int argc,
char* argv[])
328 testing::InitGoogleTest(&argc, argv);
329 return RUN_ALL_TESTS();
Offers a modbus server and read/write functionality via subscription/publication. ...
RegCont readHoldingRegister(int addr, int nb) override
See base class.
std::vector< uint16_t > RegCont
Convenience data type defining the data type for a collection of registers.
void close()
Close connection with server.
static void SetUpTestCase()
int main(int argc, char *argv[])
constexpr unsigned int DEFAULT_READ_IDX
bool init(const char *ip, unsigned int port) override
See base class.
RegCont writeReadHoldingRegister(const int write_addr, const RegCont &write_reg, const int read_addr, const int read_nb) override
See base class.
constexpr unsigned int START_PORT
constexpr unsigned int DEFAULT_REGISTER_SIZE
void setResponseTimeoutInMs(unsigned long timeout_ms) override
See base class.
TEST_F(LibModbusClientTest, testModbusClientDtor)
Test increases function coverage by ensuring that all Dtor variants are called.
unsigned long getResponseTimeoutInMs() override
See base class.
void terminate()
Terminate the Server. Reading or connecting to it will fail.
static unsigned int ACTIVE_PORT_IDX
constexpr unsigned int DEFAULT_WRITE_IDX
constexpr const char *const LOCALHOST
Wrapper around libmodbus, see https://libmodbus.org/.
Expection thrown by prbt_hardware_support::LibModbusClient::readHoldingRegister if a disconnect from ...
void shutdownModbusServer(PilzModbusServerMock *server, LibModbusClient &client)
constexpr unsigned int END_PORT
static std::vector< unsigned int > PORTS_FOR_TEST(END_PORT - START_PORT)