From 5efeafa16a893cb6277ece4d573184bb64ee2744 Mon Sep 17 00:00:00 2001
From: Rob Crittenden <rcritten@redhat.com>
Date: Mon, 30 Nov 2020 15:06:03 -0500
Subject: [PATCH] result names are not translated when reading input from json
file
The strings were being retained so when processing the results to
determine the return code it was always a 1 because none of
the values were being translated. It was always comparing
the string like 'SUCCESS' to constants.SUCCESS which is 0.
https://bugzilla.redhat.com/show_bug.cgi?id=1866558
---
src/ipahealthcheck/core/constants.py | 20 +++++++++++++++++++-
src/ipahealthcheck/core/plugin.py | 4 ++--
tests/test_results.py | 8 ++++++++
3 files changed, 29 insertions(+), 3 deletions(-)
diff --git a/src/ipahealthcheck/core/constants.py b/src/ipahealthcheck/core/constants.py
index a55469c..b6ee029 100644
--- a/src/ipahealthcheck/core/constants.py
+++ b/src/ipahealthcheck/core/constants.py
@@ -36,7 +36,25 @@ def getLevelName(level):
is passed in instead the corresponding string representation is
returned.
"""
- return _levelToName.get(level) or _nameToLevel.get(level) or level
+ name = _levelToName.get(level) or _nameToLevel.get(level)
+ if name is not None:
+ return name
+
+ return level
+
+
+def getLevel(name):
+ """
+ Translate between level text and their numeric constants
+
+ If the level is one of the predefined levels then returns the
+ corresponding number.
+ """
+ level = _nameToLevel.get(name)
+ if level is not None:
+ return level
+
+ return name
CONFIG_FILE = '/etc/ipahealthcheck/ipahealthcheck.conf'
diff --git a/src/ipahealthcheck/core/plugin.py b/src/ipahealthcheck/core/plugin.py
index 7ac923a..26dddd4 100644
--- a/src/ipahealthcheck/core/plugin.py
+++ b/src/ipahealthcheck/core/plugin.py
@@ -6,7 +6,7 @@ import uuid
from datetime import datetime
from functools import wraps
-from ipahealthcheck.core.constants import getLevelName
+from ipahealthcheck.core.constants import getLevelName, getLevel
def duration(f):
@@ -204,7 +204,7 @@ def json_to_results(data):
results = Results()
for line in data:
- result = line.pop('result')
+ result = getLevel(line.pop('result'))
source = line.pop('source')
check = line.pop('check')
duration = line.pop('duration')
diff --git a/tests/test_results.py b/tests/test_results.py
index dd6e8fd..99c18d7 100644
--- a/tests/test_results.py
+++ b/tests/test_results.py
@@ -69,3 +69,11 @@ def test_Result():
assert x['result'] in (constants.getLevelName(constants.SUCCESS),
constants.getLevelName(constants.CRITICAL))
assert len(x['kw']) == 0
+
+
+def test_getLevel():
+ assert constants.getLevel('SUCCESS') == constants.SUCCESS
+ assert constants.getLevel('WARNING') == constants.WARNING
+ assert constants.getLevel('ERROR') == constants.ERROR
+ assert constants.getLevel('CRITICAL') == constants.CRITICAL
+ assert constants.getLevel('FOO') == 'FOO'
--
2.25.4