125 lines
3.7 KiB
V
125 lines
3.7 KiB
V
module vfs_db
|
|
|
|
import os
|
|
import time
|
|
import freeflowuniverse.herolib.vfs
|
|
|
|
fn test_directory_encoder_decoder() ! {
|
|
println('Testing encoding/decoding directories...')
|
|
|
|
current_time := time.now().unix()
|
|
dir := Directory{
|
|
metadata: vfs.Metadata{
|
|
id: u32(current_time)
|
|
name: 'root'
|
|
file_type: .directory
|
|
created_at: current_time
|
|
modified_at: current_time
|
|
accessed_at: current_time
|
|
mode: 0o755
|
|
owner: 'user'
|
|
group: 'user'
|
|
}
|
|
children: [u32(1), u32(2)]
|
|
parent_id: 0
|
|
}
|
|
|
|
encoded := dir.encode()
|
|
|
|
mut decoded := decode_directory(encoded) or {
|
|
return error('Failed to decode directory: ${err}')
|
|
}
|
|
|
|
assert decoded.metadata.id == dir.metadata.id
|
|
assert decoded.metadata.name == dir.metadata.name
|
|
assert decoded.metadata.file_type == dir.metadata.file_type
|
|
assert decoded.metadata.created_at == dir.metadata.created_at
|
|
assert decoded.metadata.modified_at == dir.metadata.modified_at
|
|
assert decoded.metadata.accessed_at == dir.metadata.accessed_at
|
|
assert decoded.metadata.mode == dir.metadata.mode
|
|
assert decoded.metadata.owner == dir.metadata.owner
|
|
assert decoded.metadata.group == dir.metadata.group
|
|
assert decoded.children == dir.children
|
|
assert decoded.parent_id == dir.parent_id
|
|
|
|
println('Test completed successfully!')
|
|
}
|
|
|
|
fn test_file_encoder_decoder() ! {
|
|
println('Testing encoding/decoding files...')
|
|
|
|
current_time := time.now().unix()
|
|
file := File{
|
|
metadata: vfs.Metadata{
|
|
id: u32(current_time)
|
|
name: 'test.txt'
|
|
file_type: .file
|
|
created_at: current_time
|
|
modified_at: current_time
|
|
accessed_at: current_time
|
|
mode: 0o644
|
|
owner: 'user'
|
|
group: 'user'
|
|
}
|
|
data: 'Hello, world!'
|
|
parent_id: 0
|
|
}
|
|
|
|
encoded := file.encode()
|
|
|
|
mut decoded := decode_file(encoded) or { return error('Failed to decode file: ${err}') }
|
|
|
|
assert decoded.metadata.id == file.metadata.id
|
|
assert decoded.metadata.name == file.metadata.name
|
|
assert decoded.metadata.file_type == file.metadata.file_type
|
|
assert decoded.metadata.created_at == file.metadata.created_at
|
|
assert decoded.metadata.modified_at == file.metadata.modified_at
|
|
assert decoded.metadata.accessed_at == file.metadata.accessed_at
|
|
assert decoded.metadata.mode == file.metadata.mode
|
|
assert decoded.metadata.owner == file.metadata.owner
|
|
assert decoded.metadata.group == file.metadata.group
|
|
assert decoded.data == file.data
|
|
assert decoded.parent_id == file.parent_id
|
|
|
|
println('Test completed successfully!')
|
|
}
|
|
|
|
fn test_symlink_encoder_decoder() ! {
|
|
println('Testing encoding/decoding symlinks...')
|
|
|
|
current_time := time.now().unix()
|
|
symlink := Symlink{
|
|
metadata: vfs.Metadata{
|
|
id: u32(current_time)
|
|
name: 'test.txt'
|
|
file_type: .symlink
|
|
created_at: current_time
|
|
modified_at: current_time
|
|
accessed_at: current_time
|
|
mode: 0o644
|
|
owner: 'user'
|
|
group: 'user'
|
|
}
|
|
target: 'test.txt'
|
|
parent_id: 0
|
|
}
|
|
|
|
encoded := symlink.encode()
|
|
|
|
mut decoded := decode_symlink(encoded) or { return error('Failed to decode symlink: ${err}') }
|
|
|
|
assert decoded.metadata.id == symlink.metadata.id
|
|
assert decoded.metadata.name == symlink.metadata.name
|
|
assert decoded.metadata.file_type == symlink.metadata.file_type
|
|
assert decoded.metadata.created_at == symlink.metadata.created_at
|
|
assert decoded.metadata.modified_at == symlink.metadata.modified_at
|
|
assert decoded.metadata.accessed_at == symlink.metadata.accessed_at
|
|
assert decoded.metadata.mode == symlink.metadata.mode
|
|
assert decoded.metadata.owner == symlink.metadata.owner
|
|
assert decoded.metadata.group == symlink.metadata.group
|
|
assert decoded.target == symlink.target
|
|
assert decoded.parent_id == symlink.parent_id
|
|
|
|
println('Test completed successfully!')
|
|
}
|