Solved multiple Buildah-related issues in the Buildah SAL + fixed test suite for Buildah
This commit is contained in:
@@ -22,7 +22,8 @@ fn assert_eq(actual, expected, message) {
|
||||
// Helper function to check if buildah is available
|
||||
fn is_buildah_available() {
|
||||
try {
|
||||
let result = run("which buildah");
|
||||
let command = run("which buildah");
|
||||
let result = command.execute();
|
||||
return result.success;
|
||||
} catch(err) {
|
||||
return false;
|
||||
@@ -121,7 +122,7 @@ try {
|
||||
// Test committing to an image
|
||||
print("Testing commit()...");
|
||||
let image_name = "rhai_test_image:latest";
|
||||
builder.commit(image_name);
|
||||
builder.commit(image_name, []);
|
||||
print("✓ commit(): Container committed to image successfully");
|
||||
|
||||
// Test removing the container
|
||||
@@ -154,19 +155,21 @@ try {
|
||||
// Clean up in case of error
|
||||
try {
|
||||
// Remove test container if it exists
|
||||
run("buildah rm rhai_test_container");
|
||||
} catch(_) {}
|
||||
let command = run("buildah rm rhai_test_container");
|
||||
command.execute();
|
||||
} catch(err) {}
|
||||
|
||||
try {
|
||||
// Remove test image if it exists
|
||||
run("buildah rmi rhai_test_image:latest");
|
||||
} catch(_) {}
|
||||
let command = run("buildah rmi alpine");
|
||||
command.execute();
|
||||
} catch(err) {}
|
||||
|
||||
try {
|
||||
// Remove test files if they exist
|
||||
delete("test_add_file.txt");
|
||||
delete("test_copy_file.txt");
|
||||
} catch(_) {}
|
||||
} catch(err) {}
|
||||
|
||||
throw err;
|
||||
}
|
||||
|
@@ -22,7 +22,8 @@ fn assert_eq(actual, expected, message) {
|
||||
// Helper function to check if buildah is available
|
||||
fn is_buildah_available() {
|
||||
try {
|
||||
let result = run("which buildah");
|
||||
let command = run("which buildah");
|
||||
let result = command.execute();
|
||||
return result.success;
|
||||
} catch(err) {
|
||||
return false;
|
||||
@@ -32,8 +33,18 @@ fn is_buildah_available() {
|
||||
// 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() != "";
|
||||
// First, check for the exact image name
|
||||
let command = run(`buildah images -q ${image_name}`);
|
||||
let result = command.execute();
|
||||
if result.success && result.stdout.trim() != "" {
|
||||
return true;
|
||||
}
|
||||
|
||||
// If not found, check for the localhost-prefixed version
|
||||
let prefixed_image_name = `localhost/${image_name}`;
|
||||
let command = run(`buildah images -q ${prefixed_image_name}`);
|
||||
let result_prefixed = command.execute();
|
||||
return result_prefixed.success && result_prefixed.stdout.trim() != "";
|
||||
} catch(err) {
|
||||
return false;
|
||||
}
|
||||
@@ -82,8 +93,10 @@ try {
|
||||
|
||||
// Find our tagged image
|
||||
let found_tag = false;
|
||||
let expected_tag = "rhai_test_tag:latest";
|
||||
for image in images {
|
||||
if image.names.contains("rhai_test_tag:latest") {
|
||||
// The tag might be prefixed with 'localhost/' if no registry is specified.
|
||||
if image.names.contains(expected_tag) || image.names.contains("localhost/" + expected_tag) {
|
||||
found_tag = true;
|
||||
break;
|
||||
}
|
||||
@@ -95,10 +108,11 @@ try {
|
||||
print("Testing build()...");
|
||||
|
||||
// Create a simple Dockerfile
|
||||
let dockerfile_content = `FROM alpine:latest
|
||||
RUN echo "Hello from Dockerfile" > /hello.txt
|
||||
CMD ["cat", "/hello.txt"]
|
||||
`;
|
||||
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
|
||||
@@ -133,18 +147,23 @@ CMD ["cat", "/hello.txt"]
|
||||
// Clean up in case of error
|
||||
try {
|
||||
// Remove test container if it exists
|
||||
run("buildah rm rhai_test_container");
|
||||
} catch(_) {}
|
||||
let command = run("buildah rm rhai_test_container");
|
||||
command.execute();
|
||||
} catch(err) {}
|
||||
|
||||
try {
|
||||
// Remove test images if they exist
|
||||
run("buildah rmi rhai_test_tag:latest");
|
||||
run("buildah rmi rhai_test_build:latest");
|
||||
} catch(_) {}
|
||||
let command = run("buildah rmi rhai_test_tag:latest");
|
||||
command.execute();
|
||||
let command = run("buildah rmi rhai_test_build:latest");
|
||||
command.execute();
|
||||
} catch(err) {}
|
||||
|
||||
try {
|
||||
// Remove test directory if it exists
|
||||
delete(test_dir);
|
||||
print("✓ Cleanup: Test directory removed");
|
||||
} catch (err) {}
|
||||
|
||||
throw err;
|
||||
} finally {
|
||||
// Clean up test directory
|
||||
delete(test_dir);
|
||||
print("✓ Cleanup: Test directory removed");
|
||||
}
|
||||
|
@@ -22,7 +22,8 @@ fn assert_eq(actual, expected, message) {
|
||||
// Helper function to check if buildah is available
|
||||
fn is_buildah_available() {
|
||||
try {
|
||||
let result = run("which buildah");
|
||||
let command = run("which buildah");
|
||||
let result = command.execute();
|
||||
return result.success;
|
||||
} catch(err) {
|
||||
return false;
|
||||
@@ -59,10 +60,12 @@ try {
|
||||
|
||||
// Test config
|
||||
print("Testing config()...");
|
||||
let config_options = #{
|
||||
"LABEL": "rhai_test=true",
|
||||
"ENV": "TEST_VAR=test_value"
|
||||
};
|
||||
let config_options = [
|
||||
["label", "rhai_test_true"],
|
||||
["env", "TEST_VAR=test_value"],
|
||||
["env", "ANOTHER_VAR=another_value"],
|
||||
["author", "Rhai Test With Spaces"]
|
||||
];
|
||||
builder.config(config_options);
|
||||
print("✓ config(): Container configured successfully");
|
||||
|
||||
@@ -77,9 +80,10 @@ try {
|
||||
print("Testing content operations...");
|
||||
|
||||
// Write content to a file
|
||||
let script_content = `#!/bin/sh
|
||||
echo "Hello from script"
|
||||
`;
|
||||
let script_content = `
|
||||
#!/bin/sh
|
||||
echo "Hello from script"
|
||||
`;
|
||||
builder.write_content(script_content, "/script.sh");
|
||||
|
||||
// Make the script executable
|
||||
@@ -91,14 +95,10 @@ echo "Hello from script"
|
||||
assert_true(script_result.stdout.contains("Hello from script"), "Script output should contain expected text");
|
||||
print("✓ Content operations: Script created and executed successfully");
|
||||
|
||||
// Test commit with config
|
||||
print("Testing commit with config...");
|
||||
let commit_options = #{
|
||||
"author": "Rhai Test",
|
||||
"message": "Test commit"
|
||||
};
|
||||
builder.commit("rhai_test_commit:latest", commit_options);
|
||||
print("✓ commit(): Container committed with config successfully");
|
||||
// Test commit
|
||||
print("Testing commit...");
|
||||
builder.commit("rhai_test_commit:latest", [["q", ""]]);
|
||||
print("✓ commit(): Container committed successfully");
|
||||
|
||||
// Clean up
|
||||
builder.remove();
|
||||
@@ -115,13 +115,15 @@ echo "Hello from script"
|
||||
// Clean up in case of error
|
||||
try {
|
||||
// Remove test container if it exists
|
||||
run("buildah rm rhai_test_container");
|
||||
} catch(_) {}
|
||||
let command = run("buildah rm rhai_test_container");
|
||||
command.execute();
|
||||
} catch(err) {}
|
||||
|
||||
try {
|
||||
// Remove test image if it exists
|
||||
run("buildah rmi rhai_test_commit:latest");
|
||||
} catch(_) {}
|
||||
let command = run("buildah rmi rhai_test_commit:latest");
|
||||
command.execute();
|
||||
} catch(err) {}
|
||||
|
||||
throw err;
|
||||
}
|
||||
|
@@ -1,155 +0,0 @@
|
||||
// run_all_tests.rhai
|
||||
// Runs all Buildah module tests
|
||||
|
||||
print("=== Running Buildah Module Tests ===");
|
||||
|
||||
// Custom assert function
|
||||
fn assert_true(condition, message) {
|
||||
if !condition {
|
||||
print(`ASSERTION FAILED: ${message}`);
|
||||
throw message;
|
||||
}
|
||||
}
|
||||
|
||||
// Helper function to check if buildah is available
|
||||
fn is_buildah_available() {
|
||||
try {
|
||||
let result = run("which buildah");
|
||||
return result.success;
|
||||
} catch(e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Run each test directly
|
||||
let passed = 0;
|
||||
let failed = 0;
|
||||
let skipped = 0;
|
||||
let total = 0;
|
||||
|
||||
// Check if buildah is available
|
||||
let buildah_available = is_buildah_available();
|
||||
if !buildah_available {
|
||||
print("Buildah is not available. Skipping all Buildah tests.");
|
||||
skipped = 3; // Skip all three tests
|
||||
total = 3;
|
||||
} else {
|
||||
// Test 1: Builder Pattern
|
||||
print("\n--- Running Builder Pattern Tests ---");
|
||||
try {
|
||||
// Create a builder
|
||||
let builder = bah_new("rhai_test_container", "alpine:latest");
|
||||
|
||||
// Test basic properties
|
||||
assert_true(builder.container_id != "", "Container ID should not be empty");
|
||||
assert_true(builder.name == "rhai_test_container", "Container name should match");
|
||||
|
||||
// Run a simple command
|
||||
let result = builder.run("echo 'Hello from container'");
|
||||
assert_true(result.success, "Command should succeed");
|
||||
|
||||
// Clean up
|
||||
builder.remove();
|
||||
|
||||
print("--- Builder Pattern Tests completed successfully ---");
|
||||
passed += 1;
|
||||
} catch(err) {
|
||||
print(`!!! Error in Builder Pattern Tests: ${err}`);
|
||||
failed += 1;
|
||||
|
||||
// Clean up in case of error
|
||||
try {
|
||||
run("buildah rm rhai_test_container");
|
||||
} catch(e) {
|
||||
// Ignore errors during cleanup
|
||||
}
|
||||
}
|
||||
total += 1;
|
||||
|
||||
// Test 2: Image Operations
|
||||
print("\n--- Running Image Operations Tests ---");
|
||||
try {
|
||||
// Create a temporary directory for testing
|
||||
let test_dir = "rhai_test_buildah";
|
||||
mkdir(test_dir);
|
||||
|
||||
// Create a builder
|
||||
let builder = bah_new("rhai_test_container", "alpine:latest");
|
||||
|
||||
// List images
|
||||
let images = builder.images();
|
||||
assert_true(images.len() > 0, "There should be at least one image");
|
||||
|
||||
// Clean up
|
||||
builder.remove();
|
||||
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 {
|
||||
run("buildah rm rhai_test_container");
|
||||
delete("rhai_test_buildah");
|
||||
} catch(e) {
|
||||
// Ignore errors during cleanup
|
||||
}
|
||||
}
|
||||
total += 1;
|
||||
|
||||
// Test 3: Container Operations
|
||||
print("\n--- Running Container Operations Tests ---");
|
||||
try {
|
||||
// Create a builder
|
||||
let builder = bah_new("rhai_test_container", "alpine:latest");
|
||||
|
||||
// Test reset
|
||||
builder.reset();
|
||||
|
||||
// Create a new container
|
||||
builder = bah_new("rhai_test_container", "alpine:latest");
|
||||
|
||||
// Run a command
|
||||
let result = builder.run("echo 'Hello from container'");
|
||||
assert_true(result.success, "Command should succeed");
|
||||
|
||||
// Clean up
|
||||
builder.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
|
||||
try {
|
||||
run("buildah rm rhai_test_container");
|
||||
} 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;
|
Reference in New Issue
Block a user