Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DAOS-15964 test: verify daos_server_helper on server (#15503) #15599

Merged
merged 1 commit into from
Dec 18, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 24 additions & 15 deletions src/tests/ftest/control/daos_server_helper.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"""
(C) Copyright 2018-2023 Intel Corporation.
(C) Copyright 2018-2024 Intel Corporation.

SPDX-License-Identifier: BSD-2-Clause-Patent
"""
Expand All @@ -8,6 +8,7 @@
import stat

from apricot import TestWithServers
from run_utils import run_remote
from server_utils import ServerFailed


Expand All @@ -34,17 +35,25 @@ def test_daos_server_helper_format(self):
:avocado: tags=DaosPrivHelperTest,test_daos_server_helper_format
"""
# Verify that daos_server_helper has the correct permissions
self.log.info("Checking daos_server_helper binary permissions")
file_stats = os.stat("/usr/bin/daos_server_helper")
# Get the result remotely with os.stat so the format is compatible with local code
self.log_step("Verify daos_server_helper binary permissions")
helper_path = os.path.join(self.bin, "daos_server_helper")
cmd = f"python3 -c 'import os; print(os.stat(\"{helper_path}\").st_mode)'"
result = run_remote(self.log, self.hostlist_servers, cmd)
if not result.passed:
self.fail("Failed to get daos_server_helper mode")
if not result.homogeneous:
self.fail("Non-homogeneous daos_server_helper mode")
mode = int(result.joined_stdout)

# regular file, mode 4750
desired = stat.S_IFREG | stat.S_ISUID | stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP
actual = file_stats.st_mode & ~stat.S_IRWXO # mask out Other bits for non-RPM
actual = mode & ~stat.S_IRWXO # mask out Other bits for non-RPM
if (actual ^ desired) > 0:
self.fail("Incorrect daos_server_helper permissions: {}".format(oct(actual)))
self.fail(f"Incorrect daos_server_helper permissions: {oct(actual)}")

# Setup server as non-root
self.log.info("(0)Preparing to run daos_server as non-root user")
self.log_step("Prepare to run daos_server as non-root user")
self.add_server_manager()
self.configure_manager(
"server", self.server_managers[0], self.hostlist_servers, self.hostfile_servers_slots)
Expand All @@ -56,31 +65,31 @@ def test_daos_server_helper_format(self):
# Prep server for format, run command under non-root user
# Note: This will just report the presence of PMem namespaces if the NVDIMMs are already
# configured in AppDirect interleaved mode and namespaces have been created.
self.log.info("(1)Performing NVMe storage prepare")
self.log_step("Perform NVMe storage prepare as non-root")
try:
self.server_managers[0].prepare_storage(user, False, True)
except ServerFailed as err:
self.fail("##(1)Failed preparing NVMe as user {}: {}".format(user, err))
self.fail(f"Failed to prepare NVMe as user {user}: {err}")

# Start server
self.log.info("(2)Starting server as non-root")
self.log_step("Start server as non-root")
try:
self.server_managers[0].detect_format_ready()
self.register_cleanup(self.stop_servers)
except ServerFailed as error:
self.fail(
"##(2)Failed starting server before format as non-root user: {}".format(error))
self.fail(f"Failed to start server before format as non-root user: {error}")

# Run format command under non-root user
self.log.info("(3)Performing SCM format")
self.log_step("Perform SCM format")
result = self.server_managers[0].dmg.storage_format()
if result is None:
self.fail("##(3)Failed to format storage")
self.fail("Failed to format storage")

# Verify format success when all the daos_engine start.
# Use dmg to detect server start.
self.log.info("(4)Verify format success when all the daos_engine start")
self.log_step("Verify format succeeds when all the daos_engines start")
try:
self.server_managers[0].detect_start_via_dmg = True
self.server_managers[0].detect_engine_start()
except ServerFailed as error:
self.fail("##(4)Failed starting server after format as non-root user: {}".format(error))
self.fail(f"Failed to start server after format as non-root user: {error}")
2 changes: 0 additions & 2 deletions src/tests/ftest/control/daos_server_helper.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# change host names to your reserved nodes, the
# required quantity is indicated by the placeholders
hosts:
test_servers: 1
timeout: 60
Expand Down
Loading