-
Notifications
You must be signed in to change notification settings - Fork 21
test script for systemd validation #50
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
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,27 @@ | ||
| # systemd Suite | ||
|
|
||
| This folder contains test scripts for validating `systemd` functionality on the platform. Particularly for **Qualcomm RB3Gen2** and platforms based on `meta-qcom` and `meta-qcom-distros`. | ||
|
|
||
| ## Contents | ||
|
|
||
| - **directory/**: Each directory contains individual test script run.sh for specific `systemd` features. | ||
| - **README.md**: This documentation file. | ||
|
|
||
| ## Usage | ||
|
|
||
| 1. Ensure all dependencies are installed as specified in the root documentation. | ||
| 2. Run the suite using run-test.sh in root directory Runner/: | ||
| ``` | ||
| ./run-test.sh <directory-name> | ||
| for e.g. ./run-test.sh systemdPID | ||
| ``` | ||
| 3. Review the test results stored in file named <directory-name.res> in respective directory. | ||
|
|
||
| ## Purpose | ||
|
|
||
| The `systemd` suite helps maintain reliability by ensuring that service management and related features work as expected on QCOM platforms. | ||
|
|
||
| These scripts focus on | ||
| - Validate systemctl commands | ||
| - Check failed services | ||
| - Basic systemd validation | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,50 @@ | ||
| # checkFailedServices Validation Test | ||
|
|
||
| ## Overview | ||
|
|
||
| This test script checks for any failed systemd services on the device. It is intended for use on platforms running systemd and is part of the Qualcomm Linux Testkit. | ||
|
|
||
| ## Usage | ||
|
|
||
| 1. Ensure the testkit environment is set up and the board has systemd as init manager. | ||
| 2. Make the script executable if not already so: | ||
| ```sh | ||
| chmod +x run.sh | ||
| ``` | ||
| 3. Run the test: | ||
| ```sh | ||
| ./run.sh | ||
| ``` | ||
| 4. Check the result: | ||
| - If the test passes, `checkFailedServices.res` will contain `checkFailedServices PASS`. | ||
| - If the test fails, `checkFailedServices.res` will contain `checkFailedServices FAIL` and the failed services will be logged. | ||
|
|
||
| ## Integration | ||
|
|
||
| This test can be invoked by the top-level runner as: | ||
| ```sh | ||
| cd Runner | ||
| ./run-test.sh checkFailedServices | ||
| ``` | ||
| The `.res` file can be parsed by CI/LAVA to determine the overall test status. | ||
|
|
||
| ## Result Format | ||
|
|
||
| - **PASS**: No failed services detected. | ||
| - **FAIL**: One or more services are in a failed state. | ||
|
|
||
| The result is written to `checkFailedServices.res` in the same directory. | ||
|
|
||
| ## Dependencies | ||
|
|
||
| - **systemctl**: Must be available and functional (systemd-based system). | ||
| - **POSIX shell**: Script is written for `/bin/sh`. | ||
|
|
||
| ## Logging | ||
|
|
||
| - Uses `log_info`, `log_pass`, and `log_fail` from `functestlib.sh` for standardized output. | ||
|
|
||
| ## License | ||
|
|
||
| Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. | ||
| SPDX-License-Identifier: BSD-3-Clause-Clear |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,56 @@ | ||
| #!/bin/sh | ||
| # Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. | ||
| # SPDX-License-Identifier: BSD-3-Clause-Clear | ||
|
|
||
| # Robustly find and source init_env | ||
| SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" | ||
| INIT_ENV="" | ||
| SEARCH="$SCRIPT_DIR" | ||
| while [ "$SEARCH" != "/" ]; do | ||
| if [ -f "$SEARCH/init_env" ]; then | ||
| INIT_ENV="$SEARCH/init_env" | ||
| break | ||
| fi | ||
| SEARCH=$(dirname "$SEARCH") | ||
| done | ||
|
|
||
| if [ -z "$INIT_ENV" ]; then | ||
| echo "[ERROR] Could not find init_env (starting at $SCRIPT_DIR)" >&2 | ||
| exit 1 | ||
| fi | ||
|
|
||
| # Only source if not already loaded (idempotent) | ||
| if [ -z "$__INIT_ENV_LOADED" ]; then | ||
| # shellcheck disable=SC1090 | ||
| . "$INIT_ENV" | ||
| fi | ||
|
|
||
| # Always source functestlib.sh, using $TOOLS exported by init_env | ||
| # shellcheck disable=SC1090,SC1091 | ||
| . "$TOOLS/functestlib.sh" | ||
|
|
||
| TESTNAME="checkFailedServices" | ||
| test_path=$(find_test_case_by_name "$TESTNAME") | ||
| cd "$test_path" || exit 1 | ||
| res_file="./$TESTNAME.res" | ||
|
|
||
| # Function to check for any failed services and print them | ||
| check_failed_services() { | ||
| log_info "----------------------------------------------------" | ||
| log_info "-------- Starting $TESTNAME Functional Test --------" | ||
| failed_services=$(systemctl --failed --no-legend --plain | awk '{print $1}') | ||
| if [ -z "$failed_services" ]; then | ||
| log_pass "No service is in failed state on device" | ||
| echo "$TESTNAME PASS" > "$res_file" | ||
| else | ||
| log_fail "------ List of failed services --------" | ||
| log_fail "$failed_services" | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There may be several service failures during the boot process for different reasons. Instead of failing the process for all such cases, could we create a list of mandatory service names and monitor only those? We can then base the test outcome on the status of this mandatory list. |
||
| log_fail "--------------------------------------" | ||
| echo "$TESTNAME FAIL" > "$res_file" | ||
| fi | ||
| log_info "----------------------------------------------------" | ||
| log_info "-------- Stopping $TESTNAME Functional Test --------" | ||
| } | ||
|
|
||
| # Call the functions | ||
| check_failed_services | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,53 @@ | ||
| # systemctlStartStop | ||
|
|
||
| ## Overview | ||
|
|
||
| This script tests the ability to stop and start the `systemd-user-sessions.service` using `systemctl`. It is intended for use on platforms running systemd and is part of the Qualcomm Linux Testkit. | ||
|
|
||
| ## How It Works | ||
|
|
||
| - The script robustly locates and sources the `init_env` environment setup file. | ||
| - It sources `functestlib.sh` for logging and utility functions. | ||
| - It checks if `systemd-user-sessions.service` is active. | ||
| - It attempts to stop the service and verifies it is stopped. | ||
| - It then starts the service again and verifies it is running. | ||
| - Results are logged and written to `systemctlStartStop.res`. | ||
|
|
||
| ## Usage | ||
|
|
||
| 1. Ensure the testkit environment is set up and the board is running systemd. | ||
| 2. Make the script executable if not already so: | ||
| ```sh | ||
| chmod +x run.sh | ||
| ``` | ||
| 3. Run the test(requires sudo access): | ||
| ```sh | ||
| ./run.sh | ||
| ``` | ||
| 4. Check the result in `systemctlStartStop.res`: | ||
| - `systemctlStartStop PASS` if the service was stopped and started successfully. | ||
| - `systemctlStartStop FAIL` if any step failed. | ||
|
|
||
| ## Integration | ||
|
|
||
| This test can be invoked by the top-level runner as: | ||
| ```sh | ||
| cd Runner | ||
| ./run-test.sh systemctlStartStop | ||
| ``` | ||
| The `.res` file will be parsed by CI/LAVA to determine the overall test status. | ||
|
|
||
| ## Dependencies | ||
|
|
||
| - `systemctl` (systemd-based system) | ||
| - POSIX shell (`/bin/sh`) | ||
| - `init_env` and `functestlib.sh` from the testkit | ||
|
|
||
| ## Logging | ||
|
|
||
| - Uses `log_info`, `log_pass`, and `log_fail` from `functestlib.sh` for standardized output. | ||
|
|
||
| ## License | ||
|
|
||
| Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. | ||
| SPDX-License-Identifier: BSD-3-Clause-Clear |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,71 @@ | ||
| #!/bin/sh | ||
| # Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. | ||
| # SPDX-License-Identifier: BSD-3-Clause-Clear | ||
|
|
||
| # Robustly find and source init_env | ||
| SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" | ||
| INIT_ENV="" | ||
| SEARCH="$SCRIPT_DIR" | ||
| while [ "$SEARCH" != "/" ]; do | ||
| if [ -f "$SEARCH/init_env" ]; then | ||
| INIT_ENV="$SEARCH/init_env" | ||
| break | ||
| fi | ||
| SEARCH=$(dirname "$SEARCH") | ||
| done | ||
|
|
||
| if [ -z "$INIT_ENV" ]; then | ||
| echo "[ERROR] Could not find init_env (starting at $SCRIPT_DIR)" >&2 | ||
| exit 1 | ||
| fi | ||
|
|
||
| # Only source if not already loaded (idempotent) | ||
| if [ -z "$__INIT_ENV_LOADED" ]; then | ||
| # shellcheck disable=SC1090 | ||
| . "$INIT_ENV" | ||
| fi | ||
|
|
||
| # Always source functestlib.sh, using $TOOLS exported by init_env | ||
| # shellcheck disable=SC1090,SC1091 | ||
| . "$TOOLS/functestlib.sh" | ||
|
|
||
| TESTNAME="systemctlStartStop" | ||
| test_path=$(find_test_case_by_name "$TESTNAME") | ||
| cd "$test_path" || exit 1 | ||
| res_file="./$TESTNAME.res" | ||
|
|
||
| # Function to check if systemctl start command works for systemd-user-sessions.service | ||
| check_systemctl_start_stop() { | ||
| log_info "----------------------------------------------------" | ||
| log_info "-------- Starting $TESTNAME Functional Test --------" | ||
| log_info "-------- Stopping systemd-user-sessions.service --------" | ||
| if ! systemctl is-active --quiet systemd-user-sessions.service; then | ||
| log_info "Service is not active before proceeding with stop command" | ||
| echo "$TESTNAME Fail" > "$res_file" | ||
| exit 1 | ||
| fi | ||
| systemctl stop systemd-user-sessions.service | ||
| sleep 5 | ||
| if systemctl is-active --quiet systemd-user-sessions.service; then | ||
| log_fail "Failed to stop service systemd-user-sessions.service" | ||
| echo "$TESTNAME FAIL" > "$res_file" | ||
| exit 1 | ||
| fi | ||
| log_pass "Successfully stopped service systemd-user-sessions.service" | ||
| log_info "-------- Starting systemd-user-sessions.service --------" | ||
| systemctl start systemd-user-sessions.service | ||
| sleep 5 | ||
| if systemctl is-active --quiet systemd-user-sessions.service; then | ||
| log_pass "systemd-user-sessions.service started successfully with systemctl command" | ||
| echo "$TESTNAME PASS" > "$res_file" | ||
| else | ||
| log_fail "Failed to start systemd-user-sessions.service with systemctl start command" | ||
| echo "$TESTNAME FAIL" > "$res_file" | ||
| fi | ||
| log_info "----------------------------------------------------" | ||
| log_info "-------- Stopping $TESTNAME Functional Test --------" | ||
| } | ||
|
|
||
|
|
||
| # Call the functions | ||
| check_systemctl_start_stop |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,51 @@ | ||
| # systemdPID | ||
|
|
||
| ## Overview | ||
|
|
||
| This script verifies that the `systemd` process is running as PID 1 on the device. It is intended for use on platforms running systemd and is part of the Qualcomm Linux Testkit. | ||
|
|
||
| ## How It Works | ||
|
|
||
| - The script robustly locates and sources the `init_env` environment setup file. | ||
| - It sources `functestlib.sh` for logging and utility functions. | ||
| - It checks if the process with PID 1 is `systemd` using `ps`. | ||
| - If `systemd` is PID 1, the test passes; otherwise, it fails. | ||
|
|
||
| ## Usage | ||
|
|
||
| 1. Ensure the testkit environment is set up and the board is having systemd as init manager. | ||
| 2. Make the script executable if not already so: | ||
| ```sh | ||
| chmod +x run.sh | ||
| ``` | ||
| 3. Run the test: | ||
| ```sh | ||
| ./run.sh | ||
| ``` | ||
| 4. Check the result in `systemdPID.res`: | ||
| - `systemdPID PASS` if `systemd` is PID 1. | ||
| - `systemdPID FAIL` if not. | ||
|
|
||
| ## Integration | ||
|
|
||
| This test can be invoked by the top-level runner as: | ||
| ```sh | ||
| cd Runner | ||
| ./run-test.sh systemdPID | ||
| ``` | ||
| The `.res` file can be parsed by CI/LAVA to determine the overall test status. | ||
|
|
||
| ## Dependencies | ||
|
|
||
| - `ps` | ||
| - POSIX shell (`/bin/sh`) | ||
| - `init_env` and `functestlib.sh` from the testkit | ||
|
|
||
| ## Logging | ||
|
|
||
| - Uses `log_info`, `log_pass`, and `log_fail` from `functestlib.sh` for standardized output. | ||
|
|
||
| ## License | ||
|
|
||
| Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. | ||
| SPDX-License-Identifier: BSD-3-Clause-Clear |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,54 @@ | ||
| #!/bin/sh | ||
| # Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. | ||
| # SPDX-License-Identifier: BSD-3-Clause-Clear | ||
|
|
||
| # Robustly find and source init_env | ||
| SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" | ||
| INIT_ENV="" | ||
| SEARCH="$SCRIPT_DIR" | ||
| while [ "$SEARCH" != "/" ]; do | ||
| if [ -f "$SEARCH/init_env" ]; then | ||
| INIT_ENV="$SEARCH/init_env" | ||
| break | ||
| fi | ||
| SEARCH=$(dirname "$SEARCH") | ||
| done | ||
|
|
||
| if [ -z "$INIT_ENV" ]; then | ||
| echo "[ERROR] Could not find init_env (starting at $SCRIPT_DIR)" >&2 | ||
| exit 1 | ||
| fi | ||
|
|
||
| # Only source if not already loaded (idempotent) | ||
| if [ -z "$__INIT_ENV_LOADED" ]; then | ||
| # shellcheck disable=SC1090 | ||
| . "$INIT_ENV" | ||
| fi | ||
|
|
||
| # Always source functestlib.sh, using $TOOLS exported by init_env | ||
| # shellcheck disable=SC1090,SC1091 | ||
| . "$TOOLS/functestlib.sh" | ||
|
|
||
| TESTNAME="systemdPID" | ||
| test_path=$(find_test_case_by_name "$TESTNAME") | ||
| cd "$test_path" || exit 1 | ||
| res_file="./$TESTNAME.res" | ||
|
|
||
| # Function to check if systemd is running with PID 1 | ||
|
|
||
| check_systemd_pid() { | ||
| log_info "----------------------------------------------------" | ||
| log_info "-------- Starting $TESTNAME Functional Test --------" | ||
| if [ "$(ps -p 1 -o comm=)" = "systemd" ]; then | ||
| log_pass "Systemd init started with PID 1" | ||
| echo "$TESTNAME PASS" > "$res_file" | ||
| else | ||
| log_fail "Systemd init did not start with PID 1" | ||
| echo "$TESTNAME FAIL" > "$res_file" | ||
| fi | ||
| log_info "----------------------------------------------------" | ||
| log_info "-------- Stopping $TESTNAME Functional Test --------" | ||
| } | ||
|
|
||
| # Call the functions | ||
| check_systemd_pid |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please add readme for each test for consistency