- 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
4.5 KiB
Plaintext
169 lines
4.5 KiB
Plaintext
// run_all_tests.rhai
|
||
// Runs all RFS module tests
|
||
|
||
print("=== Running RFS Module Tests ===");
|
||
|
||
// Custom assert function
|
||
fn assert_true(condition, message) {
|
||
if !condition {
|
||
print(`ASSERTION FAILED: ${message}`);
|
||
throw message;
|
||
}
|
||
}
|
||
|
||
// Helper function to check if rfs is available
|
||
fn is_rfs_available() {
|
||
try {
|
||
let result = run("which rfs");
|
||
return result.success;
|
||
} catch(e) {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
// Helper function to clean up mounts
|
||
fn cleanup_mounts() {
|
||
try {
|
||
rfs_unmount_all();
|
||
} catch(e) {
|
||
// Ignore errors during cleanup
|
||
}
|
||
}
|
||
|
||
// Run each test directly
|
||
let passed = 0;
|
||
let failed = 0;
|
||
let skipped = 0;
|
||
let total = 0;
|
||
|
||
// Check if rfs is available
|
||
let rfs_available = is_rfs_available();
|
||
if !rfs_available {
|
||
print("rfs is not available. Skipping all RFS tests.");
|
||
skipped = 2; // Skip both tests
|
||
total = 2;
|
||
} else {
|
||
// Test 1: Mount Operations
|
||
print("\n--- Running Mount Operations Tests ---");
|
||
try {
|
||
// Clean up any existing mounts
|
||
cleanup_mounts();
|
||
|
||
// Create test directories
|
||
let source_dir = "rhai_test_rfs_source";
|
||
let target_dir = "rhai_test_rfs_target";
|
||
mkdir(source_dir);
|
||
mkdir(target_dir);
|
||
|
||
// Create a test file in the source directory
|
||
let test_file = `${source_dir}/test.txt`;
|
||
file_write(test_file, "Hello from RFS test");
|
||
|
||
// Mount the directory
|
||
let options = #{
|
||
"readonly": "true"
|
||
};
|
||
|
||
let mount = rfs_mount(source_dir, target_dir, "local", options);
|
||
assert_true(mount.id != "", "Mount ID should not be empty");
|
||
|
||
// List mounts
|
||
let mounts = rfs_list_mounts();
|
||
assert_true(mounts.len() > 0, "There should be at least one mount");
|
||
|
||
// Unmount
|
||
rfs_unmount(target_dir);
|
||
|
||
// Clean up
|
||
delete(source_dir);
|
||
delete(target_dir);
|
||
|
||
print("--- Mount Operations Tests completed successfully ---");
|
||
passed += 1;
|
||
} catch(err) {
|
||
print(`!!! Error in Mount Operations Tests: ${err}`);
|
||
failed += 1;
|
||
|
||
// Clean up in case of error
|
||
cleanup_mounts();
|
||
try {
|
||
delete("rhai_test_rfs_source");
|
||
delete("rhai_test_rfs_target");
|
||
} catch(e) {
|
||
// Ignore errors during cleanup
|
||
}
|
||
}
|
||
total += 1;
|
||
|
||
// Test 2: Filesystem Layer Operations
|
||
print("\n--- Running Filesystem Layer Operations Tests ---");
|
||
try {
|
||
// Create test directories
|
||
let source_dir = "rhai_test_rfs_source";
|
||
let unpack_dir = "rhai_test_rfs_unpack";
|
||
mkdir(source_dir);
|
||
mkdir(unpack_dir);
|
||
|
||
// Create test files in the source directory
|
||
file_write(`${source_dir}/file1.txt`, "Content of file 1");
|
||
|
||
// Output file for the filesystem layer
|
||
let output_file = "rhai_test_rfs_layer.fl";
|
||
|
||
// Pack the directory
|
||
let store_specs = "file:path=.";
|
||
rfs_pack(source_dir, output_file, store_specs);
|
||
|
||
// List contents
|
||
let contents = rfs_list_contents(output_file);
|
||
assert_true(contents.contains("file1.txt"), "Contents should include file1.txt");
|
||
|
||
// Verify the layer
|
||
let is_valid = rfs_verify(output_file);
|
||
assert_true(is_valid, "Filesystem layer should be valid");
|
||
|
||
// Unpack the layer
|
||
rfs_unpack(output_file, unpack_dir);
|
||
|
||
// Clean up
|
||
delete(source_dir);
|
||
delete(unpack_dir);
|
||
delete(output_file);
|
||
|
||
print("--- Filesystem Layer Operations Tests completed successfully ---");
|
||
passed += 1;
|
||
} catch(err) {
|
||
print(`!!! Error in Filesystem Layer Operations Tests: ${err}`);
|
||
failed += 1;
|
||
|
||
// Clean up in case of error
|
||
try {
|
||
delete("rhai_test_rfs_source");
|
||
delete("rhai_test_rfs_unpack");
|
||
delete("rhai_test_rfs_layer.fl");
|
||
} 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;
|