From e958e4c69e17a4dde5b5a777cfd9417c24c477a8 Mon Sep 17 00:00:00 2001 From: Lukas Ruzicka Date: Jul 08 2019 16:15:34 +0000 Subject: Apply several fixes. --- diff --git a/modular_functions.py b/modular_functions.py index 66b7a5d..a636419 100755 --- a/modular_functions.py +++ b/modular_functions.py @@ -211,45 +211,42 @@ class TestSuite: pmodifier = f"/{profile}" modifier = f"{module}{smodifier}{pmodifier}" key = f"dnf module {operation} {modifier}" - result = {} raw = subprocess.run(['dnf', 'module', operation, '-y', modifier], capture_output=True) self.outputs[operation] = raw.stdout.decode('utf-8') if raw.returncode == 0: - result[modifier] = 'pass' logging.info(f"The operation {key} has finished successfully.") + result = raw.returncode else: - result[modifier] = raw.stderr.decode('utf-8') - logging.warning(f"The operation {key} has NOT finished successfully.") + problem = raw.stderr.decode('utf-8') + logging.warning(f"The operation {key} has NOT finished successfully, because of {problem}.") + result = 1 self.store_results(f'dnf module {operation}', result) return result - def is_listed(self, module, stream, inlist): - if stream != None: - mod = f"{module}:{stream}" - else: - mod = f"{module}" + def is_listed(self, module, stream, profile, inlist): option = f"--{inlist}" key = f"dnf module list {option}" - result = {} raw = subprocess.run(['dnf', 'module', 'list', option], capture_output=True) if raw.returncode == 0: raw = raw.stdout.decode('utf-8') self.outputs[option] = raw raw = raw.split("\n") for line in raw: - if module in line and stream == None: - result[mod] = 'yes' - break - elif module in line and stream in line: - result[mod] = 'yes' + result = 0 + if module in line: + if stream != None and stream not in line: + result = result + 100 + if profile != None and profile not in line: + result = result + 110 break else: - result[mod] = 'no' + result = 111 logging.info(f"The operation {key} has finished successfully.") else: - result[key] = raw.stderr.decode('utf-8') - logging.warning(f"The operation {key} has NOT finished successfully.") + problem = raw.stderr.decode('utf-8') + logging.warning(f"The operation {key} has NOT finished successfully, because of {problem}.") + result = 1 self.store_results(key, result) return result @@ -282,10 +279,21 @@ class ModuleTest: self.newer = None self.older = None self.fail = 'hard' + self.errorcodes = { + 0: 'Everything went ok in this part.', + 1: 'A problem in interaction with DNF occured.', + 100: 'The module stream was not found in the selected list.', + 110: 'The module stream was not found in the selected list.', + 210: 'The module stream and profile were not found in the selected list.', + 111: 'The module was not found in the selected list.', + } def results(self): return self.overall + def decode_error(self, code): + return self.errorcodes[code] + def list_module(self, module, stream): print('-------- List module ---------') key = f"{module}:{stream}" @@ -321,19 +329,22 @@ class ModuleTest: print(' ') - def enable_module(self, module, stream): + def enable_module(self, module, stream, profile = None): print('-------- Enable module ---------') key = f"{module}:{stream}" - res1 = self.suite.use_module(module, 'enable', stream) - print(f"DNF enables {key} =>", res1[key]) - res2 = self.suite.is_listed(module, stream, 'enabled') - print(f"{key} is listed in --enabled =>", res2[key]) - res3 = self.suite.is_listed(module, stream, 'disabled') - print(f"{key} is listed in --disabled =>", res3[key]) - if res1[key] == 'pass' and res2[key] == 'yes' and res3[key] == 'no': + res1 = self.suite.use_module(module, 'enable', stream, profile) + print(f"DNF enables {key} => {res1}") + res2 = self.suite.is_listed(module, stream, profile, 'enabled') + print(f"{key} is listed in --enabled => {res2}") + res3 = self.suite.is_listed(module, stream, profile, 'disabled') + print(f"{key} is listed in --disabled => {res3}") + if res1 == 0 and res2 == 0 and res3 == 111: self.overall['enable'] = 'pass' logging.info(f"The result of enabling {key} is PASS.") else: + problems = [res1, res2, res3] + for p in problems: + logging.error(f"Error code = {p}. {self.decode_error(p)}") if self.fail == 'hard': self.overall['enable'] = 'fail' logging.info(f"The result of enabling {key} is FAIL.") @@ -342,7 +353,7 @@ class ModuleTest: logging.info(f"The result of enabling {key} is SOFTFAIL.") print('') - def disable_module(self, module, stream): + def disable_module(self, module, stream, profile = None): print('-------- Disable module ---------') if self.newer != 'dummy': stream = self.newer @@ -351,20 +362,23 @@ class ModuleTest: else: key = f"{module}" res1 = self.suite.use_module(module, 'disable', stream) - print(f"DNF disables {key} =>", res1[key]) - res2 = self.suite.is_listed(module, stream, 'disabled') - print(f"{key} is listed in --disabled =>", res2[key]) - res3 = self.suite.is_listed(module, stream, 'enabled') - print(f"{key} is listed in --enabled =>", res3[key]) - res4 = self.suite.is_listed(module, stream, 'installed') - print(f"{key} is listed in --installed =>", res4[key]) - if res1[key] == 'pass' and res2[key] == 'yes' and res3[key] == 'no' and res4[key] == 'no': + print(f"DNF disables {key} =>", res1) + res2 = self.suite.is_listed(module, stream, profile, 'disabled') + print(f"{key} is listed in --disabled =>", res2) + res3 = self.suite.is_listed(module, stream, profile, 'enabled') + print(f"{key} is listed in --enabled =>", res3) + res4 = self.suite.is_listed(module, stream, profile, 'installed') + print(f"{key} is listed in --installed =>", res4) + if res1 == 0 and res2 == 0 and res3 == 111 and res4 == 111: self.overall['disable'] = 'pass' logging.info(f"The result of disabling {key} is PASS.") else: + problems = [res1, res2, res3, res4] + for p in problems: + logging.error(f"Error code = {p}. {self.decode_error(p)}") if self.fail == 'hard': self.overall['disable'] = 'fail' - logging.info(f"The result of disabling {key} is FAIL.") + logging.info(f"The result of disabling {key} is FAIL. ") else: self.overall['disable'] = 'soft' logging.info(f"The result of disabling {key} is SOFTFAIL.") @@ -379,14 +393,14 @@ class ModuleTest: else: key = f"{module}" res1 = self.suite.use_module(module, 'install', stream, profile) - print(f"DNF installs {key} =>", res1[key]) - res2 = self.suite.is_listed(module, stream, 'installed') - print(f"{key} is listed in --installed =>", res2[key]) - res3 = self.suite.is_listed(module, stream, 'enabled') - print(f"{key} is listed in --enabled =>", res3[key]) - res4 = self.suite.is_listed(module, stream, 'disabled') - print(f"{key} is listed in --disabled =>", res4[key]) - if res1[key] == 'pass' and res2[key] == 'yes' and res3[key] == 'yes' and res4[key] == 'no': + print(f"DNF installs {key} =>", res1) + res2 = self.suite.is_listed(module, stream, profile, 'installed') + print(f"{key} is listed in --installed =>", res2) + res3 = self.suite.is_listed(module, stream, profile, 'enabled') + print(f"{key} is listed in --enabled =>", res3) + res4 = self.suite.is_listed(module, stream, profile, 'disabled') + print(f"{key} is listed in --disabled =>", res4) + if res1 == 0 and res2 == 0 and res3 == 0 and res4 == 111: self.overall['install'] = 'pass' logging.info(f"The result of installing {key} is PASS.") else: