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

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

# givenFileCachedAndStored_whenRequestHasCacheValidationHeaders_thenShouldRespond304NotModified[jvm]

- summary
- error output

## summary

1 tests | 0 failures | 0 skipped | 0.605s duration
| 100% successful

## error output

    Aug 20, 2026 11:09:31 PM io.github.aakira.napier.DebugAntilog performLog
    FINE: [DEBUG] UstadCache - UstadCache(): store request for 1 entries
    Aug 20, 2026 11:09:31 PM io.github.aakira.napier.DebugAntilog performLog
    FINEST: [VERBOSE] UstadCache - UstadCache(): copied request data for http://www.server.com/file.png to /tmp/junit2590839726784056759/junit16848120956719658576/tmpWork/1.tmp (integrity=sha256-hlfF4oGFRfane2XiRyLv02LtOJ4Va2UanpQV0im/K8I=)
    Aug 20, 2026 11:09:31 PM io.github.aakira.napier.DebugAntilog performLog
    FINEST: [VERBOSE] UstadCache - UstadCache(): cacheEntries created 1 entries
    Aug 20, 2026 11:09:31 PM io.github.aakira.napier.DebugAntilog performLog
    INFO: [INFO] UstadCache - UstadCache(): Retrieve http://www.server.com/file.png
    Aug 20, 2026 11:09:31 PM io.github.aakira.napier.DebugAntilog performLog
    FINE: [DEBUG] UstadCache - UstadCache(): FOUND http://www.server.com/file.png
    Aug 20, 2026 11:09:31 PM io.github.aakira.napier.DebugAntilog performLog
    INFO: [INFO] UstadCache - UstadCache(): Retrieve http://www.server.com/file.png
    Aug 20, 2026 11:09:31 PM io.github.aakira.napier.DebugAntilog performLog
    FINE: [DEBUG] UstadCache - UstadCache(): FOUND http://www.server.com/file.png
    Aug 20, 2026 11:09:31 PM io.github.aakira.napier.DebugAntilog performLog
    INFO: [INFO] UstadCache - UstadCache(): Retrieve http://www.server.com/file.png
    Aug 20, 2026 11:09:31 PM io.github.aakira.napier.DebugAntilog performLog
    FINE: [DEBUG] UstadCache - UstadCache(): FOUND http://www.server.com/file.png
    Aug 20, 2026 11:09:31 PM io.github.aakira.napier.DebugAntilog performLog
    INFO: [INFO] UstadCache - UstadCache(): Retrieve http://www.server.com/file.png
    Aug 20, 2026 11:09:31 PM io.github.aakira.napier.DebugAntilog performLog
    FINE: [DEBUG] UstadCache - UstadCache(): FOUND http://www.server.com/file.png
    Aug 20, 2026 11:09:31 PM io.github.aakira.napier.DebugAntilog performLog
    INFO: [INFO] UstadCache - UstadCache(): Retrieve http://www.server.com/file.png
    Aug 20, 2026 11:09:31 PM io.github.aakira.napier.DebugAntilog performLog
    FINE: [DEBUG] UstadCache - UstadCache(): FOUND http://www.server.com/file.png
    Exception in thread "DefaultDispatcher-worker-3 @coroutine#3" kotlinx.coroutines.channels.ClosedReceiveChannelException: Channel was closed
    	at _COROUTINE._BOUNDARY._(CoroutineDebugging.kt:42)
    	at com.ustadmobile.libcache.UstadCacheImpl$4.invokeSuspend(UstadCacheImpl.kt:368)
    	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(3), "coroutine#3":StandaloneCoroutine{Cancelling}@532cc825, 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:977)
    	at com.ustadmobile.libcache.UstadCacheJvmTest.withTestCache(UstadCacheJvmTest.kt:209)
    	at com.ustadmobile.libcache.UstadCacheJvmTest.assertFileCanBeCachedAndRetrieved(UstadCacheJvmTest.kt:227)
    	at com.ustadmobile.libcache.UstadCacheJvmTest.assertFileCanBeCachedAndRetrieved$default(UstadCacheJvmTest.kt:215)
    	at com.ustadmobile.libcache.UstadCacheJvmTest.givenFileCachedAndStored_whenRequestHasCacheValidationHeaders_thenShouldRespond304NotModified(UstadCacheJvmTest.kt:537)
    	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)