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;
|