Files
herolib/lib/dav/webdav/locker_test.v

81 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')
}