This commit is contained in:
117
rhai_tests/rfs/02_filesystem_layer_operations.rhai
Normal file
117
rhai_tests/rfs/02_filesystem_layer_operations.rhai
Normal file
@@ -0,0 +1,117 @@
|
||||
// 02_filesystem_layer_operations.rhai
|
||||
// Tests for RFS filesystem layer 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 rfs is available
|
||||
fn is_rfs_available() {
|
||||
try {
|
||||
let result = run("which rfs");
|
||||
return result.success;
|
||||
} catch(err) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
print("=== Testing RFS Filesystem Layer Operations ===");
|
||||
|
||||
// Check if rfs is available
|
||||
let rfs_available = is_rfs_available();
|
||||
if !rfs_available {
|
||||
print("rfs is not available. Skipping RFS tests.");
|
||||
// Exit gracefully without error
|
||||
return;
|
||||
}
|
||||
|
||||
print("✓ rfs is available");
|
||||
|
||||
// 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");
|
||||
file_write(`${source_dir}/file2.txt`, "Content of file 2");
|
||||
|
||||
// Create a subdirectory with files
|
||||
mkdir(`${source_dir}/subdir`);
|
||||
file_write(`${source_dir}/subdir/file3.txt`, "Content of file 3");
|
||||
|
||||
// Output file for the filesystem layer
|
||||
let output_file = "rhai_test_rfs_layer.fl";
|
||||
|
||||
try {
|
||||
// Test packing a directory
|
||||
print("Testing rfs_pack()...");
|
||||
// Use a file store spec for testing
|
||||
let store_specs = "file:path=.";
|
||||
rfs_pack(source_dir, output_file, store_specs);
|
||||
|
||||
// Verify the output file exists
|
||||
assert_true(exist(output_file), "Output file should exist");
|
||||
print(`✓ rfs_pack(): Directory packed to ${output_file}`);
|
||||
|
||||
// Test listing contents of the filesystem layer
|
||||
print("Testing rfs_list_contents()...");
|
||||
let contents = rfs_list_contents(output_file);
|
||||
|
||||
// Verify the contents include our files
|
||||
assert_true(contents.contains("file1.txt"), "Contents should include file1.txt");
|
||||
assert_true(contents.contains("file2.txt"), "Contents should include file2.txt");
|
||||
assert_true(contents.contains("subdir/file3.txt"), "Contents should include subdir/file3.txt");
|
||||
print("✓ rfs_list_contents(): Layer contents listed successfully");
|
||||
|
||||
// Test verifying the filesystem layer
|
||||
print("Testing rfs_verify()...");
|
||||
let is_valid = rfs_verify(output_file);
|
||||
assert_true(is_valid, "Filesystem layer should be valid");
|
||||
print("✓ rfs_verify(): Layer verified successfully");
|
||||
|
||||
// Test unpacking the filesystem layer
|
||||
print("Testing rfs_unpack()...");
|
||||
rfs_unpack(output_file, unpack_dir);
|
||||
|
||||
// Verify the unpacked files exist and have the correct content
|
||||
assert_true(exist(`${unpack_dir}/file1.txt`), "Unpacked file1.txt should exist");
|
||||
assert_true(exist(`${unpack_dir}/file2.txt`), "Unpacked file2.txt should exist");
|
||||
assert_true(exist(`${unpack_dir}/subdir/file3.txt`), "Unpacked subdir/file3.txt should exist");
|
||||
|
||||
let content1 = file_read(`${unpack_dir}/file1.txt`);
|
||||
let content2 = file_read(`${unpack_dir}/file2.txt`);
|
||||
let content3 = file_read(`${unpack_dir}/subdir/file3.txt`);
|
||||
|
||||
assert_eq(content1, "Content of file 1", "Content of file1.txt should match");
|
||||
assert_eq(content2, "Content of file 2", "Content of file2.txt should match");
|
||||
assert_eq(content3, "Content of file 3", "Content of file3.txt should match");
|
||||
|
||||
print("✓ rfs_unpack(): Layer unpacked successfully");
|
||||
|
||||
print("All filesystem layer operations tests completed successfully!");
|
||||
} catch(err) {
|
||||
print(`Error: ${err}`);
|
||||
throw err;
|
||||
} finally {
|
||||
// Clean up test directories and files
|
||||
delete(source_dir);
|
||||
delete(unpack_dir);
|
||||
delete(output_file);
|
||||
print("✓ Cleanup: Test directories and files removed");
|
||||
}
|
Reference in New Issue
Block a user