Gradle Test Run :respect-lib-cache:jvmTest[jvm]

givenNoVarySearchHeaderSet_whenRetrievedUsingMatchingUrl_thenIsCacheHit[jvm]

summary

1

tests

0

failures

1

skipped

0.394s

duration

100%

successful

error output

Aug 19, 2026 6:56:44 PM io.github.aakira.napier.DebugAntilog performLog
FINE: [DEBUG] UstadCache - UstadCache(): store request for 1 entries
Aug 19, 2026 6:56:44 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] UstadCache - UstadCache(): copied request data for http://www.server.com/file.png to /tmp/junit10697562358050398908/junit16831452818051165133/tmpWork/1.tmp (integrity=sha256-hlfF4oGFRfane2XiRyLv02LtOJ4Va2UanpQV0im/K8I=)
Aug 19, 2026 6:56:44 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] UstadCache - UstadCache(): cacheEntries created 1 entries
Aug 19, 2026 6:56:44 PM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] UstadCache - UstadCache(): Retrieve http://www.server.com/file.png?ts=1
Aug 19, 2026 6:56:44 PM io.github.aakira.napier.DebugAntilog performLog
FINE: [DEBUG] UstadCache - UstadCache(): FOUND http://www.server.com/file.png?ts=1
Exception in thread "DefaultDispatcher-worker-2 @coroutine#125" kotlinx.coroutines.channels.ClosedReceiveChannelException: Channel was closed
	at _COROUTINE._BOUNDARY._(CoroutineDebugging.kt:42)
	at com.ustadmobile.libcache.util.ChannelExtKt.receiveAndUpdateBacklogSize(ChannelExt.kt:53)
	at com.ustadmobile.libcache.UstadCacheImpl$4.invokeSuspend(UstadCacheImpl.kt:384)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(125), "coroutine#125":StandaloneCoroutine{Cancelling}@4a724003, Dispatchers.IO]
Caused by: kotlinx.coroutines.channels.ClosedReceiveChannelException: Channel was closed
	at kotlinx.coroutines.channels.BufferedChannel.getReceiveException(BufferedChannel.kt:1739)
	at kotlinx.coroutines.channels.BufferedChannel.resumeWaiterOnClosedChannel(BufferedChannel.kt:2181)
	at kotlinx.coroutines.channels.BufferedChannel.resumeReceiverOnClosedChannel(BufferedChannel.kt:2170)
	at kotlinx.coroutines.channels.BufferedChannel.cancelSuspendedReceiveRequests(BufferedChannel.kt:2163)
	at kotlinx.coroutines.channels.BufferedChannel.completeClose(BufferedChannel.kt:1940)
	at kotlinx.coroutines.channels.BufferedChannel.isClosed(BufferedChannel.kt:2219)
	at kotlinx.coroutines.channels.BufferedChannel.isClosedForSend0(BufferedChannel.kt:2194)
	at kotlinx.coroutines.channels.BufferedChannel.isClosedForSend(BufferedChannel.kt:2191)
	at kotlinx.coroutines.channels.BufferedChannel.completeCloseOrCancel(BufferedChannel.kt:1912)
	at kotlinx.coroutines.channels.BufferedChannel.closeOrCancelImpl(BufferedChannel.kt:1805)
	at kotlinx.coroutines.channels.BufferedChannel.close(BufferedChannel.kt:1764)
	at kotlinx.coroutines.channels.SendChannel.close$default(Channel.kt:263)
	at com.ustadmobile.libcache.UstadCacheImpl.close(UstadCacheImpl.kt:1000)
	at com.ustadmobile.libcache.UstadCacheJvmTest.withTestCache(UstadCacheJvmTest.kt:215)
	at com.ustadmobile.libcache.UstadCacheJvmTest.assertFileCanBeCachedAndRetrieved(UstadCacheJvmTest.kt:233)
	at com.ustadmobile.libcache.UstadCacheJvmTest.assertFileCanBeCachedAndRetrieved$default(UstadCacheJvmTest.kt:221)
	at com.ustadmobile.libcache.UstadCacheJvmTest.givenNoVarySearchHeaderSet_whenRetrievedUsingMatchingUrl_thenIsCacheHit(UstadCacheJvmTest.kt:645)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:54)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestExecutor.runRequest(JUnitTestExecutor.java:175)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestExecutor.accept(JUnitTestExecutor.java:84)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestExecutor.accept(JUnitTestExecutor.java:47)
	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestDefinitionProcessor.processTestDefinition(AbstractJUnitTestDefinitionProcessor.java:65)
	at org.gradle.api.internal.tasks.testing.SuiteTestDefinitionProcessor.processTestDefinition(SuiteTestDefinitionProcessor.java:53)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.gradle.internal.dispatch.MethodInvocation.invokeOn(MethodInvocation.java:77)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:28)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:19)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:88)
	at jdk.proxy1/jdk.proxy1.$Proxy4.processTestDefinition(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:178)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:126)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
