Commit a75cd4dc authored by Konstantinos Togias's avatar Konstantinos Togias
Browse files

test: bind local feature consolidation to one test revision

parent e41413d4
Loading
Loading
Loading
Loading
Loading
+6 −0
Changes for ansible/tests/unit/test_feature_consolidation.py: 6 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -49,3 +49,9 @@ def test_failed_or_mixed_reports_never_qualify_the_candidate(tmp_path,fault):
    report=consolidate(tmp_path,tmp_path/'out',source='a'*40,pipeline='http://ci/pipeline/1')
    assert not report['selected_acceptance_passed'] and report['problems']
    assert (tmp_path/'out/feature-matrix.md').is_file()


def test_local_consolidation_also_refuses_different_test_revisions(tmp_path):
    inputs(tmp_path,fault='source')
    report=consolidate(tmp_path,tmp_path/'out')
    assert not report['selected_acceptance_passed'] and not report['same_candidate']
+5 −2
Changes for ci/merge_feature_reports.py: 5 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ import argparse
from copy import deepcopy
import json
import os
import re
from pathlib import Path

VARIANTS = {'container':'terminated', 'helm':'helm-terminated', 'network':'network'}
@@ -22,6 +23,8 @@ def consolidate(directory, output, *, source=None, pipeline=None):
        reports[variant]=report
        if report.get('checkpoint')!=checkpoint:
            problems.append(f'{variant}: unexpected selected scenario')
        if not re.fullmatch(r'[0-9a-f]{40}',report.get('ansible_source') or ''):
            problems.append(f'{variant}: missing test source identity')
        if source and report.get('ansible_source')!=source:
            problems.append(f'{variant}: report belongs to another test source')
        if pipeline and report.get('pipeline_url')!=pipeline:
@@ -34,7 +37,7 @@ def consolidate(directory, output, *, source=None, pipeline=None):
        heads=selection.get('source_heads')
        if not heads:
            problems.append(f'{variant}: missing resolved artifact provenance')
        identities.append((heads,report.get('images'),report.get('chart_revision'),selection.get('sdk')))
        identities.append((report.get('ansible_source'),heads,report.get('images'),report.get('chart_revision'),selection.get('sdk')))
    same_candidate=len(reports)==len(VARIANTS) and all(identity==identities[0] for identity in identities)
    if not same_candidate:
        problems.append('Reports do not establish one common artifact candidate')
@@ -53,7 +56,7 @@ def consolidate(directory, output, *, source=None, pipeline=None):
                   transaction_passed=report.get('candidate_run_passed',False))
        rows.append(row)
    network=reports.get('network',{})
    result={'schema_version':1,'ansible_source':source,'pipeline_url':pipeline,
    result={'schema_version':1,'ansible_source':source or reports.get('container',{}).get('ansible_source'),'pipeline_url':pipeline,
        'same_candidate':same_candidate,'selected_acceptance_passed':not problems,
        'problems':problems,'features':rows,
        'variants':{key:{field:report.get(field) for field in (