- Added comprehensive test suite for Buildah module functionality. - Included tests for Builder pattern, image operations, and container operations. - Added documentation describing test structure, execution, and details.
173 lines
5.7 KiB
Plaintext
173 lines
5.7 KiB
Plaintext
// 01_builder_pattern.rhai
|
|
// Tests for Buildah Builder pattern
|
|
|
|
// 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;
|
|
}
|
|
}
|
|
|
|
print("=== Testing Buildah Builder Pattern ===");
|
|
|
|
// 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");
|
|
|
|
// Test creating a new Builder
|
|
print("Testing bah_new()...");
|
|
try {
|
|
let builder = bah_new("rhai_test_container", "alpine:latest");
|
|
|
|
// Test Builder properties
|
|
print("Testing Builder properties...");
|
|
assert_true(builder.container_id != "", "Container ID should not be empty");
|
|
assert_eq(builder.name, "rhai_test_container", "Container name should match");
|
|
assert_eq(builder.image, "alpine:latest", "Image name should match");
|
|
|
|
// Test debug mode
|
|
print("Testing debug mode...");
|
|
assert_true(!builder.debug_mode, "Debug mode should be off by default");
|
|
builder.debug_mode = true;
|
|
assert_true(builder.debug_mode, "Debug mode should be on after setting");
|
|
|
|
// Test running a command
|
|
print("Testing run()...");
|
|
let result = builder.run("echo 'Hello from container'");
|
|
assert_true(result.success, "Command should succeed");
|
|
assert_true(result.stdout.contains("Hello from container"), "Command output should contain expected text");
|
|
print("✓ run(): Command executed successfully");
|
|
|
|
// Test writing content to a file in the container
|
|
print("Testing write_content()...");
|
|
let content = "Hello from a file";
|
|
builder.write_content(content, "/test_file.txt");
|
|
|
|
// Verify the content was written
|
|
let read_result = builder.run("cat /test_file.txt");
|
|
assert_true(read_result.success, "Command should succeed");
|
|
assert_true(read_result.stdout.contains(content), "File content should match what was written");
|
|
print("✓ write_content(): Content written successfully");
|
|
|
|
// Test reading content from a file in the container
|
|
print("Testing read_content()...");
|
|
let read_content = builder.read_content("/test_file.txt");
|
|
assert_true(read_content.contains(content), "Read content should match what was written");
|
|
print("✓ read_content(): Content read successfully");
|
|
|
|
// Test setting entrypoint
|
|
print("Testing set_entrypoint()...");
|
|
let entrypoint = ["/bin/sh", "-c"];
|
|
builder.set_entrypoint(entrypoint);
|
|
print("✓ set_entrypoint(): Entrypoint set successfully");
|
|
|
|
// Test setting cmd
|
|
print("Testing set_cmd()...");
|
|
let cmd = ["echo", "Hello from CMD"];
|
|
builder.set_cmd(cmd);
|
|
print("✓ set_cmd(): CMD set successfully");
|
|
|
|
// Test adding a file
|
|
print("Testing add()...");
|
|
// Create a test file
|
|
file_write("test_add_file.txt", "Test content for add");
|
|
builder.add("test_add_file.txt", "/");
|
|
|
|
// Verify the file was added
|
|
let add_result = builder.run("cat /test_add_file.txt");
|
|
assert_true(add_result.success, "Command should succeed");
|
|
assert_true(add_result.stdout.contains("Test content for add"), "Added file content should match");
|
|
print("✓ add(): File added successfully");
|
|
|
|
// Test copying a file
|
|
print("Testing copy()...");
|
|
// Create a test file
|
|
file_write("test_copy_file.txt", "Test content for copy");
|
|
builder.copy("test_copy_file.txt", "/");
|
|
|
|
// Verify the file was copied
|
|
let copy_result = builder.run("cat /test_copy_file.txt");
|
|
assert_true(copy_result.success, "Command should succeed");
|
|
assert_true(copy_result.stdout.contains("Test content for copy"), "Copied file content should match");
|
|
print("✓ copy(): File copied successfully");
|
|
|
|
// Test committing to an image
|
|
print("Testing commit()...");
|
|
let image_name = "rhai_test_image:latest";
|
|
builder.commit(image_name);
|
|
print("✓ commit(): Container committed to image successfully");
|
|
|
|
// Test removing the container
|
|
print("Testing remove()...");
|
|
builder.remove();
|
|
print("✓ remove(): Container removed successfully");
|
|
|
|
// Clean up test files
|
|
delete("test_add_file.txt");
|
|
delete("test_copy_file.txt");
|
|
|
|
// Test image operations
|
|
print("Testing image operations...");
|
|
|
|
// Test listing images
|
|
print("Testing images()...");
|
|
let images = builder.images();
|
|
assert_true(images.len() > 0, "There should be at least one image");
|
|
print("✓ images(): Images listed successfully");
|
|
|
|
// Test removing the image
|
|
print("Testing image_remove()...");
|
|
builder.image_remove(image_name);
|
|
print("✓ image_remove(): Image removed successfully");
|
|
|
|
print("All Builder pattern 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 image if it exists
|
|
run("buildah rmi rhai_test_image:latest");
|
|
} catch(_) {}
|
|
|
|
try {
|
|
// Remove test files if they exist
|
|
delete("test_add_file.txt");
|
|
delete("test_copy_file.txt");
|
|
} catch(_) {}
|
|
|
|
throw err;
|
|
}
|