Aug 19, 2026 6:56:44 PM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] UstadCache - UstadCache(): Retrieve http://www.server.com/file.png?ts=1
Aug 19, 2026 6:56:44 PM io.github.aakira.napier.DebugAntilog performLog
FINE: [DEBUG] UstadCache - UstadCache(): FOUND http://www.server.com/file.png?ts=1
Exception in thread "DefaultDispatcher-worker-2 @coroutine#135" androidx.sqlite.SQLiteException: Error code: 21, message: statement is closed
	at androidx.sqlite.SQLite__SQLiteKt.throwSQLiteException(SQLite.kt:64)
	at androidx.sqlite.SQLite.throwSQLiteException(Unknown Source)
	at androidx.sqlite.driver.bundled.BundledSQLiteStatement.throwIfClosed(BundledSQLiteStatement.jvmAndAndroid.kt:124)
	at androidx.sqlite.driver.bundled.BundledSQLiteStatement.reset(BundledSQLiteStatement.jvmAndAndroid.kt:106)
	at androidx.room.coroutines.ConnectionWithLock$CachedStatement.close(ConnectionPoolImpl.kt:401)
	at kotlin.jdk7.AutoCloseableKt.closeFinally(AutoCloseableJVM.kt:43)
	at androidx.sqlite.SQLite__SQLite_nonWebKt.execSQL(SQLite.nonWeb.kt:26)
	at androidx.sqlite.SQLite.execSQL(Unknown Source)
	at androidx.room.coroutines.PooledConnectionImpl.endTransaction(ConnectionPoolImpl.kt:514)
	at androidx.room.coroutines.PooledConnectionImpl.transaction(ConnectionPoolImpl.kt:482)
	at androidx.room.coroutines.PooledConnectionImpl.withTransaction(ConnectionPoolImpl.kt:443)
	at com.ustadmobile.libcache.UstadCacheImpl$4$1.invokeSuspend(UstadCacheImpl.kt:396)
	at com.ustadmobile.libcache.UstadCacheImpl$4$1.invoke(UstadCacheImpl.kt)
	at com.ustadmobile.libcache.UstadCacheImpl$4$1.invoke(UstadCacheImpl.kt)
	at androidx.room.coroutines.ConnectionPoolImpl$useConnection$4.invokeSuspend(ConnectionPoolImpl.kt:159)
	at androidx.room.coroutines.ConnectionPoolImpl$useConnection$4.invoke(ConnectionPoolImpl.kt)
	at androidx.room.coroutines.ConnectionPoolImpl$useConnection$4.invoke(ConnectionPoolImpl.kt)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatched(Undispatched.kt:66)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:43)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:497)
	at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
	at androidx.room.coroutines.ConnectionPoolImpl.useConnection(ConnectionPoolImpl.kt:159)
	at androidx.room.RoomConnectionManager.useConnection(RoomConnectionManager.jvmNative.kt:52)
	at androidx.room.RoomDatabase.useConnection(RoomDatabase.jvmNative.kt:255)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt$useWriterConnection$2.invokeSuspend(RoomDatabase.kt:502)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt$useWriterConnection$2.invoke(RoomDatabase.kt)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt$useWriterConnection$2.invoke(RoomDatabase.kt)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatched(Undispatched.kt:66)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:43)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:497)
	at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt.useWriterConnection(RoomDatabase.kt:501)
	at androidx.room.RoomDatabaseKt.useWriterConnection(RoomDatabase.kt:1)
	at com.ustadmobile.libcache.UstadCacheImpl$4.invokeSuspend(UstadCacheImpl.kt:395)
	at _COROUTINE._BOUNDARY._(CoroutineDebugging.kt:42)
	at androidx.room.coroutines.ConnectionPoolImpl.useConnection(ConnectionPoolImpl.kt:159)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt$useWriterConnection$2.invokeSuspend(RoomDatabase.kt:502)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt.useWriterConnection(RoomDatabase.kt:501)
	at com.ustadmobile.libcache.UstadCacheImpl$4.invokeSuspend(UstadCacheImpl.kt:395)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(135), "coroutine#135":StandaloneCoroutine{Cancelling}@6ef85949, Dispatchers.IO]
