2323import mocha_core .database_server as ds
2424import mocha_core .database_utils as du
2525from mocha_core .srv import AddUpdateDB , GetDataHeaderDB , SelectDB
26-
27-
28- import mocha_core .srv
26+ from mocha_core .msg import DatabaseCB
2927
3028
3129class Database_server_test (Node ):
@@ -51,11 +49,18 @@ def __init__(self):
5149 while not self .get_data_header_db_cli .wait_for_service (timeout_sec = 1.0 ):
5250 logger .debug ("Waiting for get_data_header_db" )
5351 self .select_db_cli = self .create_client (SelectDB ,
54- "/test_database_server/select_db" ,
52+ "/test_database_server/select_db" ,
5553 qos_profile = ds .DatabaseServer .QOS_PROFILE )
5654 while not self .select_db_cli .wait_for_service (timeout_sec = 1.0 ):
5755 logger .debug ("Waiting for get_data_header_db" )
5856
57+ # Subscribe to the answers from the database
58+ def callback (data ):
59+ self .data_answer = data
60+ self .database_cb_sub = self .create_subscription (DatabaseCB ,
61+ "/test_database_server/database_cb" ,
62+ callback , 10 )
63+
5964 def recorder_async (self , loops_per_thread , robot_configs , topic_configs , robot_name ):
6065 # Get a random ros time
6166 tid = du .get_topic_id_from_name (
@@ -82,7 +87,7 @@ def recorder_async(self, loops_per_thread, robot_configs, topic_configs, robot_n
8287 ).to_msg ()
8388 try :
8489 # Create request and call service method directly
85- req = mocha_core . srv . AddUpdateDB .Request ()
90+ req = AddUpdateDB .Request ()
8691 req .topic_id = tid
8792 req .timestamp = timestamp
8893 req .msg_content = serialized_msg
@@ -174,7 +179,7 @@ def test_add_retrieve_single_msg(self):
174179
175180 try :
176181 # Create request and call service method directly
177- req = mocha_core . srv . AddUpdateDB .Request ()
182+ req = AddUpdateDB .Request ()
178183 req .topic_id = tid
179184 req .timestamp = rclpy .clock .Clock ().now ().to_msg ()
180185 req .msg_content = serialized_msg
@@ -191,7 +196,7 @@ def test_add_retrieve_single_msg(self):
191196 # Request the same hash through service
192197 try :
193198 # Create request and call service method directly
194- req = mocha_core . srv . GetDataHeaderDB .Request ()
199+ req = GetDataHeaderDB .Request ()
195200 req .msg_header = answ_header
196201 future = client_node .get_data_header_db_cli .call_async (req )
197202 rclpy .spin_until_future_complete (client_node , future )
@@ -207,9 +212,12 @@ def test_add_retrieve_single_msg(self):
207212
208213 self .assertEqual (tid , ans_topic_id )
209214 self .assertEqual (ans_data , sample_msg )
210- # print("Received topic:", ans_topic_name)
211- # print("ROS msg:", ans_data)
212- # print("Timestamp:", ans_ts)
215+
216+ # We will now test the callback from the database when a new message is
217+ # published
218+ self .assertTrue (client_node .data_answer is not None )
219+ self .assertEqual (client_node .data_answer .topic_id , tid )
220+ self .assertEqual (client_node .data_answer .header .frame_id , self .robot_name )
213221
214222 def test_add_select_robot (self ):
215223 # Create a single client
@@ -237,7 +245,7 @@ def test_add_select_robot(self):
237245 serialized_msg = du .serialize_ros_msg (sample_msg )
238246 try :
239247 # Create request and call service method directly
240- req = mocha_core . srv . AddUpdateDB .Request ()
248+ req = AddUpdateDB .Request ()
241249 req .topic_id = tid
242250 req .timestamp = rclpy .clock .Clock ().now ().to_msg ()
243251 req .msg_content = serialized_msg
@@ -254,7 +262,7 @@ def test_add_select_robot(self):
254262 try :
255263 robot_id = du .get_robot_id_from_name (self .robot_configs , self .robot_name )
256264 # Create request and call service method directly
257- req = mocha_core . srv . SelectDB .Request ()
265+ req = SelectDB .Request ()
258266 req .robot_id = robot_id
259267 req .topic_id = 0 # Changed from None to 0 since it's uint8
260268 req .ts_limit = rclpy .clock .Clock ().now ().to_msg ()
@@ -299,7 +307,7 @@ def test_insert_storm(self):
299307 try :
300308 robot_id = du .get_robot_id_from_name (self .robot_configs , self .robot_name )
301309 # Create request and call service method directly
302- req = mocha_core . srv . SelectDB .Request ()
310+ req = SelectDB .Request ()
303311 req .robot_id = robot_id
304312 req .topic_id = 0 # Changed from None to 0 since it's uint8
305313 req .ts_limit = rclpy .clock .Clock ().now ().to_msg ()
@@ -315,4 +323,4 @@ def test_insert_storm(self):
315323
316324
317325if __name__ == "__main__" :
318- unittest .main ()
326+ unittest .main (failfast = True )
0 commit comments