From beb963cc608123611b07bf28fc3e52b963371c69 Mon Sep 17 00:00:00 2001 From: rlim Date: May 11 2021 18:49:09 +0000 Subject: Provide a descriptive error when a Koji build identifier is an invalid format JIRA: CWFHEALTH-460 --- diff --git a/greenwave/policies.py b/greenwave/policies.py index e0346bf..dba3ea2 100644 --- a/greenwave/policies.py +++ b/greenwave/policies.py @@ -6,6 +6,7 @@ import logging import os import re import greenwave.resources +import xmlrpc.client from werkzeug.exceptions import BadRequest, NotFound from flask import current_app from greenwave.safe_yaml import ( @@ -552,6 +553,10 @@ class RemoteRule(Rule): except NotFound: error = f'Koji build not found for {subject}' return [], [FailedFetchRemoteRuleYaml(subject, remote_policies_urls, error)] + except xmlrpc.client.Fault as err: + logging.exception('Unexpected Koji XMLRPC fault with code: %s', err.faultCode) + error = f'Koji XMLRPC fault due to: \'{err.faultString}\'' + return [], [FailedFetchRemoteRuleYaml(subject, remote_policies_urls, error)] except Exception: logging.exception('Failed to retrieve policies for %r', subject) error = 'Unexpected error' diff --git a/greenwave/tests/test_rules.py b/greenwave/tests/test_rules.py index 8dec652..95aaa68 100644 --- a/greenwave/tests/test_rules.py +++ b/greenwave/tests/test_rules.py @@ -11,6 +11,7 @@ from greenwave.policies import Policy, RemoteRule from greenwave.resources import NoSourceException from greenwave.safe_yaml import SafeYAMLError from greenwave.subjects.factory import create_subject +import xmlrpc.client def test_match_passing_test_case_rule(): @@ -75,6 +76,29 @@ def test_match_remote_rule(mock_retrieve_scm_from_koji, mock_retrieve_yaml_remot @mock.patch('greenwave.resources.retrieve_yaml_remote_rule') @mock.patch('greenwave.resources.retrieve_scm_from_koji') +def test_invalid_nvr_iden(mock_retrieve_scm_from_koji, mock_retrieve_yaml_remote_rule): + policy_yaml = dedent(""" + --- !Policy + id: "some_policy" + product_versions: [rhel-9000] + decision_context: bodhi_update_push_stable + subject_type: koji_build + rules: + - !RemoteRule {} + """) + nvr = 'nieco' + mock_retrieve_scm_from_koji.side_effect = xmlrpc.client.Fault(1000, nvr) + + app = create_app('greenwave.config.TestingConfig') + with app.app_context(): + subject = create_subject('koji_build', nvr) + policies = Policy.safe_load_all(policy_yaml) + policy = policies[0] + assert 'Koji XMLRPC fault' in str(RemoteRule._get_sub_policies(None, policy, subject)[1][0]) + + +@mock.patch('greenwave.resources.retrieve_yaml_remote_rule') +@mock.patch('greenwave.resources.retrieve_scm_from_koji') def test_remote_rule_include_failures( mock_retrieve_scm_from_koji, mock_retrieve_yaml_remote_rule): policy_yaml = dedent("""