37 Integration test node that checks if the rviz are working. 40 <test name="rviz_config_check" 41 test-name="rviz_config_check" 42 pkg="jsk_rviz_plugins" type="rviz_config_check.py"> 46 - name: another topic name 47 timeout: timeout for the topic 51 Author: Kei Okada <kei.okada@gmail.com> 65 PKG =
'jsk_rviz_plugins' 66 NAME =
'rviz_config_check' 71 super(self.__class__, self).
__init__(*args)
78 params = rospy.get_param(
'~topics', [])
80 if 'name' not in param:
81 self.fail(
"'name' field in rosparam is required but not specified.")
82 topic = {
'timeout': 10,
'type':
None}
84 self.
topics[topic[
'name']] = topic
88 use_sim_time = rospy.get_param(
'/use_sim_time',
False)
90 while not rospy.is_shutdown()
and \
91 use_sim_time
and (rospy.Time.now() == rospy.Time(0)):
92 rospy.logwarn_throttle(
93 1,
'/use_sim_time is specified and rostime is 0, /clock is published?')
94 if time.time() - t_start > 10:
95 self.fail(
'Timed out (10s) of /clock publication.')
100 rviz_service_names = []
101 while not rospy.is_shutdown()
and len(rviz_service_names) == 0:
102 rviz_service_names = rosservice.rosservice_find(
'rviz/SendFilePath')
103 if len(rviz_service_names) == 0:
104 rospy.logwarn(
"[{}] Waiting rviz service (rviz/SendFilePath) for {:.3f} sec".format(rospy.get_name(), time.time() - t_start))
106 if os.environ[
'ROS_DISTRO'] <
'melodic':
107 rviz_service_names = rosservice.rosservice_find(
'std_srvs/Empty')
111 rospy.logwarn(
"[{}] Found rviz service names {}".format(rospy.get_name(), rviz_service_names))
112 rviz_node_names = set(map(rosservice.get_service_node, rviz_service_names))
113 rospy.logwarn(
"[{}] Found rviz node names {}".format(rospy.get_name(), rviz_node_names))
114 if len(rviz_node_names) == 0:
115 rospy.logerr(
"[{}] Could not find rviz nodes".format(rospy.get_name()))
121 rospy.logwarn(
"[{}] Check rviz node exists {}".format(rospy.get_name(), self.
rviz_node_name))
123 t_start = time.time()
124 while not rospy.is_shutdown():
126 t_elapsed = t_now - t_start
131 node_api = rosnode.rosnode_ping(self.
rviz_node_name, max_count=1, skip_cache=
True)
133 rospy.logerr(
"[{}] Could not find rviz node api on rosmaster".format(rospy.get_name()))
136 rospy.logwarn(
"[{}] {:.3f} Rviz node found at {}".format(rospy.get_name(), t_elapsed, node_api))
139 master = rosgraph.Master(
'/rosnode')
141 state = master.getSystemState()
142 subs.extend(sorted([t
for t, l
in state[1]
if self.
rviz_node_name in l]))
143 subs = list(set(subs))
144 rospy.logwarn(
'[{}] rviz subscribes {}'.format(rospy.get_name(), subs))
149 rospy.logwarn(
'[{}] rviz subscribes {}'.format(rospy.get_name(), topic))
151 rospy.logerr(
'[{}] rviz did not subscribes {}'.format(rospy.get_name(), topic))
154 rospy.logwarn(
"[{}] rviz keep alive for {}[sec] and found {}".format(rospy.get_name(), self.
test_duration, self.
topics))
155 self.assertTrue(
True,
"check {}/rviz alives".format(rospy.get_name()))
158 if __name__ ==
'__main__':
160 rostest.run(PKG, NAME, RvizConfigCheck, sys.argv)
def test_rviz_exists(self)