18 #include <gtest/gtest.h> 19 #include <gmock/gmock.h> 26 #include <condition_variable> 31 #include <std_srvs/SetBool.h> 32 #include <std_srvs/Trigger.h> 33 #include <std_msgs/Bool.h> 35 #include <modbus/modbus.h> 37 #include <prbt_hardware_support/ModbusMsgInStamped.h> 38 #include <prbt_hardware_support/IsBrakeTestRequired.h> 42 #include <prbt_hardware_support/WriteModbusRegister.h> 47 #include <pilz_testutils/async_test.h> 53 using ::testing::InSequence;
54 using ::testing::Invoke;
55 using ::testing::InvokeWithoutArgs;
72 MOCK_METHOD2(modbusWrite,
bool(WriteModbusRegister::Request &, WriteModbusRegister::Response &));
81 &BrakeTestRequiredIntegrationTest::modbusWrite,
89 IsBrakeTestRequiredResponse::_result_type expectation,
92 prbt_hardware_support::IsBrakeTestRequired srv;
93 for (
int i = 0; i<= retries; i++) {
94 auto res = brake_test_required_client.
call(srv);
97 return ::testing::AssertionFailure() <<
"Could not call service";
99 if(srv.response.result == expectation){
100 return ::testing::AssertionSuccess() <<
"It took " << i+1 <<
" tries for the service call.";
104 return ::testing::AssertionFailure() <<
"Did not get expected brake test result via service";
144 unsigned int const modbus_register_size {api_spec.getMaxRegisterDefinition() + 1U};
151 std::thread modbus_server_thread( &initalizeAndRun<prbt_hardware_support::PilzModbusServerMock>,
152 std::ref(modbus_server), ip.c_str(),
static_cast<unsigned int>(port) );
153 prbt_hardware_support::IsBrakeTestRequired srv;
174 is_brake_test_required_client, IsBrakeTestRequiredResponse::REQUIRED));
185 is_brake_test_required_client, IsBrakeTestRequiredResponse::REQUIRED));
193 is_brake_test_required_client, IsBrakeTestRequiredResponse::NOT_REQUIRED));
199 modbus_server_thread.join();
205 int main(
int argc,
char *argv[])
207 ros::init(argc, argv,
"integrationtest_brake_test_required");
210 testing::InitGoogleTest(&argc, argv);
211 return RUN_ALL_TESTS();
ServiceClient serviceClient(const std::string &service_name, bool persistent=false, const M_string &header_values=M_string())
static const std::string BRAKETEST_REQUEST
Offers a modbus server and read/write functionality via subscription/publication. ...
TEST_F(BrakeTestRequiredIntegrationTest, testBrakeTestAnnouncement)
int main(int argc, char *argv[])
void setHoldingRegister(std::initializer_list< std::pair< unsigned int, uint16_t > > reg_list)
void waitForNode(std::string node_name, double loop_frequency=10.0)
Blocks until a node defined by node_name comes up.
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
bool call(MReq &req, MRes &res)
static constexpr uint16_t MODBUS_API_VERSION_VALUE
static const std::string MODBUS_SERVICE_NAME
ServiceServer advertiseService(const std::string &service, bool(T::*srv_func)(MReq &, MRes &), T *obj)
static const std::string SERVICE_BRAKETEST_REQUIRED
static const std::string RUN_PERMITTED
bool waitForExistence(ros::Duration timeout=ros::Duration(-1))
MOCK_METHOD2(modbusWrite, bool(WriteModbusRegister::Request &, WriteModbusRegister::Response &))
BrakeTestRequiredIntegrationTest checks if the chain ModbusServerMock -> ModbusReadClient -> ModbusAd...
void terminate()
Terminate the Server. Reading or connecting to it will fail.
static constexpr unsigned int DEFAULT_RETRIES
bool getParam(const std::string &key, std::string &s) const
::testing::AssertionResult expectBrakeTestRequiredServiceCallResult(ros::ServiceClient &brake_test_required_client, IsBrakeTestRequiredResponse::_result_type expectation, uint16_t retries=DEFAULT_RETRIES)
Specifies the meaning of the holding registers.
static const std::string VERSION
ros::ServiceServer modbus_service_