151 lines
4.4 KiB
Plaintext
151 lines
4.4 KiB
Plaintext
// 02_image_operations.rhai
|
|
// Tests for Buildah 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 buildah is available
|
|
fn is_buildah_available() {
|
|
try {
|
|
let result = run("which buildah");
|
|
return result.success;
|
|
} catch(err) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Helper function to check if an image exists
|
|
fn image_exists(image_name) {
|
|
try {
|
|
let result = run(`buildah images -q ${image_name}`);
|
|
return result.success && result.stdout.trim() != "";
|
|
} catch(err) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
print("=== Testing Buildah Image Operations ===");
|
|
|
|
// Check if buildah is available
|
|
let buildah_available = is_buildah_available();
|
|
if !buildah_available {
|
|
print("Buildah is not available. Skipping Buildah tests.");
|
|
// Exit gracefully without error
|
|
return;
|
|
}
|
|
|
|
print("✓ Buildah is available");
|
|
|
|
// Create a temporary directory for testing
|
|
let test_dir = "rhai_test_buildah";
|
|
mkdir(test_dir);
|
|
|
|
try {
|
|
// Create a builder for testing
|
|
let builder = bah_new("rhai_test_container", "alpine:latest");
|
|
|
|
// Enable debug mode
|
|
builder.debug_mode = true;
|
|
|
|
// Test image_pull
|
|
print("Testing image_pull()...");
|
|
// Use a small image for testing
|
|
let pull_result = builder.image_pull("alpine:3.14", true);
|
|
assert_true(pull_result.success, "Image pull should succeed");
|
|
print("✓ image_pull(): Image pulled successfully");
|
|
|
|
// Test image_tag
|
|
print("Testing image_tag()...");
|
|
let tag_result = builder.image_tag("alpine:3.14", "rhai_test_tag:latest");
|
|
assert_true(tag_result.success, "Image tag should succeed");
|
|
print("✓ image_tag(): Image tagged successfully");
|
|
|
|
// Test images (list)
|
|
print("Testing images()...");
|
|
let images = builder.images();
|
|
assert_true(images.len() > 0, "There should be at least one image");
|
|
|
|
// Find our tagged image
|
|
let found_tag = false;
|
|
for image in images {
|
|
if image.names.contains("rhai_test_tag:latest") {
|
|
found_tag = true;
|
|
break;
|
|
}
|
|
}
|
|
assert_true(found_tag, "Tagged image should be in the list");
|
|
print("✓ images(): Images listed successfully");
|
|
|
|
// Test build
|
|
print("Testing 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 = builder.build("rhai_test_build:latest", test_dir, "Dockerfile", "oci");
|
|
assert_true(build_result.success, "Image build should succeed");
|
|
print("✓ build(): Image built successfully");
|
|
|
|
// Verify the built image exists
|
|
assert_true(image_exists("rhai_test_build:latest"), "Built image should exist");
|
|
|
|
// Test image_remove
|
|
print("Testing image_remove()...");
|
|
|
|
// Remove the tagged image
|
|
let remove_tag_result = builder.image_remove("rhai_test_tag:latest");
|
|
assert_true(remove_tag_result.success, "Image removal should succeed");
|
|
print("✓ image_remove(): Tagged image removed successfully");
|
|
|
|
// Remove the built image
|
|
let remove_build_result = builder.image_remove("rhai_test_build:latest");
|
|
assert_true(remove_build_result.success, "Image removal should succeed");
|
|
print("✓ image_remove(): Built image removed successfully");
|
|
|
|
// Clean up
|
|
builder.remove();
|
|
print("✓ Cleanup: Container removed");
|
|
|
|
print("All image operations tests completed successfully!");
|
|
} catch(err) {
|
|
print(`Error: ${err}`);
|
|
|
|
// Clean up in case of error
|
|
try {
|
|
// Remove test container if it exists
|
|
run("buildah rm rhai_test_container");
|
|
} catch(_) {}
|
|
|
|
try {
|
|
// Remove test images if they exist
|
|
run("buildah rmi rhai_test_tag:latest");
|
|
run("buildah rmi rhai_test_build:latest");
|
|
} catch(_) {}
|
|
|
|
throw err;
|
|
} finally {
|
|
// Clean up test directory
|
|
delete(test_dir);
|
|
print("✓ Cleanup: Test directory removed");
|
|
}
|