Files
herolib/lib/vfs/ourdb_fs/encoder_test.v
Mahmoud Emad 7b453962ca feat: Enhance WebDAV server and add VFS encoder/decoder tests
- Add user authentication to the WebDAV server using a user
  database.
- Implement encoding and decoding functionality for directories,
  files, and symlinks in the OurDBFS VFS.
- Add comprehensive unit tests for the encoder and decoder
  functions.
- Improve the OurDBFS factory method to handle directory creation
  more robustly using pathlib.
- Add `delete` and `link_delete` methods to the `NestedVFS` and
  `OurDBVFS` implementations (though currently unimplemented).
- Improve WebDAV file handling to correctly determine and set the
  content type.  The previous implementation was incomplete and
  returned a dummy response.
- Update VFS test to actually test functionality.
- Remove unnecessary `root_dir` parameter from the WebDAV app.
2025-02-18 17:40:37 +02:00

127 lines
3.7 KiB
V

module ourdb_fs
import os
import time
fn test_directory_encoder_decoder() ! {
println('Testing encoding/decoding directories...')
current_time := time.now().unix()
dir := Directory{
metadata: 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
myvfs: unsafe { nil }
}
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: 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
myvfs: unsafe { nil }
}
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: 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
myvfs: unsafe { nil }
}
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!')
}