Test running on port 42091
2025-09-21 04:32:36.131 [Test worker] INFO io.ktor.server.Application - Autoreload is disabled because the development mode is off.
2025-09-21 04:32:36.147 [Test worker] INFO io.ktor.server.Application - Application started in 0.016 seconds.
2025-09-21 04:32:36.149 [DefaultDispatcher-worker-1 @coroutine#14] INFO io.ktor.server.Application - Responding at http://0.0.0.0:42091
2025-09-21 04:32:36.175 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/appmanifest.json
2025-09-21 04:32:36.176 [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:42091/resources/appmanifest.json.
2025-09-21 04:32:36.176 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/appmanifest.json
2025-09-21 04:32:36.281 [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-21 04:32:36.329 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/appmanifest.json
2025-09-21 04:32:36.330 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/appmanifest.json
2025-09-21 04:32:36.330 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/appmanifest.json
2025-09-21 04:32:36.334 [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:42091/resources/appmanifest.json.
2025-09-21 04:32:36.335 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:42091/resources/appmanifest.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:36.336 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/appmanifest.json
2025-09-21 04:32:36.337 [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:42091/resources/appmanifest.json.
2025-09-21 04:32:36.337 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/appmanifest.json
2025-09-21 04:32:36.340 [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-21 04:32:36.343 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/appmanifest.json
2025-09-21 04:32:36.344 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/appmanifest.json
2025-09-21 04:32:36.344 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/appmanifest.json
2025-09-21 04:32:36.345 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/appmanifest.json
2025-09-21 04:32:36.345 [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:42091/resources/appmanifest.json.
2025-09-21 04:32:36.345 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/appmanifest.json
2025-09-21 04:32:36.347 [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-21 04:32:36.349 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/appmanifest.json
2025-09-21 04:32:36.350 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/appmanifest.json
2025-09-21 04:32:36.350 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/appmanifest.json
2025-09-21 04:32:36.353 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:42091/resources/appmanifest.json to class kotlinx.io.Source
2025-09-21 04:32:36.389 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/app.html
2025-09-21 04:32:36.389 [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:42091/resources/app.html.
2025-09-21 04:32:36.389 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/app.html
2025-09-21 04:32:36.391 [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-21 04:32:36.394 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/app.html
2025-09-21 04:32:36.394 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/app.html
2025-09-21 04:32:36.394 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/app.html
2025-09-21 04:32:36.395 [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:42091/resources/app.html.
2025-09-21 04:32:36.395 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:42091/resources/app.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:36.395 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/app.html
2025-09-21 04:32:36.395 [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:42091/resources/app.html.
2025-09-21 04:32:36.395 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/app.html
2025-09-21 04:32:36.397 [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-21 04:32:36.399 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/app.html
2025-09-21 04:32:36.399 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/app.html
2025-09-21 04:32:36.399 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/app.html
2025-09-21 04:32:36.399 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/index.json
2025-09-21 04:32:36.400 [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:42091/resources/index.json.
2025-09-21 04:32:36.400 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/index.json
2025-09-21 04:32:36.401 [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-21 04:32:36.403 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/index.json
2025-09-21 04:32:36.404 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/index.json
2025-09-21 04:32:36.404 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/index.json
2025-09-21 04:32:36.404 [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:42091/resources/index.json.
2025-09-21 04:32:36.404 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:42091/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:36.404 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/index.json
2025-09-21 04:32:36.405 [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:42091/resources/index.json.
2025-09-21 04:32:36.405 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/index.json
2025-09-21 04:32:36.406 [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-21 04:32:36.408 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/index.json
2025-09-21 04:32:36.408 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/index.json
2025-09-21 04:32:36.408 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/index.json
2025-09-21 04:32:36.409 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/index.json
2025-09-21 04:32:36.409 [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:42091/resources/index.json.
2025-09-21 04:32:36.409 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/index.json
2025-09-21 04:32:36.410 [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-21 04:32:36.412 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/index.json
2025-09-21 04:32:36.413 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/index.json
2025-09-21 04:32:36.413 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/index.json
2025-09-21 04:32:36.413 [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:42091/resources/index.json.
2025-09-21 04:32:36.413 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:42091/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:36.413 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/index.json
2025-09-21 04:32:36.413 [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:42091/resources/index.json.
2025-09-21 04:32:36.413 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/index.json
2025-09-21 04:32:36.415 [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-21 04:32:36.417 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/index.json
2025-09-21 04:32:36.417 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/index.json
2025-09-21 04:32:36.417 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/index.json
2025-09-21 04:32:36.418 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/index.json
2025-09-21 04:32:36.418 [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:42091/resources/index.json.
2025-09-21 04:32:36.418 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/index.json
2025-09-21 04:32:36.419 [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-21 04:32:36.422 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/index.json
2025-09-21 04:32:36.422 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/index.json
2025-09-21 04:32:36.422 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/index.json
2025-09-21 04:32:36.422 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:42091/resources/index.json to class kotlinx.io.Source
WARN: http://localhost:42091/resources/index.json Navigation link to grade1/grade1.json SHOULD contain an icon
DEBUG: http://localhost:42091/resources/index.json Skipping link as it has already been visited: http://localhost:42091/resources/index.json
2025-09-21 04:32:39.286 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/grade1.json
2025-09-21 04:32:39.286 [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:42091/resources/grade1/grade1.json.
2025-09-21 04:32:39.286 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/grade1.json
2025-09-21 04:32:39.288 [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-21 04:32:39.289 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/grade1.json
2025-09-21 04:32:39.289 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/grade1.json
2025-09-21 04:32:39.289 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/grade1.json
2025-09-21 04:32:39.290 [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:42091/resources/grade1/grade1.json.
2025-09-21 04:32:39.290 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:42091/resources/grade1/grade1.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:39.290 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/grade1.json
2025-09-21 04:32:39.290 [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:42091/resources/grade1/grade1.json.
2025-09-21 04:32:39.290 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/grade1.json
2025-09-21 04:32:39.291 [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-21 04:32:39.292 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/grade1.json
2025-09-21 04:32:39.292 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/grade1.json
2025-09-21 04:32:39.292 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/grade1.json
2025-09-21 04:32:39.292 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/grade1.json
2025-09-21 04:32:39.292 [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:42091/resources/grade1/grade1.json.
2025-09-21 04:32:39.292 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/grade1.json
2025-09-21 04:32:39.293 [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-21 04:32:39.294 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/grade1.json
2025-09-21 04:32:39.294 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/grade1.json
2025-09-21 04:32:39.294 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/grade1.json
2025-09-21 04:32:39.294 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:42091/resources/grade1/grade1.json to class kotlinx.io.Source
DEBUG: http://localhost:42091/resources/grade1/grade1.json Validating Opds Publication: title "Lesson 001" and identifier: http://example.app/id/lesson001
2025-09-21 04:32:39.302 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.302 [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:42091/resources/grade1/lesson001/cover.png.
2025-09-21 04:32:39.302 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.303 [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-21 04:32:39.304 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.304 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.304 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.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:42091/resources/grade1/lesson001/cover.png.
2025-09-21 04:32:39.305 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:42091/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:39.305 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.305 [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:42091/resources/grade1/lesson001/cover.png.
2025-09-21 04:32:39.305 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.306 [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-21 04:32:39.307 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.307 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.307 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.308 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.308 [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:42091/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:39.308 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.309 [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-21 04:32:39.310 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.310 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.310 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.310 [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:42091/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:39.310 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:42091/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:39.310 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.310 [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:42091/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:39.310 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.311 [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-21 04:32:39.312 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.312 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.312 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.358 [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:42091/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:42091/resources/grade1/grade1.json
2025-09-21 04:32:39.394 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:39.395 [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:42091/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:39.395 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:39.396 [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-21 04:32:39.398 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:39.398 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:39.398 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:39.398 [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:42091/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:39.398 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:42091/resources/grade1/lesson001/lesson001.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:39.399 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:39.399 [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:42091/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:39.399 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:39.400 [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-21 04:32:39.401 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:39.401 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:39.401 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:39.402 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:39.402 [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:42091/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:39.402 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:39.403 [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-21 04:32:39.404 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:39.404 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:39.404 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:39.404 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:42091/resources/grade1/lesson001/lesson001.json to class kotlinx.io.Source
DEBUG: http://localhost:42091/resources/grade1/lesson001/lesson001.json Validating Opds Publication: title "Lesson 001" and identifier: https://example.app/id/lesson001
2025-09-21 04:32:39.449 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.450 [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:42091/resources/grade1/lesson001/cover.png.
2025-09-21 04:32:39.450 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.451 [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-21 04:32:39.452 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.452 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.452 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.453 [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:42091/resources/grade1/lesson001/cover.png.
2025-09-21 04:32:39.453 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:42091/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:39.453 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.453 [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:42091/resources/grade1/lesson001/cover.png.
2025-09-21 04:32:39.453 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.454 [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-21 04:32:39.455 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.455 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.455 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/cover.png
2025-09-21 04:32:39.455 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.455 [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:42091/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:39.455 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.456 [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-21 04:32:39.457 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.457 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.457 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.457 [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:42091/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:39.457 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:42091/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:39.457 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.457 [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:42091/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:39.457 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.458 [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-21 04:32:39.459 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.459 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.459 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.461 [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-21 04:32:39.464 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/audio.ogg
2025-09-21 04:32:39.464 [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:42091/resources/grade1/lesson001/audio.ogg.
2025-09-21 04:32:39.464 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/audio.ogg
2025-09-21 04:32:39.467 [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-21 04:32:39.481 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/audio.ogg
2025-09-21 04:32:39.481 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/audio.ogg
2025-09-21 04:32:39.482 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/audio.ogg
2025-09-21 04:32:39.482 [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:42091/resources/grade1/lesson001/audio.ogg.
2025-09-21 04:32:39.482 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:42091/resources/grade1/lesson001/audio.ogg to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:39.483 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/audio.ogg
2025-09-21 04:32:39.483 [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:42091/resources/grade1/lesson001/audio.ogg.
2025-09-21 04:32:39.483 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/audio.ogg
2025-09-21 04:32:39.488 [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-21 04:32:39.493 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/audio.ogg
2025-09-21 04:32:39.493 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/audio.ogg
2025-09-21 04:32:39.493 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/audio.ogg
2025-09-21 04:32:39.493 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/video.mp4
2025-09-21 04:32:39.494 [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:42091/resources/grade1/lesson001/video.mp4.
2025-09-21 04:32:39.494 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/video.mp4
2025-09-21 04:32:39.495 [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-21 04:32:39.497 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/video.mp4
2025-09-21 04:32:39.497 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/video.mp4
2025-09-21 04:32:39.497 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/video.mp4
2025-09-21 04:32:39.498 [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:42091/resources/grade1/lesson001/video.mp4.
2025-09-21 04:32:39.498 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:42091/resources/grade1/lesson001/video.mp4 to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:39.522 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/video.mp4
2025-09-21 04:32:39.522 [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:42091/resources/grade1/lesson001/video.mp4.
2025-09-21 04:32:39.522 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/video.mp4
2025-09-21 04:32:39.525 [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-21 04:32:39.526 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/video.mp4
2025-09-21 04:32:39.526 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/video.mp4
2025-09-21 04:32:39.526 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/video.mp4
2025-09-21 04:32:39.527 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/script.js
2025-09-21 04:32:39.527 [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:42091/resources/grade1/lesson001/script.js.
2025-09-21 04:32:39.527 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/script.js
2025-09-21 04:32:39.528 [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-21 04:32:39.529 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/script.js
2025-09-21 04:32:39.529 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/script.js
2025-09-21 04:32:39.529 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/script.js
2025-09-21 04:32:39.529 [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:42091/resources/grade1/lesson001/script.js.
2025-09-21 04:32:39.529 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:42091/resources/grade1/lesson001/script.js to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:39.529 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/script.js
2025-09-21 04:32:39.530 [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:42091/resources/grade1/lesson001/script.js.
2025-09-21 04:32:39.530 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/script.js
2025-09-21 04:32:39.531 [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-21 04:32:39.532 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/script.js
2025-09-21 04:32:39.532 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/script.js
2025-09-21 04:32:39.532 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/script.js
DEBUG: http://localhost:42091/resources/grade1/lesson001/lesson001.json Skipping link as it has already been visited: http://localhost:42091/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:39.532 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.532 [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:42091/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:39.532 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.533 [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-21 04:32:39.535 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.535 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.535 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.536 [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:42091/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:39.536 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:42091/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:39.536 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.536 [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:42091/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:39.536 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.537 [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-21 04:32:39.552 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.552 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:42091/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:39.552 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:42091/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:42091/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:42091/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:42091/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:42091/resources/grade1/lesson001/lesson001.json
Test running on port 44039
2025-09-21 04:32:41.638 [Test worker] INFO io.ktor.server.Application - Autoreload is disabled because the development mode is off.
2025-09-21 04:32:41.639 [Test worker] INFO io.ktor.server.Application - Application started in 0.001 seconds.
2025-09-21 04:32:41.646 [DefaultDispatcher-worker-2 @coroutine#177] INFO io.ktor.server.Application - Responding at http://0.0.0.0:44039
2025-09-21 04:32:41.647 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44039/resources/appmanifest.json
2025-09-21 04:32:41.647 [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:44039/resources/appmanifest.json.
2025-09-21 04:32:41.647 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44039/resources/appmanifest.json
2025-09-21 04:32:41.659 [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-21 04:32:41.666 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44039/resources/appmanifest.json
2025-09-21 04:32:41.666 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44039/resources/appmanifest.json
2025-09-21 04:32:41.667 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44039/resources/appmanifest.json
ERROR: http://localhost:44039/resources/appmanifest.json Link to http://localhost:44039/resources/appmanifest.json: No last-modified or etag header found
2025-09-21 04:32:41.667 [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:44039/resources/appmanifest.json.
2025-09-21 04:32:41.667 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44039/resources/appmanifest.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:41.667 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44039/resources/appmanifest.json
2025-09-21 04:32:41.667 [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:44039/resources/appmanifest.json.
2025-09-21 04:32:41.667 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44039/resources/appmanifest.json
2025-09-21 04:32:41.669 [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-21 04:32:41.675 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44039/resources/appmanifest.json
2025-09-21 04:32:41.675 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44039/resources/appmanifest.json
2025-09-21 04:32:41.675 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44039/resources/appmanifest.json
2025-09-21 04:32:41.676 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44039/resources/appmanifest.json to class kotlinx.io.Source
2025-09-21 04:32:41.705 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44039/resources/app.html
2025-09-21 04:32:41.706 [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:44039/resources/app.html.
2025-09-21 04:32:41.706 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44039/resources/app.html
2025-09-21 04:32:41.714 [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-21 04:32:41.731 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44039/resources/app.html
2025-09-21 04:32:41.731 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44039/resources/app.html
2025-09-21 04:32:41.731 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44039/resources/app.html
ERROR: http://localhost:44039/resources/appmanifest.json Link to http://localhost:44039/resources/app.html: No last-modified or etag header found
2025-09-21 04:32:41.731 [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:44039/resources/app.html.
2025-09-21 04:32:41.731 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44039/resources/app.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:41.732 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44039/resources/index.json
2025-09-21 04:32:41.732 [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:44039/resources/index.json.
2025-09-21 04:32:41.732 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44039/resources/index.json
2025-09-21 04:32:41.733 [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-21 04:32:41.738 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44039/resources/index.json
2025-09-21 04:32:41.738 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44039/resources/index.json
2025-09-21 04:32:41.739 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44039/resources/index.json
ERROR: http://localhost:44039/resources/appmanifest.json Link to http://localhost:44039/resources/index.json: No last-modified or etag header found
2025-09-21 04:32:41.739 [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:44039/resources/index.json.
2025-09-21 04:32:41.739 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44039/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:41.739 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44039/resources/index.json
2025-09-21 04:32:41.739 [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:44039/resources/index.json.
2025-09-21 04:32:41.739 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44039/resources/index.json
2025-09-21 04:32:41.741 [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-21 04:32:41.746 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44039/resources/index.json
2025-09-21 04:32:41.747 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44039/resources/index.json
2025-09-21 04:32:41.747 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44039/resources/index.json
ERROR: http://localhost:44039/resources/appmanifest.json Link to http://localhost:44039/resources/index.json: No last-modified or etag header found
2025-09-21 04:32:41.750 [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:44039/resources/index.json.
2025-09-21 04:32:41.753 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44039/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:41.754 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44039/resources/index.json
2025-09-21 04:32:41.754 [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:44039/resources/index.json.
2025-09-21 04:32:41.754 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44039/resources/index.json
2025-09-21 04:32:41.762 [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-21 04:32:41.764 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44039/resources/index.json
2025-09-21 04:32:41.764 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44039/resources/index.json
2025-09-21 04:32:41.764 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44039/resources/index.json
2025-09-21 04:32:41.764 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44039/resources/index.json to class kotlinx.io.Source
WARN: http://localhost:44039/resources/index.json Navigation link to grade1/grade1.json SHOULD contain an icon
DEBUG: http://localhost:44039/resources/index.json Skipping link as it has already been visited: http://localhost:44039/resources/index.json
2025-09-21 04:32:41.869 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44039/resources/grade1/grade1.json
2025-09-21 04:32:41.869 [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:44039/resources/grade1/grade1.json.
2025-09-21 04:32:41.869 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44039/resources/grade1/grade1.json
2025-09-21 04:32:41.871 [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-21 04:32:41.874 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44039/resources/grade1/grade1.json
2025-09-21 04:32:41.874 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44039/resources/grade1/grade1.json
2025-09-21 04:32:41.874 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44039/resources/grade1/grade1.json
ERROR: http://localhost:44039/resources/index.json Link to http://localhost:44039/resources/grade1/grade1.json: No last-modified or etag header found
2025-09-21 04:32:41.874 [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:44039/resources/grade1/grade1.json.
2025-09-21 04:32:41.874 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44039/resources/grade1/grade1.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:41.877 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44039/resources/grade1/grade1.json
2025-09-21 04:32:41.877 [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:44039/resources/grade1/grade1.json.
2025-09-21 04:32:41.877 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44039/resources/grade1/grade1.json
2025-09-21 04:32:41.879 [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-21 04:32:41.881 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44039/resources/grade1/grade1.json
2025-09-21 04:32:41.882 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44039/resources/grade1/grade1.json
2025-09-21 04:32:41.882 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44039/resources/grade1/grade1.json
2025-09-21 04:32:41.882 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44039/resources/grade1/grade1.json to class kotlinx.io.Source
DEBUG: http://localhost:44039/resources/grade1/grade1.json Validating Opds Publication: title "Lesson 001" and identifier: http://example.app/id/lesson001
2025-09-21 04:32:41.883 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44039/resources/grade1/lesson001/cover.png
2025-09-21 04:32:41.883 [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:44039/resources/grade1/lesson001/cover.png.
2025-09-21 04:32:41.883 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44039/resources/grade1/lesson001/cover.png
2025-09-21 04:32:41.885 [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-21 04:32:41.887 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44039/resources/grade1/lesson001/cover.png
2025-09-21 04:32:41.887 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44039/resources/grade1/lesson001/cover.png
2025-09-21 04:32:41.887 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44039/resources/grade1/lesson001/cover.png
ERROR: http://localhost:44039/resources/grade1/grade1.json Link to http://localhost:44039/resources/grade1/lesson001/cover.png: No last-modified or etag header found
2025-09-21 04:32:41.888 [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:44039/resources/grade1/lesson001/cover.png.
2025-09-21 04:32:41.888 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44039/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:41.888 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44039/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:41.888 [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:44039/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:41.888 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44039/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:41.892 [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-21 04:32:41.899 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44039/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:41.899 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44039/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:41.899 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44039/resources/grade1/lesson001/lesson001.html
ERROR: http://localhost:44039/resources/grade1/grade1.json Link to http://localhost:44039/resources/grade1/lesson001/lesson001.html: No last-modified or etag header found
2025-09-21 04:32:41.900 [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:44039/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:41.900 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44039/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:41.913 [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:44039/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:44039/resources/grade1/grade1.json
2025-09-21 04:32:41.917 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44039/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:41.917 [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:44039/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:41.917 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44039/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:41.925 [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-21 04:32:41.929 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44039/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:41.929 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44039/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:41.929 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44039/resources/grade1/lesson001/lesson001.json
ERROR: http://localhost:44039/resources/grade1/grade1.json Link to http://localhost:44039/resources/grade1/lesson001/lesson001.json: No last-modified or etag header found
2025-09-21 04:32:41.930 [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:44039/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:41.930 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44039/resources/grade1/lesson001/lesson001.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:41.930 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44039/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:41.930 [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:44039/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:41.930 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44039/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:41.932 [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-21 04:32:41.935 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44039/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:41.935 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44039/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:41.935 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44039/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:41.935 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44039/resources/grade1/lesson001/lesson001.json to class kotlinx.io.Source
DEBUG: http://localhost:44039/resources/grade1/lesson001/lesson001.json Validating Opds Publication: title "Lesson 001" and identifier: https://example.app/id/lesson001
2025-09-21 04:32:42.022 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44039/resources/grade1/lesson001/cover.png
2025-09-21 04:32:42.022 [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:44039/resources/grade1/lesson001/cover.png.
2025-09-21 04:32:42.022 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44039/resources/grade1/lesson001/cover.png
2025-09-21 04:32:42.024 [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-21 04:32:42.025 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44039/resources/grade1/lesson001/cover.png
2025-09-21 04:32:42.025 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44039/resources/grade1/lesson001/cover.png
2025-09-21 04:32:42.025 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44039/resources/grade1/lesson001/cover.png
ERROR: http://localhost:44039/resources/grade1/lesson001/lesson001.json Link to http://localhost:44039/resources/grade1/lesson001/cover.png: No last-modified or etag header found
2025-09-21 04:32:42.026 [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:44039/resources/grade1/lesson001/cover.png.
2025-09-21 04:32:42.026 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44039/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:42.026 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44039/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:42.026 [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:44039/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:42.026 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44039/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:42.027 [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-21 04:32:42.029 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44039/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:42.030 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44039/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:42.030 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44039/resources/grade1/lesson001/lesson001.html
ERROR: http://localhost:44039/resources/grade1/lesson001/lesson001.json Link to http://localhost:44039/resources/grade1/lesson001/lesson001.html: No last-modified or etag header found
2025-09-21 04:32:42.030 [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:44039/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:42.030 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44039/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:42.033 [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-21 04:32:42.037 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44039/resources/grade1/lesson001/audio.ogg
2025-09-21 04:32:42.037 [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:44039/resources/grade1/lesson001/audio.ogg.
2025-09-21 04:32:42.037 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44039/resources/grade1/lesson001/audio.ogg
2025-09-21 04:32:42.038 [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-21 04:32:42.040 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44039/resources/grade1/lesson001/audio.ogg
2025-09-21 04:32:42.040 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44039/resources/grade1/lesson001/audio.ogg
2025-09-21 04:32:42.040 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44039/resources/grade1/lesson001/audio.ogg
ERROR: http://localhost:44039/resources/grade1/lesson001/lesson001.json Link to http://localhost:44039/resources/grade1/lesson001/audio.ogg: No last-modified or etag header found
2025-09-21 04:32:42.041 [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:44039/resources/grade1/lesson001/audio.ogg.
2025-09-21 04:32:42.041 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44039/resources/grade1/lesson001/audio.ogg to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:42.041 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44039/resources/grade1/lesson001/video.mp4
2025-09-21 04:32:42.041 [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:44039/resources/grade1/lesson001/video.mp4.
2025-09-21 04:32:42.041 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44039/resources/grade1/lesson001/video.mp4
2025-09-21 04:32:42.042 [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-21 04:32:42.045 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44039/resources/grade1/lesson001/video.mp4
2025-09-21 04:32:42.045 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44039/resources/grade1/lesson001/video.mp4
2025-09-21 04:32:42.045 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44039/resources/grade1/lesson001/video.mp4
ERROR: http://localhost:44039/resources/grade1/lesson001/lesson001.json Link to http://localhost:44039/resources/grade1/lesson001/video.mp4: No last-modified or etag header found
2025-09-21 04:32:42.045 [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:44039/resources/grade1/lesson001/video.mp4.
2025-09-21 04:32:42.045 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44039/resources/grade1/lesson001/video.mp4 to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:42.048 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44039/resources/grade1/lesson001/script.js
2025-09-21 04:32:42.048 [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:44039/resources/grade1/lesson001/script.js.
2025-09-21 04:32:42.048 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44039/resources/grade1/lesson001/script.js
2025-09-21 04:32:42.049 [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-21 04:32:42.050 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44039/resources/grade1/lesson001/script.js
2025-09-21 04:32:42.051 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44039/resources/grade1/lesson001/script.js
2025-09-21 04:32:42.051 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44039/resources/grade1/lesson001/script.js
ERROR: http://localhost:44039/resources/grade1/lesson001/lesson001.json Link to http://localhost:44039/resources/grade1/lesson001/script.js: No last-modified or etag header found
2025-09-21 04:32:42.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:44039/resources/grade1/lesson001/script.js.
2025-09-21 04:32:42.051 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44039/resources/grade1/lesson001/script.js to class io.ktor.utils.io.ByteReadChannel
DEBUG: http://localhost:44039/resources/grade1/lesson001/lesson001.json Skipping link as it has already been visited: http://localhost:44039/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:42.051 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44039/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:42.051 [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:44039/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:42.051 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44039/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:42.052 [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-21 04:32:42.053 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44039/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:42.053 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44039/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:42.053 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44039/resources/grade1/lesson001/lesson001.html
ERROR: http://localhost:44039/resources/grade1/lesson001/lesson001.json Link to http://localhost:44039/resources/grade1/lesson001/lesson001.html: No last-modified or etag header found
2025-09-21 04:32:42.053 [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:44039/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:42.053 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44039/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
DEBUG: http://localhost:44039/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:44039/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:44039/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:44039/resources/grade1/lesson001/lesson001.json
Test running on port 43661
2025-09-21 04:32:44.072 [Test worker] INFO io.ktor.server.Application - Autoreload is disabled because the development mode is off.
2025-09-21 04:32:44.073 [Test worker] INFO io.ktor.server.Application - Application started in 0.001 seconds.
2025-09-21 04:32:44.076 [DefaultDispatcher-worker-5 @coroutine#298] INFO io.ktor.server.Application - Responding at http://0.0.0.0:43661
2025-09-21 04:32:44.077 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/appmanifest.json
2025-09-21 04:32:44.077 [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:43661/resources/appmanifest.json.
2025-09-21 04:32:44.077 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/appmanifest.json
2025-09-21 04:32:44.083 [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-21 04:32:44.085 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/appmanifest.json
2025-09-21 04:32:44.085 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/appmanifest.json
2025-09-21 04:32:44.085 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/appmanifest.json
2025-09-21 04:32:44.085 [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:43661/resources/appmanifest.json.
2025-09-21 04:32:44.085 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43661/resources/appmanifest.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:44.085 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/appmanifest.json
2025-09-21 04:32:44.085 [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:43661/resources/appmanifest.json.
2025-09-21 04:32:44.085 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/appmanifest.json
2025-09-21 04:32:44.090 [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-21 04:32:44.092 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/appmanifest.json
2025-09-21 04:32:44.092 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/appmanifest.json
2025-09-21 04:32:44.092 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/appmanifest.json
2025-09-21 04:32:44.092 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/appmanifest.json
2025-09-21 04:32:44.092 [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:43661/resources/appmanifest.json.
2025-09-21 04:32:44.092 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/appmanifest.json
2025-09-21 04:32:44.093 [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-21 04:32:44.094 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/appmanifest.json
2025-09-21 04:32:44.094 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/appmanifest.json
2025-09-21 04:32:44.094 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/appmanifest.json
2025-09-21 04:32:44.094 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43661/resources/appmanifest.json to class kotlinx.io.Source
2025-09-21 04:32:44.098 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/app.html
2025-09-21 04:32:44.099 [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:43661/resources/app.html.
2025-09-21 04:32:44.099 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/app.html
2025-09-21 04:32:44.100 [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-21 04:32:44.102 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/app.html
2025-09-21 04:32:44.102 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/app.html
2025-09-21 04:32:44.102 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/app.html
2025-09-21 04:32:44.102 [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:43661/resources/app.html.
2025-09-21 04:32:44.102 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43661/resources/app.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:44.103 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/app.html
2025-09-21 04:32:44.103 [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:43661/resources/app.html.
2025-09-21 04:32:44.103 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/app.html
2025-09-21 04:32:44.105 [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-21 04:32:44.106 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/app.html
2025-09-21 04:32:44.106 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/app.html
2025-09-21 04:32:44.106 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/app.html
2025-09-21 04:32:44.106 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/index.json
2025-09-21 04:32:44.106 [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:43661/resources/index.json.
2025-09-21 04:32:44.106 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/index.json
2025-09-21 04:32:44.107 [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-21 04:32:44.108 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/index.json
2025-09-21 04:32:44.108 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/index.json
2025-09-21 04:32:44.108 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/index.json
2025-09-21 04:32:44.108 [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:43661/resources/index.json.
2025-09-21 04:32:44.108 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43661/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:44.108 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/index.json
2025-09-21 04:32:44.108 [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:43661/resources/index.json.
2025-09-21 04:32:44.108 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/index.json
2025-09-21 04:32:44.109 [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-21 04:32:44.110 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/index.json
2025-09-21 04:32:44.110 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/index.json
2025-09-21 04:32:44.110 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/index.json
2025-09-21 04:32:44.110 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/index.json
2025-09-21 04:32:44.110 [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:43661/resources/index.json.
2025-09-21 04:32:44.110 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/index.json
2025-09-21 04:32:44.112 [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-21 04:32:44.113 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/index.json
2025-09-21 04:32:44.113 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/index.json
2025-09-21 04:32:44.113 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/index.json
2025-09-21 04:32:44.113 [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:43661/resources/index.json.
2025-09-21 04:32:44.113 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43661/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:44.114 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/index.json
2025-09-21 04:32:44.114 [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:43661/resources/index.json.
2025-09-21 04:32:44.114 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/index.json
2025-09-21 04:32:44.115 [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-21 04:32:44.116 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/index.json
2025-09-21 04:32:44.116 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/index.json
2025-09-21 04:32:44.116 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/index.json
2025-09-21 04:32:44.116 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/index.json
2025-09-21 04:32:44.116 [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:43661/resources/index.json.
2025-09-21 04:32:44.116 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/index.json
2025-09-21 04:32:44.117 [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-21 04:32:44.118 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/index.json
2025-09-21 04:32:44.118 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/index.json
2025-09-21 04:32:44.118 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/index.json
2025-09-21 04:32:44.118 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43661/resources/index.json to class kotlinx.io.Source
WARN: http://localhost:43661/resources/index.json Navigation link to grade1/grade1.json SHOULD contain an icon
DEBUG: http://localhost:43661/resources/index.json Skipping link as it has already been visited: http://localhost:43661/resources/index.json
2025-09-21 04:32:44.170 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/grade1/grade1.json
2025-09-21 04:32:44.170 [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:43661/resources/grade1/grade1.json.
2025-09-21 04:32:44.170 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/grade1/grade1.json
2025-09-21 04:32:44.172 [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-21 04:32:44.178 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/grade1/grade1.json
2025-09-21 04:32:44.178 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/grade1/grade1.json
2025-09-21 04:32:44.178 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/grade1/grade1.json
2025-09-21 04:32:44.178 [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:43661/resources/grade1/grade1.json.
2025-09-21 04:32:44.178 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43661/resources/grade1/grade1.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:44.179 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/grade1/grade1.json
2025-09-21 04:32:44.179 [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:43661/resources/grade1/grade1.json.
2025-09-21 04:32:44.179 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/grade1/grade1.json
2025-09-21 04:32:44.180 [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-21 04:32:44.182 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/grade1/grade1.json
2025-09-21 04:32:44.182 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/grade1/grade1.json
2025-09-21 04:32:44.182 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/grade1/grade1.json
2025-09-21 04:32:44.182 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/grade1/grade1.json
2025-09-21 04:32:44.182 [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:43661/resources/grade1/grade1.json.
2025-09-21 04:32:44.182 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/grade1/grade1.json
2025-09-21 04:32:44.183 [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-21 04:32:44.184 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/grade1/grade1.json
2025-09-21 04:32:44.184 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/grade1/grade1.json
2025-09-21 04:32:44.184 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/grade1/grade1.json
2025-09-21 04:32:44.184 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43661/resources/grade1/grade1.json to class kotlinx.io.Source
DEBUG: http://localhost:43661/resources/grade1/grade1.json Validating Opds Publication: title "Lesson 001" and identifier: http://example.app/id/lesson001
2025-09-21 04:32:44.186 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/grade1/cover-small.jpg
2025-09-21 04:32:44.186 [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:43661/resources/grade1/cover-small.jpg.
2025-09-21 04:32:44.186 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/grade1/cover-small.jpg
2025-09-21 04:32:44.187 [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-21 04:32:44.188 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/grade1/cover-small.jpg
2025-09-21 04:32:44.188 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/grade1/cover-small.jpg
2025-09-21 04:32:44.188 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/grade1/cover-small.jpg
ERROR: http://localhost:43661/resources/grade1/grade1.json Link to http://localhost:43661/resources/grade1/cover-small.jpg: Response status code not HTTP OK/200. Got: 404
2025-09-21 04:32:44.189 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43661/resources/grade1/cover-small.jpg to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:44.189 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.189 [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:43661/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:44.189 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.190 [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-21 04:32:44.191 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.191 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.191 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.192 [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:43661/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:44.192 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43661/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:44.192 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.192 [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:43661/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:44.192 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.193 [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-21 04:32:44.194 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.194 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.194 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.196 [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:43661/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:43661/resources/grade1/grade1.json
2025-09-21 04:32:44.199 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:44.199 [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:43661/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:44.199 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:44.200 [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-21 04:32:44.202 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:44.202 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:44.202 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:44.202 [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:43661/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:44.202 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43661/resources/grade1/lesson001/lesson001.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:44.202 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:44.202 [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:43661/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:44.202 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:44.203 [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-21 04:32:44.204 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:44.204 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:44.204 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:44.204 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:44.204 [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:43661/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:44.204 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:44.205 [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-21 04:32:44.205 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:44.205 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:44.206 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:44.206 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43661/resources/grade1/lesson001/lesson001.json to class kotlinx.io.Source
DEBUG: http://localhost:43661/resources/grade1/lesson001/lesson001.json Validating Opds Publication: title "Lesson 001" and identifier: https://example.app/id/lesson001
2025-09-21 04:32:44.243 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/grade1/lesson001/cover.png
2025-09-21 04:32:44.243 [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:43661/resources/grade1/lesson001/cover.png.
2025-09-21 04:32:44.243 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/grade1/lesson001/cover.png
2025-09-21 04:32:44.244 [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-21 04:32:44.246 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/grade1/lesson001/cover.png
2025-09-21 04:32:44.246 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/grade1/lesson001/cover.png
2025-09-21 04:32:44.246 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/grade1/lesson001/cover.png
2025-09-21 04:32:44.246 [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:43661/resources/grade1/lesson001/cover.png.
2025-09-21 04:32:44.246 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43661/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:44.246 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/grade1/lesson001/cover.png
2025-09-21 04:32:44.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:43661/resources/grade1/lesson001/cover.png.
2025-09-21 04:32:44.246 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/grade1/lesson001/cover.png
2025-09-21 04:32:44.247 [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-21 04:32:44.248 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/grade1/lesson001/cover.png
2025-09-21 04:32:44.248 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/grade1/lesson001/cover.png
2025-09-21 04:32:44.248 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/grade1/lesson001/cover.png
2025-09-21 04:32:44.248 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.249 [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:43661/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:44.249 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.249 [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-21 04:32:44.250 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.250 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.250 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.250 [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:43661/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:44.250 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43661/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:44.251 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.251 [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:43661/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:44.251 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.252 [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-21 04:32:44.252 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.252 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.252 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.255 [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:43661/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:43661/resources/grade1/lesson001/lesson001.json Skipping link as it has already been visited: http://localhost:43661/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:44.257 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.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:43661/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:44.258 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.258 [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-21 04:32:44.259 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.259 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.259 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.260 [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:43661/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:44.260 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43661/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:44.260 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.260 [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:43661/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:44.260 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.261 [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-21 04:32:44.261 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.261 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43661/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:44.261 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43661/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:43661/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:43661/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:43661/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:43661/resources/grade1/lesson001/lesson001.json
Test running on port 44949
2025-09-21 04:32:46.308 [Test worker] INFO io.ktor.server.Application - Autoreload is disabled because the development mode is off.
2025-09-21 04:32:46.310 [Test worker] INFO io.ktor.server.Application - Application started in 0.002 seconds.
2025-09-21 04:32:46.315 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/appmanifest.json
2025-09-21 04:32:46.316 [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:44949/resources/appmanifest.json.
2025-09-21 04:32:46.316 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/appmanifest.json
2025-09-21 04:32:46.316 [DefaultDispatcher-worker-11 @coroutine#429] INFO io.ktor.server.Application - Responding at http://0.0.0.0:44949
2025-09-21 04:32:46.326 [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-21 04:32:46.331 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/appmanifest.json
2025-09-21 04:32:46.331 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/appmanifest.json
2025-09-21 04:32:46.331 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/appmanifest.json
2025-09-21 04:32:46.331 [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:44949/resources/appmanifest.json.
2025-09-21 04:32:46.331 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44949/resources/appmanifest.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:46.332 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/appmanifest.json
2025-09-21 04:32:46.332 [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:44949/resources/appmanifest.json.
2025-09-21 04:32:46.332 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/appmanifest.json
2025-09-21 04:32:46.346 [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-21 04:32:46.348 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/appmanifest.json
2025-09-21 04:32:46.348 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/appmanifest.json
2025-09-21 04:32:46.348 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/appmanifest.json
2025-09-21 04:32:46.348 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/appmanifest.json
2025-09-21 04:32:46.348 [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:44949/resources/appmanifest.json.
2025-09-21 04:32:46.348 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/appmanifest.json
2025-09-21 04:32:46.353 [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-21 04:32:46.360 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/appmanifest.json
2025-09-21 04:32:46.360 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/appmanifest.json
2025-09-21 04:32:46.360 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/appmanifest.json
2025-09-21 04:32:46.360 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44949/resources/appmanifest.json to class kotlinx.io.Source
2025-09-21 04:32:46.369 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/app.html
2025-09-21 04:32:46.370 [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:44949/resources/app.html.
2025-09-21 04:32:46.371 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/app.html
2025-09-21 04:32:46.372 [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-21 04:32:46.374 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/app.html
2025-09-21 04:32:46.374 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/app.html
2025-09-21 04:32:46.374 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/app.html
2025-09-21 04:32:46.374 [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:44949/resources/app.html.
2025-09-21 04:32:46.374 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44949/resources/app.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:46.374 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/app.html
2025-09-21 04:32:46.374 [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:44949/resources/app.html.
2025-09-21 04:32:46.374 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/app.html
2025-09-21 04:32:46.391 [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-21 04:32:46.393 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/app.html
2025-09-21 04:32:46.393 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/app.html
2025-09-21 04:32:46.393 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/app.html
2025-09-21 04:32:46.393 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/index.json
2025-09-21 04:32:46.393 [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:44949/resources/index.json.
2025-09-21 04:32:46.393 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/index.json
2025-09-21 04:32:46.394 [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-21 04:32:46.396 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/index.json
2025-09-21 04:32:46.396 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/index.json
2025-09-21 04:32:46.396 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/index.json
2025-09-21 04:32:46.396 [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:44949/resources/index.json.
2025-09-21 04:32:46.396 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44949/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:46.396 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/index.json
2025-09-21 04:32:46.398 [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:44949/resources/index.json.
2025-09-21 04:32:46.398 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/index.json
2025-09-21 04:32:46.409 [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-21 04:32:46.411 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/index.json
2025-09-21 04:32:46.414 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/index.json
2025-09-21 04:32:46.414 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/index.json
2025-09-21 04:32:46.415 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/index.json
2025-09-21 04:32:46.415 [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:44949/resources/index.json.
2025-09-21 04:32:46.415 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/index.json
2025-09-21 04:32:46.418 [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-21 04:32:46.422 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/index.json
2025-09-21 04:32:46.423 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/index.json
2025-09-21 04:32:46.423 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/index.json
2025-09-21 04:32:46.424 [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:44949/resources/index.json.
2025-09-21 04:32:46.424 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44949/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:46.425 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/index.json
2025-09-21 04:32:46.425 [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:44949/resources/index.json.
2025-09-21 04:32:46.425 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/index.json
2025-09-21 04:32:46.429 [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-21 04:32:46.431 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/index.json
2025-09-21 04:32:46.431 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/index.json
2025-09-21 04:32:46.431 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/index.json
2025-09-21 04:32:46.431 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/index.json
2025-09-21 04:32:46.431 [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:44949/resources/index.json.
2025-09-21 04:32:46.431 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/index.json
2025-09-21 04:32:46.432 [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-21 04:32:46.434 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/index.json
2025-09-21 04:32:46.434 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/index.json
2025-09-21 04:32:46.434 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/index.json
2025-09-21 04:32:46.434 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44949/resources/index.json to class kotlinx.io.Source
WARN: http://localhost:44949/resources/index.json Navigation link to grade1/grade1.json SHOULD contain an icon
DEBUG: http://localhost:44949/resources/index.json Skipping link as it has already been visited: http://localhost:44949/resources/index.json
2025-09-21 04:32:46.530 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/grade1/grade1.json
2025-09-21 04:32:46.531 [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:44949/resources/grade1/grade1.json.
2025-09-21 04:32:46.531 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/grade1/grade1.json
2025-09-21 04:32:46.540 [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-21 04:32:46.543 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/grade1/grade1.json
2025-09-21 04:32:46.544 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/grade1/grade1.json
2025-09-21 04:32:46.544 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/grade1/grade1.json
2025-09-21 04:32:46.544 [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:44949/resources/grade1/grade1.json.
2025-09-21 04:32:46.544 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44949/resources/grade1/grade1.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:46.544 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/grade1/grade1.json
2025-09-21 04:32:46.544 [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:44949/resources/grade1/grade1.json.
2025-09-21 04:32:46.544 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/grade1/grade1.json
2025-09-21 04:32:46.548 [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-21 04:32:46.555 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/grade1/grade1.json
2025-09-21 04:32:46.555 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/grade1/grade1.json
2025-09-21 04:32:46.555 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/grade1/grade1.json
2025-09-21 04:32:46.556 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/grade1/grade1.json
2025-09-21 04:32:46.556 [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:44949/resources/grade1/grade1.json.
2025-09-21 04:32:46.556 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/grade1/grade1.json
2025-09-21 04:32:46.561 [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-21 04:32:46.565 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/grade1/grade1.json
2025-09-21 04:32:46.565 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/grade1/grade1.json
2025-09-21 04:32:46.565 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/grade1/grade1.json
2025-09-21 04:32:46.565 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44949/resources/grade1/grade1.json to class kotlinx.io.Source
DEBUG: http://localhost:44949/resources/grade1/grade1.json Validating Opds Publication: title "Lesson 001" and identifier: http://example.app/id/lesson001
2025-09-21 04:32:46.568 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/grade1/cover-small.jpg
2025-09-21 04:32:46.569 [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:44949/resources/grade1/cover-small.jpg.
2025-09-21 04:32:46.569 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/grade1/cover-small.jpg
2025-09-21 04:32:46.570 [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-21 04:32:46.574 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/grade1/cover-small.jpg
2025-09-21 04:32:46.574 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/grade1/cover-small.jpg
2025-09-21 04:32:46.575 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/grade1/cover-small.jpg
ERROR: http://localhost:44949/resources/grade1/grade1.json Link to http://localhost:44949/resources/grade1/cover-small.jpg: Response status code not HTTP OK/200. Got: 404
2025-09-21 04:32:46.575 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44949/resources/grade1/cover-small.jpg to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:46.575 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.575 [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:44949/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:46.575 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.577 [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-21 04:32:46.580 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.580 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.580 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.581 [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:44949/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:46.584 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44949/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:46.585 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.585 [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:44949/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:46.585 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.586 [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-21 04:32:46.592 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.592 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.592 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.605 [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:44949/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:44949/resources/grade1/grade1.json
2025-09-21 04:32:46.609 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:46.610 [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:44949/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:46.610 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:46.611 [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-21 04:32:46.613 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:46.614 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:46.614 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:46.614 [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:44949/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:46.614 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44949/resources/grade1/lesson001/lesson001.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:46.614 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:46.615 [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:44949/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:46.615 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:46.617 [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-21 04:32:46.622 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:46.623 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:46.623 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:46.623 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:46.623 [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:44949/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:46.623 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:46.624 [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-21 04:32:46.628 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:46.631 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:46.631 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:46.632 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44949/resources/grade1/lesson001/lesson001.json to class kotlinx.io.Source
DEBUG: http://localhost:44949/resources/grade1/lesson001/lesson001.json Validating Opds Publication: title "Lesson 001" and identifier: https://example.app/id/lesson001
2025-09-21 04:32:46.698 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/grade1/lesson001/cover.png
2025-09-21 04:32:46.702 [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:44949/resources/grade1/lesson001/cover.png.
2025-09-21 04:32:46.703 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/grade1/lesson001/cover.png
2025-09-21 04:32:46.706 [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-21 04:32:46.708 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/grade1/lesson001/cover.png
2025-09-21 04:32:46.708 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/grade1/lesson001/cover.png
2025-09-21 04:32:46.708 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/grade1/lesson001/cover.png
ERROR: http://localhost:44949/resources/grade1/lesson001/lesson001.json Link to http://localhost:44949/resources/grade1/lesson001/cover.png: Response status code not HTTP OK/200. Got: 404
2025-09-21 04:32:46.709 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44949/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:46.709 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.709 [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:44949/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:46.709 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.713 [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-21 04:32:46.716 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.719 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.719 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.720 [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:44949/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:46.720 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44949/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:46.720 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.720 [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:44949/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:46.720 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.722 [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-21 04:32:46.723 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.723 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.723 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.746 [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-21 04:32:46.755 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/grade1/lesson001/audio.ogg
2025-09-21 04:32:46.755 [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:44949/resources/grade1/lesson001/audio.ogg.
2025-09-21 04:32:46.755 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/grade1/lesson001/audio.ogg
2025-09-21 04:32:46.756 [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-21 04:32:46.758 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/grade1/lesson001/audio.ogg
2025-09-21 04:32:46.758 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/grade1/lesson001/audio.ogg
2025-09-21 04:32:46.758 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/grade1/lesson001/audio.ogg
ERROR: http://localhost:44949/resources/grade1/lesson001/lesson001.json Link to http://localhost:44949/resources/grade1/lesson001/audio.ogg: Response status code not HTTP OK/200. Got: 404
2025-09-21 04:32:46.758 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44949/resources/grade1/lesson001/audio.ogg to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:46.758 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/grade1/lesson001/video.mp4
2025-09-21 04:32:46.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:44949/resources/grade1/lesson001/video.mp4.
2025-09-21 04:32:46.758 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/grade1/lesson001/video.mp4
2025-09-21 04:32:46.760 [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-21 04:32:46.764 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/grade1/lesson001/video.mp4
2025-09-21 04:32:46.764 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/grade1/lesson001/video.mp4
2025-09-21 04:32:46.764 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/grade1/lesson001/video.mp4
ERROR: http://localhost:44949/resources/grade1/lesson001/lesson001.json Link to http://localhost:44949/resources/grade1/lesson001/video.mp4: Response status code not HTTP OK/200. Got: 404
2025-09-21 04:32:46.766 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44949/resources/grade1/lesson001/video.mp4 to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:46.767 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/grade1/lesson001/script.js
2025-09-21 04:32:46.767 [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:44949/resources/grade1/lesson001/script.js.
2025-09-21 04:32:46.767 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/grade1/lesson001/script.js
2025-09-21 04:32:46.768 [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-21 04:32:46.773 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/grade1/lesson001/script.js
2025-09-21 04:32:46.773 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/grade1/lesson001/script.js
2025-09-21 04:32:46.773 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/grade1/lesson001/script.js
ERROR: http://localhost:44949/resources/grade1/lesson001/lesson001.json Link to http://localhost:44949/resources/grade1/lesson001/script.js: Response status code not HTTP OK/200. Got: 404
2025-09-21 04:32:46.774 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44949/resources/grade1/lesson001/script.js to class io.ktor.utils.io.ByteReadChannel
DEBUG: http://localhost:44949/resources/grade1/lesson001/lesson001.json Skipping link as it has already been visited: http://localhost:44949/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:46.774 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.774 [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:44949/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:46.774 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.775 [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-21 04:32:46.778 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.778 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.778 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.779 [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:44949/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:46.779 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44949/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:46.779 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.779 [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:44949/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:46.779 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.780 [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-21 04:32:46.782 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.782 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44949/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:46.782 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44949/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:44949/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:44949/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:44949/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:44949/resources/grade1/lesson001/lesson001.json
Test running on port 41397
2025-09-21 04:32:48.845 [Test worker] INFO io.ktor.server.Application - Autoreload is disabled because the development mode is off.
2025-09-21 04:32:48.845 [Test worker] INFO io.ktor.server.Application - Application started in 0.001 seconds.
2025-09-21 04:32:48.849 [DefaultDispatcher-worker-1 @coroutine#567] INFO io.ktor.server.Application - Responding at http://0.0.0.0:41397
2025-09-21 04:32:48.853 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/appmanifest.json
2025-09-21 04:32:48.853 [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:41397/resources/appmanifest.json.
2025-09-21 04:32:48.853 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/appmanifest.json
2025-09-21 04:32:48.860 [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-21 04:32:48.865 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/appmanifest.json
2025-09-21 04:32:48.865 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/appmanifest.json
2025-09-21 04:32:48.865 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/appmanifest.json
2025-09-21 04:32:48.865 [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:41397/resources/appmanifest.json.
2025-09-21 04:32:48.865 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:41397/resources/appmanifest.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:48.865 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/appmanifest.json
2025-09-21 04:32:48.865 [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:41397/resources/appmanifest.json.
2025-09-21 04:32:48.865 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/appmanifest.json
2025-09-21 04:32:48.867 [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-21 04:32:48.871 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/appmanifest.json
2025-09-21 04:32:48.871 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/appmanifest.json
2025-09-21 04:32:48.871 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/appmanifest.json
2025-09-21 04:32:48.871 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/appmanifest.json
2025-09-21 04:32:48.871 [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:41397/resources/appmanifest.json.
2025-09-21 04:32:48.871 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/appmanifest.json
2025-09-21 04:32:48.872 [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-21 04:32:48.877 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/appmanifest.json
2025-09-21 04:32:48.877 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/appmanifest.json
2025-09-21 04:32:48.877 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/appmanifest.json
2025-09-21 04:32:48.878 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:41397/resources/appmanifest.json to class kotlinx.io.Source
2025-09-21 04:32:48.886 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/app.html
2025-09-21 04:32:48.892 [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:41397/resources/app.html.
2025-09-21 04:32:48.892 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/app.html
2025-09-21 04:32:48.893 [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-21 04:32:48.895 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/app.html
2025-09-21 04:32:48.895 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/app.html
2025-09-21 04:32:48.895 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/app.html
2025-09-21 04:32:48.895 [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:41397/resources/app.html.
2025-09-21 04:32:48.895 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:41397/resources/app.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:48.895 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/app.html
2025-09-21 04:32:48.895 [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:41397/resources/app.html.
2025-09-21 04:32:48.895 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/app.html
2025-09-21 04:32:48.896 [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-21 04:32:48.898 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/app.html
2025-09-21 04:32:48.898 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/app.html
2025-09-21 04:32:48.898 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/app.html
2025-09-21 04:32:48.898 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/index.json
2025-09-21 04:32:48.900 [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:41397/resources/index.json.
2025-09-21 04:32:48.901 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/index.json
2025-09-21 04:32:48.902 [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-21 04:32:48.903 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/index.json
2025-09-21 04:32:48.903 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/index.json
2025-09-21 04:32:48.903 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/index.json
2025-09-21 04:32:48.903 [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:41397/resources/index.json.
2025-09-21 04:32:48.903 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:41397/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:48.903 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/index.json
2025-09-21 04:32:48.903 [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:41397/resources/index.json.
2025-09-21 04:32:48.903 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/index.json
2025-09-21 04:32:48.904 [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-21 04:32:48.905 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/index.json
2025-09-21 04:32:48.905 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/index.json
2025-09-21 04:32:48.905 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/index.json
2025-09-21 04:32:48.906 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/index.json
2025-09-21 04:32:48.906 [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:41397/resources/index.json.
2025-09-21 04:32:48.906 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/index.json
2025-09-21 04:32:48.907 [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-21 04:32:48.908 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/index.json
2025-09-21 04:32:48.908 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/index.json
2025-09-21 04:32:48.908 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/index.json
2025-09-21 04:32:48.908 [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:41397/resources/index.json.
2025-09-21 04:32:48.908 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:41397/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:48.908 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/index.json
2025-09-21 04:32:48.908 [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:41397/resources/index.json.
2025-09-21 04:32:48.908 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/index.json
2025-09-21 04:32:48.909 [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-21 04:32:48.910 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/index.json
2025-09-21 04:32:48.910 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/index.json
2025-09-21 04:32:48.910 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/index.json
2025-09-21 04:32:48.910 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/index.json
2025-09-21 04:32:48.910 [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:41397/resources/index.json.
2025-09-21 04:32:48.910 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/index.json
2025-09-21 04:32:48.911 [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-21 04:32:48.912 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/index.json
2025-09-21 04:32:48.912 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/index.json
2025-09-21 04:32:48.912 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/index.json
2025-09-21 04:32:48.912 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:41397/resources/index.json to class kotlinx.io.Source
WARN: http://localhost:41397/resources/index.json Navigation link to grade1/grade1.json SHOULD contain an icon
DEBUG: http://localhost:41397/resources/index.json Skipping link as it has already been visited: http://localhost:41397/resources/index.json
2025-09-21 04:32:48.969 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/grade1/grade1.json
2025-09-21 04:32:48.969 [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:41397/resources/grade1/grade1.json.
2025-09-21 04:32:48.969 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/grade1/grade1.json
2025-09-21 04:32:48.986 [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-21 04:32:48.996 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/grade1/grade1.json
2025-09-21 04:32:48.996 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/grade1/grade1.json
2025-09-21 04:32:48.996 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/grade1/grade1.json
2025-09-21 04:32:48.997 [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:41397/resources/grade1/grade1.json.
2025-09-21 04:32:48.997 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:41397/resources/grade1/grade1.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:48.998 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/grade1/grade1.json
2025-09-21 04:32:48.998 [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:41397/resources/grade1/grade1.json.
2025-09-21 04:32:48.998 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/grade1/grade1.json
2025-09-21 04:32:48.999 [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-21 04:32:49.005 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/grade1/grade1.json
2025-09-21 04:32:49.005 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/grade1/grade1.json
2025-09-21 04:32:49.005 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/grade1/grade1.json
2025-09-21 04:32:49.006 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/grade1/grade1.json
2025-09-21 04:32:49.006 [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:41397/resources/grade1/grade1.json.
2025-09-21 04:32:49.006 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/grade1/grade1.json
2025-09-21 04:32:49.010 [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-21 04:32:49.019 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/grade1/grade1.json
2025-09-21 04:32:49.026 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/grade1/grade1.json
2025-09-21 04:32:49.026 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/grade1/grade1.json
2025-09-21 04:32:49.026 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:41397/resources/grade1/grade1.json to class kotlinx.io.Source
DEBUG: http://localhost:41397/resources/grade1/grade1.json Validating Opds Publication: title "Lesson 001" and identifier: http://example.app/id/lesson001
2025-09-21 04:32:49.031 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/grade1/cover-small.jpg
2025-09-21 04:32:49.035 [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:41397/resources/grade1/cover-small.jpg.
2025-09-21 04:32:49.035 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/grade1/cover-small.jpg
2025-09-21 04:32:49.037 [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-21 04:32:49.040 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/grade1/cover-small.jpg
2025-09-21 04:32:49.040 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/grade1/cover-small.jpg
2025-09-21 04:32:49.040 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/grade1/cover-small.jpg
ERROR: http://localhost:41397/resources/grade1/grade1.json Link to http://localhost:41397/resources/grade1/cover-small.jpg: Response status code not HTTP OK/200. Got: 404
2025-09-21 04:32:49.041 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:41397/resources/grade1/cover-small.jpg to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:49.043 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.044 [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:41397/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:49.044 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.045 [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-21 04:32:49.046 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.046 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.046 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.047 [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:41397/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:49.047 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:41397/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:49.047 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.047 [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:41397/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:49.047 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.055 [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-21 04:32:49.058 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.058 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.058 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.080 [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:41397/resources/grade1/grade1.json Manifest not discovered for learning resource ID URL: http://localhost:41397/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:41397/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:41397/resources/grade1/grade1.json
2025-09-21 04:32:49.088 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:49.088 [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:41397/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:49.088 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:49.098 [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-21 04:32:49.107 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:49.107 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:49.107 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:49.107 [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:41397/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:49.107 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:41397/resources/grade1/lesson001/lesson001.json to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:49.107 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:49.107 [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:41397/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:49.108 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:49.109 [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-21 04:32:49.110 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:49.110 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:49.110 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:49.111 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:49.111 [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:41397/resources/grade1/lesson001/lesson001.json.
2025-09-21 04:32:49.111 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:49.112 [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-21 04:32:49.117 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:49.117 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:49.117 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:49.120 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:41397/resources/grade1/lesson001/lesson001.json to class kotlinx.io.Source
DEBUG: http://localhost:41397/resources/grade1/lesson001/lesson001.json Validating Opds Publication: title "Lesson 001" and identifier: https://example.app/id/lesson001
2025-09-21 04:32:49.179 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/grade1/lesson001/cover.png
2025-09-21 04:32:49.179 [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:41397/resources/grade1/lesson001/cover.png.
2025-09-21 04:32:49.179 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/grade1/lesson001/cover.png
2025-09-21 04:32:49.188 [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-21 04:32:49.195 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/grade1/lesson001/cover.png
2025-09-21 04:32:49.195 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/grade1/lesson001/cover.png
2025-09-21 04:32:49.195 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/grade1/lesson001/cover.png
2025-09-21 04:32:49.196 [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:41397/resources/grade1/lesson001/cover.png.
2025-09-21 04:32:49.196 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:41397/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:49.196 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/grade1/lesson001/cover.png
2025-09-21 04:32:49.196 [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:41397/resources/grade1/lesson001/cover.png.
2025-09-21 04:32:49.196 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/grade1/lesson001/cover.png
2025-09-21 04:32:49.201 [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-21 04:32:49.206 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/grade1/lesson001/cover.png
2025-09-21 04:32:49.206 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/grade1/lesson001/cover.png
2025-09-21 04:32:49.206 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/grade1/lesson001/cover.png
2025-09-21 04:32:49.207 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.207 [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:41397/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:49.207 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.210 [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-21 04:32:49.214 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.214 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.214 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.215 [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:41397/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:49.215 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:41397/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:49.217 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.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:41397/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:49.219 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.227 [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-21 04:32:49.230 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.233 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.233 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.248 [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:41397/resources/grade1/lesson001/lesson001.json Manifest not discovered for learning resource ID URL: http://localhost:41397/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:41397/resources/grade1/lesson001/lesson001.json Skipping link as it has already been visited: http://localhost:41397/resources/grade1/lesson001/lesson001.json
2025-09-21 04:32:49.266 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.266 [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:41397/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:49.266 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.268 [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-21 04:32:49.269 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.269 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.269 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.269 [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:41397/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:49.269 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:41397/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-21 04:32:49.270 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.270 [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:41397/resources/grade1/lesson001/lesson001.html.
2025-09-21 04:32:49.270 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.271 [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-21 04:32:49.275 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.275 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:41397/resources/grade1/lesson001/lesson001.html
2025-09-21 04:32:49.275 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:41397/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:41397/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:41397/resources/grade1/lesson001/lesson001.html