Gradle Test Run :respect-lib-cache:jvmTest[jvm]
givenNoVarySearchHeaderSet_whenRetrievedUsingMatchingUrl_thenIsCacheHit[jvm]
summary
|
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)