From 28eb1a11e6cdc13831bee507065f39e5448d68cc Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 25 Mar 2025 17:27:34 +0600 Subject: [PATCH] add more tests for smart key rw locker tests --- .../kotlin/SmartKeyRWLockerTests.kt | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/coroutines/src/commonTest/kotlin/SmartKeyRWLockerTests.kt b/coroutines/src/commonTest/kotlin/SmartKeyRWLockerTests.kt index 97436532cd6..70038c189b4 100644 --- a/coroutines/src/commonTest/kotlin/SmartKeyRWLockerTests.kt +++ b/coroutines/src/commonTest/kotlin/SmartKeyRWLockerTests.kt @@ -64,6 +64,56 @@ class SmartKeyRWLockerTests { assertFalse { locker.isWriteLocked(testKey) } } @Test + fun readLockFailedOnWriteLockKeyTest() = runTest { + val locker = SmartKeyRWLocker() + val testKey = "test" + locker.lockWrite(testKey) + + assertTrue { locker.isWriteLocked(testKey) } + + assertFails { + realWithTimeout(1.seconds) { + locker.acquireRead() + } + } + assertEquals(locker.readSemaphore().maxPermits - 1, locker.readSemaphore().freePermits) + + locker.unlockWrite(testKey) + assertFalse { locker.isWriteLocked(testKey) } + + realWithTimeout(1.seconds) { + locker.acquireRead() + } + assertEquals(locker.readSemaphore().maxPermits - 1, locker.readSemaphore().freePermits) + assertTrue { locker.releaseRead() } + assertEquals(locker.readSemaphore().maxPermits, locker.readSemaphore().freePermits) + } + @Test + fun writeLockFailedOnWriteLockKeyTest() = runTest { + val locker = SmartKeyRWLocker() + val testKey = "test" + locker.lockWrite(testKey) + + assertTrue { locker.isWriteLocked(testKey) } + + assertFails { + realWithTimeout(1.seconds) { + locker.lockWrite() + } + } + assertFalse(locker.isWriteLocked()) + + locker.unlockWrite(testKey) + assertFalse { locker.isWriteLocked(testKey) } + + realWithTimeout(1.seconds) { + locker.lockWrite() + } + assertTrue(locker.isWriteLocked()) + assertTrue { locker.unlockWrite() } + assertFalse(locker.isWriteLocked()) + } + @Test fun readsBlockingGlobalWrite() = runTest { val locker = SmartKeyRWLocker()