Hi, Lucas this test should have in params no JeOS. There is missing wget in clean jeos system.
regards, Jiří ----- Original Message ----- > Since autotest has been helping to test the Linux virt > technologies, why not let them help to test autotest? > > This is an early preview of a test suite designed > to do functional regression testing of autotest > using vms, as well as execute both the unittests > and the pylint checkers on it, and very basic > initial verification of the autotest server features. > > It wouldn't be possible without the many cleanups > in static checking run made during the past couple > of weeks, now we're to a point where autotest master > can give useful static checking reports. > > Hopefully this code will be refactored, and coverage > expanded. > > Changes from v2: > * Far better error checking and progress > verification. > > Changes from v1: > * Fix stupid mistake from one of the rebases I've > made (client ip acquisition was made too early, > resulting in a VMIPAddressMissingError right > in the beginning of the test). > > Signed-off-by: Lucas Meneghel Rodrigues <[email protected]> > --- > tests/autotest_regression.py | 252 > ++++++++++++++++++++++++++++++++++++++ > tests/cfg/autotest_regression.cfg | 13 ++ > 2 files changed, 265 insertions(+) > create mode 100644 tests/autotest_regression.py > create mode 100644 tests/cfg/autotest_regression.cfg > > diff --git a/tests/autotest_regression.py b/tests/autotest_regression.py > new file mode 100644 > index 0000000..e1c0710 > --- /dev/null > +++ b/tests/autotest_regression.py > @@ -0,0 +1,252 @@ > +import logging > +from autotest.client.shared import error > +from virttest import aexpect, utils_misc > + > + > [email protected]_aware > +def run_autotest_regression(test, params, env): > + """ > + Autotest regression test: > + > + Use Virtual Machines to test autotest. > + > + 1) Clone the given guest OS (only Linux) image twice. > + 2) Boot 2 VMs (autotest_server_vm and autotest_client_vm) > + 4) Install the autotest server in the server vm > + 5) Run the unittests > + 6) Run the pylint checker > + 7) Run a simple client sleeptest > + 8) Run a simple server sleeptest > + 9) Register the client vm in the autotest server > + 10) Schedule a simple job sleeptest in the client. Wait for client > reboot. > + 11) If any of these steps have failed, fail the test and report the > error > + > + @param test: virt test object > + @param params: Dictionary with the test parameters > + @param env: Dictionary with test environment. > + """ > + step_failures = [] > + autotest_repo = params['autotest_repo'] > + autotest_branch = params['autotest_branch'] > + autotest_commit = params['autotest_commit'] > + password = params['password'] > + autotest_install_timeout = int(params.get('autotest_install_timeout', > 1800)) > + unittests_run_timeout = int(params.get('unittests_run_timeout', 1800)) > + pylint_run_timeout = int(params.get('pylint_run_timeout', 1800)) > + vm_names = params["vms"].split() > + server_name = vm_names[0] > + client_name = vm_names[1] > + vm_server = env.get_vm(server_name) > + vm_server.verify_alive() > + vm_client = env.get_vm(client_name) > + vm_client.verify_alive() > + > + timeout = float(params.get("login_timeout", 240)) > + session_server = vm_server.wait_for_login(timeout=timeout) > + session_client = vm_client.wait_for_login(timeout=timeout) > + client_ip = vm_client.get_address() > + server_ip = vm_server.get_address() > + > + step1 = "autotest-server-install" > + try: > + # Download the install script and execute it > + download_cmd = ("wget > https://raw.github.com/autotest/autotest/master" > + "/contrib/install-autotest-server.sh") > + session_server.cmd(download_cmd) > + permission_cmd = ("chmod +x install-autotest-server.sh") > + session_server.cmd(permission_cmd) > + install_cmd = ("./install-autotest-server.sh -u Aut0t3st -d Aut0t3st > " > + "-g %s -b %s" % (autotest_repo, autotest_branch)) > + if autotest_commit: > + install_cmd += " -c %s" % autotest_commit > + session_server.cmd(install_cmd, timeout=autotest_install_timeout) > + > vm_server.copy_files_from(guest_path="/tmp/install-autotest-server*log", > + host_path=test.resultsdir) > + except aexpect.ShellCmdError, e: > + for line in e.output.splitlines(): > + logging.error(line) > + step_failures.append(step1) > + > + top_commit = None > + try: > + session_server.cmd("test -d /usr/local/autotest/.git") > + session_server.cmd("cd /usr/local/autotest") > + top_commit = session_server.cmd("echo `git log -n 1 > --pretty=format:%H`") > + top_commit = top_commit.strip() > + logging.info("Autotest top commit for repo %s, branch %s: %s", > + autotest_repo, autotest_branch, top_commit) > + except aexpect.ShellCmdError, e: > + for line in e.output.splitlines(): > + logging.error(line) > + > + if top_commit is not None: > + session_server.close() > + session_server = vm_server.wait_for_login(timeout=timeout, > + username='autotest', > + password='Aut0t3st') > + > + step2 = "unittests" > + try: > + session_server.cmd("cd /usr/local/autotest") > + session_server.cmd("utils/unittest_suite.py --full", > + timeout=unittests_run_timeout) > + except aexpect.ShellCmdError, e: > + for line in e.output.splitlines(): > + logging.error(line) > + step_failures.append(step2) > + > + step3 = "pylint" > + try: > + session_server.cmd("cd /usr/local/autotest") > + session_server.cmd("utils/check_patch.py --full --yes", > + timeout=pylint_run_timeout) > + except aexpect.ShellCmdError, e: > + for line in e.output.splitlines(): > + logging.error(line) > + step_failures.append(step3) > + > + step4 = "client_run" > + try: > + session_server.cmd("cd /usr/local/autotest/client") > + session_server.cmd("./autotest-local run sleeptest", > + timeout=pylint_run_timeout) > + session_server.cmd("rm -rf results/default") > + except aexpect.ShellCmdError, e: > + for line in e.output.splitlines(): > + logging.error(line) > + step_failures.append(step4) > + > + step5 = "server_run" > + try: > + session_client.cmd("iptables -F") > + session_server.cmd("cd /usr/local/autotest") > + session_server.cmd("server/autotest-remote -m %s --ssh-user root > " > + "--ssh-pass %s " > + "-c client/tests/sleeptest/control" % > + (client_ip, password), > + timeout=pylint_run_timeout) > + session_server.cmd("rm -rf results-*") > + except aexpect.ShellCmdError, e: > + for line in e.output.splitlines(): > + logging.error(line) > + step_failures.append(step5) > + > + step6 = "registering_client_cli" > + try: > + label_name = "label-%s" % utils_misc.generate_random_id() > + create_label_cmd = ("/usr/local/autotest/cli/autotest-rpc-client > " > + "label create -t %s -w %s" % > + (label_name, server_ip)) > + session_server.cmd(create_label_cmd) > + > + list_labels_cmd = ("/usr/local/autotest/cli/autotest-rpc-client > " > + "label list -a -w %s" % server_ip) > + list_labels_output = session_server.cmd(list_labels_cmd) > + for line in list_labels_output.splitlines(): > + logging.debug(line) > + if not label_name in list_labels_output: > + raise ValueError("No label %s in the output of %s" % > + (label_name, list_labels_cmd)) > + > + create_host_cmd = ("/usr/local/autotest/cli/autotest-rpc-client > " > + "host create -t %s %s -w %s" % > + (label_name, client_ip, server_ip)) > + session_server.cmd(create_host_cmd) > + > + list_hosts_cmd = ("/usr/local/autotest/cli/autotest-rpc-client " > + "host list -w %s" % server_ip) > + list_hosts_output = session_server.cmd(list_hosts_cmd) > + for line in list_hosts_output.splitlines(): > + logging.debug(line) > + if not client_ip in list_hosts_output: > + raise ValueError("No client %s in the output of %s" % > + (client_ip, create_label_cmd)) > + if not label_name in list_hosts_output: > + raise ValueError("No label %s in the output of %s" % > + (label_name, create_label_cmd)) > + > + except (aexpect.ShellCmdError, ValueError), e: > + if isinstance(e, aexpect.ShellCmdError): > + for line in e.output.splitlines(): > + logging.error(line) > + elif isinstance(e, ValueError): > + logging.error(e) > + step_failures.append(step6) > + > + step7 = "running_job_cli" > + try: > + session_client.cmd("iptables -F") > + > + job_name = "Sleeptest %s" % utils_misc.generate_random_id() > + > + def job_is_status(status): > + list_jobs_cmd = > ("/usr/local/autotest/cli/autotest-rpc-client " > + "job list -a -w %s" % server_ip) > + list_jobs_output = session_server.cmd(list_jobs_cmd) > + if job_name in list_jobs_output: > + if status in list_jobs_output: > + return True > + elif "Aborted" in list_jobs_output: > + raise ValueError("Job is in aborted state") > + elif "Failed" in list_jobs_output: > + raise ValueError("Job is in failed state") > + else: > + return False > + else: > + raise ValueError("Job %s does not show in the " > + "output of %s" % list_jobs_cmd) > + > + def job_is_completed(): > + return job_is_status("Completed") > + > + def job_is_running(): > + return job_is_status("Running") > + > + job_create_cmd = ("/usr/local/autotest/cli/autotest-rpc-client " > + "job create --test sleeptest -m %s '%s' -w %s" > % > + (client_ip, job_name, server_ip)) > + session_server.cmd(job_create_cmd) > + > + if not utils_misc.wait_for(job_is_running, 300, 0, 10, > + "Waiting for job to start running"): > + raise ValueError("Job did not start running") > + > + # Wait for the session to become unresponsive > + if not utils_misc.wait_for(lambda: not > session_client.is_responsive(), > + timeout=300): > + raise error.ValueError("Client machine did not reboot") > + > + # Establish a new client session > + session_client = vm_client.wait_for_login(timeout=timeout) > + > + # Wait for the job to complete > + if not utils_misc.wait_for(job_is_completed, 300, 0, 10, > + "Waiting for job to complete"): > + raise ValueError("Job did not complete") > + > + # Copy logs back so we can analyze them > + > vm_server.copy_files_from(guest_path="/usr/local/autotest/results/*", > + host_path=test.resultsdir) > + > + except (aexpect.ShellCmdError, ValueError), e: > + if isinstance(e, aexpect.ShellCmdError): > + for line in e.output.splitlines(): > + logging.error(line) > + elif isinstance(e, ValueError): > + logging.error(e) > + step_failures.append(step7) > + > + def report_version(): > + if top_commit is not None: > + logging.info("Autotest git repo: %s", autotest_repo) > + logging.info("Autotest git branch: %s", autotest_repo) > + logging.info("Autotest top commit: %s", top_commit) > + > + if step_failures: > + logging.error("The autotest regression testing failed") > + report_version() > + raise error.TestFail("The autotest regression testing had the " > + "following steps failed: %s" % step_failures) > + else: > + logging.info("The autotest regression testing passed") > + report_version() > diff --git a/tests/cfg/autotest_regression.cfg > b/tests/cfg/autotest_regression.cfg > new file mode 100644 > index 0000000..e811dd9 > --- /dev/null > +++ b/tests/cfg/autotest_regression.cfg > @@ -0,0 +1,13 @@ > +- autotest_regression: install setup image_copy unattended_install.cdrom > + virt_test_type = qemu libvirt > + master_images_clone = image1 > + type = autotest_regression > + restart_vm = yes > + kill_vm_on_error = yes > + login_timeout = 240 > + vms = "autotest_server_vm autotest_client_vm" > + autotest_install_timeout = 1800 > + autotest_repo = git://github.com/autotest/autotest.git > + autotest_branch = next > + autotest_commit = > + > -- > 1.8.2 > > _______________________________________________ > Virt-test-devel mailing list > [email protected] > https://www.redhat.com/mailman/listinfo/virt-test-devel > _______________________________________________ Virt-test-devel mailing list [email protected] https://www.redhat.com/mailman/listinfo/virt-test-devel
