Przeglądaj źródła

CTS: add exit handler to test_agents

Reviewed-by: Steven Dake <sdake@redhat.com>
Signed-off-by: Angus Salkeld <asalkeld@redhat.com>
Angus Salkeld 15 lat temu
rodzic
commit
25842e3c53
2 zmienionych plików z 14 dodań i 1 usunięć
  1. 13 0
      cts/agents/common_test_agent.c
  2. 1 1
      cts/corosync.py

+ 13 - 0
cts/agents/common_test_agent.c

@@ -236,6 +236,12 @@ static int create_server_sockect (int server_port)
 	return listener;
 	return listener;
 }
 }
 
 
+static int32_t sig_exit_handler (int num, void *data)
+{
+	qb_loop_stop(poll_handle);
+	return 0;
+}
+
 int test_agent_run(int server_port, ta_do_command_fn func)
 int test_agent_run(int server_port, ta_do_command_fn func)
 {
 {
 	int listener;
 	int listener;
@@ -243,6 +249,13 @@ int test_agent_run(int server_port, ta_do_command_fn func)
 	do_command = func;
 	do_command = func;
 	poll_handle = qb_loop_create ();
 	poll_handle = qb_loop_create ();
 
 
+	qb_loop_signal_add(poll_handle, QB_LOOP_HIGH,
+		SIGINT, NULL, sig_exit_handler, NULL);
+	qb_loop_signal_add(poll_handle, QB_LOOP_HIGH,
+		SIGQUIT, NULL, sig_exit_handler, NULL);
+	qb_loop_signal_add(poll_handle, QB_LOOP_HIGH,
+		SIGTERM, NULL, sig_exit_handler, NULL);
+
 	listener = create_server_sockect (server_port);
 	listener = create_server_sockect (server_port);
 	qb_loop_poll_add (poll_handle,
 	qb_loop_poll_add (poll_handle,
 			  QB_LOOP_MED,
 			  QB_LOOP_MED,

+ 1 - 1
cts/corosync.py

@@ -438,8 +438,8 @@ class TestAgent(object):
     def stop(self):
     def stop(self):
         '''Tear down (undo) the given ScenarioComponent'''
         '''Tear down (undo) the given ScenarioComponent'''
         self.env.debug('test agent: stopping %s on node %s' % (self.binary, self.node))
         self.env.debug('test agent: stopping %s on node %s' % (self.binary, self.node))
+        self.rsh(self.node, "killall " + self.binary + " 2>/dev/null")
         self.sock.close ()
         self.sock.close ()
-        self.rsh(self.node, "killall -9 " + self.binary + " 2>/dev/null")
         self.started = False
         self.started = False
 
 
     def kill(self):
     def kill(self):