diff options
Diffstat (limited to 'roles')
| -rw-r--r-- | roles/openshift_health_checker/action_plugins/openshift_health_check.py | 28 | ||||
| -rw-r--r-- | roles/openshift_health_checker/test/action_plugin_test.py | 10 | 
2 files changed, 22 insertions, 16 deletions
diff --git a/roles/openshift_health_checker/action_plugins/openshift_health_check.py b/roles/openshift_health_checker/action_plugins/openshift_health_check.py index 898d158a4..3e8962c3c 100644 --- a/roles/openshift_health_checker/action_plugins/openshift_health_check.py +++ b/roles/openshift_health_checker/action_plugins/openshift_health_check.py @@ -113,21 +113,27 @@ def list_known_checks(known_checks):          'list of check names or a YAML list. Available checks:\n  {}'      ).format('\n  '.join(sorted(known_checks))) +    tags = describe_tags(known_checks.values()) + +    msg += ( +        '\n\nTags can be used as a shortcut to select multiple ' +        'checks. Available tags and the checks they select:\n  {}' +    ).format('\n  '.join(tags)) + +    return msg + + +def describe_tags(check_classes): +    """Return a sorted list of strings describing tags and the checks they include."""      tag_checks = defaultdict(list) -    for cls in known_checks.values(): +    for cls in check_classes:          for tag in cls.tags:              tag_checks[tag].append(cls.name)      tags = [          '@{} = {}'.format(tag, ','.join(sorted(checks)))          for tag, checks in tag_checks.items()      ] - -    msg += ( -        '\n\nTags can be used as a shortcut to select multiple ' -        'checks. Available tags and the checks they select:\n  {}' -    ).format('\n  '.join(sorted(tags))) - -    return msg +    return sorted(tags)  def resolve_checks(names, all_checks): @@ -157,6 +163,12 @@ def resolve_checks(names, all_checks):          if unknown_tag_names:              msg.append('Unknown tag names: {}.'.format(', '.join(sorted(unknown_tag_names))))          msg.append('Make sure there is no typo in the playbook and no files are missing.') +        # TODO: implement a "Did you mean ...?" when the input is similar to a +        # valid check or tag. +        msg.append('Known checks:') +        msg.append('  {}'.format('\n  '.join(sorted(known_check_names)))) +        msg.append('Known tags:') +        msg.append('  {}'.format('\n  '.join(describe_tags(all_checks))))          raise OpenShiftCheckException('\n'.join(msg))      tag_to_checks = defaultdict(set) diff --git a/roles/openshift_health_checker/test/action_plugin_test.py b/roles/openshift_health_checker/test/action_plugin_test.py index f73eb4f6e..2274cbd21 100644 --- a/roles/openshift_health_checker/test/action_plugin_test.py +++ b/roles/openshift_health_checker/test/action_plugin_test.py @@ -218,24 +218,21 @@ def test_resolve_checks_ok(names, all_checks, expected):      assert resolve_checks(names, all_checks) == expected -@pytest.mark.parametrize('names,all_checks,words_in_exception,words_not_in_exception', [ +@pytest.mark.parametrize('names,all_checks,words_in_exception', [      (          ['testA', 'testB'],          [],          ['check', 'name', 'testA', 'testB'], -        ['tag', 'group', '@'],      ),      (          ['@group'],          [],          ['tag', 'name', 'group'], -        ['check', '@'],      ),      (          ['testA', 'testB', '@group'],          [],          ['check', 'name', 'testA', 'testB', 'tag', 'group'], -        ['@'],      ),      (          ['testA', 'testB', '@group'], @@ -245,13 +242,10 @@ def test_resolve_checks_ok(names, all_checks, expected):              fake_check('from_group_2', ['preflight', 'group']),          ],          ['check', 'name', 'testA', 'testB'], -        ['tag', 'group', '@'],      ),  ]) -def test_resolve_checks_failure(names, all_checks, words_in_exception, words_not_in_exception): +def test_resolve_checks_failure(names, all_checks, words_in_exception):      with pytest.raises(Exception) as excinfo:          resolve_checks(names, all_checks)      for word in words_in_exception:          assert word in str(excinfo.value) -    for word in words_not_in_exception: -        assert word not in str(excinfo.value)  | 
