- Added documentation for Nerdctl module tests, detailing test structure, running instructions, and individual test cases. - Added documentation for RFS module tests, covering test structure, running instructions, and individual test cases. These tests verify remote filesystem operations and filesystem layer management.
169 lines
5.4 KiB
Plaintext
169 lines
5.4 KiB
Plaintext
// 02_image_operations.rhai
|
|
// Tests for Nerdctl image operations
|
|
|
|
// Custom assert function
|
|
fn assert_true(condition, message) {
|
|
if !condition {
|
|
print(`ASSERTION FAILED: ${message}`);
|
|
throw message;
|
|
}
|
|
}
|
|
|
|
// Custom assert_eq function
|
|
fn assert_eq(actual, expected, message) {
|
|
if actual != expected {
|
|
print(`ASSERTION FAILED: ${message}`);
|
|
print(`Expected: "${expected}"`);
|
|
print(`Actual: "${actual}"`);
|
|
throw message;
|
|
}
|
|
}
|
|
|
|
// Helper function to check if nerdctl is available
|
|
fn is_nerdctl_available() {
|
|
try {
|
|
let result = run("which nerdctl");
|
|
return result.success;
|
|
} catch(err) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Helper function to check if an image exists
|
|
fn image_exists(image_name) {
|
|
try {
|
|
let result = run(`nerdctl images -q ${image_name}`);
|
|
return result.success && result.stdout.trim() != "";
|
|
} catch(err) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Helper function to clean up an image if it exists
|
|
fn cleanup_image(image_name) {
|
|
if image_exists(image_name) {
|
|
try {
|
|
run(`nerdctl rmi ${image_name}`);
|
|
print(`Cleaned up image: ${image_name}`);
|
|
} catch(err) {
|
|
print(`Error cleaning up image ${image_name}: ${err}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
print("=== Testing Nerdctl Image Operations ===");
|
|
|
|
// Check if nerdctl is available
|
|
let nerdctl_available = is_nerdctl_available();
|
|
if !nerdctl_available {
|
|
print("nerdctl is not available. Skipping Nerdctl tests.");
|
|
// Exit gracefully without error
|
|
return;
|
|
}
|
|
|
|
print("✓ nerdctl is available");
|
|
|
|
// Create a temporary directory for testing
|
|
let test_dir = "rhai_test_nerdctl";
|
|
mkdir(test_dir);
|
|
|
|
try {
|
|
// Test pulling an image
|
|
print("Testing nerdctl_image_pull()...");
|
|
// Use a small image for testing
|
|
let pull_result = nerdctl_image_pull("alpine:latest");
|
|
assert_true(pull_result.success, "Image pull should succeed");
|
|
print("✓ nerdctl_image_pull(): Image pulled successfully");
|
|
|
|
// Test listing images
|
|
print("Testing nerdctl_images()...");
|
|
let images_result = nerdctl_images();
|
|
assert_true(images_result.success, "Image listing should succeed");
|
|
assert_true(images_result.stdout.contains("alpine"), "Image list should contain alpine");
|
|
print("✓ nerdctl_images(): Images listed successfully");
|
|
|
|
// Test tagging an image
|
|
print("Testing nerdctl_image_tag()...");
|
|
let tag_result = nerdctl_image_tag("alpine:latest", "rhai_test_image:latest");
|
|
assert_true(tag_result.success, "Image tag should succeed");
|
|
print("✓ nerdctl_image_tag(): Image tagged successfully");
|
|
|
|
// Test building an image
|
|
print("Testing nerdctl_image_build()...");
|
|
|
|
// Create a simple Dockerfile
|
|
let dockerfile_content = `FROM alpine:latest
|
|
RUN echo "Hello from Dockerfile" > /hello.txt
|
|
CMD ["cat", "/hello.txt"]
|
|
`;
|
|
file_write(`${test_dir}/Dockerfile`, dockerfile_content);
|
|
|
|
// Build the image
|
|
let build_result = nerdctl_image_build("rhai_test_build:latest", test_dir);
|
|
assert_true(build_result.success, "Image build should succeed");
|
|
print("✓ nerdctl_image_build(): Image built successfully");
|
|
|
|
// Test running a container from the built image
|
|
print("Testing container from built image...");
|
|
let container_name = "rhai_test_container_from_build";
|
|
|
|
// Clean up any existing container with the same name
|
|
try {
|
|
run(`nerdctl stop ${container_name}`);
|
|
run(`nerdctl rm ${container_name}`);
|
|
} catch(e) {
|
|
// Ignore errors during cleanup
|
|
}
|
|
|
|
// Run the container
|
|
let run_result = nerdctl_run_with_name("rhai_test_build:latest", container_name);
|
|
assert_true(run_result.success, "Container run should succeed");
|
|
assert_true(run_result.stdout.contains("Hello from Dockerfile"), "Container output should contain expected text");
|
|
print("✓ Container from built image ran successfully");
|
|
|
|
// Clean up the container
|
|
let stop_result = nerdctl_stop(container_name);
|
|
assert_true(stop_result.success, "Container stop should succeed");
|
|
let remove_result = nerdctl_remove(container_name);
|
|
assert_true(remove_result.success, "Container remove should succeed");
|
|
print("✓ Cleanup: Container removed");
|
|
|
|
// Test removing images
|
|
print("Testing nerdctl_image_remove()...");
|
|
|
|
// Remove the tagged image
|
|
let remove_tag_result = nerdctl_image_remove("rhai_test_image:latest");
|
|
assert_true(remove_tag_result.success, "Image removal should succeed");
|
|
print("✓ nerdctl_image_remove(): Tagged image removed successfully");
|
|
|
|
// Remove the built image
|
|
let remove_build_result = nerdctl_image_remove("rhai_test_build:latest");
|
|
assert_true(remove_build_result.success, "Image removal should succeed");
|
|
print("✓ nerdctl_image_remove(): Built image removed successfully");
|
|
|
|
print("All image operations tests completed successfully!");
|
|
} catch(err) {
|
|
print(`Error: ${err}`);
|
|
|
|
// Clean up in case of error
|
|
try {
|
|
run("nerdctl stop rhai_test_container_from_build");
|
|
run("nerdctl rm rhai_test_container_from_build");
|
|
} catch(e) {
|
|
// Ignore errors during cleanup
|
|
}
|
|
|
|
try {
|
|
cleanup_image("rhai_test_image:latest");
|
|
cleanup_image("rhai_test_build:latest");
|
|
} catch(e) {
|
|
// Ignore errors during cleanup
|
|
}
|
|
|
|
throw err;
|
|
} finally {
|
|
// Clean up test directory
|
|
delete(test_dir);
|
|
print("✓ Cleanup: Test directory removed");
|
|
}
|