def test_override_compression():
    base_yml = '%s/override/override.yaml' % globals.yaml_dir
    timeout = globals.status_check_timeout
    sc = None
    pvc = None
    pod = None
    try:
        # Creating storage class and pvc
        sc = manager.create_sc(base_yml)
        provisioning, compression, cpg_name, snap_cpg, desc, accessProtocol = get_sc_properties(
            base_yml)
        logging.getLogger().info(
            "Volume properties set in SC, provisioning::%s compression::%s CPG::%s SNAP CPG::%s desc::%s Protocol::%s"
            % (provisioning, compression, cpg_name, snap_cpg, desc,
               accessProtocol))
        pvc = manager.create_pvc(base_yml)
        flag, base_pvc_obj = manager.check_status(
            30,
            pvc.metadata.name,
            kind='pvc',
            status='Bound',
            namespace=pvc.metadata.namespace)
        assert flag is True, "PVC %s status check timed out, not in Bound state yet..." % base_pvc_obj.metadata.name
        logging.getLogger().info("Pvc in bound state :: %s" %
                                 base_pvc_obj.metadata.name)

        #Get pvc crd details
        pvc_crd = manager.get_pvc_crd(base_pvc_obj.spec.volume_name)
        vol_name, vol_cpg, vol_snpCpg, vol_provType, vol_desc, vol_compr = manager.get_pvc_editable_properties(
            pvc_crd)

        assert compression != vol_compr, "Override of compression parameter failed for %s" % vol_name
        logging.getLogger().info(
            "Overriden Volume properties, name::%s usrCPG::%s snpCPG::%s provType::%s compr::%s desc::%s"
            %
            (vol_name, vol_cpg, vol_snpCpg, vol_provType, vol_compr, vol_desc))

        # Get proprties from the array
        hpe3par_volume = manager.get_volume_from_array(globals.hpe3par_cli,
                                                       vol_name)
        assert hpe3par_volume[
            'compressionState'] == 2, "compressionState does not match ovveride compression parameter"
        # (compressionState is set to 1 if compression is enabled on 3PAR volume)
        pod = manager.create_pod(base_yml)
        flag, pod_obj = manager.check_status(timeout,
                                             pod.metadata.name,
                                             kind='pod',
                                             status='Running',
                                             namespace=pod.metadata.namespace)
        assert flag is True, "Pod %s status check timed out, not in Running state yet..." % pod.metadata.name

    except Exception as e:
        logging.getLogger().error(
            "Exception in test_override_compression :: %s" % e)
        raise e

    finally:
        # Now cleanup secret, sc, pv, pvc, pod
        cleanup(sc, pvc, pod)
def test_override_and_expand_volume():
    base_yml = '%s/override/override.yaml' % globals.yaml_dir
    timeout = globals.status_check_timeout
    sc = None
    pvc = None
    pod = None
    try:
        # Creating storage class and pvc
        sc = manager.create_sc(base_yml)
        provisioning, compression, cpg_name, snap_cpg, desc, accessProtocol = get_sc_properties(
            base_yml)
        logging.getLogger().info(
            "Volume properties set in SC, provisioning::%s compression::%s CPG::%s SNAP CPG::%s desc::%s Protocol::%s"
            % (provisioning, compression, cpg_name, snap_cpg, desc,
               accessProtocol))
        pvc = manager.create_pvc(base_yml)
        flag, base_pvc_obj = manager.check_status(
            30,
            pvc.metadata.name,
            kind='pvc',
            status='Bound',
            namespace=pvc.metadata.namespace)
        assert flag is True, "PVC %s status check timed out, not in Bound state yet..." % base_pvc_obj.metadata.name
        logging.getLogger().info("Pvc in bound state :: %s" %
                                 base_pvc_obj.metadata.name)

        #Get pvc crd details
        pvc_crd = manager.get_pvc_crd(base_pvc_obj.spec.volume_name)
        vol_name, vol_cpg, vol_snpCpg, vol_provType, vol_desc, vol_compr = manager.get_pvc_editable_properties(
            pvc_crd)

        assert cpg_name != vol_cpg, "Override failed for %s" % vol_name
        logging.getLogger().info(
            "Overriden Volume properties, name::%s usrCPG::%s snpCPG::%s provType::%s compr::%s desc::%s"
            %
            (vol_name, vol_cpg, vol_snpCpg, vol_provType, vol_compr, vol_desc))

        # Get proprties from the array
        hpe3par_volume = manager.get_volume_from_array(globals.hpe3par_cli,
                                                       vol_name)
        assert hpe3par_volume[
            'userCPG'] == vol_cpg, "userCPG does not match ovveride cpg parameter"

        # proceed to expanding pvc
        size_in_gb = '30'
        patch_json = {
            'spec': {
                'resources': {
                    'requests': {
                        'storage': size_in_gb + 'Gi'
                    }
                }
            }
        }
        mod_pvc = manager.patch_pvc(pvc.metadata.name, pvc.metadata.namespace,
                                    patch_json)
        logging.getLogger().info("Patched PVC %s" % mod_pvc)
        sleep(20)

        # Creating pod
        pod = manager.create_pod(base_yml)
        flag, pod_obj = manager.check_status(timeout,
                                             pod.metadata.name,
                                             kind='pod',
                                             status='Running',
                                             namespace=pod.metadata.namespace)
        assert flag is True, "Pod %s status check timed out, not in Running state yet..." % pod.metadata.name

        # Now check if volume in 3par has increased size
        volume = manager.get_volume_from_array(globals.hpe3par_cli, vol_name)
        assert volume['sizeMiB'] == int(
            size_in_gb) * 1024, "Volume on array does not have updated size"

        # Check if PVC has increaded size
        mod_pvc = manager.hpe_read_pvc_object(pvc.metadata.name,
                                              pvc.metadata.namespace)
        logging.getLogger().info("PVC after expansion %s" % mod_pvc)
        assert mod_pvc.spec.resources.requests[
            'storage'] == "%sGi" % size_in_gb, "PVC %s does not have updated size" % pvc.metadata.name

    except Exception as e:
        logging.getLogger().error("Exception in test_override_usrCPG :: %s" %
                                  e)
        raise e

    finally:
        # Now cleanup secret, sc, pv, pvc, pod
        cleanup(sc, pvc, pod)