- Add comprehensive testing instructions to README. - Improve error handling in examples to prevent crashes. - Enhance launchctl error handling for production safety. - Improve zinit error handling for production safety. - Remove obsolete plan_to_fix.md file. - Update Rhai integration tests for improved robustness. - Improve service manager creation on Linux with systemd fallback.
232 lines
6.5 KiB
Plaintext
232 lines
6.5 KiB
Plaintext
// Basic service manager functionality test script
|
|
// This script tests the REAL service manager through Rhai integration
|
|
|
|
print("=== Service Manager Basic Functionality Test ===");
|
|
|
|
// Test configuration
|
|
let test_service_name = "rhai-test-service";
|
|
let test_binary = "/bin/echo";
|
|
let test_args = ["Hello from Rhai service manager test"];
|
|
|
|
print(`Testing service: ${test_service_name}`);
|
|
print(`Binary: ${test_binary}`);
|
|
print(`Args: ${test_args}`);
|
|
|
|
// Test results tracking
|
|
let test_results = #{
|
|
creation: "NOT_RUN",
|
|
exists_before: "NOT_RUN",
|
|
start: "NOT_RUN",
|
|
exists_after: "NOT_RUN",
|
|
status: "NOT_RUN",
|
|
list: "NOT_RUN",
|
|
stop: "NOT_RUN",
|
|
remove: "NOT_RUN",
|
|
cleanup: "NOT_RUN"
|
|
};
|
|
|
|
let passed_tests = 0;
|
|
let total_tests = 0;
|
|
|
|
// Test 1: Service Manager Creation
|
|
print("\n1. Testing service manager creation...");
|
|
try {
|
|
let manager = create_service_manager();
|
|
print("✓ Service manager created successfully");
|
|
test_results["creation"] = "PASS";
|
|
passed_tests += 1;
|
|
total_tests += 1;
|
|
} catch(e) {
|
|
print(`✗ Service manager creation failed: ${e}`);
|
|
test_results["creation"] = "FAIL";
|
|
total_tests += 1;
|
|
// Return early if we can't create the manager
|
|
return test_results;
|
|
}
|
|
|
|
// Create the service manager for all subsequent tests
|
|
let manager = create_service_manager();
|
|
|
|
// Test 2: Check if service exists before creation
|
|
print("\n2. Testing service existence check (before creation)...");
|
|
try {
|
|
let exists_before = exists(manager, test_service_name);
|
|
print(`✓ Service existence check: ${exists_before}`);
|
|
|
|
if !exists_before {
|
|
print("✓ Service correctly doesn't exist before creation");
|
|
test_results["exists_before"] = "PASS";
|
|
passed_tests += 1;
|
|
} else {
|
|
print("⚠ Service unexpectedly exists before creation");
|
|
test_results["exists_before"] = "WARN";
|
|
}
|
|
total_tests += 1;
|
|
} catch(e) {
|
|
print(`✗ Service existence check failed: ${e}`);
|
|
test_results["exists_before"] = "FAIL";
|
|
total_tests += 1;
|
|
}
|
|
|
|
// Test 3: Start the service
|
|
print("\n3. Testing service start...");
|
|
try {
|
|
// Create a service configuration object
|
|
let service_config = #{
|
|
name: test_service_name,
|
|
binary_path: test_binary,
|
|
args: test_args,
|
|
working_directory: "/tmp",
|
|
environment: #{},
|
|
auto_restart: false
|
|
};
|
|
|
|
start(manager, service_config);
|
|
print("✓ Service started successfully");
|
|
test_results["start"] = "PASS";
|
|
passed_tests += 1;
|
|
total_tests += 1;
|
|
} catch(e) {
|
|
print(`✗ Service start failed: ${e}`);
|
|
test_results["start"] = "FAIL";
|
|
total_tests += 1;
|
|
}
|
|
|
|
// Test 4: Check if service exists after creation
|
|
print("\n4. Testing service existence check (after creation)...");
|
|
try {
|
|
let exists_after = exists(manager, test_service_name);
|
|
print(`✓ Service existence check: ${exists_after}`);
|
|
|
|
if exists_after {
|
|
print("✓ Service correctly exists after creation");
|
|
test_results["exists_after"] = "PASS";
|
|
passed_tests += 1;
|
|
} else {
|
|
print("✗ Service doesn't exist after creation");
|
|
test_results["exists_after"] = "FAIL";
|
|
}
|
|
total_tests += 1;
|
|
} catch(e) {
|
|
print(`✗ Service existence check failed: ${e}`);
|
|
test_results["exists_after"] = "FAIL";
|
|
total_tests += 1;
|
|
}
|
|
|
|
// Test 5: Check service status
|
|
print("\n5. Testing service status...");
|
|
try {
|
|
let service_status = status(manager, test_service_name);
|
|
print(`✓ Service status: ${service_status}`);
|
|
test_results["status"] = "PASS";
|
|
passed_tests += 1;
|
|
total_tests += 1;
|
|
} catch(e) {
|
|
print(`✗ Service status check failed: ${e}`);
|
|
test_results["status"] = "FAIL";
|
|
total_tests += 1;
|
|
}
|
|
|
|
// Test 6: List services
|
|
print("\n6. Testing service list...");
|
|
try {
|
|
let services = list(manager);
|
|
print(`✓ Service list retrieved (${services.len()} services)`);
|
|
|
|
// Check if our test service is in the list
|
|
let found_test_service = false;
|
|
for service in services {
|
|
if service.contains(test_service_name) {
|
|
found_test_service = true;
|
|
print(` ✓ Found test service: ${service}`);
|
|
break;
|
|
}
|
|
}
|
|
|
|
if found_test_service {
|
|
print("✓ Test service found in service list");
|
|
} else {
|
|
print("⚠ Test service not found in service list");
|
|
}
|
|
|
|
test_results["list"] = "PASS";
|
|
passed_tests += 1;
|
|
total_tests += 1;
|
|
} catch(e) {
|
|
print(`✗ Service list failed: ${e}`);
|
|
test_results["list"] = "FAIL";
|
|
total_tests += 1;
|
|
}
|
|
|
|
// Test 7: Stop the service
|
|
print("\n7. Testing service stop...");
|
|
try {
|
|
stop(manager, test_service_name);
|
|
print(`✓ Service stopped: ${test_service_name}`);
|
|
test_results["stop"] = "PASS";
|
|
passed_tests += 1;
|
|
total_tests += 1;
|
|
} catch(e) {
|
|
print(`✗ Service stop failed: ${e}`);
|
|
test_results["stop"] = "FAIL";
|
|
total_tests += 1;
|
|
}
|
|
|
|
// Test 8: Remove the service
|
|
print("\n8. Testing service remove...");
|
|
try {
|
|
remove(manager, test_service_name);
|
|
print(`✓ Service removed: ${test_service_name}`);
|
|
test_results["remove"] = "PASS";
|
|
passed_tests += 1;
|
|
total_tests += 1;
|
|
} catch(e) {
|
|
print(`✗ Service remove failed: ${e}`);
|
|
test_results["remove"] = "FAIL";
|
|
total_tests += 1;
|
|
}
|
|
|
|
// Test 9: Verify cleanup
|
|
print("\n9. Testing cleanup verification...");
|
|
try {
|
|
let exists_after_remove = exists(manager, test_service_name);
|
|
if !exists_after_remove {
|
|
print("✓ Service correctly doesn't exist after removal");
|
|
test_results["cleanup"] = "PASS";
|
|
passed_tests += 1;
|
|
} else {
|
|
print("✗ Service still exists after removal");
|
|
test_results["cleanup"] = "FAIL";
|
|
}
|
|
total_tests += 1;
|
|
} catch(e) {
|
|
print(`✗ Cleanup verification failed: ${e}`);
|
|
test_results["cleanup"] = "FAIL";
|
|
total_tests += 1;
|
|
}
|
|
|
|
// Test Summary
|
|
print("\n=== Test Summary ===");
|
|
print(`Total tests: ${total_tests}`);
|
|
print(`Passed: ${passed_tests}`);
|
|
print(`Failed: ${total_tests - passed_tests}`);
|
|
print(`Success rate: ${(passed_tests * 100) / total_tests}%`);
|
|
|
|
print("\nDetailed Results:");
|
|
for test_name in test_results.keys() {
|
|
let result = test_results[test_name];
|
|
let status_icon = if result == "PASS" { "✓" } else if result == "FAIL" { "✗" } else { "⚠" };
|
|
print(` ${status_icon} ${test_name}: ${result}`);
|
|
}
|
|
|
|
if passed_tests == total_tests {
|
|
print("\n🎉 All tests passed!");
|
|
} else {
|
|
print(`\n⚠ ${total_tests - passed_tests} test(s) failed`);
|
|
}
|
|
|
|
print("\n=== Service Manager Basic Test Complete ===");
|
|
|
|
// Return test results for potential use by calling code
|
|
test_results
|