Caused by: androidx.sqlite.SQLiteException: Error code: 21, message: statement is closed
	at androidx.sqlite.SQLite__SQLiteKt.throwSQLiteException(SQLite.kt:64)
	at androidx.sqlite.SQLite.throwSQLiteException(Unknown Source)
	at androidx.sqlite.driver.bundled.BundledSQLiteStatement.throwIfClosed(BundledSQLiteStatement.jvmAndAndroid.kt:124)
	at androidx.sqlite.driver.bundled.BundledSQLiteStatement.reset(BundledSQLiteStatement.jvmAndAndroid.kt:106)
	at androidx.room.coroutines.ConnectionWithLock$CachedStatement.close(ConnectionPoolImpl.kt:401)
	at kotlin.jdk7.AutoCloseableKt.closeFinally(AutoCloseableJVM.kt:43)
	at androidx.sqlite.SQLite__SQLite_nonWebKt.execSQL(SQLite.nonWeb.kt:26)
	at androidx.sqlite.SQLite.execSQL(Unknown Source)
	at androidx.room.coroutines.PooledConnectionImpl.endTransaction(ConnectionPoolImpl.kt:514)
	at androidx.room.coroutines.PooledConnectionImpl.transaction(ConnectionPoolImpl.kt:482)
	at androidx.room.coroutines.PooledConnectionImpl.withTransaction(ConnectionPoolImpl.kt:443)
	at com.ustadmobile.libcache.UstadCacheImpl$4$1.invokeSuspend(UstadCacheImpl.kt:396)
	at com.ustadmobile.libcache.UstadCacheImpl$4$1.invoke(UstadCacheImpl.kt)
	at com.ustadmobile.libcache.UstadCacheImpl$4$1.invoke(UstadCacheImpl.kt)
	at androidx.room.coroutines.ConnectionPoolImpl$useConnection$4.invokeSuspend(ConnectionPoolImpl.kt:159)
	at androidx.room.coroutines.ConnectionPoolImpl$useConnection$4.invoke(ConnectionPoolImpl.kt)
	at androidx.room.coroutines.ConnectionPoolImpl$useConnection$4.invoke(ConnectionPoolImpl.kt)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatched(Undispatched.kt:66)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:43)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:497)
	at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
	at androidx.room.coroutines.ConnectionPoolImpl.useConnection(ConnectionPoolImpl.kt:159)
	at androidx.room.RoomConnectionManager.useConnection(RoomConnectionManager.jvmNative.kt:52)
	at androidx.room.RoomDatabase.useConnection(RoomDatabase.jvmNative.kt:255)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt$useWriterConnection$2.invokeSuspend(RoomDatabase.kt:502)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt$useWriterConnection$2.invoke(RoomDatabase.kt)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt$useWriterConnection$2.invoke(RoomDatabase.kt)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatched(Undispatched.kt:66)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:43)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:497)
	at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt.useWriterConnection(RoomDatabase.kt:501)
	at androidx.room.RoomDatabaseKt.useWriterConnection(RoomDatabase.kt:1)
	at com.ustadmobile.libcache.UstadCacheImpl$4.invokeSuspend(UstadCacheImpl.kt:395)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:34)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
	at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:124)
	at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:89)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:586)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:798)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:717)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:704)
