X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=ice_validator%2Ftests%2Ftest_volume_resource_ids.py;h=c6af6a7eaeeb6d2f794a82dbdfaac9f69c6fd25c;hb=10535815da964c683e5f91030934652bfb3f53b8;hp=3f0acda1a445fadce5d3f874141b17e9878c9c68;hpb=cc21b8b08b6dbcec577bfb26ff397ac899da8002;p=vvp%2Fvalidation-scripts.git diff --git a/ice_validator/tests/test_volume_resource_ids.py b/ice_validator/tests/test_volume_resource_ids.py index 3f0acda..c6af6a7 100644 --- a/ice_validator/tests/test_volume_resource_ids.py +++ b/ice_validator/tests/test_volume_resource_ids.py @@ -2,11 +2,11 @@ # ============LICENSE_START======================================================= # org.onap.vvp/validation-scripts # =================================================================== -# Copyright © 2017 AT&T Intellectual Property. All rights reserved. +# Copyright © 2019 AT&T Intellectual Property. All rights reserved. # =================================================================== # # Unless otherwise specified, all software contained herein is licensed -# under the Apache License, Version 2.0 (the “License”); +# under the Apache License, Version 2.0 (the "License"); # you may not use this software except in compliance with the License. # You may obtain a copy of the License at # @@ -21,7 +21,7 @@ # # # Unless otherwise specified, all documentation contained herein is licensed -# under the Creative Commons License, Attribution 4.0 Intl. (the “License”); +# under the Creative Commons License, Attribution 4.0 Intl. (the "License"); # you may not use this documentation except in compliance with the License. # You may obtain a copy of the License at # @@ -35,47 +35,44 @@ # # ============LICENSE_END============================================ # -# ECOMP is a trademark and service mark of AT&T Intellectual Property. # - import re import pytest -import yaml +from tests import cached_yaml as yaml from .utils.vm_types import get_vm_type_for_nova_server -def test_volume_resource_ids(heat_template): - ''' +def test_volume_resource_ids(yaml_file): + """ Check that all resource ids for cinder volumes follow the right naming convention to include the {vm_type} of the nova server it is associated to - ''' - with open(heat_template) as fh: + """ + with open(yaml_file) as fh: yml = yaml.load(fh) # skip if resources are not defined if "resources" not in yml: pytest.skip("No resources specified in the heat template") - volume_pattern = re.compile(r'(.+?)_volume_id_\d+') - resources = yml['resources'] + volume_pattern = re.compile(r"(.+?)_volume_id_\d+") + resources = yml["resources"] invalid_volumes = [] for k, v in resources.items(): if not isinstance(v, dict): continue - if 'type' not in v: + if "type" not in v: continue - if v['type'] not in ['OS::Nova::Server', - 'OS::Cinder::VolumeAttachment']: + if v["type"] not in ["OS::Nova::Server", "OS::Cinder::VolumeAttachment"]: continue - if v['type'] == 'OS::Nova::Server': + if v["type"] == "OS::Nova::Server": # check block_device_mapping and make sure the right # {vm_type} is used - if 'properties' not in v: + if "properties" not in v: continue - if 'block_device_mapping' not in v['properties']: + if "block_device_mapping" not in v["properties"]: continue vm_type = get_vm_type_for_nova_server(v) @@ -84,45 +81,46 @@ def test_volume_resource_ids(heat_template): vm_type = vm_type.lower() # get the volume_id from the block_device_mapping - properties = v['properties'] - for v2 in properties['block_device_mapping']: + properties = v["properties"] + for v2 in properties["block_device_mapping"]: for k3, v3 in v2.items(): - if k3 != 'volume_id': + if k3 != "volume_id": continue if not isinstance(v3, dict): continue - volume_id = ( - v3.get('get_param') or - v3.get('get_resource')) + volume_id = v3.get("get_param") or v3.get("get_resource") if not volume_id: continue - volume_id = volume_id.lower() + if isinstance(volume_id, list): + volume_id = volume_id[0].lower() + else: + volume_id = volume_id.lower() - if vm_type+"_" not in volume_id: + if vm_type + "_" not in volume_id: invalid_volumes.append(volume_id) - elif v['type'] == 'OS::Cinder::VolumeAttachment': + elif v["type"] == "OS::Cinder::VolumeAttachment": # check the volume attachment and the {vm_type} # of the corresponding nova server - if 'properties' not in v: + if "properties" not in v: continue - if 'volume_id' not in v['properties']: + if "volume_id" not in v["properties"]: continue - if 'instance_uuid' not in v['properties']: + if "instance_uuid" not in v["properties"]: continue - properties = v['properties'] + properties = v["properties"] # get the instance_uuid and when applicable # the nova server instance instance_uuid = None nova_server = None - if 'get_param' in properties['instance_uuid']: + if "get_param" in properties["instance_uuid"]: continue - elif 'get_resource' in properties['instance_uuid']: - instance_uuid = properties['instance_uuid']['get_resource'] + elif "get_resource" in properties["instance_uuid"]: + instance_uuid = properties["instance_uuid"]["get_resource"] if not resources[instance_uuid]: continue nova_server = resources[instance_uuid] @@ -132,12 +130,15 @@ def test_volume_resource_ids(heat_template): # get the volume_id volume_id = None - volume_id = ( - properties['volume_id'].get('get_param') or - properties['volume_id'].get('get_resource')) + volume_id = properties["volume_id"].get("get_param") or properties[ + "volume_id" + ].get("get_resource") if not volume_id: continue - volume_id = volume_id.lower() + if isinstance(volume_id, list): + volume_id = volume_id[0].lower() + else: + volume_id = volume_id.lower() # do not test the case when the instance_uuid and # volume_id are not defined @@ -149,16 +150,19 @@ def test_volume_resource_ids(heat_template): if not vm_type: continue vm_type = vm_type.lower() - if vm_type+"_" not in volume_id: + if vm_type + "_" not in volume_id: invalid_volumes.append(volume_id) else: # extract the assumed {vm_type} from volume_id m = volume_pattern.match(volume_id) if m: vm_type = m.group(1).lower() - if vm_type+"_" not in instance_uuid: + if vm_type + "_" not in instance_uuid: invalid_volumes.append(volume_id) else: continue - assert not set(invalid_volumes) + msg = "The following volumes have invalid resource IDs: {}".format( + ", ".join(invalid_volumes) + ) + assert not set(invalid_volumes), msg