diff --git a/qemu/tests/cfg/qemu_guest_agent.cfg b/qemu/tests/cfg/qemu_guest_agent.cfg index c9cb9aedc9cc3c6a98af736033e2f2fec122ca7b..800f7d393d7c51e3ded95c9921dce820c196e0fd 100644 --- a/qemu/tests/cfg/qemu_guest_agent.cfg +++ b/qemu/tests/cfg/qemu_guest_agent.cfg @@ -5,6 +5,7 @@ gagent_name = "org.qemu.guest_agent.0" gagent_install_cmd = "yum install -y qemu-guest-agent" gagent_start_cmd = "service qemu-guest-agent start" + gagent_stop_cmd = "service qemu-guest-agent stop" gagent_status_cmd = "service qemu-guest-agent status" gagent_pkg_check_cmd = "rpm -q qemu-guest-agent" Windows: @@ -18,6 +19,7 @@ gagent_install_cmd = "start /wait C:\qemu-ga\${qemu_ga_pkg} /quiet" gagent_uninstall_cmd = "start /wait msiexec /uninstall C:\qemu-ga\${qemu_ga_pkg} /quiet" gagent_start_cmd = "net start qemu-ga" + gagent_stop_cmd = "net stop qemu-ga" gagent_status_cmd = sc query qemu-ga |findstr "RUNNING" gagent_pkg_check_cmd = wmic product get name |findstr "QEMU guest agent" gagent_host_path = "/tmp/${qemu_ga_pkg}" @@ -25,6 +27,7 @@ gagent_remove_service_cmd = "net stop qemu-ga & del /f C:\qemu-ga\${qemu_ga_pkg} & echo done" RHEL.6: gagent_start_cmd = "service qemu-ga start" + gagent_stop_cmd = "service qemu-ga stop" gagent_status_cmd = "service qemu-ga status" variants: - gagent_install: @@ -33,6 +36,9 @@ only Windows gagent_check_type = install_uninstall repeat_times = 50 + - gagent_stop_start: + gagent_check_type = stop_start + repeat_times = 100 - check_sync: gagent_check_type = sync - check_powerdown: diff --git a/qemu/tests/qemu_guest_agent.py b/qemu/tests/qemu_guest_agent.py index 7e3bc99ac520181b5b6cfa67b63d3c2a37b0e616..8b7df7baf29e1e9506d3799db956df4b5100f5df 100644 --- a/qemu/tests/qemu_guest_agent.py +++ b/qemu/tests/qemu_guest_agent.py @@ -157,28 +157,35 @@ class QemuGuestAgentTest(BaseVirtTest): "in VM '%s', detail: '%s'" % (vm.name, o)) @error_context.context_aware - def gagent_start(self, session, vm, *args): + def gagent_start(self, session, vm): """ - Start qemu-guest-agent in guest,if start a running service,for rhel - guest return code is zero,for windows guest,return code is not zero. + Start qemu-guest-agent in guest. :param session: use for sending cmd - :param env: Dictionary with test environment. - :param args: Start cmd. + :param vm: Virtual machine object. """ - - if args and isinstance(args, tuple): - gagent_start_cmd = args[0] - else: - raise error.TestError("Missing config 'gagent_start_cmd'") - - if not gagent_start_cmd: - return - - error_context.context("Try to start 'qemu-guest-agent'.", logging.info) - s, o = session.cmd_status_output(gagent_start_cmd) + error_context.context("Try to start qemu-ga service.", logging.info) + s, o = session.cmd_status_output(self.params["gagent_start_cmd"]) + # if start a running service, for rhel guest return code is zero, + # for windows guest,return code is not zero if s and "already been started" not in o: - raise error.TestFail("Could not start qemu-guest-agent in VM" - " '%s', detail: '%s'" % (vm.name, o)) + self.test.fail("Could not start qemu-ga service in VM '%s'," + "detail: '%s'" % (vm.name, o)) + + @error_context.context_aware + def gagent_stop(self, session, vm): + """ + Stop qemu-guest-agent in guest. + :param session: use for sending cmd + :param vm: Virtual machine object. + :param args: Stop cmd. + """ + error_context.context("Try to stop qemu-ga service.", logging.info) + s, o = session.cmd_status_output(self.params["gagent_stop_cmd"]) + # if stop a stopped service,for rhel guest return code is zero, + # for windows guest,return code is not zero. + if s and "is not started" not in o: + self.test.fail("Could not stop qemu-ga service in VM '%s', " + "detail: '%s'" % (vm.name, o)) @error_context.context_aware def gagent_create(self, params, vm, *args): @@ -236,7 +243,7 @@ class QemuGuestAgentTest(BaseVirtTest): logging.info("qemu-ga service is already running.") else: logging.info("qemu-ga service is not running.") - self.gagent_start(session, self.vm, *[params.get("gagent_start_cmd")]) + self.gagent_start(session, self.vm) session.close() args = [params.get("gagent_serial_type"), params.get("gagent_name")] @@ -283,7 +290,7 @@ class QemuGuestAgentBasicCheck(QemuGuestAgentTest): session = self._get_session(params, self.vm) for i in xrange(repeats): - error_context.context("Install/uninstall qemu-ga pkg for the %sth time" % (i + 1), + error_context.context("Repeat: %s/%s" % (i + 1, repeats), logging.info) if self._check_ga_pkg(session, params.get("gagent_pkg_check_cmd")): self.gagent_uninstall(session, self.vm, *[params.get("gagent_uninstall_cmd")]) @@ -293,6 +300,32 @@ class QemuGuestAgentBasicCheck(QemuGuestAgentTest): self.gagent_uninstall(session, self.vm, *[params.get("gagent_uninstall_cmd")]) session.close() + @error_context.context_aware + def gagent_check_stop_start(self, test, params, env): + """ + Repeat stop/restart qemu-ga service in guest. + + :param test: kvm test object + :param params: Dictionary with the test parameters + :param env: Dictionary with test environment. + """ + repeats = int(params.get("repeat_times", 1)) + logging.info("Repeat stop/restart qemu-ga service for %s times" % repeats) + + if not self.vm: + self.vm = self.env.get_vm(params["main_vm"]) + self.vm.verify_alive() + session = self._get_session(params, self.vm) + for i in xrange(repeats): + error_context.context("Repeat: %s/%s" % (i + 1, repeats), + logging.info) + self.gagent_stop(session, self.vm) + time.sleep(1) + self.gagent_start(session, self.vm) + time.sleep(1) + self.gagent_verify(params, self.vm) + session.close() + @error_context.context_aware def gagent_check_sync(self, test, params, env): """ @@ -915,7 +948,7 @@ class QemuGuestAgentBasicCheckWin(QemuGuestAgentBasicCheck): logging.info("qemu-ga service is already running.") else: logging.info("qemu-ga service is not running.") - self.gagent_start(session, self.vm, *[params.get("gagent_start_cmd")]) + self.gagent_start(session, self.vm) session.close() args = [params.get("gagent_serial_type"), params.get("gagent_name")] diff --git a/qemu/tests/qemu_guest_agent_suspend.py b/qemu/tests/qemu_guest_agent_suspend.py index 32f700789b87ae860569de08f382b7adce45ad16..3f029b9a30a9743e28d2072d857ca74ec7734ab9 100644 --- a/qemu/tests/qemu_guest_agent_suspend.py +++ b/qemu/tests/qemu_guest_agent_suspend.py @@ -49,7 +49,9 @@ class QemuGASuspendTest(QemuGuestAgentTest): # Reset guest agent object to None after guest reboot. self.gagent = None error.context("Check if guest agent work again.", logging.info) - self.gagent_start(params, self.vm, *[params.get("gagent_start_cmd")]) + session = self._get_session(params, self.vm) + self.gagent_start(session, self.vm) + session.close() args = [params.get("gagent_serial_type"), params.get("gagent_name")] self.gagent_create(params, self.vm, *args) self.gagent.verify_responsive()