Test running on port 35151
2025-09-20 04:32:37.805 [Test worker] INFO io.ktor.server.Application - Autoreload is disabled because the development mode is off.
2025-09-20 04:32:37.831 [Test worker] INFO io.ktor.server.Application - Application started in 0.026 seconds.
2025-09-20 04:32:37.835 [DefaultDispatcher-worker-3 @coroutine#14] INFO io.ktor.server.Application - Responding at http://0.0.0.0:35151
2025-09-20 04:32:37.875 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/appmanifest.json
2025-09-20 04:32:37.876 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/appmanifest.json.
2025-09-20 04:32:37.876 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/appmanifest.json
2025-09-20 04:32:37.997 [eventLoopGroupProxy-7-1 @call-handler#20] TRACE io.ktor.server.routing.Routing - Trace for [resources, appmanifest.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:38.045 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/appmanifest.json
2025-09-20 04:32:38.046 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/appmanifest.json
2025-09-20 04:32:38.046 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/appmanifest.json
2025-09-20 04:32:38.050 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/appmanifest.json.
2025-09-20 04:32:38.051 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35151/resources/appmanifest.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:38.053 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/appmanifest.json
2025-09-20 04:32:38.053 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/appmanifest.json.
2025-09-20 04:32:38.053 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/appmanifest.json
2025-09-20 04:32:38.056 [eventLoopGroupProxy-7-1 @call-handler#26] TRACE io.ktor.server.routing.Routing - Trace for [resources, appmanifest.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:38.060 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/appmanifest.json
2025-09-20 04:32:38.060 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/appmanifest.json
2025-09-20 04:32:38.060 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/appmanifest.json
2025-09-20 04:32:38.061 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/appmanifest.json
2025-09-20 04:32:38.062 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/appmanifest.json.
2025-09-20 04:32:38.062 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/appmanifest.json
2025-09-20 04:32:38.064 [eventLoopGroupProxy-7-1 @call-handler#29] TRACE io.ktor.server.routing.Routing - Trace for [resources, appmanifest.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:38.067 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/appmanifest.json
2025-09-20 04:32:38.067 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/appmanifest.json
2025-09-20 04:32:38.067 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/appmanifest.json
2025-09-20 04:32:38.072 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35151/resources/appmanifest.json to class kotlinx.io.Source
2025-09-20 04:32:38.117 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/app.html
2025-09-20 04:32:38.118 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/app.html.
2025-09-20 04:32:38.118 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/app.html
2025-09-20 04:32:38.125 [eventLoopGroupProxy-7-1 @call-handler#34] TRACE io.ktor.server.routing.Routing - Trace for [resources, app.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[app.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[app.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:38.128 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/app.html
2025-09-20 04:32:38.129 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/app.html
2025-09-20 04:32:38.129 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/app.html
2025-09-20 04:32:38.130 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/app.html.
2025-09-20 04:32:38.130 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35151/resources/app.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:38.132 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/app.html
2025-09-20 04:32:38.132 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/app.html.
2025-09-20 04:32:38.132 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/app.html
2025-09-20 04:32:38.134 [eventLoopGroupProxy-7-1 @call-handler#40] TRACE io.ktor.server.routing.Routing - Trace for [resources, app.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[app.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[app.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:38.141 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/app.html
2025-09-20 04:32:38.142 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/app.html
2025-09-20 04:32:38.142 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/app.html
2025-09-20 04:32:38.142 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/index.json
2025-09-20 04:32:38.143 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/index.json.
2025-09-20 04:32:38.143 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/index.json
2025-09-20 04:32:38.145 [eventLoopGroupProxy-7-1 @call-handler#43] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:38.147 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/index.json
2025-09-20 04:32:38.147 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/index.json
2025-09-20 04:32:38.147 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/index.json
2025-09-20 04:32:38.148 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/index.json.
2025-09-20 04:32:38.148 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35151/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:38.149 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/index.json
2025-09-20 04:32:38.149 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/index.json.
2025-09-20 04:32:38.149 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/index.json
2025-09-20 04:32:38.151 [eventLoopGroupProxy-7-1 @call-handler#49] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:38.153 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/index.json
2025-09-20 04:32:38.153 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/index.json
2025-09-20 04:32:38.153 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/index.json
2025-09-20 04:32:38.154 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/index.json
2025-09-20 04:32:38.154 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/index.json.
2025-09-20 04:32:38.154 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/index.json
2025-09-20 04:32:38.156 [eventLoopGroupProxy-7-1 @call-handler#52] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:38.158 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/index.json
2025-09-20 04:32:38.158 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/index.json
2025-09-20 04:32:38.158 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/index.json
2025-09-20 04:32:38.159 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/index.json.
2025-09-20 04:32:38.159 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35151/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:38.159 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/index.json
2025-09-20 04:32:38.160 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/index.json.
2025-09-20 04:32:38.160 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/index.json
2025-09-20 04:32:38.162 [eventLoopGroupProxy-7-1 @call-handler#58] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:38.164 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/index.json
2025-09-20 04:32:38.164 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/index.json
2025-09-20 04:32:38.164 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/index.json
2025-09-20 04:32:38.165 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/index.json
2025-09-20 04:32:38.165 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/index.json.
2025-09-20 04:32:38.165 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/index.json
2025-09-20 04:32:38.167 [eventLoopGroupProxy-7-1 @call-handler#61] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:38.170 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/index.json
2025-09-20 04:32:38.170 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/index.json
2025-09-20 04:32:38.170 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/index.json
2025-09-20 04:32:38.171 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35151/resources/index.json to class kotlinx.io.Source
WARN: http://localhost:35151/resources/index.json Navigation link to grade1/grade1.json SHOULD contain an icon
DEBUG: http://localhost:35151/resources/index.json Skipping link as it has already been visited: http://localhost:35151/resources/index.json
2025-09-20 04:32:41.081 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/grade1.json
2025-09-20 04:32:41.081 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/grade1.json.
2025-09-20 04:32:41.081 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/grade1.json
2025-09-20 04:32:41.083 [eventLoopGroupProxy-7-1 @call-handler#66] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, grade1.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:3 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:3 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.085 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/grade1.json
2025-09-20 04:32:41.085 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/grade1.json
2025-09-20 04:32:41.085 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/grade1.json
2025-09-20 04:32:41.085 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/grade1.json.
2025-09-20 04:32:41.085 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35151/resources/grade1/grade1.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:41.086 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/grade1.json
2025-09-20 04:32:41.086 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/grade1.json.
2025-09-20 04:32:41.086 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/grade1.json
2025-09-20 04:32:41.087 [eventLoopGroupProxy-7-1 @call-handler#72] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, grade1.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:3 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:3 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.089 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/grade1.json
2025-09-20 04:32:41.089 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/grade1.json
2025-09-20 04:32:41.089 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/grade1.json
2025-09-20 04:32:41.089 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/grade1.json
2025-09-20 04:32:41.089 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/grade1.json.
2025-09-20 04:32:41.089 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/grade1.json
2025-09-20 04:32:41.091 [eventLoopGroupProxy-7-1 @call-handler#75] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, grade1.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:3 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:3 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.092 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/grade1.json
2025-09-20 04:32:41.092 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/grade1.json
2025-09-20 04:32:41.092 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/grade1.json
2025-09-20 04:32:41.092 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35151/resources/grade1/grade1.json to class kotlinx.io.Source
DEBUG: http://localhost:35151/resources/grade1/grade1.json Validating Opds Publication: title "Lesson 001" and identifier: http://example.app/id/lesson001
2025-09-20 04:32:41.104 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.105 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/cover.png.
2025-09-20 04:32:41.105 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.106 [eventLoopGroupProxy-7-1 @call-handler#80] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, cover.png]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.108 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.109 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.109 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.109 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/cover.png.
2025-09-20 04:32:41.109 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35151/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:41.109 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.109 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/cover.png.
2025-09-20 04:32:41.109 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.111 [eventLoopGroupProxy-7-1 @call-handler#86] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, cover.png]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.113 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.113 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.113 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.113 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.113 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:41.113 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.115 [eventLoopGroupProxy-7-1 @call-handler#89] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.116 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.116 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.116 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.117 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:41.117 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35151/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:41.117 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.117 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:41.117 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.118 [eventLoopGroupProxy-7-1 @call-handler#95] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.120 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.120 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.120 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.180 [eventLoopGroupProxy-7-2 @call-handler#99] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
DEBUG: http://localhost:35151/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:35151/resources/grade1/grade1.json
2025-09-20 04:32:41.215 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:41.215 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:41.215 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:41.217 [eventLoopGroupProxy-7-1 @call-handler#103] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.219 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:41.219 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:41.219 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:41.219 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:41.219 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35151/resources/grade1/lesson001/lesson001.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:41.219 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:41.220 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:41.220 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:41.221 [eventLoopGroupProxy-7-1 @call-handler#109] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.222 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:41.222 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:41.222 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:41.223 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:41.223 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:41.223 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:41.224 [eventLoopGroupProxy-7-1 @call-handler#112] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.226 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:41.226 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:41.226 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:41.226 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35151/resources/grade1/lesson001/lesson001.json to class kotlinx.io.Source
DEBUG: http://localhost:35151/resources/grade1/lesson001/lesson001.json Validating Opds Publication: title "Lesson 001" and identifier: https://example.app/id/lesson001
2025-09-20 04:32:41.280 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.280 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/cover.png.
2025-09-20 04:32:41.280 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.282 [eventLoopGroupProxy-7-1 @call-handler#117] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, cover.png]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.284 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.284 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.284 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.284 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/cover.png.
2025-09-20 04:32:41.284 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35151/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:41.284 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.284 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/cover.png.
2025-09-20 04:32:41.285 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.286 [eventLoopGroupProxy-7-1 @call-handler#123] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, cover.png]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.287 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.287 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.287 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/cover.png
2025-09-20 04:32:41.288 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.288 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:41.288 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.289 [eventLoopGroupProxy-7-1 @call-handler#126] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.291 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.291 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.291 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.291 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:41.291 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35151/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:41.291 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.291 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:41.291 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.292 [eventLoopGroupProxy-7-1 @call-handler#132] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.294 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.294 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.294 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.297 [eventLoopGroupProxy-7-3 @call-handler#136] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.300 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/audio.ogg
2025-09-20 04:32:41.300 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/audio.ogg.
2025-09-20 04:32:41.300 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/audio.ogg
2025-09-20 04:32:41.302 [eventLoopGroupProxy-7-1 @call-handler#140] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, audio.ogg]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, audio.ogg]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, audio.ogg]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.304 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/audio.ogg
2025-09-20 04:32:41.305 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/audio.ogg
2025-09-20 04:32:41.305 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/audio.ogg
2025-09-20 04:32:41.305 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/audio.ogg.
2025-09-20 04:32:41.305 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35151/resources/grade1/lesson001/audio.ogg to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:41.306 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/audio.ogg
2025-09-20 04:32:41.306 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/audio.ogg.
2025-09-20 04:32:41.306 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/audio.ogg
2025-09-20 04:32:41.307 [eventLoopGroupProxy-7-1 @call-handler#146] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, audio.ogg]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, audio.ogg]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, audio.ogg]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.309 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/audio.ogg
2025-09-20 04:32:41.309 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/audio.ogg
2025-09-20 04:32:41.309 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/audio.ogg
2025-09-20 04:32:41.309 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/video.mp4
2025-09-20 04:32:41.309 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/video.mp4.
2025-09-20 04:32:41.309 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/video.mp4
2025-09-20 04:32:41.310 [eventLoopGroupProxy-7-1 @call-handler#149] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, video.mp4]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, video.mp4]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, video.mp4]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.312 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/video.mp4
2025-09-20 04:32:41.312 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/video.mp4
2025-09-20 04:32:41.312 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/video.mp4
2025-09-20 04:32:41.312 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/video.mp4.
2025-09-20 04:32:41.312 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35151/resources/grade1/lesson001/video.mp4 to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:41.319 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/video.mp4
2025-09-20 04:32:41.319 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/video.mp4.
2025-09-20 04:32:41.319 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/video.mp4
2025-09-20 04:32:41.321 [eventLoopGroupProxy-7-1 @call-handler#155] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, video.mp4]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, video.mp4]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, video.mp4]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.322 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/video.mp4
2025-09-20 04:32:41.322 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/video.mp4
2025-09-20 04:32:41.322 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/video.mp4
2025-09-20 04:32:41.323 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/script.js
2025-09-20 04:32:41.323 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/script.js.
2025-09-20 04:32:41.323 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/script.js
2025-09-20 04:32:41.324 [eventLoopGroupProxy-7-1 @call-handler#158] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, script.js]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, script.js]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, script.js]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.325 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/script.js
2025-09-20 04:32:41.325 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/script.js
2025-09-20 04:32:41.325 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/script.js
2025-09-20 04:32:41.326 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/script.js.
2025-09-20 04:32:41.326 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35151/resources/grade1/lesson001/script.js to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:41.326 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/script.js
2025-09-20 04:32:41.326 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/script.js.
2025-09-20 04:32:41.326 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/script.js
2025-09-20 04:32:41.327 [eventLoopGroupProxy-7-1 @call-handler#164] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, script.js]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, script.js]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, script.js]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.328 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/script.js
2025-09-20 04:32:41.328 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/script.js
2025-09-20 04:32:41.328 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/script.js
DEBUG: http://localhost:35151/resources/grade1/lesson001/lesson001.json Skipping link as it has already been visited: http://localhost:35151/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:41.329 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.329 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:41.329 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.330 [eventLoopGroupProxy-7-1 @call-handler#167] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.342 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.342 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.342 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.342 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:41.343 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35151/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:41.344 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.344 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35151/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:41.344 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.346 [eventLoopGroupProxy-7-1 @call-handler#173] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:41.347 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.347 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35151/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:41.347 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35151/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:35151/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:35151/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:35151/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:35151/resources/grade1/lesson001/lesson001.json
Test running on port 35977
2025-09-20 04:32:43.446 [Test worker] INFO io.ktor.server.Application - Autoreload is disabled because the development mode is off.
2025-09-20 04:32:43.447 [Test worker] INFO io.ktor.server.Application - Application started in 0.001 seconds.
2025-09-20 04:32:43.466 [DefaultDispatcher-worker-3 @coroutine#177] INFO io.ktor.server.Application - Responding at http://0.0.0.0:35977
2025-09-20 04:32:43.469 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35977/resources/appmanifest.json
2025-09-20 04:32:43.469 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/appmanifest.json.
2025-09-20 04:32:43.469 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35977/resources/appmanifest.json
2025-09-20 04:32:43.490 [eventLoopGroupProxy-10-1 @call-handler#183] TRACE io.ktor.server.routing.Routing - Trace for [resources, appmanifest.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:43.498 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35977/resources/appmanifest.json
2025-09-20 04:32:43.499 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35977/resources/appmanifest.json
2025-09-20 04:32:43.499 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35977/resources/appmanifest.json
ERROR: http://localhost:35977/resources/appmanifest.json Link to http://localhost:35977/resources/appmanifest.json: No last-modified or etag header found
2025-09-20 04:32:43.499 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/appmanifest.json.
2025-09-20 04:32:43.499 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35977/resources/appmanifest.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:43.500 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35977/resources/appmanifest.json
2025-09-20 04:32:43.500 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/appmanifest.json.
2025-09-20 04:32:43.500 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35977/resources/appmanifest.json
2025-09-20 04:32:43.502 [eventLoopGroupProxy-10-1 @call-handler#189] TRACE io.ktor.server.routing.Routing - Trace for [resources, appmanifest.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:43.512 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35977/resources/appmanifest.json
2025-09-20 04:32:43.512 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35977/resources/appmanifest.json
2025-09-20 04:32:43.512 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35977/resources/appmanifest.json
2025-09-20 04:32:43.514 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35977/resources/appmanifest.json to class kotlinx.io.Source
2025-09-20 04:32:43.543 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35977/resources/app.html
2025-09-20 04:32:43.543 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/app.html.
2025-09-20 04:32:43.544 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35977/resources/app.html
2025-09-20 04:32:43.545 [eventLoopGroupProxy-10-1 @call-handler#194] TRACE io.ktor.server.routing.Routing - Trace for [resources, app.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[app.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[app.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:43.567 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35977/resources/app.html
2025-09-20 04:32:43.567 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35977/resources/app.html
2025-09-20 04:32:43.567 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35977/resources/app.html
ERROR: http://localhost:35977/resources/appmanifest.json Link to http://localhost:35977/resources/app.html: No last-modified or etag header found
2025-09-20 04:32:43.568 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/app.html.
2025-09-20 04:32:43.568 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35977/resources/app.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:43.568 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35977/resources/index.json
2025-09-20 04:32:43.568 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/index.json.
2025-09-20 04:32:43.568 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35977/resources/index.json
2025-09-20 04:32:43.573 [eventLoopGroupProxy-10-1 @call-handler#200] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:43.587 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35977/resources/index.json
2025-09-20 04:32:43.587 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35977/resources/index.json
2025-09-20 04:32:43.587 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35977/resources/index.json
ERROR: http://localhost:35977/resources/appmanifest.json Link to http://localhost:35977/resources/index.json: No last-modified or etag header found
2025-09-20 04:32:43.588 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/index.json.
2025-09-20 04:32:43.588 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35977/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:43.588 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35977/resources/index.json
2025-09-20 04:32:43.589 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/index.json.
2025-09-20 04:32:43.589 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35977/resources/index.json
2025-09-20 04:32:43.590 [eventLoopGroupProxy-10-1 @call-handler#206] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:43.601 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35977/resources/index.json
2025-09-20 04:32:43.601 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35977/resources/index.json
2025-09-20 04:32:43.601 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35977/resources/index.json
ERROR: http://localhost:35977/resources/appmanifest.json Link to http://localhost:35977/resources/index.json: No last-modified or etag header found
2025-09-20 04:32:43.602 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/index.json.
2025-09-20 04:32:43.602 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35977/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:43.602 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35977/resources/index.json
2025-09-20 04:32:43.602 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/index.json.
2025-09-20 04:32:43.602 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35977/resources/index.json
2025-09-20 04:32:43.604 [eventLoopGroupProxy-10-1 @call-handler#212] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:43.612 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35977/resources/index.json
2025-09-20 04:32:43.612 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35977/resources/index.json
2025-09-20 04:32:43.613 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35977/resources/index.json
2025-09-20 04:32:43.613 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35977/resources/index.json to class kotlinx.io.Source
WARN: http://localhost:35977/resources/index.json Navigation link to grade1/grade1.json SHOULD contain an icon
DEBUG: http://localhost:35977/resources/index.json Skipping link as it has already been visited: http://localhost:35977/resources/index.json
2025-09-20 04:32:43.780 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35977/resources/grade1/grade1.json
2025-09-20 04:32:43.780 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/grade1.json.
2025-09-20 04:32:43.783 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35977/resources/grade1/grade1.json
2025-09-20 04:32:43.786 [eventLoopGroupProxy-10-1 @call-handler#217] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, grade1.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:3 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:3 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:43.792 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35977/resources/grade1/grade1.json
2025-09-20 04:32:43.792 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35977/resources/grade1/grade1.json
2025-09-20 04:32:43.793 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35977/resources/grade1/grade1.json
ERROR: http://localhost:35977/resources/index.json Link to http://localhost:35977/resources/grade1/grade1.json: No last-modified or etag header found
2025-09-20 04:32:43.793 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/grade1.json.
2025-09-20 04:32:43.793 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35977/resources/grade1/grade1.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:43.793 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35977/resources/grade1/grade1.json
2025-09-20 04:32:43.793 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/grade1.json.
2025-09-20 04:32:43.793 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35977/resources/grade1/grade1.json
2025-09-20 04:32:43.799 [eventLoopGroupProxy-10-1 @call-handler#223] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, grade1.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:3 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:3 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:43.802 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35977/resources/grade1/grade1.json
2025-09-20 04:32:43.802 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35977/resources/grade1/grade1.json
2025-09-20 04:32:43.802 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35977/resources/grade1/grade1.json
2025-09-20 04:32:43.802 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35977/resources/grade1/grade1.json to class kotlinx.io.Source
DEBUG: http://localhost:35977/resources/grade1/grade1.json Validating Opds Publication: title "Lesson 001" and identifier: http://example.app/id/lesson001
2025-09-20 04:32:43.808 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35977/resources/grade1/lesson001/cover.png
2025-09-20 04:32:43.808 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/cover.png.
2025-09-20 04:32:43.808 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35977/resources/grade1/lesson001/cover.png
2025-09-20 04:32:43.817 [eventLoopGroupProxy-10-1 @call-handler#228] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, cover.png]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:43.823 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35977/resources/grade1/lesson001/cover.png
2025-09-20 04:32:43.824 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35977/resources/grade1/lesson001/cover.png
2025-09-20 04:32:43.824 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35977/resources/grade1/lesson001/cover.png
ERROR: http://localhost:35977/resources/grade1/grade1.json Link to http://localhost:35977/resources/grade1/lesson001/cover.png: No last-modified or etag header found
2025-09-20 04:32:43.824 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/cover.png.
2025-09-20 04:32:43.824 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35977/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:43.825 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35977/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:43.825 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:43.828 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35977/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:43.832 [eventLoopGroupProxy-10-1 @call-handler#234] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:43.836 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35977/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:43.836 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35977/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:43.836 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35977/resources/grade1/lesson001/lesson001.html
ERROR: http://localhost:35977/resources/grade1/grade1.json Link to http://localhost:35977/resources/grade1/lesson001/lesson001.html: No last-modified or etag header found
2025-09-20 04:32:43.836 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:43.836 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35977/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:43.845 [eventLoopGroupProxy-10-2 @call-handler#241] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
DEBUG: http://localhost:35977/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:35977/resources/grade1/grade1.json
2025-09-20 04:32:43.859 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35977/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:43.859 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:43.859 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35977/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:43.865 [eventLoopGroupProxy-10-1 @call-handler#245] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:43.878 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35977/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:43.879 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35977/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:43.879 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35977/resources/grade1/lesson001/lesson001.json
ERROR: http://localhost:35977/resources/grade1/grade1.json Link to http://localhost:35977/resources/grade1/lesson001/lesson001.json: No last-modified or etag header found
2025-09-20 04:32:43.879 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:43.879 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35977/resources/grade1/lesson001/lesson001.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:43.879 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35977/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:43.879 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:43.879 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35977/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:43.884 [eventLoopGroupProxy-10-1 @call-handler#251] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:43.886 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35977/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:43.886 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35977/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:43.886 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35977/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:43.887 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35977/resources/grade1/lesson001/lesson001.json to class kotlinx.io.Source
DEBUG: http://localhost:35977/resources/grade1/lesson001/lesson001.json Validating Opds Publication: title "Lesson 001" and identifier: https://example.app/id/lesson001
2025-09-20 04:32:44.004 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35977/resources/grade1/lesson001/cover.png
2025-09-20 04:32:44.004 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/cover.png.
2025-09-20 04:32:44.004 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35977/resources/grade1/lesson001/cover.png
2025-09-20 04:32:44.008 [eventLoopGroupProxy-10-1 @call-handler#256] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, cover.png]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:44.027 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35977/resources/grade1/lesson001/cover.png
2025-09-20 04:32:44.028 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35977/resources/grade1/lesson001/cover.png
2025-09-20 04:32:44.028 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35977/resources/grade1/lesson001/cover.png
ERROR: http://localhost:35977/resources/grade1/lesson001/lesson001.json Link to http://localhost:35977/resources/grade1/lesson001/cover.png: No last-modified or etag header found
2025-09-20 04:32:44.028 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/cover.png.
2025-09-20 04:32:44.028 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35977/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:44.031 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35977/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:44.031 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:44.031 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35977/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:44.039 [eventLoopGroupProxy-10-1 @call-handler#262] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:44.050 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35977/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:44.050 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35977/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:44.051 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35977/resources/grade1/lesson001/lesson001.html
ERROR: http://localhost:35977/resources/grade1/lesson001/lesson001.json Link to http://localhost:35977/resources/grade1/lesson001/lesson001.html: No last-modified or etag header found
2025-09-20 04:32:44.051 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:44.051 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35977/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:44.069 [eventLoopGroupProxy-10-3 @call-handler#269] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:44.082 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35977/resources/grade1/lesson001/audio.ogg
2025-09-20 04:32:44.082 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/audio.ogg.
2025-09-20 04:32:44.082 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35977/resources/grade1/lesson001/audio.ogg
2025-09-20 04:32:44.092 [eventLoopGroupProxy-10-1 @call-handler#273] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, audio.ogg]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, audio.ogg]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, audio.ogg]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:44.098 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35977/resources/grade1/lesson001/audio.ogg
2025-09-20 04:32:44.099 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35977/resources/grade1/lesson001/audio.ogg
2025-09-20 04:32:44.099 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35977/resources/grade1/lesson001/audio.ogg
ERROR: http://localhost:35977/resources/grade1/lesson001/lesson001.json Link to http://localhost:35977/resources/grade1/lesson001/audio.ogg: No last-modified or etag header found
2025-09-20 04:32:44.100 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/audio.ogg.
2025-09-20 04:32:44.100 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35977/resources/grade1/lesson001/audio.ogg to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:44.100 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35977/resources/grade1/lesson001/video.mp4
2025-09-20 04:32:44.100 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/video.mp4.
2025-09-20 04:32:44.100 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35977/resources/grade1/lesson001/video.mp4
2025-09-20 04:32:44.102 [eventLoopGroupProxy-10-1 @call-handler#279] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, video.mp4]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, video.mp4]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, video.mp4]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:44.115 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35977/resources/grade1/lesson001/video.mp4
2025-09-20 04:32:44.116 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35977/resources/grade1/lesson001/video.mp4
2025-09-20 04:32:44.116 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35977/resources/grade1/lesson001/video.mp4
ERROR: http://localhost:35977/resources/grade1/lesson001/lesson001.json Link to http://localhost:35977/resources/grade1/lesson001/video.mp4: No last-modified or etag header found
2025-09-20 04:32:44.116 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/video.mp4.
2025-09-20 04:32:44.116 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35977/resources/grade1/lesson001/video.mp4 to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:44.138 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35977/resources/grade1/lesson001/script.js
2025-09-20 04:32:44.139 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/script.js.
2025-09-20 04:32:44.139 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35977/resources/grade1/lesson001/script.js
2025-09-20 04:32:44.146 [eventLoopGroupProxy-10-1 @call-handler#285] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, script.js]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, script.js]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, script.js]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:44.150 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35977/resources/grade1/lesson001/script.js
2025-09-20 04:32:44.151 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35977/resources/grade1/lesson001/script.js
2025-09-20 04:32:44.151 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35977/resources/grade1/lesson001/script.js
ERROR: http://localhost:35977/resources/grade1/lesson001/lesson001.json Link to http://localhost:35977/resources/grade1/lesson001/script.js: No last-modified or etag header found
2025-09-20 04:32:44.151 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/script.js.
2025-09-20 04:32:44.151 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35977/resources/grade1/lesson001/script.js to class io.ktor.utils.io.ByteReadChannel
DEBUG: http://localhost:35977/resources/grade1/lesson001/lesson001.json Skipping link as it has already been visited: http://localhost:35977/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:44.158 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35977/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:44.159 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:44.159 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35977/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:44.167 [eventLoopGroupProxy-10-1 @call-handler#291] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:44.189 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35977/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:44.189 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35977/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:44.189 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35977/resources/grade1/lesson001/lesson001.html
ERROR: http://localhost:35977/resources/grade1/lesson001/lesson001.json Link to http://localhost:35977/resources/grade1/lesson001/lesson001.html: No last-modified or etag header found
2025-09-20 04:32:44.190 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35977/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:44.190 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35977/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
DEBUG: http://localhost:35977/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:35977/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:35977/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:35977/resources/grade1/lesson001/lesson001.json
Test running on port 34823
2025-09-20 04:32:46.231 [Test worker] INFO io.ktor.server.Application - Autoreload is disabled because the development mode is off.
2025-09-20 04:32:46.231 [Test worker] INFO io.ktor.server.Application - Application started in 0.0 seconds.
2025-09-20 04:32:46.233 [DefaultDispatcher-worker-9 @coroutine#298] INFO io.ktor.server.Application - Responding at http://0.0.0.0:34823
2025-09-20 04:32:46.234 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/appmanifest.json
2025-09-20 04:32:46.234 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/appmanifest.json.
2025-09-20 04:32:46.234 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/appmanifest.json
2025-09-20 04:32:46.236 [eventLoopGroupProxy-13-1 @call-handler#304] TRACE io.ktor.server.routing.Routing - Trace for [resources, appmanifest.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.237 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/appmanifest.json
2025-09-20 04:32:46.237 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/appmanifest.json
2025-09-20 04:32:46.237 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/appmanifest.json
2025-09-20 04:32:46.237 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/appmanifest.json.
2025-09-20 04:32:46.237 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:34823/resources/appmanifest.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:46.237 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/appmanifest.json
2025-09-20 04:32:46.237 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/appmanifest.json.
2025-09-20 04:32:46.237 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/appmanifest.json
2025-09-20 04:32:46.238 [eventLoopGroupProxy-13-1 @call-handler#310] TRACE io.ktor.server.routing.Routing - Trace for [resources, appmanifest.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.239 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/appmanifest.json
2025-09-20 04:32:46.239 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/appmanifest.json
2025-09-20 04:32:46.239 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/appmanifest.json
2025-09-20 04:32:46.239 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/appmanifest.json
2025-09-20 04:32:46.239 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/appmanifest.json.
2025-09-20 04:32:46.239 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/appmanifest.json
2025-09-20 04:32:46.240 [eventLoopGroupProxy-13-1 @call-handler#313] TRACE io.ktor.server.routing.Routing - Trace for [resources, appmanifest.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.240 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/appmanifest.json
2025-09-20 04:32:46.240 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/appmanifest.json
2025-09-20 04:32:46.240 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/appmanifest.json
2025-09-20 04:32:46.240 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:34823/resources/appmanifest.json to class kotlinx.io.Source
2025-09-20 04:32:46.245 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/app.html
2025-09-20 04:32:46.246 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/app.html.
2025-09-20 04:32:46.246 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/app.html
2025-09-20 04:32:46.250 [eventLoopGroupProxy-13-1 @call-handler#318] TRACE io.ktor.server.routing.Routing - Trace for [resources, app.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[app.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[app.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.253 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/app.html
2025-09-20 04:32:46.253 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/app.html
2025-09-20 04:32:46.253 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/app.html
2025-09-20 04:32:46.254 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/app.html.
2025-09-20 04:32:46.254 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:34823/resources/app.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:46.254 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/app.html
2025-09-20 04:32:46.254 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/app.html.
2025-09-20 04:32:46.254 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/app.html
2025-09-20 04:32:46.256 [eventLoopGroupProxy-13-1 @call-handler#324] TRACE io.ktor.server.routing.Routing - Trace for [resources, app.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[app.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[app.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.257 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/app.html
2025-09-20 04:32:46.257 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/app.html
2025-09-20 04:32:46.257 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/app.html
2025-09-20 04:32:46.257 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/index.json
2025-09-20 04:32:46.257 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/index.json.
2025-09-20 04:32:46.257 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/index.json
2025-09-20 04:32:46.258 [eventLoopGroupProxy-13-1 @call-handler#327] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.259 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/index.json
2025-09-20 04:32:46.259 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/index.json
2025-09-20 04:32:46.259 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/index.json
2025-09-20 04:32:46.259 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/index.json.
2025-09-20 04:32:46.259 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:34823/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:46.259 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/index.json
2025-09-20 04:32:46.259 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/index.json.
2025-09-20 04:32:46.259 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/index.json
2025-09-20 04:32:46.260 [eventLoopGroupProxy-13-1 @call-handler#333] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.261 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/index.json
2025-09-20 04:32:46.261 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/index.json
2025-09-20 04:32:46.261 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/index.json
2025-09-20 04:32:46.261 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/index.json
2025-09-20 04:32:46.261 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/index.json.
2025-09-20 04:32:46.261 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/index.json
2025-09-20 04:32:46.262 [eventLoopGroupProxy-13-1 @call-handler#336] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.263 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/index.json
2025-09-20 04:32:46.263 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/index.json
2025-09-20 04:32:46.263 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/index.json
2025-09-20 04:32:46.263 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/index.json.
2025-09-20 04:32:46.263 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:34823/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:46.263 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/index.json
2025-09-20 04:32:46.263 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/index.json.
2025-09-20 04:32:46.263 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/index.json
2025-09-20 04:32:46.264 [eventLoopGroupProxy-13-1 @call-handler#342] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.265 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/index.json
2025-09-20 04:32:46.265 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/index.json
2025-09-20 04:32:46.265 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/index.json
2025-09-20 04:32:46.265 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/index.json
2025-09-20 04:32:46.265 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/index.json.
2025-09-20 04:32:46.265 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/index.json
2025-09-20 04:32:46.266 [eventLoopGroupProxy-13-1 @call-handler#345] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.267 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/index.json
2025-09-20 04:32:46.267 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/index.json
2025-09-20 04:32:46.267 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/index.json
2025-09-20 04:32:46.267 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:34823/resources/index.json to class kotlinx.io.Source
WARN: http://localhost:34823/resources/index.json Navigation link to grade1/grade1.json SHOULD contain an icon
DEBUG: http://localhost:34823/resources/index.json Skipping link as it has already been visited: http://localhost:34823/resources/index.json
2025-09-20 04:32:46.336 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/grade1/grade1.json
2025-09-20 04:32:46.336 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/grade1.json.
2025-09-20 04:32:46.336 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/grade1/grade1.json
2025-09-20 04:32:46.337 [eventLoopGroupProxy-13-1 @call-handler#350] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, grade1.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:3 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:3 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.338 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/grade1/grade1.json
2025-09-20 04:32:46.339 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/grade1/grade1.json
2025-09-20 04:32:46.339 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/grade1/grade1.json
2025-09-20 04:32:46.339 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/grade1.json.
2025-09-20 04:32:46.339 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:34823/resources/grade1/grade1.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:46.339 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/grade1/grade1.json
2025-09-20 04:32:46.339 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/grade1.json.
2025-09-20 04:32:46.339 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/grade1/grade1.json
2025-09-20 04:32:46.340 [eventLoopGroupProxy-13-1 @call-handler#356] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, grade1.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:3 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:3 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.341 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/grade1/grade1.json
2025-09-20 04:32:46.341 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/grade1/grade1.json
2025-09-20 04:32:46.341 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/grade1/grade1.json
2025-09-20 04:32:46.342 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/grade1/grade1.json
2025-09-20 04:32:46.342 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/grade1.json.
2025-09-20 04:32:46.342 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/grade1/grade1.json
2025-09-20 04:32:46.343 [eventLoopGroupProxy-13-1 @call-handler#359] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, grade1.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:3 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:3 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.343 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/grade1/grade1.json
2025-09-20 04:32:46.343 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/grade1/grade1.json
2025-09-20 04:32:46.343 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/grade1/grade1.json
2025-09-20 04:32:46.344 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:34823/resources/grade1/grade1.json to class kotlinx.io.Source
DEBUG: http://localhost:34823/resources/grade1/grade1.json Validating Opds Publication: title "Lesson 001" and identifier: http://example.app/id/lesson001
2025-09-20 04:32:46.345 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/grade1/cover-small.jpg
2025-09-20 04:32:46.345 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/cover-small.jpg.
2025-09-20 04:32:46.345 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/grade1/cover-small.jpg
2025-09-20 04:32:46.347 [eventLoopGroupProxy-13-1 @call-handler#364] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, cover-small.jpg]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:3 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, cover-small.jpg]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:3 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, cover-small.jpg]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.348 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/grade1/cover-small.jpg
2025-09-20 04:32:46.348 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/grade1/cover-small.jpg
2025-09-20 04:32:46.348 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/grade1/cover-small.jpg
ERROR: http://localhost:34823/resources/grade1/grade1.json Link to http://localhost:34823/resources/grade1/cover-small.jpg: Response status code not HTTP OK/200. Got: 404
2025-09-20 04:32:46.349 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:34823/resources/grade1/cover-small.jpg to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:46.349 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.349 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:46.349 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.350 [eventLoopGroupProxy-13-1 @call-handler#368] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.351 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.351 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.351 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.351 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:46.351 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:34823/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:46.351 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.351 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:46.351 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.352 [eventLoopGroupProxy-13-1 @call-handler#374] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.353 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.353 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.353 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.356 [eventLoopGroupProxy-13-2 @call-handler#378] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
DEBUG: http://localhost:34823/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:34823/resources/grade1/grade1.json
2025-09-20 04:32:46.359 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:46.359 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:46.359 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:46.361 [eventLoopGroupProxy-13-1 @call-handler#382] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.362 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:46.362 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:46.362 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:46.362 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:46.362 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:34823/resources/grade1/lesson001/lesson001.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:46.362 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:46.362 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:46.362 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:46.363 [eventLoopGroupProxy-13-1 @call-handler#388] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.364 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:46.364 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:46.364 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:46.364 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:46.364 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:46.364 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:46.365 [eventLoopGroupProxy-13-1 @call-handler#391] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.366 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:46.366 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:46.366 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:46.366 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:34823/resources/grade1/lesson001/lesson001.json to class kotlinx.io.Source
DEBUG: http://localhost:34823/resources/grade1/lesson001/lesson001.json Validating Opds Publication: title "Lesson 001" and identifier: https://example.app/id/lesson001
2025-09-20 04:32:46.396 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/grade1/lesson001/cover.png
2025-09-20 04:32:46.396 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/lesson001/cover.png.
2025-09-20 04:32:46.396 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/grade1/lesson001/cover.png
2025-09-20 04:32:46.397 [eventLoopGroupProxy-13-1 @call-handler#396] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, cover.png]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.398 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/grade1/lesson001/cover.png
2025-09-20 04:32:46.398 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/grade1/lesson001/cover.png
2025-09-20 04:32:46.398 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/grade1/lesson001/cover.png
2025-09-20 04:32:46.398 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/lesson001/cover.png.
2025-09-20 04:32:46.398 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:34823/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:46.398 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/grade1/lesson001/cover.png
2025-09-20 04:32:46.398 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/lesson001/cover.png.
2025-09-20 04:32:46.398 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/grade1/lesson001/cover.png
2025-09-20 04:32:46.399 [eventLoopGroupProxy-13-1 @call-handler#402] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, cover.png]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.400 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/grade1/lesson001/cover.png
2025-09-20 04:32:46.400 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/grade1/lesson001/cover.png
2025-09-20 04:32:46.400 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/grade1/lesson001/cover.png
2025-09-20 04:32:46.400 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.400 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:46.400 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.401 [eventLoopGroupProxy-13-1 @call-handler#405] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.401 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.401 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.401 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.402 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:46.402 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:34823/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:46.402 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.402 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:46.402 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.402 [eventLoopGroupProxy-13-1 @call-handler#411] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.403 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.403 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.403 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.405 [eventLoopGroupProxy-13-3 @call-handler#415] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
ERROR: http://localhost:34823/resources/grade1/lesson001/lesson001.json The manifest which is discovered using the
discovery process as per the Readium spec ( https://github.com/readium/webpub-manifest?tab=readme-ov-file#5-discovering-a-manifest )
MUST contain a list of all resources required.
DEBUG: http://localhost:34823/resources/grade1/lesson001/lesson001.json Skipping link as it has already been visited: http://localhost:34823/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:46.407 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.407 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:46.407 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.408 [eventLoopGroupProxy-13-1 @call-handler#419] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.409 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.409 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.409 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.409 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:46.409 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:34823/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:46.409 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.409 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:34823/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:46.409 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.410 [eventLoopGroupProxy-13-1 @call-handler#425] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:46.410 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.410 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:34823/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:46.410 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:34823/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:34823/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:34823/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:34823/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:34823/resources/grade1/lesson001/lesson001.json
Test running on port 35029
2025-09-20 04:32:48.458 [Test worker] INFO io.ktor.server.Application - Autoreload is disabled because the development mode is off.
2025-09-20 04:32:48.463 [Test worker] INFO io.ktor.server.Application - Application started in 0.005 seconds.
2025-09-20 04:32:48.472 [DefaultDispatcher-worker-10 @coroutine#429] INFO io.ktor.server.Application - Responding at http://0.0.0.0:35029
2025-09-20 04:32:48.475 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/appmanifest.json
2025-09-20 04:32:48.475 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/appmanifest.json.
2025-09-20 04:32:48.475 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/appmanifest.json
2025-09-20 04:32:48.489 [eventLoopGroupProxy-16-1 @call-handler#435] TRACE io.ktor.server.routing.Routing - Trace for [resources, appmanifest.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.495 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/appmanifest.json
2025-09-20 04:32:48.495 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/appmanifest.json
2025-09-20 04:32:48.495 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/appmanifest.json
2025-09-20 04:32:48.495 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/appmanifest.json.
2025-09-20 04:32:48.495 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35029/resources/appmanifest.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:48.498 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/appmanifest.json
2025-09-20 04:32:48.498 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/appmanifest.json.
2025-09-20 04:32:48.498 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/appmanifest.json
2025-09-20 04:32:48.499 [eventLoopGroupProxy-16-1 @call-handler#441] TRACE io.ktor.server.routing.Routing - Trace for [resources, appmanifest.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.500 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/appmanifest.json
2025-09-20 04:32:48.500 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/appmanifest.json
2025-09-20 04:32:48.500 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/appmanifest.json
2025-09-20 04:32:48.501 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/appmanifest.json
2025-09-20 04:32:48.501 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/appmanifest.json.
2025-09-20 04:32:48.501 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/appmanifest.json
2025-09-20 04:32:48.504 [eventLoopGroupProxy-16-1 @call-handler#444] TRACE io.ktor.server.routing.Routing - Trace for [resources, appmanifest.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.507 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/appmanifest.json
2025-09-20 04:32:48.507 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/appmanifest.json
2025-09-20 04:32:48.507 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/appmanifest.json
2025-09-20 04:32:48.507 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35029/resources/appmanifest.json to class kotlinx.io.Source
2025-09-20 04:32:48.523 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/app.html
2025-09-20 04:32:48.524 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/app.html.
2025-09-20 04:32:48.524 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/app.html
2025-09-20 04:32:48.525 [eventLoopGroupProxy-16-1 @call-handler#449] TRACE io.ktor.server.routing.Routing - Trace for [resources, app.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[app.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[app.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.531 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/app.html
2025-09-20 04:32:48.531 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/app.html
2025-09-20 04:32:48.531 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/app.html
2025-09-20 04:32:48.532 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/app.html.
2025-09-20 04:32:48.532 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35029/resources/app.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:48.532 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/app.html
2025-09-20 04:32:48.532 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/app.html.
2025-09-20 04:32:48.532 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/app.html
2025-09-20 04:32:48.537 [eventLoopGroupProxy-16-1 @call-handler#455] TRACE io.ktor.server.routing.Routing - Trace for [resources, app.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[app.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[app.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.538 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/app.html
2025-09-20 04:32:48.538 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/app.html
2025-09-20 04:32:48.538 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/app.html
2025-09-20 04:32:48.539 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/index.json
2025-09-20 04:32:48.539 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/index.json.
2025-09-20 04:32:48.539 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/index.json
2025-09-20 04:32:48.540 [eventLoopGroupProxy-16-1 @call-handler#458] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.544 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/index.json
2025-09-20 04:32:48.544 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/index.json
2025-09-20 04:32:48.544 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/index.json
2025-09-20 04:32:48.545 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/index.json.
2025-09-20 04:32:48.545 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35029/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:48.545 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/index.json
2025-09-20 04:32:48.545 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/index.json.
2025-09-20 04:32:48.545 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/index.json
2025-09-20 04:32:48.546 [eventLoopGroupProxy-16-1 @call-handler#464] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.547 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/index.json
2025-09-20 04:32:48.547 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/index.json
2025-09-20 04:32:48.547 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/index.json
2025-09-20 04:32:48.548 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/index.json
2025-09-20 04:32:48.548 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/index.json.
2025-09-20 04:32:48.548 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/index.json
2025-09-20 04:32:48.554 [eventLoopGroupProxy-16-1 @call-handler#467] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.561 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/index.json
2025-09-20 04:32:48.561 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/index.json
2025-09-20 04:32:48.561 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/index.json
2025-09-20 04:32:48.562 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/index.json.
2025-09-20 04:32:48.562 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35029/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:48.562 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/index.json
2025-09-20 04:32:48.562 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/index.json.
2025-09-20 04:32:48.562 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/index.json
2025-09-20 04:32:48.571 [eventLoopGroupProxy-16-1 @call-handler#473] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.577 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/index.json
2025-09-20 04:32:48.577 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/index.json
2025-09-20 04:32:48.577 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/index.json
2025-09-20 04:32:48.577 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/index.json
2025-09-20 04:32:48.577 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/index.json.
2025-09-20 04:32:48.577 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/index.json
2025-09-20 04:32:48.586 [eventLoopGroupProxy-16-1 @call-handler#476] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.599 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/index.json
2025-09-20 04:32:48.599 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/index.json
2025-09-20 04:32:48.599 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/index.json
2025-09-20 04:32:48.599 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35029/resources/index.json to class kotlinx.io.Source
WARN: http://localhost:35029/resources/index.json Navigation link to grade1/grade1.json SHOULD contain an icon
DEBUG: http://localhost:35029/resources/index.json Skipping link as it has already been visited: http://localhost:35029/resources/index.json
2025-09-20 04:32:48.713 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/grade1/grade1.json
2025-09-20 04:32:48.714 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/grade1.json.
2025-09-20 04:32:48.714 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/grade1/grade1.json
2025-09-20 04:32:48.719 [eventLoopGroupProxy-16-1 @call-handler#481] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, grade1.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:3 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:3 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.730 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/grade1/grade1.json
2025-09-20 04:32:48.730 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/grade1/grade1.json
2025-09-20 04:32:48.730 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/grade1/grade1.json
2025-09-20 04:32:48.731 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/grade1.json.
2025-09-20 04:32:48.731 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35029/resources/grade1/grade1.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:48.731 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/grade1/grade1.json
2025-09-20 04:32:48.731 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/grade1.json.
2025-09-20 04:32:48.731 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/grade1/grade1.json
2025-09-20 04:32:48.732 [eventLoopGroupProxy-16-1 @call-handler#487] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, grade1.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:3 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:3 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.734 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/grade1/grade1.json
2025-09-20 04:32:48.734 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/grade1/grade1.json
2025-09-20 04:32:48.734 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/grade1/grade1.json
2025-09-20 04:32:48.734 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/grade1/grade1.json
2025-09-20 04:32:48.734 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/grade1.json.
2025-09-20 04:32:48.734 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/grade1/grade1.json
2025-09-20 04:32:48.735 [eventLoopGroupProxy-16-1 @call-handler#490] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, grade1.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:3 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:3 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.738 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/grade1/grade1.json
2025-09-20 04:32:48.738 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/grade1/grade1.json
2025-09-20 04:32:48.738 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/grade1/grade1.json
2025-09-20 04:32:48.738 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35029/resources/grade1/grade1.json to class kotlinx.io.Source
DEBUG: http://localhost:35029/resources/grade1/grade1.json Validating Opds Publication: title "Lesson 001" and identifier: http://example.app/id/lesson001
2025-09-20 04:32:48.740 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/grade1/cover-small.jpg
2025-09-20 04:32:48.740 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/cover-small.jpg.
2025-09-20 04:32:48.740 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/grade1/cover-small.jpg
2025-09-20 04:32:48.743 [eventLoopGroupProxy-16-1 @call-handler#495] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, cover-small.jpg]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:3 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, cover-small.jpg]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:3 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, cover-small.jpg]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.749 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/grade1/cover-small.jpg
2025-09-20 04:32:48.749 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/grade1/cover-small.jpg
2025-09-20 04:32:48.749 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/grade1/cover-small.jpg
ERROR: http://localhost:35029/resources/grade1/grade1.json Link to http://localhost:35029/resources/grade1/cover-small.jpg: Response status code not HTTP OK/200. Got: 404
2025-09-20 04:32:48.750 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35029/resources/grade1/cover-small.jpg to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:48.750 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.750 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:48.750 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.752 [eventLoopGroupProxy-16-1 @call-handler#499] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.757 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.757 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.757 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.758 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:48.758 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35029/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:48.758 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.758 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:48.759 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.761 [eventLoopGroupProxy-16-1 @call-handler#505] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.766 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.766 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.766 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.779 [eventLoopGroupProxy-16-2 @call-handler#509] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
DEBUG: http://localhost:35029/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:35029/resources/grade1/grade1.json
2025-09-20 04:32:48.783 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:48.783 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:48.783 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:48.784 [eventLoopGroupProxy-16-1 @call-handler#513] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.786 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:48.786 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:48.786 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:48.786 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:48.786 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35029/resources/grade1/lesson001/lesson001.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:48.786 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:48.786 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:48.786 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:48.787 [eventLoopGroupProxy-16-1 @call-handler#519] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.788 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:48.788 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:48.788 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:48.789 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:48.789 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:48.789 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:48.790 [eventLoopGroupProxy-16-1 @call-handler#522] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.790 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:48.791 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:48.792 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:48.792 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35029/resources/grade1/lesson001/lesson001.json to class kotlinx.io.Source
DEBUG: http://localhost:35029/resources/grade1/lesson001/lesson001.json Validating Opds Publication: title "Lesson 001" and identifier: https://example.app/id/lesson001
2025-09-20 04:32:48.887 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/grade1/lesson001/cover.png
2025-09-20 04:32:48.888 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/lesson001/cover.png.
2025-09-20 04:32:48.888 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/grade1/lesson001/cover.png
2025-09-20 04:32:48.889 [eventLoopGroupProxy-16-1 @call-handler#527] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, cover.png]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.891 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/grade1/lesson001/cover.png
2025-09-20 04:32:48.891 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/grade1/lesson001/cover.png
2025-09-20 04:32:48.891 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/grade1/lesson001/cover.png
ERROR: http://localhost:35029/resources/grade1/lesson001/lesson001.json Link to http://localhost:35029/resources/grade1/lesson001/cover.png: Response status code not HTTP OK/200. Got: 404
2025-09-20 04:32:48.891 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35029/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:48.892 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.892 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:48.892 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.892 [eventLoopGroupProxy-16-1 @call-handler#531] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.896 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.896 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.896 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.896 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:48.896 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35029/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:48.896 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.896 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:48.896 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.897 [eventLoopGroupProxy-16-1 @call-handler#537] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.898 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.899 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.899 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.915 [eventLoopGroupProxy-16-3 @call-handler#541] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.924 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/grade1/lesson001/audio.ogg
2025-09-20 04:32:48.925 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/lesson001/audio.ogg.
2025-09-20 04:32:48.925 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/grade1/lesson001/audio.ogg
2025-09-20 04:32:48.929 [eventLoopGroupProxy-16-1 @call-handler#545] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, audio.ogg]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, audio.ogg]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, audio.ogg]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.931 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/grade1/lesson001/audio.ogg
2025-09-20 04:32:48.931 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/grade1/lesson001/audio.ogg
2025-09-20 04:32:48.932 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/grade1/lesson001/audio.ogg
ERROR: http://localhost:35029/resources/grade1/lesson001/lesson001.json Link to http://localhost:35029/resources/grade1/lesson001/audio.ogg: Response status code not HTTP OK/200. Got: 404
2025-09-20 04:32:48.936 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35029/resources/grade1/lesson001/audio.ogg to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:48.937 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/grade1/lesson001/video.mp4
2025-09-20 04:32:48.937 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/lesson001/video.mp4.
2025-09-20 04:32:48.937 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/grade1/lesson001/video.mp4
2025-09-20 04:32:48.938 [eventLoopGroupProxy-16-1 @call-handler#549] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, video.mp4]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, video.mp4]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, video.mp4]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.941 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/grade1/lesson001/video.mp4
2025-09-20 04:32:48.941 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/grade1/lesson001/video.mp4
2025-09-20 04:32:48.941 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/grade1/lesson001/video.mp4
ERROR: http://localhost:35029/resources/grade1/lesson001/lesson001.json Link to http://localhost:35029/resources/grade1/lesson001/video.mp4: Response status code not HTTP OK/200. Got: 404
2025-09-20 04:32:48.942 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35029/resources/grade1/lesson001/video.mp4 to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:48.942 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/grade1/lesson001/script.js
2025-09-20 04:32:48.942 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/lesson001/script.js.
2025-09-20 04:32:48.942 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/grade1/lesson001/script.js
2025-09-20 04:32:48.946 [eventLoopGroupProxy-16-1 @call-handler#553] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, script.js]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, script.js]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, script.js]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.948 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/grade1/lesson001/script.js
2025-09-20 04:32:48.952 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/grade1/lesson001/script.js
2025-09-20 04:32:48.952 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/grade1/lesson001/script.js
ERROR: http://localhost:35029/resources/grade1/lesson001/lesson001.json Link to http://localhost:35029/resources/grade1/lesson001/script.js: Response status code not HTTP OK/200. Got: 404
2025-09-20 04:32:48.953 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35029/resources/grade1/lesson001/script.js to class io.ktor.utils.io.ByteReadChannel
DEBUG: http://localhost:35029/resources/grade1/lesson001/lesson001.json Skipping link as it has already been visited: http://localhost:35029/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:48.953 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.953 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:48.953 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.954 [eventLoopGroupProxy-16-1 @call-handler#557] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.956 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.956 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.956 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.956 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:48.956 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35029/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:48.956 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.956 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35029/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:48.956 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.957 [eventLoopGroupProxy-16-1 @call-handler#563] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:48.968 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.968 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35029/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:48.968 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35029/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:35029/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:35029/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:35029/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:35029/resources/grade1/lesson001/lesson001.json
Test running on port 35001
2025-09-20 04:32:51.069 [Test worker] INFO io.ktor.server.Application - Autoreload is disabled because the development mode is off.
2025-09-20 04:32:51.069 [Test worker] INFO io.ktor.server.Application - Application started in 0.0 seconds.
2025-09-20 04:32:51.076 [DefaultDispatcher-worker-1 @coroutine#567] INFO io.ktor.server.Application - Responding at http://0.0.0.0:35001
2025-09-20 04:32:51.077 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/appmanifest.json
2025-09-20 04:32:51.077 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/appmanifest.json.
2025-09-20 04:32:51.077 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/appmanifest.json
2025-09-20 04:32:51.091 [eventLoopGroupProxy-19-1 @call-handler#573] TRACE io.ktor.server.routing.Routing - Trace for [resources, appmanifest.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.094 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/appmanifest.json
2025-09-20 04:32:51.094 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/appmanifest.json
2025-09-20 04:32:51.094 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/appmanifest.json
2025-09-20 04:32:51.095 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/appmanifest.json.
2025-09-20 04:32:51.095 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35001/resources/appmanifest.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:51.095 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/appmanifest.json
2025-09-20 04:32:51.095 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/appmanifest.json.
2025-09-20 04:32:51.095 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/appmanifest.json
2025-09-20 04:32:51.102 [eventLoopGroupProxy-19-1 @call-handler#579] TRACE io.ktor.server.routing.Routing - Trace for [resources, appmanifest.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.105 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/appmanifest.json
2025-09-20 04:32:51.105 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/appmanifest.json
2025-09-20 04:32:51.105 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/appmanifest.json
2025-09-20 04:32:51.105 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/appmanifest.json
2025-09-20 04:32:51.105 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/appmanifest.json.
2025-09-20 04:32:51.105 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/appmanifest.json
2025-09-20 04:32:51.108 [eventLoopGroupProxy-19-1 @call-handler#582] TRACE io.ktor.server.routing.Routing - Trace for [resources, appmanifest.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[appmanifest.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.112 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/appmanifest.json
2025-09-20 04:32:51.112 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/appmanifest.json
2025-09-20 04:32:51.112 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/appmanifest.json
2025-09-20 04:32:51.113 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35001/resources/appmanifest.json to class kotlinx.io.Source
2025-09-20 04:32:51.131 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/app.html
2025-09-20 04:32:51.131 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/app.html.
2025-09-20 04:32:51.131 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/app.html
2025-09-20 04:32:51.133 [eventLoopGroupProxy-19-1 @call-handler#587] TRACE io.ktor.server.routing.Routing - Trace for [resources, app.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[app.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[app.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.138 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/app.html
2025-09-20 04:32:51.138 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/app.html
2025-09-20 04:32:51.138 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/app.html
2025-09-20 04:32:51.138 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/app.html.
2025-09-20 04:32:51.138 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35001/resources/app.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:51.139 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/app.html
2025-09-20 04:32:51.139 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/app.html.
2025-09-20 04:32:51.139 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/app.html
2025-09-20 04:32:51.143 [eventLoopGroupProxy-19-1 @call-handler#593] TRACE io.ktor.server.routing.Routing - Trace for [resources, app.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[app.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[app.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.147 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/app.html
2025-09-20 04:32:51.147 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/app.html
2025-09-20 04:32:51.147 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/app.html
2025-09-20 04:32:51.148 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/index.json
2025-09-20 04:32:51.148 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/index.json.
2025-09-20 04:32:51.148 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/index.json
2025-09-20 04:32:51.150 [eventLoopGroupProxy-19-1 @call-handler#596] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.152 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/index.json
2025-09-20 04:32:51.152 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/index.json
2025-09-20 04:32:51.152 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/index.json
2025-09-20 04:32:51.152 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/index.json.
2025-09-20 04:32:51.152 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35001/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:51.152 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/index.json
2025-09-20 04:32:51.152 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/index.json.
2025-09-20 04:32:51.152 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/index.json
2025-09-20 04:32:51.158 [eventLoopGroupProxy-19-1 @call-handler#602] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.160 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/index.json
2025-09-20 04:32:51.160 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/index.json
2025-09-20 04:32:51.160 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/index.json
2025-09-20 04:32:51.161 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/index.json
2025-09-20 04:32:51.161 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/index.json.
2025-09-20 04:32:51.161 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/index.json
2025-09-20 04:32:51.162 [eventLoopGroupProxy-19-1 @call-handler#605] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.163 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/index.json
2025-09-20 04:32:51.163 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/index.json
2025-09-20 04:32:51.163 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/index.json
2025-09-20 04:32:51.163 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/index.json.
2025-09-20 04:32:51.163 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35001/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:51.163 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/index.json
2025-09-20 04:32:51.163 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/index.json.
2025-09-20 04:32:51.163 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/index.json
2025-09-20 04:32:51.164 [eventLoopGroupProxy-19-1 @call-handler#611] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.164 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/index.json
2025-09-20 04:32:51.164 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/index.json
2025-09-20 04:32:51.164 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/index.json
2025-09-20 04:32:51.165 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/index.json
2025-09-20 04:32:51.165 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/index.json.
2025-09-20 04:32:51.165 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/index.json
2025-09-20 04:32:51.165 [eventLoopGroupProxy-19-1 @call-handler#614] TRACE io.ktor.server.routing.Routing - Trace for [resources, index.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:2 -> SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:2 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[index.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.166 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/index.json
2025-09-20 04:32:51.166 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/index.json
2025-09-20 04:32:51.166 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/index.json
2025-09-20 04:32:51.166 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35001/resources/index.json to class kotlinx.io.Source
WARN: http://localhost:35001/resources/index.json Navigation link to grade1/grade1.json SHOULD contain an icon
DEBUG: http://localhost:35001/resources/index.json Skipping link as it has already been visited: http://localhost:35001/resources/index.json
2025-09-20 04:32:51.212 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/grade1/grade1.json
2025-09-20 04:32:51.212 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/grade1.json.
2025-09-20 04:32:51.212 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/grade1/grade1.json
2025-09-20 04:32:51.213 [eventLoopGroupProxy-19-1 @call-handler#619] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, grade1.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:3 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:3 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.214 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/grade1/grade1.json
2025-09-20 04:32:51.214 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/grade1/grade1.json
2025-09-20 04:32:51.214 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/grade1/grade1.json
2025-09-20 04:32:51.214 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/grade1.json.
2025-09-20 04:32:51.214 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35001/resources/grade1/grade1.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:51.214 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/grade1/grade1.json
2025-09-20 04:32:51.214 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/grade1.json.
2025-09-20 04:32:51.214 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/grade1/grade1.json
2025-09-20 04:32:51.214 [eventLoopGroupProxy-19-1 @call-handler#625] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, grade1.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:3 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:3 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.215 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/grade1/grade1.json
2025-09-20 04:32:51.215 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/grade1/grade1.json
2025-09-20 04:32:51.215 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/grade1/grade1.json
2025-09-20 04:32:51.215 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/grade1/grade1.json
2025-09-20 04:32:51.215 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/grade1.json.
2025-09-20 04:32:51.215 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/grade1/grade1.json
2025-09-20 04:32:51.216 [eventLoopGroupProxy-19-1 @call-handler#628] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, grade1.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:3 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:3 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, grade1.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.216 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/grade1/grade1.json
2025-09-20 04:32:51.216 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/grade1/grade1.json
2025-09-20 04:32:51.216 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/grade1/grade1.json
2025-09-20 04:32:51.216 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35001/resources/grade1/grade1.json to class kotlinx.io.Source
DEBUG: http://localhost:35001/resources/grade1/grade1.json Validating Opds Publication: title "Lesson 001" and identifier: http://example.app/id/lesson001
2025-09-20 04:32:51.217 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/grade1/cover-small.jpg
2025-09-20 04:32:51.217 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/cover-small.jpg.
2025-09-20 04:32:51.217 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/grade1/cover-small.jpg
2025-09-20 04:32:51.218 [eventLoopGroupProxy-19-1 @call-handler#633] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, cover-small.jpg]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:3 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, cover-small.jpg]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:3 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, cover-small.jpg]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.218 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/grade1/cover-small.jpg
2025-09-20 04:32:51.218 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/grade1/cover-small.jpg
2025-09-20 04:32:51.218 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/grade1/cover-small.jpg
ERROR: http://localhost:35001/resources/grade1/grade1.json Link to http://localhost:35001/resources/grade1/cover-small.jpg: Response status code not HTTP OK/200. Got: 404
2025-09-20 04:32:51.219 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35001/resources/grade1/cover-small.jpg to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:51.219 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.219 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:51.219 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.219 [eventLoopGroupProxy-19-1 @call-handler#637] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.220 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.220 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.220 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.220 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:51.220 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35001/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:51.220 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.220 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:51.220 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.221 [eventLoopGroupProxy-19-1 @call-handler#643] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.223 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.223 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.223 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.225 [eventLoopGroupProxy-19-2 @call-handler#647] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
ERROR: http://localhost:35001/resources/grade1/grade1.json Manifest not discovered for learning resource ID URL: http://localhost:35001/resources/grade1/lesson001/lesson001.html .Readium publication manifest must be discoverable using a linktag in HTML or Link header for the learning resource ID URL as per https://github.com/readium/webpub-manifest?tab=readme-ov-file#5-discovering-a-manifest
DEBUG: http://localhost:35001/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:35001/resources/grade1/grade1.json
2025-09-20 04:32:51.227 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:51.227 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:51.227 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:51.228 [eventLoopGroupProxy-19-1 @call-handler#651] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.229 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:51.229 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:51.229 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:51.229 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:51.229 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35001/resources/grade1/lesson001/lesson001.json to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:51.230 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:51.230 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:51.230 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:51.230 [eventLoopGroupProxy-19-1 @call-handler#657] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.231 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:51.231 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:51.231 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:51.231 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:51.231 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/lesson001/lesson001.json.
2025-09-20 04:32:51.231 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:51.231 [eventLoopGroupProxy-19-1 @call-handler#660] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.json]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.json]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.232 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:51.232 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:51.232 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:51.232 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35001/resources/grade1/lesson001/lesson001.json to class kotlinx.io.Source
DEBUG: http://localhost:35001/resources/grade1/lesson001/lesson001.json Validating Opds Publication: title "Lesson 001" and identifier: https://example.app/id/lesson001
2025-09-20 04:32:51.284 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/grade1/lesson001/cover.png
2025-09-20 04:32:51.284 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/lesson001/cover.png.
2025-09-20 04:32:51.284 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/grade1/lesson001/cover.png
2025-09-20 04:32:51.292 [eventLoopGroupProxy-19-1 @call-handler#665] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, cover.png]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.297 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/grade1/lesson001/cover.png
2025-09-20 04:32:51.297 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/grade1/lesson001/cover.png
2025-09-20 04:32:51.297 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/grade1/lesson001/cover.png
2025-09-20 04:32:51.297 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/lesson001/cover.png.
2025-09-20 04:32:51.297 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35001/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:51.297 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/grade1/lesson001/cover.png
2025-09-20 04:32:51.297 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/lesson001/cover.png.
2025-09-20 04:32:51.297 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/grade1/lesson001/cover.png
2025-09-20 04:32:51.299 [eventLoopGroupProxy-19-1 @call-handler#671] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, cover.png]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, cover.png]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.304 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/grade1/lesson001/cover.png
2025-09-20 04:32:51.304 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/grade1/lesson001/cover.png
2025-09-20 04:32:51.304 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/grade1/lesson001/cover.png
2025-09-20 04:32:51.305 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.305 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:51.305 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.306 [eventLoopGroupProxy-19-1 @call-handler#674] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.310 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.310 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.310 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.311 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:51.311 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35001/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:51.311 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.311 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:51.311 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.312 [eventLoopGroupProxy-19-1 @call-handler#680] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.313 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.314 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.314 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.331 [eventLoopGroupProxy-19-3 @call-handler#684] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
ERROR: http://localhost:35001/resources/grade1/lesson001/lesson001.json Manifest not discovered for learning resource ID URL: http://localhost:35001/resources/grade1/lesson001/lesson001.html .Readium publication manifest must be discoverable using a linktag in HTML or Link header for the learning resource ID URL as per https://github.com/readium/webpub-manifest?tab=readme-ov-file#5-discovering-a-manifest
DEBUG: http://localhost:35001/resources/grade1/lesson001/lesson001.json Skipping link as it has already been visited: http://localhost:35001/resources/grade1/lesson001/lesson001.json
2025-09-20 04:32:51.336 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.336 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:51.336 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.338 [eventLoopGroupProxy-19-1 @call-handler#688] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.344 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.344 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.344 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.348 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Response body type class io.ktor.utils.io.ByteReadChannel is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:51.348 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:35001/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-20 04:32:51.352 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.352 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:35001/resources/grade1/lesson001/lesson001.html.
2025-09-20 04:32:51.352 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.357 [eventLoopGroupProxy-19-1 @call-handler#694] TRACE io.ktor.server.routing.Routing - Trace for [resources, grade1, lesson001, lesson001.html]
/, segment:0 -> SUCCESS @ /
/(staticContent), segment:0 -> SUCCESS @ /(staticContent)
/(staticContent)/resources, segment:1 -> SUCCESS @ /(staticContent)/resources
/(staticContent)/resources/{...}, segment:4 -> SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}
/(staticContent)/resources/{...}/(method:GET), segment:4 -> SUCCESS @ /(staticContent)/resources/{...}/(method:GET)
Matched routes:
"" -> "(staticContent)" -> "resources" -> "{...}" -> "(method:GET)"
Routing resolve result:
SUCCESS; Parameters [static-content-path-parameter=[grade1, lesson001, lesson001.html]] @ /(staticContent)/resources/{...}/(method:GET)
2025-09-20 04:32:51.361 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.361 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:35001/resources/grade1/lesson001/lesson001.html
2025-09-20 04:32:51.361 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:35001/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:35001/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:35001/resources/grade1/lesson001/lesson001.html