184 lines
5.1 KiB
Plaintext
184 lines
5.1 KiB
Plaintext
// run_all_tests.rhai
|
||
// Runs all Nerdctl module tests
|
||
|
||
print("=== Running Nerdctl Module Tests ===");
|
||
|
||
// Custom assert function
|
||
fn assert_true(condition, message) {
|
||
if !condition {
|
||
print(`ASSERTION FAILED: ${message}`);
|
||
throw message;
|
||
}
|
||
}
|
||
|
||
// Helper function to check if nerdctl is available
|
||
fn is_nerdctl_available() {
|
||
try {
|
||
let result = run("which nerdctl");
|
||
return result.success;
|
||
} catch(e) {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
// Helper function to clean up a container if it exists
|
||
fn cleanup_container(container_name) {
|
||
try {
|
||
run(`nerdctl stop ${container_name}`);
|
||
run(`nerdctl rm ${container_name}`);
|
||
} catch(e) {
|
||
// Ignore errors during cleanup
|
||
}
|
||
}
|
||
|
||
// Run each test directly
|
||
let passed = 0;
|
||
let failed = 0;
|
||
let skipped = 0;
|
||
let total = 0;
|
||
|
||
// Check if nerdctl is available
|
||
let nerdctl_available = is_nerdctl_available();
|
||
if !nerdctl_available {
|
||
print("nerdctl is not available. Skipping all Nerdctl tests.");
|
||
skipped = 3; // Skip all three tests
|
||
total = 3;
|
||
} else {
|
||
// Test 1: Container Operations
|
||
print("\n--- Running Container Operations Tests ---");
|
||
try {
|
||
// Define test container name
|
||
let container_name = "rhai_test_container";
|
||
|
||
// Clean up any existing test container
|
||
cleanup_container(container_name);
|
||
|
||
// Create a new Container
|
||
let container = nerdctl_container_new(container_name);
|
||
|
||
// Set container image
|
||
container.with_image("alpine:latest");
|
||
|
||
// Set detach mode
|
||
container.with_detach(true);
|
||
|
||
// Run the container
|
||
let run_result = container.run();
|
||
assert_true(run_result.success, "Container run should succeed");
|
||
|
||
// Execute a command in the container
|
||
let exec_result = container.exec("echo 'Hello from container'");
|
||
assert_true(exec_result.success, "Container exec should succeed");
|
||
|
||
// Clean up
|
||
container.stop();
|
||
container.remove();
|
||
|
||
print("--- Container Operations Tests completed successfully ---");
|
||
passed += 1;
|
||
} catch(err) {
|
||
print(`!!! Error in Container Operations Tests: ${err}`);
|
||
failed += 1;
|
||
|
||
// Clean up in case of error
|
||
cleanup_container("rhai_test_container");
|
||
}
|
||
total += 1;
|
||
|
||
// Test 2: Image Operations
|
||
print("\n--- Running Image Operations Tests ---");
|
||
try {
|
||
// Create a temporary directory for testing
|
||
let test_dir = "rhai_test_nerdctl";
|
||
mkdir(test_dir);
|
||
|
||
// Pull a small image for testing
|
||
let pull_result = nerdctl_image_pull("alpine:latest");
|
||
assert_true(pull_result.success, "Image pull should succeed");
|
||
|
||
// List images
|
||
let images_result = nerdctl_images();
|
||
assert_true(images_result.success, "Image listing should succeed");
|
||
|
||
// Clean up
|
||
delete(test_dir);
|
||
|
||
print("--- Image Operations Tests completed successfully ---");
|
||
passed += 1;
|
||
} catch(err) {
|
||
print(`!!! Error in Image Operations Tests: ${err}`);
|
||
failed += 1;
|
||
|
||
// Clean up in case of error
|
||
try {
|
||
delete("rhai_test_nerdctl");
|
||
} catch(e) {
|
||
// Ignore errors during cleanup
|
||
}
|
||
}
|
||
total += 1;
|
||
|
||
// Test 3: Container Builder Pattern
|
||
print("\n--- Running Container Builder Pattern Tests ---");
|
||
try {
|
||
// Define test container name
|
||
let container_name = "rhai_test_builder";
|
||
|
||
// Clean up any existing test container
|
||
cleanup_container(container_name);
|
||
|
||
// Create test directory
|
||
let work_dir = "rhai_test_nerdctl_work";
|
||
mkdir(work_dir);
|
||
|
||
// Create a container with builder pattern
|
||
let container = nerdctl_container_from_image(container_name, "alpine:latest")
|
||
.reset()
|
||
.with_detach(true)
|
||
.with_volumes([`${work_dir}:/data`]);
|
||
|
||
// Run the container
|
||
let run_result = container.run();
|
||
assert_true(run_result.success, "Container run should succeed");
|
||
|
||
// Clean up
|
||
container.stop();
|
||
container.remove();
|
||
delete(work_dir);
|
||
|
||
print("--- Container Builder Pattern Tests completed successfully ---");
|
||
passed += 1;
|
||
} catch(err) {
|
||
print(`!!! Error in Container Builder Pattern Tests: ${err}`);
|
||
failed += 1;
|
||
|
||
// Clean up in case of error
|
||
cleanup_container("rhai_test_builder");
|
||
try {
|
||
delete("rhai_test_nerdctl_work");
|
||
} catch(e) {
|
||
// Ignore errors during cleanup
|
||
}
|
||
}
|
||
total += 1;
|
||
}
|
||
|
||
print("\n=== Test Summary ===");
|
||
print(`Passed: ${passed}`);
|
||
print(`Failed: ${failed}`);
|
||
print(`Skipped: ${skipped}`);
|
||
print(`Total: ${total}`);
|
||
|
||
if failed == 0 {
|
||
if skipped > 0 {
|
||
print("\n⚠️ All tests skipped or passed!");
|
||
} else {
|
||
print("\n✅ All tests passed!");
|
||
}
|
||
} else {
|
||
print("\n❌ Some tests failed!");
|
||
}
|
||
|
||
// Return the number of failed tests (0 means success)
|
||
failed;
|