Files
herolib/lib/dav/webdav/locker_test.v
2025-03-24 06:44:39 +01:00

89 lines
1.6 KiB
V

module webdav
import time
import rand
fn test_lock() {
mut locker := Locker{
locks: map[string]Lock{}
}
// Lock the resource
result := locker.lock(
resource: 'test-resource'
owner: 'test-owner'
depth: 0
timeout: 3600
) or { panic(err) }
assert result.token != ''
assert locker.is_locked('test-resource')
}
fn test_unlock() {
mut locker := Locker{
locks: map[string]Lock{}
}
// Lock the resource
locker.lock(
resource: 'test-resource'
owner: 'test-owner'
depth: 0
timeout: 3600
) or { panic(err) }
// Unlock the resource
is_unlocked := locker.unlock('test-resource')
assert is_unlocked
assert !locker.is_locked('test-resource')
}
fn test_lock_with_different_owner() {
mut locker := Locker{
locks: map[string]Lock{}
}
lock1 := Lock{
resource: 'test-resource'
owner: 'owner1'
depth: 0
timeout: 3600
}
lock2 := Lock{
resource: 'test-resource'
owner: 'owner2'
depth: 0
timeout: 3600
}
// Lock the resource with the first owner
locker.lock(lock1) or { panic(err) }
// Attempt to lock the resource with a different owner
if result := locker.lock(lock2) {
assert false, 'locking should fail'
} else {
assert err == error('Resource is already locked by a different owner')
}
}
fn test_cleanup_expired_locks() {
mut locker := Locker{
locks: map[string]Lock{}
}
// Lock the resource
locker.lock(
resource: 'test-resource'
owner: 'test-owner'
depth: 0
timeout: 1
) or { panic(err) }
// Wait for the lock to expire
time.sleep(2 * time.second)
// Cleanup expired locks
locker.cleanup_expired_locks()
assert !locker.is_locked('test-resource')
}