def run(test, params, env): """ Test set/get secret value for a volume 1) Positive testing 1.1) set the private or public secret value 1.2) get the public secret value 2) Negative testing 2.1) get private secret 2.2) get secret without setting secret value 2.3) get or set secret with invalid options 2.4) set secret with doesn't exist UUID """ # Run test case uuid = "" usage_volume = params.get("secret_usage_volume", "/var/lib/libvirt/images/foo-bar.secret") set_secret = params.get("set_secret", "yes") get_secret = params.get("get_secret", "yes") # If storage volume doesn't exist then create it if not os.path.isfile(usage_volume): process.run("dd if=/dev/zero of=%s bs=1 count=1 seek=1M" % usage_volume, shell=True) # Define secret based on storage volume create_secret_volume(test, params) # Get secret UUID from secret list output = virsh.secret_list(ignore_status=False).stdout.strip() sec_list = re.findall(r"\n(.+\S+)\ +\S+\ +(.+\S+)", output) logging.debug("Secret list is %s", sec_list) if sec_list: for sec in sec_list: if usage_volume in sec[1]: uuid = sec[0].lstrip() if uuid: logging.debug("Secret uuid is %s", uuid) params['secret_uuid'] = uuid else: test.fail('Cannot find secret %s in:\n %s' % (usage_volume, output)) else: test.fail('No secret found in:\n %s' % output) # Update parameters dictionary with automatically generated UUID if not params.get('secret_ref'): params['secret_ref'] = uuid # positive and negative testing ######### try: if set_secret == "yes": set_secret_value(test, params) if get_secret == "yes": get_secret_value(test, params) finally: cleanup(test, params)
def secret_validate(file=None, **virsh_dargs): """ Test for schema secret """ tmp_dir = data_dir.get_tmp_dir() volume_path = os.path.join(tmp_dir, "secret_volume") ephemeral = "no" private = "no" secret_xml_obj = SecretXML(ephemeral, private) status, uuid = commands.getstatusoutput("uuidgen") if status: raise error.TestNAError("Failed to generate valid uuid") secret_xml_obj.uuid = uuid secret_xml_obj.volume = volume_path secret_xml_obj.usage = "volume" secret_obj_xmlfile = os.path.join(SECRET_DIR, uuid + ".xml") cmd_result = virsh.secret_define(secret_xml_obj.xml, debug=True) cmd_result = virsh.secret_list(**virsh_dargs) libvirt.check_exit_status(cmd_result) try: uuid = re.findall(r"(\S+)\ +(\S+)[\ +\n]", str(cmd_result.stdout))[1][0] except IndexError: raise error.TestError("Fail to get secret uuid") if uuid: try: virsh.secret_dumpxml(uuid, to_file=file, **virsh_dargs) except error.CmdError, e: raise error.TestError(str(e))
def get_secret_list(remote_virsh=None): """ Get secret list by virsh secret-list from local or remote host. :param remote_virsh: remote virsh shell session. :return secret list including secret UUID """ LOG.info("Get secret list ...") try: if remote_virsh: secret_list_result = remote_virsh.secret_list() else: secret_list_result = virsh.secret_list() except Exception as e: LOG.error("Exception thrown while getting secret lists: %s", str(e)) raise secret_list = secret_list_result.stdout_text.strip().splitlines() # First two lines contain table header followed by entries # for each secret, such as: # # UUID Usage # -------------------------------------------------------------------------------- # b4e8f6d3-100c-4e71-9f91-069f89742273 ceph client.libvirt secret secret_list = secret_list[2:] result = [] # If secret list is empty. if secret_list: for line in secret_list: # Split on whitespace, assume 1 column linesplit = line.split(None, 1) result.append(linesplit[0]) return result
def get_secret_list(session=None): """ Get secret list by virsh secret-list from local or remote host. :param session: virsh shell session. :return secret list """ logging.info("Get secret list ...") if session: secret_list_result = session.secret_list() else: secret_list_result = virsh.secret_list() secret_list = secret_list_result.stdout_text.strip().splitlines() # First two lines contain table header followed by entries # for each secret, such as: # # UUID Usage # -------------------------------------------------------------------------------- # b4e8f6d3-100c-4e71-9f91-069f89742273 ceph client.libvirt secret secret_list = secret_list[2:] result = [] # If secret list is empty. if secret_list: for line in secret_list: # Split on whitespace, assume 1 column linesplit = line.split(None, 1) result.append(linesplit[0]) return result
def get_secret_list(): """ Get secret list. :return secret list """ logging.info("Get secret list ...") secret_list_result = virsh.secret_list() secret_list = results_stdout_52lts( secret_list_result).strip().splitlines() # First two lines contain table header followed by entries # for each secret, such as: # # UUID Usage # -------------------------------------------------------------------------------- # b4e8f6d3-100c-4e71-9f91-069f89742273 ceph client.libvirt secret secret_list = secret_list[2:] result = [] # If secret list is empty. if secret_list: for line in secret_list: # Split on whitespace, assume 1 column linesplit = line.split(None, 1) result.append(linesplit[0]) return result
def run(test, params, env): """ Test set/get secret value for a volume 1) Positive testing 1.1) set the private or public secret value 1.2) get the public secret value 2) Negative testing 2.1) get private secret 2.2) get secret without setting secret value 2.3) get or set secret with invalid options 2.4) set secret with doesn't exist UUID """ # Run test case uuid = "" usage_volume = params.get("secret_usage_volume", "/var/lib/libvirt/images/foo-bar.secret") set_secret = params.get("set_secret", "yes") get_secret = params.get("get_secret", "yes") # If storage volume doesn't exist then create it if not os.path.isfile(usage_volume): utils.run("dd if=/dev/zero of=%s bs=1 count=1 seek=1M" % usage_volume) # Define secret based on storage volume create_secret_volume(params) # Get secret UUID from secret list output = virsh.secret_list(ignore_status=False).stdout.strip() sec_list = re.findall(r"\n(.+\S+)\ +\S+\ +(.+\S+)", output) logging.debug("Secret list is %s", sec_list) if sec_list: for sec in sec_list: if usage_volume in sec[1]: uuid = sec[0].lstrip() if uuid: logging.debug("Secret uuid is %s", uuid) params['secret_uuid'] = uuid else: raise error.TestFail('Cannot find secret %s in:\n %s', (usage_volume, output)) else: raise error.TestFail('No secret found in:\n %s', output) # Update parameters dictionary with automatically generated UUID if not params.get('secret_ref'): params['secret_ref'] = uuid # positive and negative testing ######### try: if set_secret == "yes": set_secret_value(params) if get_secret == "yes": get_secret_value(params) finally: cleanup(params)
def get_all_secrets(): """ Return all exist libvirt secrets uuid in a list """ secret_list = [] secrets = virsh.secret_list().stdout.strip() for secret in secrets.splitlines()[2:]: secret_list.append(secret.strip().split()[0]) return secret_list
def secret_validate(test, file=None, **virsh_dargs): """ Test for schema secret """ cmd_result = virsh.secret_list(**virsh_dargs) libvirt.check_exit_status(cmd_result) try: uuid = re.findall(r"(\S+)\ +(\S+)", str(cmd_result.stdout.strip()))[1][0] except IndexError: test.error("Fail to get secret uuid") if uuid: try: virsh.secret_dumpxml(uuid, to_file=file, **virsh_dargs) except process.CmdError as e: test.error(str(e))
def secret_validate(file=None, **virsh_dargs): """ Test for schema secret """ cmd_result = virsh.secret_list(**virsh_dargs) libvirt.check_exit_status(cmd_result) try: uuid = re.findall(r"(\S+)\ +(\S+)[\ +\n]", str(cmd_result.stdout))[1][0] except IndexError: raise error.TestError("Fail to get secret uuid") if uuid: try: virsh.secret_dumpxml(uuid, to_file=file, **virsh_dargs) except error.CmdError, e: raise error.TestError(str(e))
def get_secret_list(): """ Get secret list. :return secret list """ logging.info("Get secret list ...") secret_list_result = virsh.secret_list() secret_list = results_stdout_52lts(secret_list_result).strip().splitlines() # First two lines contain table header followed by entries # for each secret, such as: # # UUID Usage # -------------------------------------------------------------------------------- # b4e8f6d3-100c-4e71-9f91-069f89742273 ceph client.libvirt secret secret_list = secret_list[2:] result = [] # If secret list is empty. if secret_list: for line in secret_list: # Split on whitespace, assume 1 column linesplit = line.split(None, 1) result.append(linesplit[0]) return result
def run(test, params, env): """ Test command: virsh secret-list Returns a list of secrets """ # MAIN TEST CODE ### # Process cartesian parameters status_error = ("yes" == params.get("status_error", "no")) secret_list_option = params.get("secret_list_option", "") num = 0 uuid_list = [] for i in ['yes', 'no']: for j in ['yes', 'no']: # Generate valid uuid cmd = "uuidgen" status, uuid = commands.getstatusoutput(cmd) if status: raise error.TestNAError("Failed to generate valid uuid") uuid_list.append(uuid) # Get a full path of tmpfile, the tmpfile need not exist tmp_dir = data_dir.get_tmp_dir() volume_path = os.path.join(tmp_dir, "secret_volume_%s_%s" % (i, j)) secret_xml_obj = SecretXML(ephemeral=i, private=j) secret_xml_obj.uuid = uuid secret_xml_obj.volume = volume_path secret_xml_obj.usage = "volume" secret_xml_obj.description = "test" virsh.secret_define(secret_xml_obj.xml, debug=True) try: cmd_result = virsh.secret_list(secret_list_option, debug=True) output = cmd_result.stdout.strip() exit_status = cmd_result.exit_status if not status_error and exit_status != 0: raise error.TestFail("Run failed with right command") if status_error and exit_status == 0: raise error.TestFail("Run successfully with wrong command!") # Reture if secret-list failed if exit_status != 0: return # Check the result m1 = re.search(uuid_list[0], output) m2 = re.search(uuid_list[1], output) m3 = re.search(uuid_list[2], output) m4 = re.search(uuid_list[3], output) if secret_list_option.find("--no-ephemeral") >= 0: if m1 or m2: raise error.TestFail("Secret object %s, %s shouldn't be listed" " out" % (uuid_list[0], uuid_list[1])) if secret_list_option.find("--private") >= 0: if not m3: raise error.TestFail("Failed list secret object %s" % uuid_list[2]) if m4: raise error.TestFail("Secret object %s shouldn't be listed" " out" % uuid_list[3]) elif secret_list_option.find("--no-private") >= 0: if not m4: raise error.TestFail("Failed list secret object %s" % uuid_list[3]) if m3: raise error.TestFail("Secret object %s shouldn't be listed" " out" % uuid_list[2]) else: if not m3 or not m4: raise error.TestFail("Failed list secret object %s, %s" % (uuid_list[2], uuid_list[3])) elif secret_list_option.find("--ephemeral") >= 0: if m3 or m4: raise error.TestFail("Secret object %s, %s shouldn't be listed" " out" % (uuid_list[2], uuid_list[3])) if secret_list_option.find("--private") >= 0: if not m1: raise error.TestFail("Failed list secret object %s" % uuid_list[0]) if m2: raise error.TestFail("Secret object %s shouldn't be listed" " out" % uuid_list[1]) elif secret_list_option.find("--no-private") >= 0: if not m2: raise error.TestFail("Failed list secret object %s" % uuid_list[1]) if m1: raise error.TestFail("Secret object %s shouldn't be listed" " out" % uuid_list[0]) else: if not m1 or not m2: raise error.TestFail("Failed list secret object %s, %s" % (uuid_list[0], uuid_list[1])) elif secret_list_option.find("--private") >= 0: if not m1 or not m3: raise error.TestFail("Failed list secret object %s, %s" % (uuid_list[0], uuid_list[2])) if m2 or m4: raise error.TestFail("Secret object %s and %s should't be " "listed out" % (uuid_list[1], uuid_list[3])) elif secret_list_option.find("--no-private") >= 0: if not m2 or not m4: raise error.TestFail("Failed list secret object %s, %s" % (uuid_list[1], uuid_list[3])) if m1 or m3: raise error.TestFail("Secret object %s and %s shouldn't be " "listed out" % (uuid_list[0], uuid_list[2])) elif secret_list_option is None: if not m1 or not m2 or not m3 or not m4: raise error.TestFail("Fail to list all secret objects: %s" % uuid_list) finally: #Cleanup for i in range(0, 4): virsh.secret_undefine(uuid_list[i], debug=True)
def run(test, params, env): """ Test set/get secret value for a volume 1) Positive testing 1.1) set the private or public secret value 1.2) get the public secret value 1.3) set secret value with --file option 1.4) set secret value with --file and --plain option 1.5) set secret value with --interactive 2) Negative testing 2.1) get private secret 2.2) get secret without setting secret value 2.3) get or set secret with invalid options 2.4) set secret with doesn't exist UUID """ def attach_disk_secret(params): """ Attach a disk with secret to VM :params: the parameter dictionary :raise: test.fail when disk cannot be attached """ secret_string = params.get("secret_base64_no_encoded") target_dev = params.get("target_dev", "vdb") uuid = params.get("secret_uuid") # TODO: support encoded data extra = "--object secret,id=sec0,data=%s -o key-secret=sec0" % secret_string tmp_dir = data_dir.get_tmp_dir() disk_path = os.path.join(tmp_dir, "test.img") libvirt.create_local_disk("file", disk_format="luks", path=disk_path, size="1", extra=extra) new_disk_dict = {} new_disk_dict.update({ "source_encryption_dict": { "encryption": 'luks', "secret": { "type": "passphrase", "uuid": uuid } } }) result = libvirt.attach_additional_device(vm_name, target_dev, disk_path, new_disk_dict) if result.exit_status: raise test.fail("Attach device %s failed." % target_dev) def check_vm_start(params): """ Start a guest with a secret :params: the parameter dictionary :raise: test.fail when VM cannot be started """ attach_disk_secret(params) if not vm.is_alive(): try: vm.start() except virt_vm.VMStartError as err: test.fail("Failed to start VM: %s" % err) # Run test case uuid = "" vm_name = params.get("main_vm") if vm_name: vm = env.get_vm(vm_name) vmxml = vm_xml.VMXML.new_from_inactive_dumpxml(vm_name) params["orig_config_xml"] = vmxml.copy() usage_volume = params.get("secret_usage_volume", "/var/lib/libvirt/images/foo-bar.secret") set_secret = params.get("set_secret", "yes") get_secret = params.get("get_secret", "yes") test_vm_start = params.get("test_vm_start", "no") # If storage volume doesn't exist then create it if not os.path.isfile(usage_volume): process.run("dd if=/dev/zero of=%s bs=1 count=1 seek=1M" % usage_volume, shell=True) # Define secret based on storage volume create_secret_volume(test, params) # Get secret UUID from secret list output = virsh.secret_list(ignore_status=False).stdout.strip() sec_list = re.findall(r"\n(.+\S+)\ +\S+\ +(.+\S+)", output) logging.debug("Secret list is %s", sec_list) if sec_list: for sec in sec_list: if usage_volume in sec[1]: uuid = sec[0].lstrip() if uuid: logging.debug("Secret uuid is %s", uuid) params['secret_uuid'] = uuid else: test.fail('Cannot find secret %s in:\n %s' % (usage_volume, output)) else: test.fail('No secret found in:\n %s' % output) # Update parameters dictionary with automatically generated UUID if not params.get('secret_ref'): params['secret_ref'] = uuid if set_secret == "yes": if not libvirt_version.version_compare(6, 2, 0): if params.get("secret_file", "no") == "yes": test.cancel("Current libvirt version doesn't support " "'--file' for virsh secret-set-value.") if "interactive" in params.get("set_secret_options", ""): test.cancel("Current libvirt version doesn't support " "'--interactive' for virsh secret-set-value.") # positive and negative testing ######### try: if set_secret == "yes": set_secret_value(test, params) if get_secret == "yes": get_secret_value(test, params) if test_vm_start == "yes": check_vm_start(params) finally: cleanup(test, params)
def run(test, params, env): """ Test command: virsh secret-list Returns a list of secrets """ # MAIN TEST CODE ### # Process cartesian parameters status_error = ("yes" == params.get("status_error", "no")) secret_list_option = params.get("secret_list_option", "") # acl polkit params uri = params.get("virsh_uri") unprivileged_user = params.get('unprivileged_user') if unprivileged_user: if unprivileged_user.count('EXAMPLE'): unprivileged_user = '******' if not libvirt_version.version_compare(1, 1, 1): if params.get('setup_libvirt_polkit') == 'yes': test.cancel("API acl test not supported in current" " libvirt version.") virsh_dargs = {'debug': True} if params.get('setup_libvirt_polkit') == 'yes': virsh_dargs['unprivileged_user'] = unprivileged_user virsh_dargs['uri'] = uri uuid_list = [] for i in ['yes', 'no']: for j in ['yes', 'no']: # Generate valid uuid cmd = "uuidgen" status, uuid = process.getstatusoutput(cmd) if status: test.cancel("Failed to generate valid uuid") uuid_list.append(uuid) # Get a full path of tmpfile, the tmpfile need not exist tmp_dir = data_dir.get_tmp_dir() volume_path = os.path.join(tmp_dir, "secret_volume_%s_%s" % (i, j)) secret_xml_obj = SecretXML(ephemeral=i, private=j) secret_xml_obj.uuid = uuid secret_xml_obj.volume = volume_path secret_xml_obj.usage = "volume" secret_xml_obj.description = "test" virsh.secret_define(secret_xml_obj.xml, debug=True) try: cmd_result = virsh.secret_list(secret_list_option, **virsh_dargs) output = cmd_result.stdout.strip() exit_status = cmd_result.exit_status if not status_error and exit_status != 0: test.fail("Run failed with right command") if status_error and exit_status == 0: test.fail("Run successfully with wrong command!") # Reture if secret-list failed if exit_status != 0: return # Check the result m1 = re.search(uuid_list[0], output) m2 = re.search(uuid_list[1], output) m3 = re.search(uuid_list[2], output) m4 = re.search(uuid_list[3], output) if secret_list_option.find("--no-ephemeral") >= 0: if m1 or m2: test.fail("Secret object %s, %s shouldn't be listed" " out" % (uuid_list[0], uuid_list[1])) if secret_list_option.find("--private") >= 0: if not m3: test.fail("Failed list secret object %s" % uuid_list[2]) if m4: test.fail("Secret object %s shouldn't be listed" " out" % uuid_list[3]) elif secret_list_option.find("--no-private") >= 0: if not m4: test.fail("Failed list secret object %s" % uuid_list[3]) if m3: test.fail("Secret object %s shouldn't be listed" " out" % uuid_list[2]) else: if not m3 or not m4: test.fail("Failed list secret object %s, %s" % (uuid_list[2], uuid_list[3])) elif secret_list_option.find("--ephemeral") >= 0: if m3 or m4: test.fail("Secret object %s, %s shouldn't be listed" " out" % (uuid_list[2], uuid_list[3])) if secret_list_option.find("--private") >= 0: if not m1: test.fail("Failed list secret object %s" % uuid_list[0]) if m2: test.fail("Secret object %s shouldn't be listed" " out" % uuid_list[1]) elif secret_list_option.find("--no-private") >= 0: if not m2: test.fail("Failed list secret object %s" % uuid_list[1]) if m1: test.fail("Secret object %s shouldn't be listed" " out" % uuid_list[0]) else: if not m1 or not m2: test.fail("Failed list secret object %s, %s" % (uuid_list[0], uuid_list[1])) elif secret_list_option.find("--private") >= 0: if not m1 or not m3: test.fail("Failed list secret object %s, %s" % (uuid_list[0], uuid_list[2])) if m2 or m4: test.fail("Secret object %s and %s should't be " "listed out" % (uuid_list[1], uuid_list[3])) elif secret_list_option.find("--no-private") >= 0: if not m2 or not m4: test.fail("Failed list secret object %s, %s" % (uuid_list[1], uuid_list[3])) if m1 or m3: test.fail("Secret object %s and %s shouldn't be " "listed out" % (uuid_list[0], uuid_list[2])) elif secret_list_option is None: if not m1 or not m2 or not m3 or not m4: test.fail("Fail to list all secret objects: %s" % uuid_list) finally: #Cleanup for i in range(0, 4): virsh.secret_undefine(uuid_list[i], debug=True)
def run_virsh_secret_set_get(test, params, env): """ Test set/get secret value for a volume 1) Positive testing 1.1) define or undefine a private or public secret 1.2) get the public secret value 1.3) set the private or public secret value 2) Negative testing 2.1) get private secret 2.2) get secret without setting secret value 2.3) get or set secret with invalid options 2.4) set secret with doesn't exist UUID """ # Run test case uuid = "" no_specified_uuid = False usage_volume = params.get("secret_usage_volume") define_secret = params.get("secret_define", "no") change_parameters = params.get("secret_change_parameters", "no") # If storage volume doesn't exist then create it if usage_volume and not os.path.isfile(usage_volume): utils.run("dd if=/dev/zero of=%s bs=1 count=1 seek=1M" % usage_volume) # Define secret based on storage volume if usage_volume and define_secret == "yes": create_secret_volume(params) # Get secret UUID from secret list if not no_specified_uuid: output = virsh.secret_list().stdout.strip() sec_list = re.findall(r"\n(.+\S+)\ +\S+\ +(.+\S+)", output) logging.debug("Secret list is %s", sec_list) if usage_volume and sec_list: for sec in sec_list: if usage_volume in sec[1]: uuid = sec[0].lstrip() no_specified_uuid = True logging.debug("Secret uuid is %s", uuid) uuid = params.get("secret_uuid", uuid) # Update parameters dictionary with automatically generated UUID if no_specified_uuid: params['secret_uuid'] = uuid # If only define secret then don't need to run the following cases # positive and negative testing ######### if define_secret == "no": if change_parameters == "no": try: try: get_secret_value(params) except error.TestFail, detail: raise error.TestFail("Failed to get secret value.\n" "Detail: %s." % detail) finally: cleanup(params) else: try: try: set_secret_value(params) except error.TestFail, detail: raise error.TestFail("Failed to set secret value.\n" "Detail: %s." % detail) finally: cleanup(params)
def run(test, params, env): """ Test set/get secret value for a volume 1) Positive testing 1.1) define or undefine a private or public secret 1.2) get the public secret value 1.3) set the private or public secret value 2) Negative testing 2.1) get private secret 2.2) get secret without setting secret value 2.3) get or set secret with invalid options 2.4) set secret with doesn't exist UUID """ # Run test case uuid = "" no_specified_uuid = False usage_volume = params.get("secret_usage_volume") define_secret = params.get("secret_define", "no") change_parameters = params.get("secret_change_parameters", "no") # If storage volume doesn't exist then create it if usage_volume and not os.path.isfile(usage_volume): utils.run("dd if=/dev/zero of=%s bs=1 count=1 seek=1M" % usage_volume) # Define secret based on storage volume if usage_volume and define_secret == "yes": create_secret_volume(params) # Get secret UUID from secret list if not no_specified_uuid: output = virsh.secret_list().stdout.strip() sec_list = re.findall(r"\n(.+\S+)\ +\S+\ +(.+\S+)", output) logging.debug("Secret list is %s", sec_list) if usage_volume and sec_list: for sec in sec_list: if usage_volume in sec[1]: uuid = sec[0].lstrip() no_specified_uuid = True logging.debug("Secret uuid is %s", uuid) uuid = params.get("secret_uuid", uuid) # Update parameters dictionary with automatically generated UUID if no_specified_uuid: params['secret_uuid'] = uuid # If only define secret then don't need to run the following cases # positive and negative testing ######### if define_secret == "no": if change_parameters == "no": try: try: get_secret_value(params) except error.TestFail, detail: raise error.TestFail("Failed to get secret value.\n" "Detail: %s." % detail) finally: cleanup(params) else: try: try: set_secret_value(params) except error.TestFail, detail: raise error.TestFail("Failed to set secret value.\n" "Detail: %s." % detail) finally: cleanup(params)
def get_names(self): lines = virsh.secret_list().stdout.strip().splitlines()[2:] return [line.split()[0] for line in lines]
def run(test, params, env): """ Test command: virsh secret-list Returns a list of secrets """ # MAIN TEST CODE ### # Process cartesian parameters status_error = ("yes" == params.get("status_error", "no")) secret_list_option = params.get("secret_list_option", "") # acl polkit params uri = params.get("virsh_uri") unprivileged_user = params.get('unprivileged_user') if unprivileged_user: if unprivileged_user.count('EXAMPLE'): unprivileged_user = '******' if not libvirt_version.version_compare(1, 1, 1): if params.get('setup_libvirt_polkit') == 'yes': raise error.TestNAError("API acl test not supported in current" " libvirt version.") virsh_dargs = {'debug': True} if params.get('setup_libvirt_polkit') == 'yes': virsh_dargs['unprivileged_user'] = unprivileged_user virsh_dargs['uri'] = uri uuid_list = [] for i in ['yes', 'no']: for j in ['yes', 'no']: # Generate valid uuid cmd = "uuidgen" status, uuid = commands.getstatusoutput(cmd) if status: raise error.TestNAError("Failed to generate valid uuid") uuid_list.append(uuid) # Get a full path of tmpfile, the tmpfile need not exist tmp_dir = data_dir.get_tmp_dir() volume_path = os.path.join(tmp_dir, "secret_volume_%s_%s" % (i, j)) secret_xml_obj = SecretXML(ephemeral=i, private=j) secret_xml_obj.uuid = uuid secret_xml_obj.volume = volume_path secret_xml_obj.usage = "volume" secret_xml_obj.description = "test" virsh.secret_define(secret_xml_obj.xml, debug=True) try: cmd_result = virsh.secret_list(secret_list_option, **virsh_dargs) output = cmd_result.stdout.strip() exit_status = cmd_result.exit_status if not status_error and exit_status != 0: raise error.TestFail("Run failed with right command") if status_error and exit_status == 0: raise error.TestFail("Run successfully with wrong command!") # Reture if secret-list failed if exit_status != 0: return # Check the result m1 = re.search(uuid_list[0], output) m2 = re.search(uuid_list[1], output) m3 = re.search(uuid_list[2], output) m4 = re.search(uuid_list[3], output) if secret_list_option.find("--no-ephemeral") >= 0: if m1 or m2: raise error.TestFail("Secret object %s, %s shouldn't be listed" " out" % (uuid_list[0], uuid_list[1])) if secret_list_option.find("--private") >= 0: if not m3: raise error.TestFail("Failed list secret object %s" % uuid_list[2]) if m4: raise error.TestFail("Secret object %s shouldn't be listed" " out" % uuid_list[3]) elif secret_list_option.find("--no-private") >= 0: if not m4: raise error.TestFail("Failed list secret object %s" % uuid_list[3]) if m3: raise error.TestFail("Secret object %s shouldn't be listed" " out" % uuid_list[2]) else: if not m3 or not m4: raise error.TestFail("Failed list secret object %s, %s" % (uuid_list[2], uuid_list[3])) elif secret_list_option.find("--ephemeral") >= 0: if m3 or m4: raise error.TestFail("Secret object %s, %s shouldn't be listed" " out" % (uuid_list[2], uuid_list[3])) if secret_list_option.find("--private") >= 0: if not m1: raise error.TestFail("Failed list secret object %s" % uuid_list[0]) if m2: raise error.TestFail("Secret object %s shouldn't be listed" " out" % uuid_list[1]) elif secret_list_option.find("--no-private") >= 0: if not m2: raise error.TestFail("Failed list secret object %s" % uuid_list[1]) if m1: raise error.TestFail("Secret object %s shouldn't be listed" " out" % uuid_list[0]) else: if not m1 or not m2: raise error.TestFail("Failed list secret object %s, %s" % (uuid_list[0], uuid_list[1])) elif secret_list_option.find("--private") >= 0: if not m1 or not m3: raise error.TestFail("Failed list secret object %s, %s" % (uuid_list[0], uuid_list[2])) if m2 or m4: raise error.TestFail("Secret object %s and %s should't be " "listed out" % (uuid_list[1], uuid_list[3])) elif secret_list_option.find("--no-private") >= 0: if not m2 or not m4: raise error.TestFail("Failed list secret object %s, %s" % (uuid_list[1], uuid_list[3])) if m1 or m3: raise error.TestFail("Secret object %s and %s shouldn't be " "listed out" % (uuid_list[0], uuid_list[2])) elif secret_list_option is None: if not m1 or not m2 or not m3 or not m4: raise error.TestFail("Fail to list all secret objects: %s" % uuid_list) finally: #Cleanup for i in range(0, 4): virsh.secret_undefine(uuid_list[i], debug=True)