From a233d3fd050f28a749f98427f7290dbacb66f0b5 Mon Sep 17 00:00:00 2001 From: Cedric Koch-Hofer Date: Mon, 22 Aug 2022 08:50:43 +0000 Subject: [PATCH 1/4] DAOS-13886 test: Fix system name validation Fix regression on tests checking system name. Features: control Required-githooks: true Signed-off-by: Cedric Koch-Hofer --- src/control/cmd/dmg/main.go | 6 ++ src/tests/ftest/control/daos_agent_config.py | 2 +- .../ftest/control/daos_agent_config.yaml | 2 +- .../ftest/control/daos_control_config.py | 2 +- .../ftest/control/daos_control_config.yaml | 2 +- src/tests/ftest/control/version.py | 74 ++++++++++++++----- 6 files changed, 67 insertions(+), 21 deletions(-) diff --git a/src/control/cmd/dmg/main.go b/src/control/cmd/dmg/main.go index 34573d5cada..d9d1eacfa2d 100644 --- a/src/control/cmd/dmg/main.go +++ b/src/control/cmd/dmg/main.go @@ -223,6 +223,12 @@ and access control settings, along with system wide operations.` logCmd.SetLog(log) } + switch cmd.(type) { + case *versionCmd: + // this command don't need the rest of the setup + return cmd.Execute(args) + } + ctlCfg, err := control.LoadConfig(opts.ConfigPath) if err != nil { if errors.Cause(err) != control.ErrNoConfigFile { diff --git a/src/tests/ftest/control/daos_agent_config.py b/src/tests/ftest/control/daos_agent_config.py index a191180cf44..c9d023d832e 100644 --- a/src/tests/ftest/control/daos_agent_config.py +++ b/src/tests/ftest/control/daos_agent_config.py @@ -33,7 +33,7 @@ def test_daos_agent_config_basic(self): :avocado: tags=all,daily_regression :avocado: tags=vm :avocado: tags=control,basic - :avocado: tags=agent_start,daos_agent_config_test,test_daos_agent_config_basic + :avocado: tags=DaosAgentConfigTest,test_daos_agent_config_basic """ # Setup the agents self.add_agent_manager() diff --git a/src/tests/ftest/control/daos_agent_config.yaml b/src/tests/ftest/control/daos_agent_config.yaml index b6d8c22619d..e3ead466516 100644 --- a/src/tests/ftest/control/daos_agent_config.yaml +++ b/src/tests/ftest/control/daos_agent_config.yaml @@ -33,7 +33,7 @@ agent_config_val: !mux config_val: - "name" - "! @#$%^&*()_+{}|:<>?-=[];',./" - - "PASS" + - "FAIL" name_alphanumeric: config_val: - "name" diff --git a/src/tests/ftest/control/daos_control_config.py b/src/tests/ftest/control/daos_control_config.py index 98044e1a0f5..2757816102e 100644 --- a/src/tests/ftest/control/daos_control_config.py +++ b/src/tests/ftest/control/daos_control_config.py @@ -26,7 +26,7 @@ def test_daos_control_config_basic(self): :avocado: tags=all,daily_regression :avocado: tags=vm :avocado: tags=control,basic - :avocado: tags=control_start,test_daos_control_config_basic + :avocado: tags=DaosControlConfigTest,test_daos_control_config_basic """ # Get the input to verify c_val = self.params.get("config_val", "/run/control_config_val/*/") diff --git a/src/tests/ftest/control/daos_control_config.yaml b/src/tests/ftest/control/daos_control_config.yaml index 47e5b86303a..b07472f0bd3 100644 --- a/src/tests/ftest/control/daos_control_config.yaml +++ b/src/tests/ftest/control/daos_control_config.yaml @@ -33,7 +33,7 @@ control_config_val: !mux config_val: - "name" - "! @#$%^&*()_+{}|:<>?-=[];',./" - - "PASS" + - "FAIL" name_numeric: config_val: - "name" diff --git a/src/tests/ftest/control/version.py b/src/tests/ftest/control/version.py index ce74549d03e..0edd4b6fd4f 100644 --- a/src/tests/ftest/control/version.py +++ b/src/tests/ftest/control/version.py @@ -22,32 +22,65 @@ class DAOSVersion(TestWithServers): def __init__(self, *args, **kwargs): """Initialize a DAOSVersion object.""" super().__init__(*args, **kwargs) + # Don't waste time starting servers and agents. self.setup_start_servers = False self.setup_start_agents = False + self.errors = [] + + def report_result(self): + """Helper printing test result""" + self.log.info("###### Test Result ######") + report_errors(test=self, errors=self.errors) + self.log.info("#########################") + + def append_error(self, title, details): + """Helper adding an error to the list of errors + + Args: + title (str): Error message title + details (list): List of string of the error details + """ + msg = title + if details: + msg += "\n\t" + "\n\t".join(details) + self.errors.append(msg) + def test_version(self): """Verify version number for dmg, daos, daos_server, and daos_agent against RPM. :avocado: tags=all,full_regression :avocado: tags=vm :avocado: tags=control,daos_cmd - :avocado: tags=version_number,test_version + :avocado: tags=DAOSVersion,test_version """ - errors = [] - # Get RPM version. rpm_command = "rpm -qa|grep daos-server" output = run_pcmd(hosts=self.hostlist_servers, command=rpm_command) - self.log.info("RPM output = %s", output) - stdout = output[0]["stdout"][0] - self.log.info("RPM stdout = %s", stdout) - result = re.findall(r"daos-server-[tests-|tests_openmpi-]*([\d.]+)", stdout) + self.log.debug("RPM output = %s", output) + rc = output[0]["exit_status"] + stdout = output[0]["stdout"] + if rc != 0: + msg = "DAOS RPMs not properly installed: rc={}".format(rc) + self.append_error(msg, stdout) + self.report_result() + rpm_version = None + for rpm in stdout: + result = re.findall(r"daos-server-[tests-|tests_openmpi-]*([\d.]+)", rpm) + if result: + rpm_version = result[0] + break if not result: - errors.append("RPM version is not in the output! {}".format(output)) - else: - rpm_version = result[0] - self.log.info("RPM version = %s", rpm_version) + msg = "RPM version could not be defined" + self.append_error(msg, stdout) + self.report_result() + self.log.info("RPM version = %s", rpm_version) + + # Remove configuration files + cleanup_cmd = "sudo rm -frv /etc/daos/daos_control.yml /etc/daos/daos_server.yml" + cleanup_cmd += " /etc/daos/daos_agent.yml /etc/daos/certs" + run_pcmd(hosts=self.hostlist_servers, command=cleanup_cmd) # Get dmg version. dmg_version = self.get_dmg_command().version()["response"]["version"] @@ -58,10 +91,19 @@ def test_version(self): self.log.info("daos version = %s", daos_version) # Get daos_agent version. + daos_agent_version = None daos_agent_cmd = "daos_agent --json version" output = run_pcmd(hosts=self.hostlist_servers, command=daos_agent_cmd) - daos_agent_version = json.loads("".join(output[0]["stdout"]))["response"]["version"] - self.log.info("daos_agent version = %s", daos_agent_version) + self.log.debug("DAOS Agent output = %s", output) + rc = output[0]["exit_status"] + stdout = output[0]["stdout"] + if rc != 0: + msg = "DAOS Agent not properly installed: rc={}".format(rc) + self.append_error(msg, stdout) + else: + self.log.info("DAOS Agent stdout = %s", "".join(stdout)) + daos_agent_version = json.loads("".join(stdout))["response"]["version"] + self.log.info("daos_agent version = %s", daos_agent_version) # Get daos_server version daos_server_cmd = DaosServerCommandRunner(path=self.bin) @@ -82,8 +124,6 @@ def test_version(self): if version != rpm_version: msg = "Unexpected version! {} = {}, RPM = {}".format( tool, version, rpm_version) - errors.append(msg) + self.errors.append(msg) - self.log.info("###### Test Result ######") - report_errors(test=self, errors=errors) - self.log.info("#########################") + self.report_result() From 0b25e73aa31ed558b12232afd701f6e7fccd9dcd Mon Sep 17 00:00:00 2001 From: Cedric Koch-Hofer Date: Mon, 22 Aug 2022 08:50:43 +0000 Subject: [PATCH 2/4] DAOS-13886 test: Fix system name validation Fix too strong cleanup Features: control Required-githooks: true Signed-off-by: Cedric Koch-Hofer --- src/tests/ftest/control/version.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/tests/ftest/control/version.py b/src/tests/ftest/control/version.py index 0edd4b6fd4f..d673a58f2fa 100644 --- a/src/tests/ftest/control/version.py +++ b/src/tests/ftest/control/version.py @@ -78,8 +78,7 @@ def test_version(self): self.log.info("RPM version = %s", rpm_version) # Remove configuration files - cleanup_cmd = "sudo rm -frv /etc/daos/daos_control.yml /etc/daos/daos_server.yml" - cleanup_cmd += " /etc/daos/daos_agent.yml /etc/daos/certs" + cleanup_cmd = "sudo find /etc/daos -type f -delete -print" run_pcmd(hosts=self.hostlist_servers, command=cleanup_cmd) # Get dmg version. From b5aede88496773113f172f4104def9ff5a6b0949 Mon Sep 17 00:00:00 2001 From: Cedric Koch-Hofer Date: Thu, 6 Jul 2023 18:31:24 +0000 Subject: [PATCH 3/4] DAOS-13886 test: Fix system name validation Fix too strong cleanup Features: control Required-githooks: true Signed-off-by: Cedric Koch-Hofer --- src/tests/ftest/control/version.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/tests/ftest/control/version.py b/src/tests/ftest/control/version.py index d673a58f2fa..e04a3ab2644 100644 --- a/src/tests/ftest/control/version.py +++ b/src/tests/ftest/control/version.py @@ -78,8 +78,13 @@ def test_version(self): self.log.info("RPM version = %s", rpm_version) # Remove configuration files - cleanup_cmd = "sudo find /etc/daos -type f -delete -print" - run_pcmd(hosts=self.hostlist_servers, command=cleanup_cmd) + cleanup_cmds = [ + "sudo find /etc/daos/certs -type f -delete -print", + "sudo rm -fv /etc/daos/daos_server.yml /etc/daos/daos_control.yml" + " /etc/daos/daos_agent.yml", + ] + for cmd in cleanup_cmds: + run_pcmd(hosts=self.hostlist_servers, command=cmd) # Get dmg version. dmg_version = self.get_dmg_command().version()["response"]["version"] From ce831918db33ef78ba682f06a50fbcabba7949b1 Mon Sep 17 00:00:00 2001 From: Tom Nabarro Date: Tue, 11 Jul 2023 13:27:10 +0100 Subject: [PATCH 4/4] add coverage for length exceeded as well as special characters Features: control Required-githooks: true Signed-off-by: Tom Nabarro --- src/tests/ftest/control/daos_agent_config.yaml | 5 +++++ src/tests/ftest/control/daos_control_config.yaml | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/tests/ftest/control/daos_agent_config.yaml b/src/tests/ftest/control/daos_agent_config.yaml index e3ead466516..965f931683f 100644 --- a/src/tests/ftest/control/daos_agent_config.yaml +++ b/src/tests/ftest/control/daos_agent_config.yaml @@ -30,6 +30,11 @@ dmg: # - PASS or FAIL value, specifying how the agent is expected to function agent_config_val: !mux name_special_chars: + config_val: + - "name" + - "! @#$%^&*()_+{}" + - "PASS" + name_exceeds_max_length: config_val: - "name" - "! @#$%^&*()_+{}|:<>?-=[];',./" diff --git a/src/tests/ftest/control/daos_control_config.yaml b/src/tests/ftest/control/daos_control_config.yaml index b07472f0bd3..a1c085002d8 100644 --- a/src/tests/ftest/control/daos_control_config.yaml +++ b/src/tests/ftest/control/daos_control_config.yaml @@ -30,6 +30,11 @@ dmg: # - PASS or FAIL value, specifying how the agent is expected to function control_config_val: !mux name_special_chars: + config_val: + - "name" + - "! @#$%^&*()_+{}" + - "PASS" + name_exceeds_max_length: config_val: - "name" - "! @#$%^&*()_+{}|:<>?-=[];',./"