From c60f75be3446c8e2c86d471a0d79452f9ee1e0dc Mon Sep 17 00:00:00 2001 From: rlim Date: May 10 2021 05:38:44 +0000 Subject: Adding xmlrpc fault exception --- diff --git a/greenwave/policies.py b/greenwave/policies.py index e0346bf..b7d5599 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(f'Unexpected Koji XMLRPC fault with code: {err.faultCode}') + error = f'\'{subject.identifier}\' is not a valid \'{subject.type}\' identifier' + 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..d48919c 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,31 @@ 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 '\'nieco\' is not a valid \'koji_build\' identifier' 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("""