Fixed test_drivetrain_components_and_versions when image has 2 valid tags
Change-Id: I3d85fc34442f5f749bf564ced9cab428e980dfb9
Related: PROD-34481
diff --git a/test_set/cvp-sanity/tests/test_drivetrain.py b/test_set/cvp-sanity/tests/test_drivetrain.py
index 0624536..0895556 100644
--- a/test_set/cvp-sanity/tests/test_drivetrain.py
+++ b/test_set/cvp-sanity/tests/test_drivetrain.py
@@ -20,6 +20,7 @@
from pygerrit2 import GerritRestAPI, HTTPBasicAuth
from requests import HTTPError
from xml.dom import minidom
+from collections import defaultdict
def join_to_gerrit(local_salt_client, gerrit_user, gerrit_password):
@@ -313,28 +314,38 @@
stack_info = local_salt_client.pillar_get(tgt='gerrit:client',
param='docker:client:stack')
- expected_images = list()
+ expected_images_list = list()
# find services in list of docker clients
for key, stack in list(stack_info.items()):
if stack.get('service'):
- stack = [item.get('image') for _,item in list(stack.get('service').items()) if item.get('image')]
- expected_images += stack
+ stack = [item.get('image') for _, item in
+ list(stack.get('service').items()) if item.get('image')]
+ expected_images_list += stack
+ expected_images = defaultdict(list)
- mismatch = {}
- actual_images = {}
- for image in set(table_with_docker_services[list(table_with_docker_services.keys())[0]].split('\n')):
- actual_images[get_name(image)] = get_tag(image)
+ # collect unique tags for each image in same structure as for actual images
+ for image in expected_images_list:
+ if get_name(image) in expected_images:
+ if get_tag(image) not in expected_images[get_name(image)]:
+ expected_images[get_name(image)].append(get_tag(image))
+ else:
+ expected_images[get_name(image)].append(get_tag(image))
- for image in set(expected_images):
- im_name = get_name(image)
- if im_name not in actual_images:
- mismatch[im_name] = 'not found on env'
- elif get_tag(image) != actual_images[im_name]:
- mismatch[im_name] = 'has {actual} version instead of {expected}'.format(
- actual=actual_images[im_name], expected=get_tag(image))
- assert len(mismatch) == 0, (
+ # collect tags for each image in same structure as for expected images
+ actual_images = defaultdict(list)
+ for image in set(table_with_docker_services[
+ list(table_with_docker_services.keys())[0]].split('\n')):
+ actual_images[get_name(image)].append(get_tag(image))
+
+ # find difference between defaultdicts
+ total_diff = 0
+ for i in expected_images:
+ diff = set(expected_images[i]) - set(actual_images[i])
+ total_diff += len(diff)
+
+ assert actual_images == expected_images, (
"Some DriveTrain components do not have expected versions:\n{}".format(
- json.dumps(mismatch, indent=4))
+ json.dumps(total_diff, indent=4))
)