Aug 19, 2026 6:56:44 PM io.github.aakira.napier.DebugAntilog performLog
FINE: [DEBUG] UstadCache - UstadCache(): store request for 1 entries
Aug 19, 2026 6:56:44 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] UstadCache - UstadCache(): copied request data for http://www.server.com/file.png?lang=en&lesson=2 to /tmp/junit10697562358050398908/junit16831452818051165133/tmpWork/1.tmp (integrity=sha256-hlfF4oGFRfane2XiRyLv02LtOJ4Va2UanpQV0im/K8I=)
Aug 19, 2026 6:56:44 PM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] UstadCache - UstadCache(): cacheEntries created 1 entries
Aug 19, 2026 6:56:44 PM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] UstadCache - UstadCache(): Retrieve http://www.server.com/file.png?lang=en&lesson=2&actor=janedoe&endpoint=server
Aug 19, 2026 6:56:44 PM io.github.aakira.napier.DebugAntilog performLog
FINE: [DEBUG] UstadCache - UstadCache(): FOUND http://www.server.com/file.png?lang=en&lesson=2&actor=janedoe&endpoint=server
Exception in thread "DefaultDispatcher-worker-2 @coroutine#140" kotlinx.coroutines.channels.ClosedReceiveChannelException: Channel was closed
	at _COROUTINE._BOUNDARY._(CoroutineDebugging.kt:42)
	at com.ustadmobile.libcache.util.ChannelExtKt.receiveAndUpdateBacklogSize(ChannelExt.kt:53)
	at com.ustadmobile.libcache.UstadCacheImpl$4.invokeSuspend(UstadCacheImpl.kt:384)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(140), "coroutine#140":StandaloneCoroutine{Cancelling}@1f4232dc, Dispatchers.IO]
Caused by: kotlinx.coroutines.channels.ClosedReceiveChannelException: Channel was closed
	at kotlinx.coroutines.channels.BufferedChannel.getReceiveException(BufferedChannel.kt:1739)
	at kotlinx.coroutines.channels.BufferedChannel.resumeWaiterOnClosedChannel(BufferedChannel.kt:2181)
	at kotlinx.coroutines.channels.BufferedChannel.resumeReceiverOnClosedChannel(BufferedChannel.kt:2170)
	at kotlinx.coroutines.channels.BufferedChannel.cancelSuspendedReceiveRequests(BufferedChannel.kt:2163)
	at kotlinx.coroutines.channels.BufferedChannel.completeClose(BufferedChannel.kt:1940)
	at kotlinx.coroutines.channels.BufferedChannel.isClosed(BufferedChannel.kt:2219)
	at kotlinx.coroutines.channels.BufferedChannel.isClosedForSend0(BufferedChannel.kt:2194)
	at kotlinx.coroutines.channels.BufferedChannel.isClosedForSend(BufferedChannel.kt:2191)
	at kotlinx.coroutines.channels.BufferedChannel.completeCloseOrCancel(BufferedChannel.kt:1912)
	at kotlinx.coroutines.channels.BufferedChannel.closeOrCancelImpl(BufferedChannel.kt:1805)
	at kotlinx.coroutines.channels.BufferedChannel.close(BufferedChannel.kt:1764)
	at kotlinx.coroutines.channels.SendChannel.close$default(Channel.kt:263)
	at com.ustadmobile.libcache.UstadCacheImpl.close(UstadCacheImpl.kt:1000)
	at com.ustadmobile.libcache.UstadCacheJvmTest.withTestCache(UstadCacheJvmTest.kt:215)
	at com.ustadmobile.libcache.UstadCacheJvmTest.assertFileCanBeCachedAndRetrieved(UstadCacheJvmTest.kt:233)
	at com.ustadmobile.libcache.UstadCacheJvmTest.assertFileCanBeCachedAndRetrieved$default(UstadCacheJvmTest.kt:221)
	at com.ustadmobile.libcache.UstadCacheJvmTest.givenNoVarySearchHeaderSet_whenRetrievedUsingMatchingUrl_thenIsCacheHit(UstadCacheJvmTest.kt:645)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:54)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:115)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestExecutor.runRequest(JUnitTestExecutor.java:175)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestExecutor.accept(JUnitTestExecutor.java:84)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestExecutor.accept(JUnitTestExecutor.java:47)
	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestDefinitionProcessor.processTestDefinition(AbstractJUnitTestDefinitionProcessor.java:65)
	at org.gradle.api.internal.tasks.testing.SuiteTestDefinitionProcessor.processTestDefinition(SuiteTestDefinitionProcessor.java:53)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.gradle.internal.dispatch.MethodInvocation.invokeOn(MethodInvocation.java:77)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:28)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:19)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:88)
	at jdk.proxy1/jdk.proxy1.$Proxy4.processTestDefinition(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:178)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:126)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
