18 #include <gtest/gtest.h> 22 #include <pilz_msgs/BrakeTest.h> 24 #include <pilz_testutils/joint_state_publisher_mock.h> 26 #include <prbt_hardware_support/WriteModbusRegister.h> 45 unsigned short register_res, uint16_t expectation,
float sleep_per_try_s,
46 unsigned short retries)
48 RegCont content_perf, content_res;
49 for (
int i = 0; i <= retries; i++)
51 ROS_INFO(
"Retry %d, waited for %.1fs so far", i, sleep_per_try_s * static_cast<float>(i));
54 if (content_perf[0] == expectation && content_res[0] == expectation)
82 TEST(IntegrationtestExecuteBrakeTest, testBrakeTestService)
92 ASSERT_TRUE(nh_private.
getParam(
"modbus_server_ip", ip));
93 ASSERT_TRUE(nh_private.
getParam(
"modbus_server_port", port));
96 unsigned int modbus_register_size{ write_api_spec.getMaxRegisterDefinition() + 1U };
98 std::thread modbus_server_thread(&initalizeAndRun<prbt_hardware_support::PilzModbusServerMock>,
99 std::ref(modbus_server), ip.c_str(),
static_cast<unsigned int>(port));
113 pilz_testutils::JointStatePublisherMock joint_states_pub;
114 joint_states_pub.startPublishingAsync();
129 pilz_msgs::BrakeTest srv;
130 EXPECT_TRUE(brake_test_srv_client.
call(srv));
141 joint_states_pub.stopPublishing();
143 modbus_server_thread.join();
148 int main(
int argc,
char* argv[])
150 ros::init(argc, argv,
"integrationtest_trigger_brake_test");
156 testing::InitGoogleTest(&argc, argv);
157 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 MODBUS_WRITE_SERVICE_NAME
static const std::string BRAKETEST_PERFORMED
static constexpr uint16_t MODBUS_BRAKE_TEST_PREPARE_VALUE
Offers a modbus server and read/write functionality via subscription/publication. ...
Mocks the ROS Api of the manipulator relevant for stopping and holding.
std::vector< uint16_t > RegCont
Convenience data type defining the data type for a collection of registers.
RegCont readHoldingRegister(const RegCont::size_type start_index, const RegCont::size_type num_reg_to_read)
Reads the specified number of registers, beginning at the specified start point from the holding regi...
static const std::string BRAKETEST_RESULT
static constexpr uint16_t MODBUS_BRAKE_TEST_EXPECTED_VALUE
void setHoldingRegister(std::initializer_list< std::pair< unsigned int, uint16_t > > reg_list)
bool brakeTestRegisterSetOnServer(PilzModbusServerMock &server, unsigned short register_perf, unsigned short register_res, uint16_t expectation, float sleep_per_try_s, unsigned short retries)
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
bool call(MReq &req, MRes &res)
bool waitForExistence(ros::Duration timeout=ros::Duration(-1))
bool getParam(const std::string &key, std::string &s) const
static const std::string CONTROLLER_HOLD_MODE_SERVICE_NAME
static const std::string EXECUTE_BRAKE_TEST_SERVICE_NAME
void terminate()
Terminate the Server. Reading or connecting to it will fail.
int main(int argc, char *argv[])
void advertiseHoldService(ros::NodeHandle nh, std::string hold_service_name)
void advertiseUnholdService(ros::NodeHandle nh, std::string unhold_service_name)
TEST(IntegrationtestExecuteBrakeTest, testBrakeTestService)
static const std::string CONTROLLER_UNHOLD_MODE_SERVICE_NAME
Specifies the meaning of the holding registers.
static constexpr double WAIT_FOR_BRAKE_TEST_SERVICE_TIMEOUT_S