diff --git a/.gitignore b/.gitignore index b060eda6..f46176e3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.log __pycache__ *.pyc +.venv diff --git a/README.md b/README.md index 1b9b12ac..f7e28e0c 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ $ ./avocado-setup.py -h [--additional-args ADD_ARGS] [--guest-os GUEST_OS] [--vt {qemu,libvirt}] [--install] [--no-download] [--no-deps-check] [--install-deps] [--clean] [--enable-kvm] [--nrunner] [--run-tests RUN_TESTS] [--config-env CONFIG_PATH] - [--config-norun NORUNTEST_PATH] + [--config-norun NORUNTEST_PATH] [--resume] options: -h, --help show this help message and exit @@ -103,6 +103,9 @@ $ ./avocado-setup.py -h Specify env config path --config-norun NORUNTEST_PATH Specify no run tests config path + --resume Resume an interrupted run using the same --output-dir results + directory. Skips suites that completed cleanly, replays the + interrupted suite via avocado replay, and runs remaining suites fresh. ``` @@ -262,6 +265,58 @@ $ ./avocado-setup.py -h 19. `--config-norun`: > Path to a custom NORUNTEST File path +20. `--resume`: + > Use this option to resume a test run that was interrupted due to a system crash or reboot. + > The wrapper scans the results directory (from `--output-dir` or the default `results/` path) + > and automatically determines the state of each suite: + > + > | Suite state in prior run | Action on resume | + > |---|---| + > | Completed cleanly | Skipped — not re-run | + > | Was running at time of crash/reboot | Replayed via `avocado replay ` — only not-passed tests re-run | + > | Never started (system crashed before it was reached) | Normal fresh run | + > + > **Usage — first run:** + > ``` + > ./avocado-setup.py --run-suite host_a,host_b,host_c + > ``` + > + > **After system reboot/crash — same command with `--resume`:** + > ``` + > ./avocado-setup.py --run-suite host_a,host_b,host_c --resume + > ``` + > + > If a custom `--output-dir` was used in the original run, pass it again with `--resume`: + > ``` + > ./avocado-setup.py --run-suite host_a,host_b,host_c --output-dir /path/to/output --resume + > ``` + > + > NOTE: The `--run-suite` list must be identical to the original run so the wrapper can + > correctly identify which suites ran, which was interrupted, and which never started. + > Works for both host and guest test suites. + +### Minor Version-Specific Package Dependencies: + + By default, the wrapper checks for OS-level dependency packages using the **major version** of the detected OS + (e.g., `[deps_sles16]`). The wrapper also supports **minor version-specific** sections that take priority over + the major version section. + + **How it works:** + 1. The wrapper first checks for a minor version-specific section (e.g., `[deps_sles16_1]`) + 2. If not found, it falls back to the major version section (e.g., `[deps_sles16]`) + 3. The same lookup logic applies to environment-type packages (e.g., `[deps_sles16_1_kvm]` → `[deps_sles16_kvm]`) + + **Example** — add packages only for SLES 16.1 in `config/wrapper/env.conf`: + ``` + [deps_sles16] + packages = gcc,python311-devel,xz-devel + + [deps_sles16_1] + packages = version-specific-package + ``` + + > **Note:** Packages in `[deps_sles16_1]` will **only** be the pre-requisite packages that need to be installed on SLES 16.1 and will not affect other SLES 16.x versions. + ### Customizing Test Suites: The Host and Guest sanity suites were created to include a varied collection of tests to validate new Host OS installations. diff --git a/avocado-setup.py b/avocado-setup.py index 6475da2b..482c3bdf 100644 --- a/avocado-setup.py +++ b/avocado-setup.py @@ -138,17 +138,28 @@ def env_check(enable_kvm): not_found = [] (env_ver, env_type, cmd_pat) = helper.get_env_type(enable_kvm) # try to check base packages using major version numbers - env_ver = env_ver.split('.')[0] + env_ver_full = env_ver.replace('.', '_') # Full version with underscore + env_ver_major = env_ver.split('.')[0] env_deps = [] - if not CONFIGFILE.has_section('deps_%s' % env_ver): + # Try full version first (e.g., deps_sles16_1) + if CONFIGFILE.has_section('deps_%s' % env_ver_full): + packages = CONFIGFILE.get('deps_%s' % env_ver_full, 'packages') + if packages != '': + env_deps = packages.split(',') + # Fallback to major version (e.g., deps_sles16) + elif CONFIGFILE.has_section('deps_%s' % env_ver_major): + packages = CONFIGFILE.get('deps_%s' % env_ver_major, 'packages') + if packages != '': + env_deps = packages.split(',') + else: # Fallback to base name if specific version is not found dist = helper.get_dist() - env_ver = dist[0] + env_ver_major = dist[0] + if CONFIGFILE.has_section('deps_%s' % env_ver_major): + packages = CONFIGFILE.get('deps_%s' % env_ver_major, 'packages') + if packages != '': + env_deps = packages.split(',') - if CONFIGFILE.has_section('deps_%s' % env_ver): - packages = CONFIGFILE.get('deps_%s' % env_ver, 'packages') - if packages != '': - env_deps = packages.split(',') for dep in env_deps: if dep[-1] == "$": # Substrings @@ -165,12 +176,19 @@ def env_check(enable_kvm): not_found.append(original_dep) env_deps = [] - # try to check env specific packages - if CONFIGFILE.has_section('deps_%s_%s' % (env_ver, env_type)): + # try to check env specific packages (with full version first) + if CONFIGFILE.has_section('deps_%s_%s' % (env_ver_full, env_type)): packages = CONFIGFILE.get('deps_%s_%s' % - (env_ver, env_type), 'packages') + (env_ver_full, env_type), 'packages') if packages != '': env_deps = packages.split(',') + # Fallback to major version with env_type + elif CONFIGFILE.has_section('deps_%s_%s' % (env_ver_major, env_type)): + packages = CONFIGFILE.get('deps_%s_%s' % + (env_ver_major, env_type), 'packages') + if packages != '': + env_deps = packages.split(',') + for dep in env_deps: if helper.runcmd(cmd_pat % dep, ignore_status=True)[0] != 0: not_found.append(dep) @@ -206,7 +224,12 @@ def need_bootstrap(enable_kvm=False): logger.debug("Check if bootstrap required") needs_bootstrap = False # Check for avocado - if 'no avocado ' in helper.get_avocado_bin(ignore_status=True): + if helper.use_venv(): + venv_avocado = os.path.join(helper.get_venv_dir(), 'bin', 'avocado') + if not (os.path.isfile(venv_avocado) and os.access(venv_avocado, os.X_OK)): + logger.debug("Avocado needs to be installed") + needs_bootstrap = True + elif 'no avocado ' in helper.get_avocado_bin(ignore_status=True): logger.debug("Avocado needs to be installed") needs_bootstrap = True if enable_kvm: @@ -305,6 +328,10 @@ def create_config(logdir): with open(avocado_conf, 'w+') as conf: config.write(conf) + if helper.use_venv(): + venv_conf_dir = os.path.join(helper.get_venv_dir(), '.config', 'avocado') + os.makedirs(venv_conf_dir, exist_ok=True) + shutil.copy2(avocado_conf, os.path.join(venv_conf_dir, 'avocado.conf')) def guest_download(guestos): @@ -383,47 +410,61 @@ def bootstrap(enable_kvm=False, guest_os=None): helper.copy_dir_file(postscript, postscript_dir) -def run_test(testsuite, avocado_bin, runner, linux_src_path): +def run_test(testsuite, avocado_bin, runner, linux_src_path, resume_job_dir=None): """ To run given testsuite :param testsuite: Testsuite object which has details about the tests :param avocado_bin: Executable path of avocado :param runner: Whether to use --test-runner runner (True) or --max-parallel-tasks=1 (False) :param linux_src_path: Path to kernel source for gcov coverage (or None) + :param resume_job_dir: Prior avocado job dir for resume mode (or None) """ - nrun = True - if runner: - runner = '--test-runner runner' - nrun = False + if resume_job_dir: + # Pass the full absolute path so avocado can resolve the job directory + # unambiguously without hash prefix matching (which raises ValueError + # "hash is not unique enough" when multiple jobs share the same 7-char + # suffix). avocado's get_job_results_dir() accepts a direct path when + # the directory exists and contains an 'id' file. + replay_path = os.path.abspath(resume_job_dir) + # --resume tells avocado to skip tests that already passed/were skipped + # in the source job, so only the remaining/interrupted tests are re-run. + logger.info("Resuming suite %s via avocado replay %s", + testsuite.name, replay_path) + cmd = "%s replay %s --resume" % (avocado_bin, replay_path) else: - runner = '--max-parallel-tasks=1' - - logger.info('') - if 'guest' in testsuite.type: - guest_args = TestSuite.guest_add_args - logger.info("Running Guest Tests Suite %s", testsuite.shortname) - if "sanity" in testsuite.shortname: - guest_args = " --vt-only-filter %s " % args.guest_os - cmd = "%s run --vt-type %s --vt-config %s \ - --force-job-id %s \ - --job-results-dir %s %s" % (avocado_bin, testsuite.vt_type, - testsuite.config(), - testsuite.jobid, - testsuite.resultdir, guest_args) - if 'host' in testsuite.type: - logger.info("Running Host Tests Suite %s", testsuite.shortname) - if nrun: - cmd = "%s run %s %s" % (avocado_bin, runner, os.path.join(TEST_DIR, testsuite.test)) + nrun = True + if runner: + runner = '--test-runner runner' + nrun = False else: - cmd = "%s run %s %s" % (avocado_bin, runner, testsuite.test) - if testsuite.mux: - cmd += " -m %s" % os.path.join(TEST_DIR, testsuite.mux) - cmd += " --force-job-id %s \ - --job-results-dir %s %s" % (testsuite.jobid, - testsuite.resultdir, - TestSuite.host_add_args) - if testsuite.args: - cmd += testsuite.args + runner = '--max-parallel-tasks=1' + + logger.info('') + if 'guest' in testsuite.type: + guest_args = TestSuite.guest_add_args + logger.info("Running Guest Tests Suite %s", testsuite.shortname) + if "sanity" in testsuite.shortname: + guest_args = " --vt-only-filter %s " % args.guest_os + cmd = "%s run --vt-type %s --vt-config %s \ + --force-job-id %s \ + --job-results-dir %s %s" % (avocado_bin, testsuite.vt_type, + testsuite.config(), + testsuite.jobid, + testsuite.resultdir, guest_args) + if 'host' in testsuite.type: + logger.info("Running Host Tests Suite %s", testsuite.shortname) + if nrun: + cmd = "%s run %s %s" % (avocado_bin, runner, os.path.join(TEST_DIR, testsuite.test)) + else: + cmd = "%s run %s %s" % (avocado_bin, runner, testsuite.test) + if testsuite.mux: + cmd += " -m %s" % os.path.join(TEST_DIR, testsuite.mux) + cmd += " --force-job-id %s \ + --job-results-dir %s %s" % (testsuite.jobid, + testsuite.resultdir, + TestSuite.host_add_args) + if testsuite.args: + cmd += testsuite.args input_file = args.inputfile try: @@ -490,6 +531,9 @@ def env_clean(deep=False): """ logger.info("Cleaning the Environment") pipManager.uninstall() + if helper.use_venv(): + pipManager.uninstall_system_wide() + pipManager.remove_venv() if os.path.isdir(prescript): helper.remove_file(prescript, prescript_dir) @@ -707,6 +751,10 @@ def parse_test_config(test_config_file, avocado_bin, enable_kvm, runner): help='To remove/uninstall autotest, avocado from system') parser.add_argument('--enable-kvm', dest="enable_kvm", action='store_true', default=False, help='enable bootstrap kvm tests') + parser.add_argument('--use-venv', '--venv', dest='use_venv', action='store_true', + default=False, + help='Install Avocado into an isolated virtual environment (.venv). ' + 'Can also be enabled with AVOCADO_USE_VENV=1') parser.add_argument('--runner', dest="runner", action='store_true', default=False, help='To use legacy runner with --test-runner runner flag') parser.add_argument('--code-cov', dest='linux_src_path', action='store', @@ -722,9 +770,22 @@ def parse_test_config(test_config_file, avocado_bin, enable_kvm, runner): parser.add_argument('--config-norun', dest='NORUNTEST_PATH', action='store', default=NORUNTEST_PATH, help='Specify no run tests config path') + parser.add_argument('--resume', dest='resume', + action='store_true', default=False, + help='Resume an interrupted run using the same ' + '--output-dir results directory. Skips suites ' + 'that completed cleanly, replays the interrupted ' + 'suite via avocado replay, and runs remaining ' + 'suites fresh.') args = parser.parse_args() + if args.use_venv: + os.environ['AVOCADO_USE_VENV'] = '1' + if helper.use_venv() and not os.environ.get('AVOCADO_VENV'): + os.environ['AVOCADO_VENV'] = os.path.join(BASE_PATH, '.venv') + helper.prepend_venv_to_path() + if args.CONFIG_PATH: if os.path.exists(args.CONFIG_PATH): CONFIGFILE.read(args.CONFIG_PATH) @@ -881,13 +942,113 @@ def parse_test_config(test_config_file, avocado_bin, enable_kvm, runner): "Config file not present") count_testsuites_status[Testsuite_status.Cant_Run.value] += 1 continue + # Build suite_job_map: scan outputdir job-* dirs and match each to a + # suite name so the run loop knows which suites completed, which was + # interrupted, and which never ran. + suite_job_map = {} + if args.resume: + if not os.path.isdir(outputdir): + logger.error("RESUME: results dir does not exist: %s", outputdir) + sys.exit(1) + # host suites: match test file basename in avocado test IDs + # guest suites: match suite shortname in avocado VT test IDs + basename_to_suite = {} + shortname_to_suite = {} + for ts_name in Testsuites_list: + ts = Testsuites[ts_name] + if ts.test: + basename_to_suite[os.path.basename(ts.test.rstrip('$'))] = ts_name + elif ts.type == 'guest': + shortname_to_suite[ts.shortname] = ts_name + for entry in sorted(os.listdir(outputdir)): + job_path = os.path.join(outputdir, entry) + if not entry.startswith("job-") or not os.path.isdir(job_path): + continue + rj = os.path.join(job_path, "results.json") + matched = None + if os.path.isfile(rj): + try: + with open(rj, encoding="utf-8") as fp: + rdata = json.load(fp) + for t in rdata.get("tests", []): + tid = t.get("id", "") + tbase = tid.split(":")[0].split("/")[-1] + if tbase in basename_to_suite: + matched = basename_to_suite[tbase] + break + for sname, ts_name in shortname_to_suite.items(): + if sname in tid: + matched = ts_name + break + if matched: + break + except (OSError, json.JSONDecodeError): + pass + if matched: + suite_job_map[matched] = job_path + else: + suite_job_map.setdefault("__interrupted__", job_path) + logger.info("RESUME: suite to job dir map from %s: %s", + outputdir, suite_job_map) + + def _suite_completed(suite_name): + """Return True if suite has a prior job with a clean results.json. + A suite is complete when total > 0 and interrupt == 0. + """ + if suite_name not in suite_job_map: + return False + rj = os.path.join(suite_job_map[suite_name], "results.json") + if not os.path.isfile(rj): + return False + try: + with open(rj, encoding="utf-8") as fp: + d = json.load(fp) + return (int(d.get("total", 0)) > 0 and + int(d.get("interrupt", 0)) == 0) + except (OSError, json.JSONDecodeError): + return False + + def _suite_replay_dir(suite_name): + """Return the prior job dir to replay for this suite, or None. + + Priority order: + 1. Suite has its own matched job dir and it is not complete → replay it. + 2. An unmatched interrupted job dir exists and this suite has no own + job dir (i.e. it was the suite running when the job was killed and + no results.json was written) → claim that dir for replay. + 3. Otherwise return None so the suite gets a normal fresh run. + """ + if suite_name in suite_job_map and not _suite_completed(suite_name): + return suite_job_map[suite_name] + if "__interrupted__" in suite_job_map and suite_name not in suite_job_map: + return suite_job_map.pop("__interrupted__") + return None + # Run Tests count_testsuites_status[Testsuite_status.Total.value] = len(Testsuites_list) for test_suite in Testsuites_list: - if not Testsuites[test_suite].run == Testsuite_status.Cant_Run.value: - run_test(Testsuites[test_suite], avocado_bin, args.runner, args.linux_src_path) - if args.interval: - time.sleep(int(args.interval)) + if Testsuites[test_suite].run == Testsuite_status.Cant_Run.value: + continue + if args.resume: + if _suite_completed(test_suite): + logger.info("RESUME: skipping '%s' (completed in prior run)", + test_suite) + Testsuites[test_suite].runstatus( + Testsuite_status.Run.value, + "Skipped (completed in prior run)") + count_testsuites_status[Testsuite_status.Run.value] += 1 + else: + replay_dir = _suite_replay_dir(test_suite) + if replay_dir: + logger.info("RESUME: replaying '%s' from %s", + test_suite, replay_dir) + run_test(Testsuites[test_suite], avocado_bin, args.runner, + args.linux_src_path, replay_dir) + else: + run_test(Testsuites[test_suite], avocado_bin, args.runner, + args.linux_src_path) + if args.interval: + time.sleep(int(args.interval)) # Finding the space needed for formatting result summary test_name_list = [] diff --git a/config/tests/guest/libvirt/lifecycle.cfg b/config/tests/guest/libvirt/lifecycle.cfg index 5317f6c9..e241fa14 100644 --- a/config/tests/guest/libvirt/lifecycle.cfg +++ b/config/tests/guest/libvirt/lifecycle.cfg @@ -112,15 +112,19 @@ variants: only virsh.dominfo - domjobabort: only virsh.domjobabort + no virsh.domjobabort.normal_test.dump_option.live_dump - domjobinfo: only virsh.domjobinfo + no virsh.domjobinfo.normal_test.dump_action.live_dump + no virsh.domjobinfo.normal_test.dump_action.keep_complete_test - domname: only virsh.domname - domstate: only virsh.domstate # Only supported for libxl hypervisor driver no virsh.domstate.normal_test.reason.crash_vm.oncrash_rename_restart.restart_libvirtd - no virsh.domstate.normal_test.reason.crash_vm.oncrash_rename_restart.normal + no virsh.domstate.normal_test.reason.crash_vm.oncrash_rename_restart.normal + no virsh.domstate.normal_test.reason.dump_vm.dump_live # Stops libvirt and kills VM, thus halting the test run no virsh.domstate.error_test.kill_vm.after_stopping_libvirtd - domuuid: @@ -138,6 +142,7 @@ variants: only virsh.ttyconsole - uri: only virsh.uri + no virsh.uri.invalid_uri - vncdisplay: only virsh.vncdisplay - qemu_monitor_command: diff --git a/config/tests/guest/libvirt/lifecycle_p1.cfg b/config/tests/guest/libvirt/lifecycle_p1.cfg new file mode 100644 index 00000000..1ed4864c --- /dev/null +++ b/config/tests/guest/libvirt/lifecycle_p1.cfg @@ -0,0 +1,63 @@ +include tests-shared.cfg +username = root +password = 123456 +main_vm = avocado-vt-vm1 +vms = avocado-vt-vm1 +# Network +nettype = bridge +netdst=virbr0 +# Using Text mode of installation +display = 'nographic' +take_regular_screendumps = no +keep_screendumps_on_error = no +keep_screendumps = no +store_vm_register = no +virt_install_binary = /usr/bin/virt-install +qemu_img_binary = /usr/bin/qemu-img +qemu_binary = /usr/bin/qemu-system-ppc64 +emulator_path = /usr/bin/qemu-system-ppc64 +use_os_variant=yes +hvm_or_pv = hvm +machine_type = pseries +only bridge +no xen, lxc, esx, ovmf +# Filterout unwanted disk types +no ide,xenblk,lsi_scsi,ahci,sd +no qed,qcow2v3,raw_dd,vmdk, usb2 +no e1000-82540em,e1000-82545em,e1000-82544gc,xennet,nic_custom +only no_virtio_rng +only smp2 +no spapr-vlan # Running test for virtio-net +only no_9p_export +only no_pci_assignable +only (image_backend=filesystem) +only smallpages +smp = 32 +vcpu_cores = 32 +vcpu_threads = 1 +vcpu_sockets = 1 +# 32G +mem = 32768 +# fixup for virsh_save (libvirt polkit uses action_lookup) +action_lookup = "connect_driver:QEMU domain_name:${main_vm}" + +variants: + - guest_import: + only unattended_install.import.import.default_install.aio_native + - guest_lifecycle: + only virsh.autostart.positive_test.set_autostart, virsh.autostart.positive_test.set_disable, virsh.capabilities.no_option, virsh.connect.local_connect.normal_test.default, virsh.connect.local_connect.normal_test.qemu_system_uri, virsh.console.normal_test.non_acl.valid_domname, virsh.console.normal_test.non_acl.valid_domid, virsh.console.normal_test.non_acl.valid_domuuid, virsh.console.normal_test.acl_test.valid_domname, virsh.console.normal_test.acl_test.valid_domid, virsh.console.normal_test.acl_test.valid_domuuid, virsh.console.error_test.special_operation.vm_paused, virsh.console.error_test.special_operation.vm_shut_off, virsh.console.error_test.acl_test, virsh.create.none, virsh.create.dot_name, virsh.create.console, virsh.create.console_autodestroy, virsh.create.console_paused, virsh.create.console_autodestroy_paused, virsh.create.autodestroy, virsh.create.autodestroy_paused, virsh.create.paused, virsh.define.positive_test.number, virsh.define.positive_test.symbol_letter_number, virsh.define.positive_test.symbol, virsh.define.positive_test.option_none, virsh.define.positive_test.dot_name, virsh.destroy.normal_test.non_acl.no_option.clean_domain_socket, virsh.destroy.normal_test.non_acl.id_option, virsh.destroy.normal_test.non_acl.name_option, virsh.destroy.normal_test.non_acl.paused_option, virsh.destroy.normal_test.non_acl.uuid_option, virsh.destroy.normal_test.non_acl.graceful, virsh.destroy.normal_test.acl_test.id_option, virsh.destroy.normal_test.acl_test.name_option, virsh.destroy.normal_test.acl_test.paused_option, virsh.destroy.normal_test.acl_test.uuid_option, virsh.destroy.normal_test.acl_test.graceful, virsh.domid.normal_test.name_option, virsh.domid.normal_test.paused_option, virsh.domid.normal_test.uuid_option, virsh.domid.normal_test.shutoff_option, virsh.save.normal_test.id_option.no_option.no_progress, virsh.save.normal_test.id_option.no_option.show_progress, virsh.save.normal_test.id_option.paused_option.no_progress, virsh.save.normal_test.id_option.paused_option.show_progress, virsh.save.normal_test.id_option.running_option.no_progress, virsh.save.normal_test.id_option.running_option.show_progress, virsh.save.normal_test.normal_option.no_option.no_progress, virsh.save.normal_test.normal_option.no_option.show_progress, virsh.save.normal_test.normal_option.paused_option.no_progress, virsh.save.normal_test.normal_option.paused_option.show_progress, virsh.save.normal_test.normal_option.running_option.no_progress, virsh.save.normal_test.normal_option.running_option.show_progress, virsh.save.normal_test.normal_option.xml_option.no_progress, virsh.save.normal_test.paused_state.no_option.no_progress, virsh.save.normal_test.paused_state.no_option.show_progress, virsh.save.normal_test.paused_state.paused_option.no_progress, virsh.save.normal_test.paused_state.paused_option.show_progress, virsh.save.normal_test.paused_state.running_option.no_progress, virsh.save.normal_test.paused_state.running_option.show_progress, virsh.save.normal_test.uuid_option.no_option.no_progress, virsh.save.normal_test.uuid_option.no_option.show_progress, virsh.save.normal_test.uuid_option.paused_option.no_progress, virsh.save.normal_test.uuid_option.paused_option.show_progress, virsh.save.normal_test.uuid_option.running_option.no_progress, virsh.save.normal_test.uuid_option.running_option.show_progress, virsh.save.normal_test.acl_test.no_option.no_progress, virsh.save.normal_test.acl_test.no_option.show_progress, virsh.save.normal_test.acl_test.paused_option.no_progress, virsh.save.normal_test.acl_test.paused_option.show_progress, virsh.save.normal_test.acl_test.running_option.no_progress, virsh.save.normal_test.acl_test.running_option.show_progress, virsh.edit.positive_test.name_option.edit_vcpu, virsh.edit.positive_test.name_option.edit_memory.default_unit, virsh.edit.positive_test.name_option.edit_memory.mib_unit, virsh.edit.positive_test.name_option.edit_memory.gib_unit, virsh.edit.positive_test.name_option.edit_iface.iface_type, virsh.edit.positive_test.name_option.edit_iface.iface_model, virsh.edit.positive_test.name_option.edit_rng.backend_null, virsh.edit.positive_test.name_option.edit_rng.backend_dev, virsh.edit.positive_test.name_option.edit_rng.backend_type_unix, virsh.edit.positive_test.name_option.edit_rng.backend_type_invalid, virsh.edit.positive_test.id_option.edit_vcpu, virsh.edit.positive_test.shut_off_option.edit_vcpu, virsh.edit.positive_test.paused_option.edit_vcpu, virsh.edit.positive_test.uuid_option.edit_vcpu, virsh.resume.normal_test.vm_paused.valid_domname, virsh.resume.normal_test.vm_paused.valid_domid, virsh.resume.normal_test.vm_paused.valid_domuuid, virsh.undefine.normal_test.vm_shut_off.no_option, virsh.undefine.normal_test.vm_shut_off.snapshots, virsh.undefine.normal_test.acl_test.no_option, virsh.hostname.no_option, virsh.hostname.with_libvirtd_stop, virsh.list.normal_test.with_valid_options.list_table.inactive, virsh.list.normal_test.with_valid_options.list_table.all, virsh.suspend.normal_test.non_acl.id_option, virsh.suspend.normal_test.non_acl.name_option, virsh.suspend.normal_test.non_acl.paused_option, virsh.suspend.normal_test.non_acl.uuid_option, virsh.suspend.normal_test.acl_test.id_option, virsh.suspend.normal_test.acl_test.name_option, virsh.suspend.normal_test.acl_test.paused_option, virsh.suspend.normal_test.acl_test.uuid_option, virsh.restore.expected_option.non_acl.no_option, virsh.restore.expected_option.non_acl.paused_option, virsh.restore.expected_option.non_acl.running_option, virsh.restore.expected_option.non_acl.xml_option, virsh.restore.expected_option.acl_test.no_option, virsh.restore.expected_option.acl_test.paused_option, virsh.restore.expected_option.acl_test.running_option, virsh.restore.expected_option.acl_test.xml_option, virsh.restore.no_option, virsh.restore.unexpected_option, virsh.restore.new_file_option, virsh.restore.start_option, virsh.restore.extra_option, virsh.restore.with_libvirt_stop, virsh.restore.acl_test, virsh.domcapabilities.positive_test.local_host.default_option_values, virsh.domcontrol.normal_test.id_option, virsh.domcontrol.normal_test.name_option, virsh.domcontrol.normal_test.paused_option, virsh.domdisplay.have_passwd.no_options.positive_readonly.vnc_t.domain_uuid, virsh.domdisplay.have_passwd.no_options.readwrite.vnc_t.domain_uuid, virsh.domdisplay.have_passwd.option_include-passwd.negtive_readonly.vnc_t.domain_uuid, virsh.domdisplay.have_passwd.option_include-passwd.readwrite.vnc_t.domain_uuid, virsh.domdisplay.have_passwd.option_type.vnc_type.vnc_t.domain_uuid, virsh.domdisplay.have_passwd.option_type.spice_type.vnc_t.domain_uuid, virsh.domdisplay.have_passwd.option_type.type_without_post.vnc_t.domain_uuid, virsh.domdisplay.have_passwd.option_type.none_type.vnc_t.domain_uuid, virsh.domstats.normal_test.domain_state.active.no_option.specific_domain, virsh.domstats.normal_test.domain_state.active.option.state.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.state.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.state.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.state.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.cpu_total.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.cpu_total.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.cpu_total.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.cpu_total.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.balloon.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.balloon.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.balloon.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.balloon.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.vcpu.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.vcpu.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.vcpu.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.vcpu.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.interface.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.interface.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.interface.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.interface.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.block.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.block.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.block.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.block.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.state_block.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.state_block.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.state_block.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.state_block.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.cpu_total_vcpu.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.cpu_total_vcpu.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.cpu_total_vcpu.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.cpu_total_vcpu.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.nowait.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.interface_block_balloon.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.interface_block_balloon.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.interface_block_balloon.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.active.option.interface_block_balloon.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.no_option.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.state.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.state.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.state.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.state.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.cpu_total.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.cpu_total.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.cpu_total.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.cpu_total.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.balloon.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.balloon.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.balloon.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.balloon.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.vcpu.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.vcpu.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.vcpu.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.vcpu.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.interface.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.interface.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.interface.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.interface.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.block.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.block.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.block.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.block.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.state_block.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.state_block.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.state_block.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.state_block.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.cpu_total_vcpu.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.cpu_total_vcpu.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.cpu_total_vcpu.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.cpu_total_vcpu.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.interface_block_balloon.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.interface_block_balloon.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.interface_block_balloon.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.inactive.option.interface_block_balloon.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.no_option.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.state.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.state.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.state.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.state.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.cpu_total.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.cpu_total.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.cpu_total.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.cpu_total.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.balloon.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.balloon.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.balloon.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.balloon.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.vcpu.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.vcpu.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.vcpu.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.vcpu.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.interface.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.interface.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.interface.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.interface.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.block.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.block.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.block.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.block.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.state_block.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.state_block.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.state_block.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.state_block.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.cpu_total_vcpu.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.cpu_total_vcpu.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.cpu_total_vcpu.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.cpu_total_vcpu.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.interface_block_balloon.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.interface_block_balloon.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.interface_block_balloon.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.persistent.option.interface_block_balloon.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.no_option.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.state.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.state.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.state.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.state.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.cpu_total.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.cpu_total.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.cpu_total.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.cpu_total.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.balloon.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.balloon.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.balloon.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.balloon.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.vcpu.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.vcpu.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.vcpu.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.vcpu.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.interface.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.interface.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.interface.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.interface.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.block.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.block.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.block.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.block.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.state_block.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.state_block.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.state_block.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.state_block.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.cpu_total_vcpu.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.cpu_total_vcpu.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.cpu_total_vcpu.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.cpu_total_vcpu.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.interface_block_balloon.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.interface_block_balloon.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.interface_block_balloon.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.transient.option.interface_block_balloon.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.no_option.specific_domain, virsh.domstats.normal_test.domain_state.running.option.state.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.state.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.state.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.state.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.cpu_total.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.cpu_total.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.cpu_total.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.cpu_total.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.balloon.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.balloon.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.balloon.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.balloon.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.vcpu.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.vcpu.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.vcpu.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.vcpu.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.interface.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.interface.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.interface.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.interface.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.block.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.block.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.block.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.block.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.state_block.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.state_block.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.state_block.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.state_block.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.cpu_total_vcpu.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.cpu_total_vcpu.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.cpu_total_vcpu.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.cpu_total_vcpu.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.iothread.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.iothread.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.iothread.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.iothread.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.interface_block_balloon.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.interface_block_balloon.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.interface_block_balloon.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.running.option.interface_block_balloon.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.no_option.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.state.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.state.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.state.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.state.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.cpu_total.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.cpu_total.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.cpu_total.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.cpu_total.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.balloon.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.balloon.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.balloon.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.balloon.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.vcpu.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.vcpu.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.vcpu.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.vcpu.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.interface.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.interface.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.interface.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.interface.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.block.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.block.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.block.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.block.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.state_block.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.state_block.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.state_block.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.state_block.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.cpu_total_vcpu.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.cpu_total_vcpu.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.cpu_total_vcpu.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.cpu_total_vcpu.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.interface_block_balloon.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.interface_block_balloon.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.interface_block_balloon.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.paused.option.interface_block_balloon.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.no_option.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.state.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.state.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.state.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.state.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.cpu_total.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.cpu_total.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.cpu_total.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.cpu_total.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.balloon.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.balloon.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.balloon.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.balloon.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.vcpu.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.vcpu.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.vcpu.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.vcpu.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.interface.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.interface.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.interface.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.interface.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.block.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.block.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.block.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.block.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.state_block.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.state_block.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.state_block.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.state_block.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.cpu_total_vcpu.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.cpu_total_vcpu.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.cpu_total_vcpu.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.cpu_total_vcpu.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.interface_block_balloon.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.interface_block_balloon.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.interface_block_balloon.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.shutoff.option.interface_block_balloon.raw_print.enforce.specific_domain, virsh.dominfo.normal_test.id_option, virsh.dominfo.normal_test.name_option, virsh.dominfo.normal_test.paused_option, virsh.dominfo.normal_test.uuid_option, virsh.dominfo.normal_test.shutoff_option, virsh.domjobabort.normal_test.dump_option.crash_dump.running_option.id_option, virsh.domjobabort.normal_test.dump_option.crash_dump.running_option.name_option, virsh.domjobabort.normal_test.dump_option.crash_dump.running_option.uuid_option, virsh.domjobabort.normal_test.dump_option.crash_dump.paused_option.id_option, virsh.domjobabort.normal_test.dump_option.crash_dump.paused_option.name_option, virsh.domjobabort.normal_test.dump_option.crash_dump.paused_option.uuid_option, virsh.domjobabort.normal_test.save_option.running_option.id_option, virsh.domjobabort.normal_test.save_option.running_option.name_option, virsh.domjobabort.normal_test.save_option.running_option.uuid_option, virsh.domjobabort.normal_test.save_option.paused_option.id_option, virsh.domjobabort.normal_test.save_option.paused_option.name_option, virsh.domjobabort.normal_test.save_option.paused_option.uuid_option, virsh.domjobabort.normal_test.managedsave_option.running_option.id_option, virsh.domjobabort.normal_test.managedsave_option.running_option.name_option, virsh.domjobabort.normal_test.managedsave_option.running_option.uuid_option, virsh.domjobabort.normal_test.managedsave_option.paused_option.id_option, virsh.domjobabort.normal_test.managedsave_option.paused_option.name_option, virsh.domjobabort.normal_test.managedsave_option.paused_option.uuid_option, virsh.domjobinfo.normal_test.dump_action.crash_dump.running_state.vm_id, virsh.domjobinfo.normal_test.dump_action.crash_dump.running_state.vm_name, virsh.domjobinfo.normal_test.dump_action.crash_dump.running_state.vm_uuid, virsh.domjobinfo.normal_test.save_action.running_state.vm_id, virsh.domjobinfo.normal_test.save_action.running_state.vm_name, virsh.domjobinfo.normal_test.save_action.running_state.vm_uuid, virsh.domjobinfo.normal_test.save_action.paused_state.vm_id, virsh.domjobinfo.normal_test.save_action.paused_state.vm_name, virsh.domjobinfo.normal_test.save_action.paused_state.vm_uuid, virsh.domjobinfo.normal_test.managedsave_action.running_state.vm_id, virsh.domjobinfo.normal_test.managedsave_action.running_state.vm_name, virsh.domjobinfo.normal_test.managedsave_action.running_state.vm_uuid, virsh.domjobinfo.normal_test.managedsave_action.paused_state.vm_id, virsh.domjobinfo.normal_test.managedsave_action.paused_state.vm_name, virsh.domjobinfo.normal_test.managedsave_action.paused_state.vm_uuid, virsh.domname.vm_state.vm_running.with_valid_option.domid, virsh.domname.vm_state.vm_running.with_valid_option.uuid, virsh.domname.vm_state.vm_running.with_invalid_option.none, virsh.domname.vm_state.vm_running.with_invalid_option.hex_domid, virsh.domname.vm_state.vm_running.with_invalid_option.invalid_domid, virsh.domname.vm_state.vm_running.with_invalid_option.invalid_uuid, virsh.domname.vm_state.vm_running.with_invalid_option.addition_invalid_param, virsh.domname.vm_state.vm_running.with_invalid_option.vm_name, virsh.domname.vm_state.vm_paused.with_valid_option.domid, virsh.domname.vm_state.vm_paused.with_valid_option.uuid, virsh.domname.vm_state.vm_paused.with_invalid_option.none, virsh.domname.vm_state.vm_paused.with_invalid_option.hex_domid, virsh.domname.vm_state.vm_paused.with_invalid_option.invalid_domid, virsh.domname.vm_state.vm_paused.with_invalid_option.invalid_uuid, virsh.domname.vm_state.vm_paused.with_invalid_option.addition_invalid_param, virsh.domname.vm_state.vm_paused.with_invalid_option.vm_name, virsh.domname.vm_state.vm_shut_off.with_valid_option.domid, virsh.domname.vm_state.vm_shut_off.with_valid_option.uuid, virsh.domname.vm_state.vm_shut_off.with_invalid_option.none, virsh.domname.vm_state.vm_shut_off.with_invalid_option.hex_domid, virsh.domname.vm_state.vm_shut_off.with_invalid_option.invalid_domid, virsh.domname.vm_state.vm_shut_off.with_invalid_option.invalid_uuid, virsh.domname.vm_state.vm_shut_off.with_invalid_option.addition_invalid_param, virsh.domname.vm_state.vm_shut_off.with_invalid_option.vm_name, virsh.domname.with_libvirtd_stop.with_valid_option.domid, virsh.domname.with_libvirtd_stop.with_valid_option.uuid, virsh.domstate.normal_test.id_option, virsh.domstate.normal_test.name_option, virsh.domstate.normal_test.paused_option, virsh.domstate.normal_test.uuid_option, virsh.domstate.normal_test.reason.suspend_vm, virsh.domstate.normal_test.reason.resume_vm, virsh.domstate.normal_test.reason.destroy_vm, virsh.domstate.normal_test.reason.start_vm.normal, virsh.domstate.normal_test.reason.start_vm.rename, virsh.domstate.normal_test.reason.start_vm.restart_libvirtd, virsh.domstate.normal_test.reason.crash_vm.oncrash_destroy, virsh.domstate.normal_test.reason.crash_vm.oncrash_restart, virsh.domstate.normal_test.reason.crash_vm.oncrash_preserve.normal, virsh.domstate.normal_test.reason.crash_vm.oncrash_preserve.reset, virsh.domstate.normal_test.reason.crash_vm.oncrash_coredump_destroy, virsh.domstate.normal_test.reason.crash_vm.oncrash_coredump_restart, virsh.domstate.normal_test.reason.dump_vm.dump_crash, virsh.domuuid.normal_test.vm_paused.valid_domid, virsh.domuuid.normal_test.vm_paused.valid_domname, virsh.domuuid.normal_test.vm_running.valid_domid, virsh.domuuid.normal_test.vm_running.valid_domname, virsh.domuuid.normal_test.vm_shutoff.valid_domname, virsh.domxml_to_native.positive_test.id_option, virsh.domxml_to_native.positive_test.uuid_option, virsh.domxml_to_native.positive_test.name_option, virsh.reboot.normal_test.id_option.no_mode, virsh.reboot.normal_test.id_option.agent_mode.no_agent, virsh.reboot.normal_test.id_option.agent_mode.agent_test, virsh.reboot.normal_test.name_option.no_mode, virsh.reboot.normal_test.name_option.agent_mode.no_agent, virsh.reboot.normal_test.name_option.agent_mode.agent_test, virsh.reboot.normal_test.paused_option.no_mode, virsh.reboot.normal_test.paused_option.agent_mode.no_agent, virsh.reboot.normal_test.paused_option.agent_mode.agent_test, virsh.reboot.normal_test.uuid_option.no_mode, virsh.reboot.normal_test.uuid_option.agent_mode.no_agent, virsh.reboot.normal_test.uuid_option.agent_mode.agent_test, virsh.reboot.error_test.readonly_option, virsh.secret_set_get.positive_testing.public_secret, virsh.secret_set_get.positive_testing.private_secret, virsh.secret_set_get.misc_testing.set_secret_value.file.public_secret, virsh.secret_set_get.misc_testing.set_secret_value.file_plain.public_secret, virsh.secret_set_get.misc_testing.set_secret_value.interactive.public_secret, virsh.shutdown.normal_test.id_option.no_mode, virsh.shutdown.normal_test.id_option.agent_mode.no_agent, virsh.shutdown.normal_test.id_option.agent_mode.agent_test, virsh.shutdown.normal_test.name_option.no_mode, virsh.shutdown.normal_test.name_option.agent_mode.no_agent, virsh.shutdown.normal_test.name_option.agent_mode.agent_test, virsh.shutdown.normal_test.suspend_option.no_mode, virsh.shutdown.normal_test.suspend_option.agent_mode.no_agent, virsh.shutdown.normal_test.suspend_option.agent_mode.agent_test, virsh.shutdown.normal_test.uuid_option.no_mode, virsh.shutdown.normal_test.uuid_option.agent_mode.no_agent, virsh.shutdown.normal_test.uuid_option.agent_mode.agent_test, virsh.shutdown.normal_test.acl_test.no_mode, virsh.shutdown.normal_test.acl_test.agent_mode.no_agent, virsh.shutdown.normal_test.acl_test.agent_mode.agent_test, virsh.uri.no_option.connect_to_local, virsh.uri.unexpect_option, virsh.uri.with_libvirtd_stop, virsh.uri.non_root_user, virsh.vncdisplay.normal_test.id_option, virsh.vncdisplay.normal_test.name_option, virsh.vncdisplay.normal_test.paused_option, virsh.vncdisplay.normal_test.uuid_option, virsh.qemu_monitor_command.normal_test.hmp_option.kvm_info.vm_running.valid_domname, virsh.qemu_monitor_command.normal_test.hmp_option.kvm_info.vm_running.valid_domid, virsh.qemu_monitor_command.normal_test.hmp_option.kvm_info.vm_running.valid_domuuid, virsh.qemu_monitor_command.normal_test.hmp_option.kvm_info.vm_paused.valid_domname, virsh.qemu_monitor_command.normal_test.hmp_option.kvm_info.vm_paused.valid_domid, virsh.qemu_monitor_command.normal_test.hmp_option.kvm_info.vm_paused.valid_domuuid, virsh.qemu_monitor_command.normal_test.hmp_option.cpus_info.vm_running.valid_domname, virsh.qemu_monitor_command.normal_test.hmp_option.cpus_info.vm_running.valid_domid, virsh.qemu_monitor_command.normal_test.hmp_option.cpus_info.vm_running.valid_domuuid, virsh.qemu_monitor_command.normal_test.hmp_option.cpus_info.vm_paused.valid_domname, virsh.qemu_monitor_command.normal_test.hmp_option.cpus_info.vm_paused.valid_domid, virsh.qemu_monitor_command.normal_test.hmp_option.cpus_info.vm_paused.valid_domuuid, virsh.qemu_monitor_command.normal_test.hmp_option.mem_info.vm_running.valid_domname, virsh.qemu_monitor_command.normal_test.hmp_option.mem_info.vm_running.valid_domid, virsh.qemu_monitor_command.normal_test.hmp_option.mem_info.vm_running.valid_domuuid, virsh.qemu_monitor_command.normal_test.hmp_option.mem_info.vm_paused.valid_domname, virsh.qemu_monitor_command.normal_test.hmp_option.mem_info.vm_paused.valid_domid, virsh.qemu_monitor_command.normal_test.hmp_option.mem_info.vm_paused.valid_domuuid, virsh.qemu_monitor_command.normal_test.qmp_option.vm_running.valid_domname, virsh.qemu_monitor_command.normal_test.qmp_option.vm_running.valid_domid, virsh.qemu_monitor_command.normal_test.qmp_option.vm_running.valid_domuuid, virsh.qemu_monitor_command.normal_test.qmp_option.vm_paused.valid_domname, virsh.qemu_monitor_command.normal_test.qmp_option.vm_paused.valid_domid, virsh.qemu_monitor_command.normal_test.qmp_option.vm_paused.valid_domuuid, virsh.qemu_monitor_command.normal_test.pretty_qmp.vm_running.valid_domname, virsh.qemu_monitor_command.normal_test.pretty_qmp.vm_running.valid_domid, virsh.qemu_monitor_command.normal_test.pretty_qmp.vm_running.valid_domuuid, virsh.qemu_monitor_command.normal_test.pretty_qmp.vm_paused.valid_domname, virsh.qemu_monitor_command.normal_test.pretty_qmp.vm_paused.valid_domid, virsh.qemu_monitor_command.normal_test.pretty_qmp.vm_paused.valid_domuuid + + - guest_remove: + only remove_guest.without_disk + # virsh sendkey testcases require guestxml with usb keyboard for the qemu to + # emulate keystokes + - virsh_sendkey: + variants: + - guest_import: + display = 'graphic' + vga="standard" + only unattended_install.import.import.default_install.aio_native + - sendkey: + only virsh.sendkey + - guest_remove: + only remove_guest.without_disk diff --git a/config/tests/guest/libvirt/lifecycle_p2.cfg b/config/tests/guest/libvirt/lifecycle_p2.cfg new file mode 100644 index 00000000..7edfd1c7 --- /dev/null +++ b/config/tests/guest/libvirt/lifecycle_p2.cfg @@ -0,0 +1,51 @@ +include tests-shared.cfg +username = root +password = 123456 +main_vm = avocado-vt-vm1 +vms = avocado-vt-vm1 +# Network +nettype = bridge +netdst=virbr0 +# Using Text mode of installation +display = 'nographic' +take_regular_screendumps = no +keep_screendumps_on_error = no +keep_screendumps = no +store_vm_register = no +virt_install_binary = /usr/bin/virt-install +qemu_img_binary = /usr/bin/qemu-img +qemu_binary = /usr/bin/qemu-system-ppc64 +emulator_path = /usr/bin/qemu-system-ppc64 +use_os_variant=yes +hvm_or_pv = hvm +machine_type = pseries +only bridge +no xen, lxc, esx, ovmf +# Filterout unwanted disk types +no ide,xenblk,lsi_scsi,ahci,sd +no qed,qcow2v3,raw_dd,vmdk, usb2 +no e1000-82540em,e1000-82545em,e1000-82544gc,xennet,nic_custom +only no_virtio_rng +only smp2 +no spapr-vlan # Running test for virtio-net +only no_9p_export +only no_pci_assignable +only (image_backend=filesystem) +only smallpages +smp = 32 +vcpu_cores = 32 +vcpu_threads = 1 +vcpu_sockets = 1 +# 32G +mem = 32768 +# fixup for virsh_save (libvirt polkit uses action_lookup) +action_lookup = "connect_driver:QEMU domain_name:${main_vm}" + +variants: + - guest_import: + only unattended_install.import.import.default_install.aio_native + - guest_lifecycle: + only virsh.connect.local_connect.normal_test.qemu_session_uri, virsh.connect.local_connect.normal_test.readonly, virsh.connect.local_connect.normal_test.connection_alive, virsh.connect.transport_connect.unix_transport, virsh.desc.positive_test.no_option, virsh.desc.positive_test.domain_ID_no_option, virsh.desc.positive_test.domain_UUID_no_option, virsh.desc.positive_test.title_option, virsh.desc.positive_test.live_desc, virsh.desc.positive_test.current_desc, virsh.desc.positive_test.config_desc, virsh.desc.positive_test.live_config_desc, virsh.desc.positive_test.live_title, virsh.desc.positive_test.current_title, virsh.desc.positive_test.config_title, virsh.desc.positive_test.live_config_title, virsh.desc.positive_test.edit_option, virsh.desc.positive_test.new_desc_option, virsh.desc.positive_test.transient_live, virsh.itself.normal_test.default_option, virsh.itself.normal_test.echo_xml_option, virsh.itself.normal_test.echo_shell_option, virsh.itself.normal_test.quit_option, virsh.itself.normal_test.readonly.default, virsh.itself.normal_test.readonly.echo_xml_option, virsh.itself.normal_test.readonly.echo_shell_option, virsh.itself.normal_test.readonly.quit_option, virsh.undefine.normal_test.vm_shut_off.remove_storage.wipe_data, virsh.undefine.normal_test.vm_shut_off.remove_storage.no_wipe_data, virsh.undefine.normal_test.vm_uuid.no_option, virsh.undefine.normal_test.undefine_twice.no_option, virsh.undefine.normal_test.vm_running.no_option, virsh.undefine.normal_test.vm_running.managedsave, virsh.hostname.unexpect_option, virsh.list.normal_test.with_valid_options.list_table.none, virsh.list.normal_test.with_valid_options.list_name.inactive, virsh.list.normal_test.with_valid_options.list_name.all, virsh.list.normal_test.with_valid_options.list_name.none, virsh.list.normal_test.with_valid_options.list_uuid.inactive, virsh.list.normal_test.with_valid_options.list_uuid.all, virsh.list.normal_test.with_valid_options.list_uuid.none, virsh.list.normal_test.with_valid_options.list_none.inactive, virsh.list.normal_test.with_valid_options.list_none.all, virsh.list.normal_test.with_valid_options.list_none.none, virsh.list.normal_test.with_valid_options.list_title.inactive, virsh.list.normal_test.with_valid_options.list_title.all, virsh.list.normal_test.with_valid_options.list_title.none, virsh.list.special_test.list_transient_domains.with_valid_options.list_table.inactive, virsh.list.special_test.list_transient_domains.with_valid_options.list_table.all, virsh.list.special_test.list_transient_domains.with_valid_options.list_table.none, virsh.list.special_test.list_transient_domains.with_valid_options.list_name.inactive, virsh.list.special_test.list_transient_domains.with_valid_options.list_name.all, virsh.list.special_test.list_transient_domains.with_valid_options.list_name.none, virsh.list.special_test.list_transient_domains.with_valid_options.list_uuid.inactive, virsh.list.special_test.list_transient_domains.with_valid_options.list_uuid.all, virsh.list.special_test.list_transient_domains.with_valid_options.list_uuid.none, virsh.list.special_test.list_transient_domains.with_valid_options.list_none.inactive, virsh.list.special_test.list_transient_domains.with_valid_options.list_none.all, virsh.list.special_test.list_transient_domains.with_valid_options.list_none.none, virsh.list.special_test.list_transient_domains.with_valid_options.list_title.inactive, virsh.list.special_test.list_transient_domains.with_valid_options.list_title.all, virsh.list.special_test.list_transient_domains.with_valid_options.list_title.none, virsh.list.special_test.list_persistent_domains.with_valid_options.list_table.inactive, virsh.list.special_test.list_persistent_domains.with_valid_options.list_table.all, virsh.list.special_test.list_persistent_domains.with_valid_options.list_table.none, virsh.list.special_test.list_persistent_domains.with_valid_options.list_name.inactive, virsh.list.special_test.list_persistent_domains.with_valid_options.list_name.all, virsh.list.special_test.list_persistent_domains.with_valid_options.list_name.none, virsh.list.special_test.list_persistent_domains.with_valid_options.list_uuid.inactive, virsh.list.special_test.list_persistent_domains.with_valid_options.list_uuid.all, virsh.list.special_test.list_persistent_domains.with_valid_options.list_uuid.none, virsh.list.special_test.list_persistent_domains.with_valid_options.list_none.inactive, virsh.list.special_test.list_persistent_domains.with_valid_options.list_none.all, virsh.list.special_test.list_persistent_domains.with_valid_options.list_none.none, virsh.list.special_test.list_persistent_domains.with_valid_options.list_title.inactive, virsh.list.special_test.list_persistent_domains.with_valid_options.list_title.all, virsh.list.special_test.list_persistent_domains.with_valid_options.list_title.none, virsh.list.special_test.with_managed_save.with_valid_options.list_table.all, virsh.list.special_test.with_libvirt_off.with_valid_options.list_table.inactive, virsh.list.special_test.with_libvirt_off.with_valid_options.list_table.all, virsh.list.special_test.with_libvirt_off.with_valid_options.list_table.none, virsh.list.special_test.with_libvirt_off.with_valid_options.list_name.inactive, virsh.list.special_test.with_libvirt_off.with_valid_options.list_name.all, virsh.list.special_test.with_libvirt_off.with_valid_options.list_name.none, virsh.list.special_test.with_libvirt_off.with_valid_options.list_uuid.inactive, virsh.list.special_test.with_libvirt_off.with_valid_options.list_uuid.all, virsh.list.special_test.with_libvirt_off.with_valid_options.list_uuid.none, virsh.list.special_test.with_libvirt_off.with_valid_options.list_none.inactive, virsh.list.special_test.with_libvirt_off.with_valid_options.list_none.all, virsh.list.special_test.with_libvirt_off.with_valid_options.list_none.none, virsh.list.special_test.with_libvirt_off.with_valid_options.list_title.inactive, virsh.list.special_test.with_libvirt_off.with_valid_options.list_title.all, virsh.list.special_test.with_libvirt_off.with_valid_options.list_title.none, virsh.version.no_option, virsh.version.unexpect_option, virsh.version.with_libvirtd_stop, virsh.version.daemon_option, virsh.domcapabilities.positive_test.local_host.auto_option_values, virsh.domcontrol.normal_test.uuid_option, virsh.domcontrol.normal_test.save_option, virsh.domcontrol.normal_test.managedsave_option, virsh.domcontrol.normal_test.restore_option, virsh.domcontrol.normal_test.readonly_option, virsh.domdisplay.no_passwd.no_options.positive_readonly.vnc_t.domain_uuid, virsh.domdisplay.no_passwd.no_options.readwrite.vnc_t.domain_uuid, virsh.domdisplay.no_passwd.option_include-passwd.negtive_readonly.vnc_t.domain_uuid, virsh.domdisplay.no_passwd.option_include-passwd.readwrite.vnc_t.domain_uuid, virsh.domdisplay.no_passwd.option_type.vnc_type.vnc_t.domain_uuid, virsh.domdisplay.no_passwd.option_type.spice_type.vnc_t.domain_uuid, virsh.domdisplay.no_passwd.option_type.type_without_post.vnc_t.domain_uuid, virsh.domdisplay.no_passwd.option_type.none_type.vnc_t.domain_uuid, virsh.domfsthaw.positive_tests.full_freeze, virsh.domfsthaw.positive_tests.no_freezed_fs, virsh.domstats.normal_test.domain_state.other.no_option.specific_domain, virsh.domstats.normal_test.domain_state.other.option.state.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.state.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.state.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.state.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.cpu_total.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.cpu_total.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.cpu_total.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.cpu_total.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.balloon.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.balloon.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.balloon.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.balloon.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.vcpu.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.vcpu.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.vcpu.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.vcpu.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.interface.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.interface.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.interface.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.interface.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.block.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.block.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.block.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.block.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.state_block.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.state_block.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.state_block.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.state_block.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.cpu_total_vcpu.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.cpu_total_vcpu.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.cpu_total_vcpu.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.cpu_total_vcpu.raw_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.interface_block_balloon.default_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.interface_block_balloon.default_print.enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.interface_block_balloon.raw_print.not_enforce.specific_domain, virsh.domstats.normal_test.domain_state.other.option.interface_block_balloon.raw_print.enforce.specific_domain, virsh.domjobinfo.normal_test.dump_action.crash_dump.paused_state.vm_id, virsh.domjobinfo.normal_test.dump_action.crash_dump.paused_state.vm_name, virsh.domjobinfo.normal_test.dump_action.crash_dump.paused_state.vm_uuid, virsh.domxml_from_native.no_option, virsh.ttyconsole.normal_test.vm_running.domname, virsh.ttyconsole.normal_test.vm_running.domuuid, virsh.ttyconsole.normal_test.vm_running.domid, virsh.ttyconsole.normal_test.vm_paused.domname, virsh.ttyconsole.normal_test.vm_paused.domuuid, virsh.ttyconsole.normal_test.vm_paused.domid + + - guest_remove: + only remove_guest.without_disk diff --git a/config/tests/guest/libvirt/lifecycle_p3.cfg b/config/tests/guest/libvirt/lifecycle_p3.cfg new file mode 100644 index 00000000..ee613cbf --- /dev/null +++ b/config/tests/guest/libvirt/lifecycle_p3.cfg @@ -0,0 +1,51 @@ +include tests-shared.cfg +username = root +password = 123456 +main_vm = avocado-vt-vm1 +vms = avocado-vt-vm1 +# Network +nettype = bridge +netdst=virbr0 +# Using Text mode of installation +display = 'nographic' +take_regular_screendumps = no +keep_screendumps_on_error = no +keep_screendumps = no +store_vm_register = no +virt_install_binary = /usr/bin/virt-install +qemu_img_binary = /usr/bin/qemu-img +qemu_binary = /usr/bin/qemu-system-ppc64 +emulator_path = /usr/bin/qemu-system-ppc64 +use_os_variant=yes +hvm_or_pv = hvm +machine_type = pseries +only bridge +no xen, lxc, esx, ovmf +# Filterout unwanted disk types +no ide,xenblk,lsi_scsi,ahci,sd +no qed,qcow2v3,raw_dd,vmdk, usb2 +no e1000-82540em,e1000-82545em,e1000-82544gc,xennet,nic_custom +only no_virtio_rng +only smp2 +no spapr-vlan # Running test for virtio-net +only no_9p_export +only no_pci_assignable +only (image_backend=filesystem) +only smallpages +smp = 32 +vcpu_cores = 32 +vcpu_threads = 1 +vcpu_sockets = 1 +# 32G +mem = 32768 +# fixup for virsh_save (libvirt polkit uses action_lookup) +action_lookup = "connect_driver:QEMU domain_name:${main_vm}" + +variants: + - guest_import: + only unattended_install.import.import.default_install.aio_native + - guest_lifecycle: + only virsh.autostart.negative_test.invalid_option, virsh.autostart.negative_test.transient_autostart, virsh.autostart.negative_test.transient_disable, virsh.autostart.negative_test.readonly_autostart, virsh.autostart.negative_test.readonly_disable, virsh.capabilities.unexpect_option, virsh.connect.local_connect.error_test.unrecognized_arg, virsh.connect.local_connect.error_test.unrecognized_opt, virsh.connect.local_connect.error_test.multi_arg, virsh.console.error_test.invalid_options.invalid_domname, virsh.console.error_test.invalid_options.invalid_domid, virsh.console.error_test.invalid_options.hex_domid, virsh.console.error_test.invalid_options.invalid_domuuid, virsh.console.error_test.invalid_options.none_domname, virsh.create.negtive_readonly, virsh.create.negative_validate, virsh.define.negative_test.option_validate, virsh.define.negative_test.readonly_test, virsh.desc.negative_test.invalid_domain_name, virsh.desc.negative_test.invalid_domain_uuid, virsh.desc.negative_test.invalid_option1, virsh.desc.negative_test.invalid_option2, virsh.desc.negative_test.invalid_option3, virsh.desc.negative_test.new_desc_without_string, virsh.desc.negative_test.transient_config, virsh.destroy.error_test.no_option, virsh.destroy.error_test.hex_id_option, virsh.destroy.error_test.invalid_id_option, virsh.destroy.error_test.unexpect_option, virsh.destroy.error_test.invalid_uuid_option, virsh.destroy.error_test.extra_option, virsh.destroy.error_test.shutdown_option, virsh.destroy.error_test.with_libvirtd_stop, virsh.destroy.error_test.acl_test, virsh.destroy.error_test.readonly_option, virsh.domid.error_test.space_option, virsh.domid.error_test.no_option, virsh.domid.error_test.id_option, virsh.domid.error_test.invalid_uuid_option, virsh.domid.error_test.with_libvirtd_stop, virsh.domid.error_test.extra_option, virsh.save.error_test.no_option, virsh.save.error_test.hex_id_option, virsh.save.error_test.invalid_id_option, virsh.save.error_test.unexpect_option, virsh.save.error_test.invalid_uuid_option, virsh.save.error_test.extra_option, virsh.save.error_test.shut_off_option, virsh.save.error_test.only_name_option, virsh.save.error_test.libvirtd_stop_option, virsh.save.error_test.acl_test, virsh.save.error_test.readonly, virsh.edit.negative_test.no_option.edit_vcpu, virsh.edit.negative_test.invalid_id_option.edit_vcpu, virsh.edit.negative_test.unexpect_option.edit_vcpu, virsh.edit.negative_test.invalid_uuid_option.edit_vcpu, virsh.edit.negative_test.extra_option.edit_vcpu, virsh.edit.negative_test.with_libvirtd_stop.edit_vcpu, virsh.itself.error_test.invalid_cmd, virsh.itself.error_test.invalid_cd_extra, virsh.itself.error_test.invalid_pwd_extra, virsh.itself.error_test.invalid_echo_extra, virsh.itself.error_test.readonly.invalid_cmd, virsh.itself.error_test.readonly.invalid_cd_extra, virsh.itself.error_test.readonly.invalid_pwd_extra, virsh.itself.error_test.readonly.invalid_echo_extra, virsh.resume.error_test.none, virsh.resume.error_test.invalid_domid, virsh.resume.error_test.invalid_domuuid, virsh.resume.error_test.hex_domid, virsh.resume.error_test.additional_arg, virsh.resume.error_test.vm_shutoff, virsh.resume.error_test.readonly, virsh.resume.error_test.vm_running, virsh.undefine.error_test.no_vm_name, virsh.undefine.error_test.invalid_vm_name, virsh.undefine.error_test.invalid_vm_id, virsh.undefine.error_test.pound_vm_name, virsh.undefine.error_test.libvirtd_stop, virsh.undefine.error_test.invalid_vm_uuid, virsh.undefine.error_test.unexpected_option, virsh.undefine.error_test.acl_test, virsh.list.normal_test.with_invalid_options.invalid_string, virsh.list.normal_test.with_invalid_options.vm_id, virsh.list.normal_test.with_invalid_options.vm_name, virsh.list.normal_test.with_invalid_options.vm_uuid, virsh.suspend.error_test.space_option, virsh.suspend.error_test.no_option, virsh.suspend.error_test.hex_id_option, virsh.suspend.error_test.invalid_id_option, virsh.suspend.error_test.unexpect_option, virsh.suspend.error_test.invalid_uuid_option, virsh.suspend.error_test.extra_option, virsh.suspend.error_test.shutdown_option, virsh.suspend.error_test.acl_test, virsh.suspend.error_test.readonly_option, virsh.restore.expected_option.non_acl.xml_option_dac, virsh.restore.expected_option.non_acl.iscsi_file.qemu_namespaces_mount, virsh.restore.expected_option.non_acl.iscsi_file.qemu_namespaces_none, virsh.domblkerror.nospace_error, virsh.domcapabilities.negative_test.invalid_option, virsh.domcapabilities.negative_test.invalid_virttype, virsh.domcapabilities.negative_test.invalid_emulatorbin, virsh.domcapabilities.negative_test.invalid_arch, virsh.domcapabilities.negative_test.invalid_machine, virsh.domcontrol.error_test.no_option, virsh.domcontrol.error_test.hex_id_option, virsh.domcontrol.error_test.invalid_id_option, virsh.domcontrol.error_test.unexpect_option, virsh.domcontrol.error_test.invalid_uuid_option, virsh.domcontrol.error_test.shut_off_option, virsh.domcontrol.error_test.invalid_option, virsh.domcontrol.error_test.readonly_with_invalid_option, virsh.domfsthaw.negative_tests.no_qemu_guest_agent, virsh.domfsthaw.negative_tests.no_start_qemu_guest_agent, virsh.domfsthaw.negative_tests.not_active_domain, virsh.domfsthaw.negative_tests.no_domain_ref, virsh.domfsthaw.negative_tests.invalid_mountpoint, virsh.domfsthaw.negative_tests.invalid_option, virsh.domstats.error_test.extra_option, virsh.dominfo.error_test.space_option, virsh.dominfo.error_test.no_option, virsh.dominfo.error_test.hex_id_option, virsh.dominfo.error_test.invalid_id_option, virsh.dominfo.error_test.invalid_uuid_option, virsh.dominfo.error_test.with_libvirtd_stop, virsh.dominfo.error_test.extra_option, virsh.domjobabort.error_test.no_option, virsh.domjobabort.error_test.hex_id_option, virsh.domjobabort.error_test.invalid_id_option, virsh.domjobabort.error_test.unexpect_option, virsh.domjobabort.error_test.invalid_uuid_option, virsh.domjobabort.error_test.shut_off_option, virsh.domjobabort.error_test.no_job_option, virsh.domjobabort.error_test.restore_option, virsh.domjobabort.error_test.readonly_mode_session, virsh.domjobinfo.error_test.no_name, virsh.domjobinfo.error_test.hex_id, virsh.domjobinfo.error_test.invalid_id, virsh.domjobinfo.error_test.unexpect_char_name, virsh.domjobinfo.error_test.invalid_uuid, virsh.domjobinfo.error_test.extra_params, virsh.domjobinfo.error_test.shutoff_state, virsh.domjobinfo.error_test.with_libvirtd_stop, virsh.domstate.error_test.no_option, virsh.domstate.error_test.hex_id_option, virsh.domstate.error_test.invalid_id_option, virsh.domstate.error_test.invalid_uuid_option, virsh.domstate.error_test.invalid_name_option, virsh.domstate.error_test.extra_option, virsh.domstate.error_test.with_libvirt_stop, virsh.domstate.error_test.kill_vm.normal, virsh.domstate.error_test.kill_vm.after_reboot_vm, virsh.domuuid.error_test.invalid_domid, virsh.domuuid.error_test.hex_domid, virsh.domuuid.error_test.additional_arg, virsh.domuuid.error_test.none, virsh.domuuid.error_test.libvirtd_off, virsh.domxml_to_native.negative_test.no_option, virsh.domxml_to_native.negative_test.expected_option, virsh.domxml_to_native.negative_test.invalid_format_option, virsh.domxml_to_native.negative_test.extra_option, virsh.domxml_to_native.negative_test.no_file_extra_option, virsh.domxml_to_native.negative_test.with_libvirtd_stop, virsh.domxml_to_native.negative_test.readonly_mode, virsh.domxml_from_native.unexpect_option.exist_file_guest_args, virsh.domxml_from_native.unexpect_option.no_file_guest_args, virsh.domxml_from_native.unexpect_option.invalid_guest_args, virsh.domxml_from_native.unexpect_option.with_libvirtd_stop, virsh.reboot.error_test.no_option, virsh.reboot.error_test.hex_id_option, virsh.reboot.error_test.invalid_id_option, virsh.reboot.error_test.unexpected_option, virsh.reboot.error_test.with_libvirt_stop, virsh.reboot.error_test.invalid_uuid_option, virsh.reboot.error_test.extra_option, virsh.reboot.error_test.shutoff_option, virsh.secret_set_get.negative_testing.get_secret_value.no_secret_value.public_secret, virsh.secret_set_get.negative_testing.get_secret_value.no_secret_value.private_secret, virsh.secret_set_get.negative_testing.get_secret_value.invalid_options.public_secret, virsh.secret_set_get.negative_testing.get_secret_value.invalid_options.private_secret, virsh.secret_set_get.negative_testing.set_secret_value.noexist_secret_uuid.public_secret, virsh.secret_set_get.negative_testing.set_secret_value.noexist_secret_uuid.private_secret, virsh.secret_set_get.negative_testing.set_secret_value.invalid_options.public_secret, virsh.secret_set_get.negative_testing.set_secret_value.invalid_options.private_secret, virsh.shutdown.error_test.no_option, virsh.shutdown.error_test.hex_id_option, virsh.shutdown.error_test.invalid_id_option, virsh.shutdown.error_test.unexpect_option, virsh.shutdown.error_test.invalid_uuid_option, virsh.shutdown.error_test.extra_option, virsh.shutdown.error_test.shutdown_option, virsh.shutdown.error_test.with_libvirtd_stop, virsh.shutdown.error_test.acl_test, virsh.shutdown.error_test.readonly, virsh.ttyconsole.error_test.invalid_option.none_domname, virsh.ttyconsole.error_test.invalid_option.hex_domid, virsh.ttyconsole.error_test.invalid_option.invalid_domid, virsh.ttyconsole.error_test.invalid_option.invalid_domuuid, virsh.ttyconsole.error_test.invalid_option.extra_parameter, virsh.ttyconsole.error_test.special_operation.vm_shutoff, virsh.vncdisplay.error_test.shutoff_option, virsh.vncdisplay.error_test.no_option, virsh.vncdisplay.error_test.hex_id_option, virsh.vncdisplay.error_test.invalid_id_option, virsh.vncdisplay.error_test.with_libvirtd_stop, virsh.vncdisplay.error_test.invalid__uuid_option, virsh.vncdisplay.error_test.unexpected_option4, virsh.qemu_monitor_command.error_test.invalid_options.invalid_domname, virsh.qemu_monitor_command.error_test.invalid_options.invalid_domid, virsh.qemu_monitor_command.error_test.invalid_options.hex_domid, virsh.qemu_monitor_command.error_test.invalid_options.invalid_domuuid, virsh.qemu_monitor_command.error_test.invalid_options.none_domname, virsh.qemu_monitor_command.error_test.invalid_options.invalid_options, virsh.qemu_monitor_command.error_test.invalid_options.unknown_cmd, virsh.qemu_monitor_command.error_test.invalid_options.invalid_qmp_cmd, virsh.qemu_monitor_command.error_test.vm_shutoff, import.import.default_install.aio_native, virsh.sendkey.params_test.non_acl.without_codeset, virsh.sendkey.params_test.non_acl.linux_keycode.without_holdtime, virsh.sendkey.params_test.non_acl.linux_keycode.with_holdtime, virsh.sendkey.params_test.non_acl.at_set1_keycode, virsh.sendkey.params_test.non_acl.at_set2_keycode, virsh.sendkey.params_test.non_acl.at_set3_keycode, virsh.sendkey.params_test.non_acl.xt_keycode, virsh.sendkey.params_test.non_acl.xt_kbd_keycode, virsh.sendkey.params_test.non_acl.usb_keycode, virsh.sendkey.params_test.non_acl.rfb_keycode, virsh.sendkey.params_test.non_acl.qnum_keycode, virsh.sendkey.params_test.non_acl.default_name, virsh.sendkey.params_test.acl_test.without_codeset, virsh.sendkey.params_test.acl_test.linux_keycode.without_holdtime, virsh.sendkey.params_test.acl_test.linux_keycode.with_holdtime, virsh.sendkey.params_test.acl_test.at_set1_keycode, virsh.sendkey.params_test.acl_test.at_set2_keycode, virsh.sendkey.params_test.acl_test.at_set3_keycode, virsh.sendkey.params_test.acl_test.xt_keycode, virsh.sendkey.params_test.acl_test.xt_kbd_keycode, virsh.sendkey.params_test.acl_test.usb_keycode, virsh.sendkey.params_test.acl_test.rfb_keycode, virsh.sendkey.params_test.acl_test.qnum_keycode, virsh.sendkey.params_test.acl_test.default_name, virsh.sendkey.sysrq.non_acl.help, virsh.sendkey.sysrq.non_acl.show_memory_usage, virsh.sendkey.sysrq.non_acl.show_task_status, virsh.sendkey.sysrq.non_acl.reboot_guest, virsh.sendkey.sysrq.non_acl.crash_guest, virsh.sendkey.sysrq.non_acl.usb_keycode, virsh.sendkey.sysrq.acl_test.help, virsh.sendkey.sysrq.acl_test.show_memory_usage, virsh.sendkey.sysrq.acl_test.show_task_status, virsh.sendkey.sysrq.acl_test.reboot_guest, virsh.sendkey.sysrq.acl_test.crash_guest, virsh.sendkey.sysrq.acl_test.usb_keycode, virsh.sendkey.readonly, virsh.sendkey.negative_test.acl_test, without_disk + + - guest_remove: + only remove_guest.without_disk \ No newline at end of file diff --git a/config/tests/guest/libvirt/network.cfg b/config/tests/guest/libvirt/network.cfg index 30de5006..bc617f4f 100644 --- a/config/tests/guest/libvirt/network.cfg +++ b/config/tests/guest/libvirt/network.cfg @@ -170,6 +170,8 @@ variants: no virtual_network.iface_options.iface_type.type_user no virtual_network.iface_options.iface_type.type_vhostuser.vhost_dpdk no virtual_network.iface_options.iface_unprivileged_user + no type_specific.io-github-autotest-libvirt.virtual_network.iface_options.iface_driver.driver_tx_queue_size.start_success.right_boundary_value + no type_specific.io-github-autotest-libvirt.virtual_network.iface_options.iface_driver.driver_tx_queue_size.start_success.middle_value - net_virsh_attach_detach_interface: only virsh.attach_detach_interface no virsh.attach_detach_interface.normal_test.vm_paused.exist_bridge.domid diff --git a/config/wrapper/env.conf b/config/wrapper/env.conf index 31ff5eb0..dac448a1 100644 --- a/config/wrapper/env.conf +++ b/config/wrapper/env.conf @@ -14,7 +14,7 @@ post_script_dir = 'config/postscript' # ('avocado-framework', 'git+https://github.com/avocado-framework/avocado.git@branch') -- Install version from the given git repo and checkout to specific branch # ('avocado-framework-plugin-varianter-yaml-to-mux', # 'git+https://github.com/avocado-framework/avocado.git#subdirectory=optional_plugins/varianter_yaml_to_mux') -- Install from subdirectory from the given git repo -base = [('avocado-framework', ''), ('avocado-framework-plugin-varianter-yaml-to-mux', '')] +base = [('avocado-framework', ''), ('avocado-framework-plugin-varianter-yaml-to-mux', ''), ('aautils', '')] kvm = [('avocado-framework-plugin-vt', 'git+https://github.com/avocado-framework/avocado-vt.git')] optional = [('avocado-framework-plugin-result-html', '')] @@ -154,7 +154,9 @@ packages = [deps_sles15_kvm] packages = tcpdump,qemu [deps_sles16] -packages = gcc,python3-devel,7zip,xz-devel,python3-setuptools,tcpdump,numactl +packages = gcc,python311-devel,7zip,xz-devel,python311-setuptools,tcpdump,numactl +[deps_sles16_1] +packages = numa-preplace,gcc,python313-devel,7zip,xz-devel,python313-setuptools,tcpdump,numactl,nfs-client,nfs-kernel-server [deps_slesbe] packages = gcc,python3-devel,xz-devel,python3-setuptools,tcpdump,numactl [deps_slesbe_NV] diff --git a/lib/helper.py b/lib/helper.py index f850f4ba..4e749ae3 100644 --- a/lib/helper.py +++ b/lib/helper.py @@ -29,10 +29,33 @@ from .logger import logger_init LOG_PATH = os.path.dirname(os.path.abspath(os.path.join(__file__, os.pardir))) +DEFAULT_VENV_DIR = os.path.join(LOG_PATH, '.venv') logger = logger_init(filepath=LOG_PATH).getlogger() +def use_venv(): + """ + Return True when the isolated virtual-environment path is enabled. + Controlled by AVOCADO_USE_VENV=1 (or 'true'/'yes'/'on'). + """ + val = os.environ.get("AVOCADO_USE_VENV", "").lower() + return val in ("1", "true", "yes", "on") + + +def get_venv_dir(): + """Return the path of the optional Avocado virtual environment.""" + return os.environ.get("AVOCADO_VENV", DEFAULT_VENV_DIR) + + +def prepend_venv_to_path(): + """Prepend the venv bin directory to PATH when venv mode is enabled.""" + if use_venv(): + venv_bin = os.path.join(get_venv_dir(), 'bin') + os.environ['PATH'] = venv_bin + os.pathsep + os.environ.get('PATH', '') + logger.debug("Prepended %s to PATH (venv mode)", venv_bin) + + def runcmd(cmd, ignore_status=False, err_str="", info_str="", debug_str=""): """ Running command and get the results @@ -136,6 +159,15 @@ def get_avocado_bin(ignore_status=False): """ Get the avocado executable path """ + if use_venv(): + venv_avocado = os.path.join(get_venv_dir(), 'bin', 'avocado') + if os.path.isfile(venv_avocado) and os.access(venv_avocado, os.X_OK): + return venv_avocado + if not ignore_status: + logger.error("avocado command not installed or not found in venv at %s", + get_venv_dir()) + sys.exit(1) + return "" return runcmd('which avocado', ignore_status=ignore_status, err_str="avocado command not installed or not found in path")[1] @@ -218,14 +250,19 @@ def __init__(self, base_fw=[], opt_fw=[], kvm_fw=[], pip_packages=[], enable_kvm if sys.version_info[:2] < (3, 6): logger.error("System installed python version(%s) not supported, make sure python3.6 or above is installed to proceed" % sys.version_info[:2]) sys.exit(1) - self.pip_cmd = "pip%s" % sys.version_info[0] - # Check for pip if not attempt install and proceed - cmd = "%s --help >/dev/null 2>&1||(curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && python%s ./get-pip.py)" % (self.pip_cmd, sys.version_info[0]) - runcmd(cmd, err_str='Unable to install pip3') + self.use_venv = use_venv() + self.venv_dir = get_venv_dir() - # Get pip version - pip_version_split = importlib.metadata.version(f"pip").split(".") - self.pip_vmajor, self.pip_vminor = int(pip_version_split[0]), int(pip_version_split[1]) + if self.use_venv: + self.python = os.path.join(self.venv_dir, 'bin', 'python') + self.pip_cmd = os.path.join(self.venv_dir, 'bin', 'pip') + logger.info("Using isolated virtual environment: %s", self.venv_dir) + else: + self.pip_cmd = "pip%s" % sys.version_info[0] + cmd = "%s --help >/dev/null 2>&1||(curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && python%s ./get-pip.py)" % (self.pip_cmd, sys.version_info[0]) + runcmd(cmd, err_str='Unable to install pip3') + pip_version_split = importlib.metadata.version("pip").split(".") + self.pip_vmajor, self.pip_vminor = int(pip_version_split[0]), int(pip_version_split[1]) self.uninstallitems = base_fw + opt_fw + kvm_fw + pip_packages if enable_kvm: @@ -246,7 +283,33 @@ def __init__(self, base_fw=[], opt_fw=[], kvm_fw=[], pip_packages=[], enable_kvm else: self.install_packages.append(item[0]) + def _ensure_venv(self): + ready_marker = os.path.join(self.venv_dir, '.bootstrap_ok') + if (os.path.isdir(self.venv_dir) and os.path.isfile(self.python) + and os.path.isfile(ready_marker)): + logger.debug("Reusing existing virtual environment at %s", self.venv_dir) + return + if os.path.isdir(self.venv_dir): + logger.info("Removing incomplete virtual environment at %s", self.venv_dir) + shutil.rmtree(self.venv_dir, ignore_errors=True) + logger.info("Creating isolated virtual environment at %s", self.venv_dir) + runcmd('%s -m venv %s' % (sys.executable, self.venv_dir), + err_str='Failed to create virtual environment') + runcmd('%s -m pip install --upgrade pip "setuptools<82" wheel' % self.python, + err_str='Failed to upgrade pip inside venv') + with open(ready_marker, 'w') as marker_file: + marker_file.write('ok\n') + def install(self): + if self.use_venv: + self._ensure_venv() + pip_installcmd = '%s install -U' % self.pip_cmd + for package in self.install_packages: + cmd = '%s %s' % (pip_installcmd, package) + runcmd(cmd, + err_str='Package installation via pip failed: package %s' % package, + debug_str='Installing python package %s using pip' % package) + return if os.geteuid() != 0: pip_installcmd = '%s install --user -U' % self.pip_cmd else: @@ -260,14 +323,42 @@ def install(self): debug_str='Installing python package %s using pip' % package) def uninstall(self): + if self.use_venv: + return + self._pip_uninstall(self.pip_cmd, self.pip_vmajor, self.pip_vminor) + + def uninstall_system_wide(self): + venv_bin = os.path.join(self.venv_dir, 'bin') + path_entries = os.environ.get('PATH', '').split(os.pathsep) + system_path = os.pathsep.join(p for p in path_entries if p and p != venv_bin) + pip_cmd = shutil.which('pip%s' % sys.version_info[0], path=system_path) + if not pip_cmd: + logger.debug("System pip not found, skipping system-wide Avocado cleanup") + return + status, output = subprocess.getstatusoutput('%s --version' % pip_cmd) + match = re.search(r'pip (\d+)\.(\d+)', output) + if status != 0 or not match: + logger.debug("Could not determine system pip version, skipping system-wide Avocado cleanup") + return + pip_vmajor, pip_vminor = int(match.group(1)), int(match.group(2)) + logger.info("Removing system-wide Avocado packages") + self._pip_uninstall(pip_cmd, pip_vmajor, pip_vminor) + + def _pip_uninstall(self, pip_cmd, pip_vmajor, pip_vminor): for package in self.uninstall_packages: - cmd = '%s uninstall %s -y --disable-pip-version-check' % (self.pip_cmd, package) - if (self.pip_vmajor > 23) or (self.pip_vmajor == 23 and self.pip_vminor >= 1): + cmd = '%s uninstall %s -y --disable-pip-version-check' % (pip_cmd, package) + if (pip_vmajor > 23) or (pip_vmajor == 23 and pip_vminor >= 1): cmd = cmd + ' --break-system-packages' # --break-system-packages introduced in pip 23.1 runcmd(cmd, ignore_status=True, err_str="Error in removing package: %s" % package, debug_str="Uninstalling %s" % package) + def remove_venv(self): + if os.path.isdir(self.venv_dir): + logger.info("Cleaning up any previously existing virtual environment at %s", + self.venv_dir) + shutil.rmtree(self.venv_dir, ignore_errors=True) + class RemoteRunner: """ @@ -427,7 +518,7 @@ def gcov_code_coverage(basedir_name, test_name, driver_name=None): runcmd("sed -n -i '/Function/{N;p}' coverage.txt", ignore_status=True) covrg_percentage = 0 with open('coverage.txt', 'r+') as fs1: - for line1, line2 in itertools.zip_longest(*[fs1]*2): + for line1, line2 in itertools.zip_longest(*[fs1] * 2): if not line2.startswith("Line"): continue out = line2.split(":")[-1]