Aug 19, 2026 6:56:44 PM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] UstadCache - UstadCache(): Retrieve http://www.server.com/file.png?lang=en&lesson=2&actor=janedoe&endpoint=server
Aug 19, 2026 6:56:44 PM io.github.aakira.napier.DebugAntilog performLog
FINE: [DEBUG] UstadCache - UstadCache(): FOUND http://www.server.com/file.png?lang=en&lesson=2&actor=janedoe&endpoint=server
Exception in thread "DefaultDispatcher-worker-2 @coroutine#150" androidx.sqlite.SQLiteException: Error code: 21, message: statement is closed
	at androidx.sqlite.SQLite__SQLiteKt.throwSQLiteException(SQLite.kt:64)
	at androidx.sqlite.SQLite.throwSQLiteException(Unknown Source)
	at androidx.sqlite.driver.bundled.BundledSQLiteStatement.throwIfClosed(BundledSQLiteStatement.jvmAndAndroid.kt:124)
	at androidx.sqlite.driver.bundled.BundledSQLiteStatement.reset(BundledSQLiteStatement.jvmAndAndroid.kt:106)
	at androidx.room.coroutines.ConnectionWithLock$CachedStatement.close(ConnectionPoolImpl.kt:401)
	at kotlin.jdk7.AutoCloseableKt.closeFinally(AutoCloseableJVM.kt:43)
	at androidx.sqlite.SQLite__SQLite_nonWebKt.execSQL(SQLite.nonWeb.kt:26)
	at androidx.sqlite.SQLite.execSQL(Unknown Source)
	at androidx.room.coroutines.PooledConnectionImpl.endTransaction(ConnectionPoolImpl.kt:514)
	at androidx.room.coroutines.PooledConnectionImpl.transaction(ConnectionPoolImpl.kt:482)
	at androidx.room.coroutines.PooledConnectionImpl.withTransaction(ConnectionPoolImpl.kt:443)
	at com.ustadmobile.libcache.UstadCacheImpl$4$1.invokeSuspend(UstadCacheImpl.kt:396)
	at com.ustadmobile.libcache.UstadCacheImpl$4$1.invoke(UstadCacheImpl.kt)
	at com.ustadmobile.libcache.UstadCacheImpl$4$1.invoke(UstadCacheImpl.kt)
	at androidx.room.coroutines.ConnectionPoolImpl$useConnection$4.invokeSuspend(ConnectionPoolImpl.kt:159)
	at androidx.room.coroutines.ConnectionPoolImpl$useConnection$4.invoke(ConnectionPoolImpl.kt)
	at androidx.room.coroutines.ConnectionPoolImpl$useConnection$4.invoke(ConnectionPoolImpl.kt)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatched(Undispatched.kt:66)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:43)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:497)
	at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
	at androidx.room.coroutines.ConnectionPoolImpl.useConnection(ConnectionPoolImpl.kt:159)
	at androidx.room.RoomConnectionManager.useConnection(RoomConnectionManager.jvmNative.kt:52)
	at androidx.room.RoomDatabase.useConnection(RoomDatabase.jvmNative.kt:255)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt$useWriterConnection$2.invokeSuspend(RoomDatabase.kt:502)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt$useWriterConnection$2.invoke(RoomDatabase.kt)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt$useWriterConnection$2.invoke(RoomDatabase.kt)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatched(Undispatched.kt:66)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:43)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:497)
	at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt.useWriterConnection(RoomDatabase.kt:501)
	at androidx.room.RoomDatabaseKt.useWriterConnection(RoomDatabase.kt:1)
	at com.ustadmobile.libcache.UstadCacheImpl$4.invokeSuspend(UstadCacheImpl.kt:395)
	at _COROUTINE._BOUNDARY._(CoroutineDebugging.kt:42)
	at androidx.room.coroutines.ConnectionPoolImpl.useConnection(ConnectionPoolImpl.kt:159)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt$useWriterConnection$2.invokeSuspend(RoomDatabase.kt:502)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt.useWriterConnection(RoomDatabase.kt:501)
	at com.ustadmobile.libcache.UstadCacheImpl$4.invokeSuspend(UstadCacheImpl.kt:395)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(150), "coroutine#150":StandaloneCoroutine{Cancelling}@10a12185, Dispatchers.IO]
