docs: Add documentation for Process module tests
- Added documentation for the new Process module tests, including details on test structure, execution, and individual test descriptions. - Created new documentation files for Process module tests. - Updated the main Rhai documentation index to include the new Process module tests.
This commit is contained in:
parent
4578b10acb
commit
32217b6545
@ -32,6 +32,7 @@ SAL includes test scripts for verifying the functionality of its Rhai integratio
|
||||
|
||||
- [OS Module Tests](os_module_tests.md): Tests for file system, download, and package management operations
|
||||
- [Git Module Tests](git_module_tests.md): Tests for Git repository management and operations
|
||||
- [Process Module Tests](process_module_tests.md): Tests for command execution and process management
|
||||
- [Running Tests](running_tests.md): Instructions for running all Rhai tests
|
||||
- [CI Workflow](ci_workflow.md): Continuous integration workflow for Rhai tests
|
||||
|
||||
|
79
docs/rhai/process_module_tests.md
Normal file
79
docs/rhai/process_module_tests.md
Normal file
@ -0,0 +1,79 @@
|
||||
# Process Module Tests
|
||||
|
||||
This document describes the test scripts for the Process module in the SAL library. These tests verify the functionality of the Process module's command execution and process management features.
|
||||
|
||||
## Test Structure
|
||||
|
||||
The tests are organized into two main scripts:
|
||||
|
||||
1. **Command Execution** (`01_command_execution.rhai`): Tests command execution functions like `run()` and `which()`.
|
||||
2. **Process Management** (`02_process_management.rhai`): Tests process management functions like `process_list()` and `process_get()`.
|
||||
|
||||
Additionally, there's a runner script (`run_all_tests.rhai`) that executes all tests and reports results. The runner script contains simplified versions of the individual tests to avoid dependency issues.
|
||||
|
||||
## Running the Tests
|
||||
|
||||
To run all tests, execute the following command from the project root:
|
||||
|
||||
```bash
|
||||
herodo --path src/rhai_tests/process/run_all_tests.rhai
|
||||
```
|
||||
|
||||
To run individual test scripts:
|
||||
|
||||
```bash
|
||||
herodo --path src/rhai_tests/process/01_command_execution.rhai
|
||||
```
|
||||
|
||||
## Test Details
|
||||
|
||||
### Command Execution Test
|
||||
|
||||
The command execution test (`01_command_execution.rhai`) verifies the following functions:
|
||||
|
||||
- `run()`: Running shell commands
|
||||
- `run().do()`: Executing commands and capturing output
|
||||
- `run().silent()`: Running commands without displaying output
|
||||
- `run().ignore_error()`: Running commands that might fail without throwing errors
|
||||
- `which()`: Finding the path of an executable
|
||||
|
||||
The test runs various commands and verifies their output and exit status.
|
||||
|
||||
### Process Management Test
|
||||
|
||||
The process management test (`02_process_management.rhai`) verifies the following functions:
|
||||
|
||||
- `process_list()`: Listing running processes
|
||||
- `process_get()`: Getting information about a specific process
|
||||
- Process properties: Accessing process information like PID, name, CPU usage, and memory usage
|
||||
|
||||
The test lists running processes and verifies that their properties are accessible.
|
||||
|
||||
## Test Runner
|
||||
|
||||
The test runner script (`run_all_tests.rhai`) provides a framework for executing all tests and reporting results. It:
|
||||
|
||||
1. Contains simplified versions of each test
|
||||
2. Runs each test in a try/catch block to handle errors
|
||||
3. Catches and reports any errors
|
||||
4. Provides a summary of passed and failed tests
|
||||
|
||||
## Adding New Tests
|
||||
|
||||
To add a new test:
|
||||
|
||||
1. Create a new Rhai script in the `src/rhai_tests/process` directory
|
||||
2. Add a new test section to the `run_all_tests.rhai` script
|
||||
3. Update this documentation to include information about the new test
|
||||
|
||||
## Best Practices for Writing Tests
|
||||
|
||||
When writing tests for the Process module:
|
||||
|
||||
1. Use assertions to verify expected behavior
|
||||
2. Print clear messages about what's being tested
|
||||
3. Handle errors gracefully
|
||||
4. Make tests independent of each other
|
||||
5. Avoid tests that could disrupt the system (e.g., killing important processes)
|
||||
6. Keep tests focused on specific functionality
|
||||
7. Clean up any resources created during testing
|
131
run_rhai_tests.log
Normal file
131
run_rhai_tests.log
Normal file
@ -0,0 +1,131 @@
|
||||
[0;34m=======================================[0m
|
||||
[0;34m Running All Rhai Tests [0m
|
||||
[0;34m=======================================[0m
|
||||
|
||||
[0;33mRunning tests for module: git[0m
|
||||
[0;33m-------------------------------------[0m
|
||||
Found 1 Rhai script to execute:
|
||||
|
||||
Executing: src/rhai_tests/git/run_all_tests.rhai
|
||||
=== Running Git Module Tests ===
|
||||
|
||||
--- Running Basic Git Operations Tests ---
|
||||
Created test directory: rhai_test_git
|
||||
Testing GitTree constructor...
|
||||
✓ GitTree created successfully
|
||||
Testing GitTree.list() with empty directory...
|
||||
✓ GitTree.list(): Found 0 repositories (expected 0)
|
||||
Testing GitTree.find() with empty directory...
|
||||
✓ GitTree.find(): Found 0 repositories (expected 0)
|
||||
Cleaning up...
|
||||
✓ Cleanup: Directory rhai_test_git removed
|
||||
--- Basic Git Operations Tests completed successfully ---
|
||||
|
||||
--- Running Git Repository Operations Tests ---
|
||||
Created test directory: rhai_test_git_ops
|
||||
Creating GitTree...
|
||||
✓ GitTree created successfully
|
||||
Cleaning up...
|
||||
✓ Cleanup: Directory rhai_test_git_ops removed
|
||||
--- Git Repository Operations Tests completed successfully ---
|
||||
|
||||
=== Test Summary ===
|
||||
Passed: 2
|
||||
Failed: 0
|
||||
Total: 2
|
||||
|
||||
✅ All tests passed!
|
||||
Script executed successfully
|
||||
Result: 0
|
||||
|
||||
All scripts executed
|
||||
[0;32m✓ Module git tests passed[0m
|
||||
|
||||
[0;33mRunning tests for module: os[0m
|
||||
[0;33m-------------------------------------[0m
|
||||
Found 1 Rhai script to execute:
|
||||
|
||||
Executing: src/rhai_tests/os/run_all_tests.rhai
|
||||
=== Running OS Module Tests ===
|
||||
|
||||
--- Running File Operations Tests ---
|
||||
Testing mkdir...
|
||||
✓ mkdir: Successfully created directory 'rhai_test_fs'
|
||||
✓ mkdir (nested): Successfully created directory 'rhai_test_fs/subdir'
|
||||
✓ file_write: Successfully wrote to file 'rhai_test_fs/test.txt'
|
||||
✓ file_read: Content matches
|
||||
✓ file_size: 48 bytes
|
||||
✓ delete: Directory cleaned up
|
||||
--- File Operations Tests completed successfully ---
|
||||
|
||||
--- Running Download Operations Tests ---
|
||||
Created test directory: rhai_test_download
|
||||
✓ which: curl found at /usr/bin/curl
|
||||
✓ cmd_ensure_exists: Command 'curl' exists
|
||||
Downloading https://raw.githubusercontent.com/rust-lang/rust/master/LICENSE-MIT...
|
||||
Downloading https://raw.githubusercontent.com/rust-lang/rust/master/LICENSE-MIT to rhai_test_download/license.txt
|
||||
Download complete! File size: 1.04 KB
|
||||
✓ download_file: rhai_test_download/license.txt
|
||||
✓ Downloaded file content verified
|
||||
✓ Cleanup: Directory rhai_test_download removed
|
||||
--- Download Operations Tests completed successfully ---
|
||||
|
||||
--- Running Package Operations Tests ---
|
||||
Current platform: Ubuntu
|
||||
✓ package_set_debug: Debug mode enabled
|
||||
--- Package Operations Tests completed successfully ---
|
||||
|
||||
=== Test Summary ===
|
||||
Passed: 3
|
||||
Failed: 0
|
||||
Total: 3
|
||||
|
||||
✅ All tests passed!
|
||||
Script executed successfully
|
||||
Result: 0
|
||||
|
||||
All scripts executed
|
||||
[0;32m✓ Module os tests passed[0m
|
||||
|
||||
[0;33mRunning tests for module: process[0m
|
||||
[0;33m-------------------------------------[0m
|
||||
Found 1 Rhai script to execute:
|
||||
|
||||
Executing: src/rhai_tests/process/run_all_tests.rhai
|
||||
=== Running Process Module Tests ===
|
||||
|
||||
--- Running Command Execution Tests ---
|
||||
Testing run() with a simple command...
|
||||
Hello, World!
|
||||
✓ run().execute(): Command executed successfully
|
||||
Testing which() function...
|
||||
✓ which(): Found bash at /usr/bin/bash
|
||||
--- Command Execution Tests completed successfully ---
|
||||
|
||||
--- Running Process Management Tests ---
|
||||
Testing process_list() function...
|
||||
✓ process_list(): Found 344 processes
|
||||
Testing process properties...
|
||||
✓ Process properties: PID=1, Name=systemd
|
||||
--- Process Management Tests completed successfully ---
|
||||
|
||||
=== Test Summary ===
|
||||
Passed: 2
|
||||
Failed: 0
|
||||
Total: 2
|
||||
|
||||
✅ All tests passed!
|
||||
Script executed successfully
|
||||
Result: 0
|
||||
|
||||
All scripts executed
|
||||
[0;32m✓ Module process tests passed[0m
|
||||
|
||||
[0;34m=======================================[0m
|
||||
[0;34m Test Summary [0m
|
||||
[0;34m=======================================[0m
|
||||
Total modules tested: 3
|
||||
Passed: [0;32m3[0m
|
||||
Failed: [0;31m0[0m
|
||||
|
||||
[0;32mAll tests passed![0m
|
61
src/rhai_tests/process/01_command_execution.rhai
Normal file
61
src/rhai_tests/process/01_command_execution.rhai
Normal file
@ -0,0 +1,61 @@
|
||||
// 01_command_execution.rhai
|
||||
// Tests for command execution in the Process module
|
||||
|
||||
// Custom assert function
|
||||
fn assert_true(condition, message) {
|
||||
if !condition {
|
||||
print(`ASSERTION FAILED: ${message}`);
|
||||
throw message;
|
||||
}
|
||||
}
|
||||
|
||||
print("=== Testing Basic Command Execution ===");
|
||||
|
||||
// Test running a simple command
|
||||
print("Testing run() with a simple command...");
|
||||
let result = run("echo Hello, World!").execute();
|
||||
assert_true(result.success, "Command should succeed");
|
||||
assert_true(result.stdout.contains("Hello, World!"), "Command output should contain the expected text");
|
||||
print(`✓ run().execute(): Command executed successfully`);
|
||||
|
||||
// Test running a command with arguments
|
||||
print("Testing run() with command arguments...");
|
||||
let result_with_args = run("echo Hello from Rhai tests").execute();
|
||||
assert_true(result_with_args.success, "Command with arguments should succeed");
|
||||
assert_true(result_with_args.stdout.contains("Hello from Rhai tests"), "Command output should contain the expected text");
|
||||
print(`✓ run().execute(): Command with arguments executed successfully`);
|
||||
|
||||
// Test running a command with environment variables
|
||||
print("Testing run() with environment variables...");
|
||||
let env_result = run("echo $HOME").execute();
|
||||
assert_true(env_result.success, "Command with environment variables should succeed");
|
||||
assert_true(env_result.stdout.trim() != "", "Environment variable should be expanded");
|
||||
print(`✓ run().execute(): Command with environment variables executed successfully`);
|
||||
|
||||
// Test running a multiline script
|
||||
print("Testing run() with a multiline script...");
|
||||
let script_result = run(`
|
||||
echo "Line 1"
|
||||
echo "Line 2"
|
||||
echo "Line 3"
|
||||
`).execute();
|
||||
assert_true(script_result.success, "Multiline script should succeed");
|
||||
assert_true(script_result.stdout.contains("Line 1") && script_result.stdout.contains("Line 2") && script_result.stdout.contains("Line 3"),
|
||||
"Script output should contain all lines");
|
||||
print(`✓ run().execute(): Multiline script executed successfully`);
|
||||
|
||||
// Test which function
|
||||
print("Testing which() function...");
|
||||
let bash_path = which("bash");
|
||||
assert_true(bash_path != "", "bash should be found in PATH");
|
||||
print(`✓ which(): Found bash at ${bash_path}`);
|
||||
|
||||
// Test a command that doesn't exist
|
||||
let nonexistent_cmd = which("this_command_does_not_exist_12345");
|
||||
if nonexistent_cmd == "" {
|
||||
print(`✓ which(): Correctly reported that nonexistent command was not found`);
|
||||
} else {
|
||||
print(`Note: Unexpectedly found command at ${nonexistent_cmd}`);
|
||||
}
|
||||
|
||||
print("All command execution tests completed successfully!");
|
54
src/rhai_tests/process/02_process_management.rhai
Normal file
54
src/rhai_tests/process/02_process_management.rhai
Normal file
@ -0,0 +1,54 @@
|
||||
// 02_process_management.rhai
|
||||
// Tests for process management functions in the Process module
|
||||
|
||||
// Custom assert function
|
||||
fn assert_true(condition, message) {
|
||||
if !condition {
|
||||
print(`ASSERTION FAILED: ${message}`);
|
||||
throw message;
|
||||
}
|
||||
}
|
||||
|
||||
print("=== Testing Process Management Functions ===");
|
||||
|
||||
// Test process_list function
|
||||
print("Testing process_list() function...");
|
||||
let all_processes = process_list("");
|
||||
assert_true(all_processes.len() > 0, "There should be at least one running process");
|
||||
print(`✓ process_list(): Found ${all_processes.len()} processes`);
|
||||
|
||||
// Test process properties
|
||||
print("Testing process properties...");
|
||||
let first_process = all_processes[0];
|
||||
assert_true(first_process.pid > 0, "Process PID should be a positive number");
|
||||
assert_true(first_process.name.len() > 0, "Process name should not be empty");
|
||||
print(`✓ Process properties: PID=${first_process.pid}, Name=${first_process.name}, CPU=${first_process.cpu}%, Memory=${first_process.memory}`);
|
||||
|
||||
// Test process_list with a pattern
|
||||
print("Testing process_list() with a pattern...");
|
||||
// Use a pattern that's likely to match at least one process on most systems
|
||||
let pattern = "sh";
|
||||
let matching_processes = process_list(pattern);
|
||||
print(`Found ${matching_processes.len()} processes matching '${pattern}'`);
|
||||
if (matching_processes.len() > 0) {
|
||||
let matched_process = matching_processes[0];
|
||||
print(`✓ process_list(pattern): Found process ${matched_process.name} with PID ${matched_process.pid}`);
|
||||
} else {
|
||||
print(`Note: No processes found matching '${pattern}'. This is not necessarily an error.`);
|
||||
}
|
||||
|
||||
// Test process_get function
|
||||
// Note: We'll only test this if we found matching processes above
|
||||
if (matching_processes.len() == 1) {
|
||||
print("Testing process_get() function...");
|
||||
let process = process_get(pattern);
|
||||
assert_true(process.pid > 0, "Process PID should be a positive number");
|
||||
assert_true(process.name.contains(pattern), "Process name should contain the pattern");
|
||||
print(`✓ process_get(): Found process ${process.name} with PID ${process.pid}`);
|
||||
} else {
|
||||
print("Skipping process_get() test as it requires exactly one matching process");
|
||||
}
|
||||
|
||||
// Note: We won't test the kill function as it could disrupt the system
|
||||
|
||||
print("All process management tests completed successfully!");
|
76
src/rhai_tests/process/run_all_tests.rhai
Normal file
76
src/rhai_tests/process/run_all_tests.rhai
Normal file
@ -0,0 +1,76 @@
|
||||
// run_all_tests.rhai
|
||||
// Runs all Process module tests
|
||||
|
||||
print("=== Running Process Module Tests ===");
|
||||
|
||||
// Custom assert function
|
||||
fn assert_true(condition, message) {
|
||||
if !condition {
|
||||
print(`ASSERTION FAILED: ${message}`);
|
||||
throw message;
|
||||
}
|
||||
}
|
||||
|
||||
// Run each test directly
|
||||
let passed = 0;
|
||||
let failed = 0;
|
||||
|
||||
// Test 1: Command Execution
|
||||
print("\n--- Running Command Execution Tests ---");
|
||||
try {
|
||||
// Test running a simple command
|
||||
print("Testing run() with a simple command...");
|
||||
let result = run("echo Hello, World!").execute();
|
||||
assert_true(result.success, "Command should succeed");
|
||||
assert_true(result.stdout.contains("Hello, World!"), "Command output should contain the expected text");
|
||||
print(`✓ run().execute(): Command executed successfully`);
|
||||
|
||||
// Test which function
|
||||
print("Testing which() function...");
|
||||
let bash_path = which("bash");
|
||||
assert_true(bash_path != "", "bash should be found in PATH");
|
||||
print(`✓ which(): Found bash at ${bash_path}`);
|
||||
|
||||
print("--- Command Execution Tests completed successfully ---");
|
||||
passed += 1;
|
||||
} catch(err) {
|
||||
print(`!!! Error in Command Execution Tests: ${err}`);
|
||||
failed += 1;
|
||||
}
|
||||
|
||||
// Test 2: Process Management
|
||||
print("\n--- Running Process Management Tests ---");
|
||||
try {
|
||||
// Test process_list function
|
||||
print("Testing process_list() function...");
|
||||
let all_processes = process_list("");
|
||||
assert_true(all_processes.len() > 0, "There should be at least one running process");
|
||||
print(`✓ process_list(): Found ${all_processes.len()} processes`);
|
||||
|
||||
// Test process properties
|
||||
print("Testing process properties...");
|
||||
let first_process = all_processes[0];
|
||||
assert_true(first_process.pid > 0, "Process PID should be a positive number");
|
||||
assert_true(first_process.name.len() > 0, "Process name should not be empty");
|
||||
print(`✓ Process properties: PID=${first_process.pid}, Name=${first_process.name}`);
|
||||
|
||||
print("--- Process Management Tests completed successfully ---");
|
||||
passed += 1;
|
||||
} catch(err) {
|
||||
print(`!!! Error in Process Management Tests: ${err}`);
|
||||
failed += 1;
|
||||
}
|
||||
|
||||
print("\n=== Test Summary ===");
|
||||
print(`Passed: ${passed}`);
|
||||
print(`Failed: ${failed}`);
|
||||
print(`Total: ${passed + failed}`);
|
||||
|
||||
if failed == 0 {
|
||||
print("\n✅ All tests passed!");
|
||||
} else {
|
||||
print("\n❌ Some tests failed!");
|
||||
}
|
||||
|
||||
// Return the number of failed tests (0 means success)
|
||||
failed;
|
Loading…
Reference in New Issue
Block a user