Esempio n. 1
0
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))
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
    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)
Esempio n. 7
0
 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
Esempio n. 8
0
 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
Esempio n. 9
0
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))
Esempio n. 10
0
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))
Esempio n. 11
0
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))
Esempio n. 12
0
    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
Esempio n. 13
0
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)
Esempio n. 14
0
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)
Esempio n. 15
0
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)
Esempio n. 16
0
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)
Esempio n. 17
0
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)
Esempio n. 18
0
 def get_names(self):
     lines = virsh.secret_list().stdout.strip().splitlines()[2:]
     return [line.split()[0] for line in lines]
Esempio n. 19
0
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)