Caused by: androidx.sqlite.SQLiteException: Error code: 21, message: statement is closed
	at androidx.sqlite.SQLite__SQLiteKt.throwSQLiteException(SQLite.kt:64)
	at androidx.sqlite.SQLite.throwSQLiteException(Unknown Source)
	at androidx.sqlite.driver.bundled.BundledSQLiteStatement.throwIfClosed(BundledSQLiteStatement.jvmAndAndroid.kt:124)
	at androidx.sqlite.driver.bundled.BundledSQLiteStatement.reset(BundledSQLiteStatement.jvmAndAndroid.kt:106)
	at androidx.room.coroutines.ConnectionWithLock$CachedStatement.close(ConnectionPoolImpl.kt:401)
	at kotlin.jdk7.AutoCloseableKt.closeFinally(AutoCloseableJVM.kt:43)
	at androidx.sqlite.SQLite__SQLite_nonWebKt.execSQL(SQLite.nonWeb.kt:26)
	at androidx.sqlite.SQLite.execSQL(Unknown Source)
	at androidx.room.coroutines.PooledConnectionImpl.endTransaction(ConnectionPoolImpl.kt:514)
	at androidx.room.coroutines.PooledConnectionImpl.transaction(ConnectionPoolImpl.kt:482)
	at androidx.room.coroutines.PooledConnectionImpl.withTransaction(ConnectionPoolImpl.kt:443)
	at com.ustadmobile.libcache.UstadCacheImpl$4$1.invokeSuspend(UstadCacheImpl.kt:396)
	at com.ustadmobile.libcache.UstadCacheImpl$4$1.invoke(UstadCacheImpl.kt)
	at com.ustadmobile.libcache.UstadCacheImpl$4$1.invoke(UstadCacheImpl.kt)
	at androidx.room.coroutines.ConnectionPoolImpl$useConnection$4.invokeSuspend(ConnectionPoolImpl.kt:159)
	at androidx.room.coroutines.ConnectionPoolImpl$useConnection$4.invoke(ConnectionPoolImpl.kt)
	at androidx.room.coroutines.ConnectionPoolImpl$useConnection$4.invoke(ConnectionPoolImpl.kt)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatched(Undispatched.kt:66)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:43)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:497)
	at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
	at androidx.room.coroutines.ConnectionPoolImpl.useConnection(ConnectionPoolImpl.kt:159)
	at androidx.room.RoomConnectionManager.useConnection(RoomConnectionManager.jvmNative.kt:52)
	at androidx.room.RoomDatabase.useConnection(RoomDatabase.jvmNative.kt:255)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt$useWriterConnection$2.invokeSuspend(RoomDatabase.kt:502)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt$useWriterConnection$2.invoke(RoomDatabase.kt)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt$useWriterConnection$2.invoke(RoomDatabase.kt)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatched(Undispatched.kt:66)
	at kotlinx.coroutines.intrinsics.UndispatchedKt.startUndispatchedOrReturn(Undispatched.kt:43)
	at kotlinx.coroutines.BuildersKt__Builders_commonKt.withContext(Builders.common.kt:497)
	at kotlinx.coroutines.BuildersKt.withContext(Unknown Source)
	at androidx.room.RoomDatabaseKt__RoomDatabaseKt.useWriterConnection(RoomDatabase.kt:501)
	at androidx.room.RoomDatabaseKt.useWriterConnection(RoomDatabase.kt:1)
	at com.ustadmobile.libcache.UstadCacheImpl$4.invokeSuspend(UstadCacheImpl.kt:395)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:34)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
	at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:124)
	at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:89)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:586)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:798)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:717)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:704)