Test running on port 43905
2025-09-19 04:32:40.195 [Test worker] INFO io.ktor.server.Application - Autoreload is disabled because the development mode is off.
2025-09-19 04:32:40.217 [Test worker] INFO io.ktor.server.Application - Application started in 0.022 seconds.
2025-09-19 04:32:40.220 [DefaultDispatcher-worker-1 @coroutine#14] INFO io.ktor.server.Application - Responding at http://0.0.0.0:43905
2025-09-19 04:32:40.253 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/appmanifest.json
2025-09-19 04:32:40.254 [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:43905/resources/appmanifest.json.
2025-09-19 04:32:40.254 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/appmanifest.json
2025-09-19 04:32:40.362 [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-19 04:32:40.410 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/appmanifest.json
2025-09-19 04:32:40.411 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/appmanifest.json
2025-09-19 04:32:40.411 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/appmanifest.json
2025-09-19 04:32:40.414 [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:43905/resources/appmanifest.json.
2025-09-19 04:32:40.415 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43905/resources/appmanifest.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:40.417 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/appmanifest.json
2025-09-19 04:32:40.417 [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:43905/resources/appmanifest.json.
2025-09-19 04:32:40.417 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/appmanifest.json
2025-09-19 04:32:40.420 [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-19 04:32:40.423 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/appmanifest.json
2025-09-19 04:32:40.423 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/appmanifest.json
2025-09-19 04:32:40.423 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/appmanifest.json
2025-09-19 04:32:40.425 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/appmanifest.json
2025-09-19 04:32:40.425 [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:43905/resources/appmanifest.json.
2025-09-19 04:32:40.425 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/appmanifest.json
2025-09-19 04:32:40.427 [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-19 04:32:40.430 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/appmanifest.json
2025-09-19 04:32:40.431 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/appmanifest.json
2025-09-19 04:32:40.431 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/appmanifest.json
2025-09-19 04:32:40.434 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43905/resources/appmanifest.json to class kotlinx.io.Source
2025-09-19 04:32:40.480 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/app.html
2025-09-19 04:32:40.480 [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:43905/resources/app.html.
2025-09-19 04:32:40.481 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/app.html
2025-09-19 04:32:40.483 [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-19 04:32:40.486 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/app.html
2025-09-19 04:32:40.487 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/app.html
2025-09-19 04:32:40.487 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/app.html
2025-09-19 04:32:40.487 [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:43905/resources/app.html.
2025-09-19 04:32:40.488 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43905/resources/app.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:40.488 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/app.html
2025-09-19 04:32:40.488 [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:43905/resources/app.html.
2025-09-19 04:32:40.488 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/app.html
2025-09-19 04:32:40.491 [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-19 04:32:40.494 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/app.html
2025-09-19 04:32:40.495 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/app.html
2025-09-19 04:32:40.495 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/app.html
2025-09-19 04:32:40.495 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/index.json
2025-09-19 04:32:40.496 [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:43905/resources/index.json.
2025-09-19 04:32:40.496 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/index.json
2025-09-19 04:32:40.498 [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-19 04:32:40.501 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/index.json
2025-09-19 04:32:40.501 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/index.json
2025-09-19 04:32:40.501 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/index.json
2025-09-19 04:32:40.501 [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:43905/resources/index.json.
2025-09-19 04:32:40.502 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43905/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:40.502 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/index.json
2025-09-19 04:32:40.502 [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:43905/resources/index.json.
2025-09-19 04:32:40.502 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/index.json
2025-09-19 04:32:40.511 [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-19 04:32:40.514 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/index.json
2025-09-19 04:32:40.515 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/index.json
2025-09-19 04:32:40.515 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/index.json
2025-09-19 04:32:40.516 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/index.json
2025-09-19 04:32:40.516 [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:43905/resources/index.json.
2025-09-19 04:32:40.516 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/index.json
2025-09-19 04:32:40.518 [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-19 04:32:40.520 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/index.json
2025-09-19 04:32:40.520 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/index.json
2025-09-19 04:32:40.520 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/index.json
2025-09-19 04:32:40.520 [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:43905/resources/index.json.
2025-09-19 04:32:40.521 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43905/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:40.521 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/index.json
2025-09-19 04:32:40.521 [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:43905/resources/index.json.
2025-09-19 04:32:40.521 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/index.json
2025-09-19 04:32:40.524 [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-19 04:32:40.526 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/index.json
2025-09-19 04:32:40.527 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/index.json
2025-09-19 04:32:40.527 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/index.json
2025-09-19 04:32:40.528 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/index.json
2025-09-19 04:32:40.528 [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:43905/resources/index.json.
2025-09-19 04:32:40.528 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/index.json
2025-09-19 04:32:40.531 [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-19 04:32:40.533 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/index.json
2025-09-19 04:32:40.534 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/index.json
2025-09-19 04:32:40.534 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/index.json
2025-09-19 04:32:40.534 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43905/resources/index.json to class kotlinx.io.Source
WARN: http://localhost:43905/resources/index.json Navigation link to grade1/grade1.json SHOULD contain an icon
DEBUG: http://localhost:43905/resources/index.json Skipping link as it has already been visited: http://localhost:43905/resources/index.json
2025-09-19 04:32:43.545 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/grade1.json
2025-09-19 04:32:43.546 [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:43905/resources/grade1/grade1.json.
2025-09-19 04:32:43.546 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/grade1.json
2025-09-19 04:32:43.558 [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-19 04:32:43.566 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/grade1.json
2025-09-19 04:32:43.566 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/grade1.json
2025-09-19 04:32:43.566 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/grade1.json
2025-09-19 04:32:43.568 [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:43905/resources/grade1/grade1.json.
2025-09-19 04:32:43.568 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43905/resources/grade1/grade1.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:43.569 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/grade1.json
2025-09-19 04:32:43.570 [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:43905/resources/grade1/grade1.json.
2025-09-19 04:32:43.570 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/grade1.json
2025-09-19 04:32:43.573 [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-19 04:32:43.579 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/grade1.json
2025-09-19 04:32:43.583 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/grade1.json
2025-09-19 04:32:43.583 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/grade1.json
2025-09-19 04:32:43.587 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/grade1.json
2025-09-19 04:32:43.592 [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:43905/resources/grade1/grade1.json.
2025-09-19 04:32:43.593 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/grade1.json
2025-09-19 04:32:43.603 [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-19 04:32:43.606 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/grade1.json
2025-09-19 04:32:43.606 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/grade1.json
2025-09-19 04:32:43.606 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/grade1.json
2025-09-19 04:32:43.606 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43905/resources/grade1/grade1.json to class kotlinx.io.Source
DEBUG: http://localhost:43905/resources/grade1/grade1.json Validating Opds Publication: title "Lesson 001" and identifier: http://example.app/id/lesson001
2025-09-19 04:32:43.636 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:43.639 [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:43905/resources/grade1/lesson001/cover.png.
2025-09-19 04:32:43.639 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:43.642 [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-19 04:32:43.657 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:43.658 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:43.658 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:43.658 [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:43905/resources/grade1/lesson001/cover.png.
2025-09-19 04:32:43.658 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43905/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:43.659 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:43.659 [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:43905/resources/grade1/lesson001/cover.png.
2025-09-19 04:32:43.659 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:43.667 [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-19 04:32:43.676 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:43.679 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:43.679 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:43.680 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:43.680 [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:43905/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:43.681 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:43.686 [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-19 04:32:43.694 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:43.694 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:43.694 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:43.700 [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:43905/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:43.701 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43905/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:43.701 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:43.702 [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:43905/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:43.702 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:43.706 [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-19 04:32:43.715 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:43.716 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:43.716 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:43.848 [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:43905/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:43905/resources/grade1/grade1.json
2025-09-19 04:32:43.929 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:43.930 [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:43905/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:43.933 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:43.950 [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-19 04:32:43.960 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:43.960 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:43.960 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:43.961 [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:43905/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:43.961 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43905/resources/grade1/lesson001/lesson001.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:43.961 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:43.961 [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:43905/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:43.961 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:43.963 [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-19 04:32:43.966 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:43.966 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:43.966 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:43.967 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:43.967 [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:43905/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:43.969 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:43.971 [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-19 04:32:43.981 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:43.981 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:43.981 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:43.982 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43905/resources/grade1/lesson001/lesson001.json to class kotlinx.io.Source
DEBUG: http://localhost:43905/resources/grade1/lesson001/lesson001.json Validating Opds Publication: title "Lesson 001" and identifier: https://example.app/id/lesson001
2025-09-19 04:32:44.109 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:44.109 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:43905/resources/grade1/lesson001/cover.png.
2025-09-19 04:32:44.109 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:44.119 [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-19 04:32:44.123 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:44.123 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:44.124 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:44.124 [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:43905/resources/grade1/lesson001/cover.png.
2025-09-19 04:32:44.124 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43905/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:44.128 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:44.128 [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:43905/resources/grade1/lesson001/cover.png.
2025-09-19 04:32:44.128 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:44.131 [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-19 04:32:44.137 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:44.142 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:44.142 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/cover.png
2025-09-19 04:32:44.143 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.143 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:43905/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:44.143 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.158 [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-19 04:32:44.164 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.165 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.165 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.169 [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:43905/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:44.169 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43905/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:44.170 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.170 [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:43905/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:44.170 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.172 [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-19 04:32:44.174 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.174 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.174 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.197 [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-19 04:32:44.212 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/audio.ogg
2025-09-19 04:32:44.212 [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:43905/resources/grade1/lesson001/audio.ogg.
2025-09-19 04:32:44.212 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/audio.ogg
2025-09-19 04:32:44.219 [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-19 04:32:44.237 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/audio.ogg
2025-09-19 04:32:44.237 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/audio.ogg
2025-09-19 04:32:44.237 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/audio.ogg
2025-09-19 04:32:44.238 [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:43905/resources/grade1/lesson001/audio.ogg.
2025-09-19 04:32:44.238 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43905/resources/grade1/lesson001/audio.ogg to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:44.241 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/audio.ogg
2025-09-19 04:32:44.241 [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:43905/resources/grade1/lesson001/audio.ogg.
2025-09-19 04:32:44.241 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/audio.ogg
2025-09-19 04:32:44.250 [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-19 04:32:44.255 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/audio.ogg
2025-09-19 04:32:44.255 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/audio.ogg
2025-09-19 04:32:44.255 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/audio.ogg
2025-09-19 04:32:44.256 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/video.mp4
2025-09-19 04:32:44.259 [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:43905/resources/grade1/lesson001/video.mp4.
2025-09-19 04:32:44.259 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/video.mp4
2025-09-19 04:32:44.264 [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-19 04:32:44.271 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/video.mp4
2025-09-19 04:32:44.271 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/video.mp4
2025-09-19 04:32:44.271 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/video.mp4
2025-09-19 04:32:44.272 [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:43905/resources/grade1/lesson001/video.mp4.
2025-09-19 04:32:44.274 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43905/resources/grade1/lesson001/video.mp4 to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:44.295 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/video.mp4
2025-09-19 04:32:44.296 [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:43905/resources/grade1/lesson001/video.mp4.
2025-09-19 04:32:44.296 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/video.mp4
2025-09-19 04:32:44.298 [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-19 04:32:44.300 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/video.mp4
2025-09-19 04:32:44.300 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/video.mp4
2025-09-19 04:32:44.300 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/video.mp4
2025-09-19 04:32:44.300 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/script.js
2025-09-19 04:32:44.300 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Body type class io.ktor.client.utils.EmptyContent is in ignored types. Skipping ContentNegotiation for http://localhost:43905/resources/grade1/lesson001/script.js.
2025-09-19 04:32:44.300 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/script.js
2025-09-19 04:32:44.318 [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-19 04:32:44.326 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/script.js
2025-09-19 04:32:44.326 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/script.js
2025-09-19 04:32:44.327 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/script.js
2025-09-19 04:32:44.327 [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:43905/resources/grade1/lesson001/script.js.
2025-09-19 04:32:44.327 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43905/resources/grade1/lesson001/script.js to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:44.332 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/script.js
2025-09-19 04:32:44.332 [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:43905/resources/grade1/lesson001/script.js.
2025-09-19 04:32:44.332 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/script.js
2025-09-19 04:32:44.342 [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-19 04:32:44.348 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/script.js
2025-09-19 04:32:44.348 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/script.js
2025-09-19 04:32:44.348 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/script.js
DEBUG: http://localhost:43905/resources/grade1/lesson001/lesson001.json Skipping link as it has already been visited: http://localhost:43905/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:44.349 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.349 [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:43905/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:44.349 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.351 [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-19 04:32:44.360 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.361 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.361 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.362 [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:43905/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:44.362 [Test worker @coroutine#16] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:43905/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:44.363 [Test worker @coroutine#16] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.363 [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:43905/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:44.363 [Test worker @coroutine#16] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.364 [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-19 04:32:44.367 [Test worker @coroutine#16] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.367 [Test worker @coroutine#16] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:43905/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:44.367 [Test worker @coroutine#16] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:43905/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:43905/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:43905/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:43905/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:43905/resources/grade1/lesson001/lesson001.json
Test running on port 38729
2025-09-19 04:32:46.423 [Test worker] INFO io.ktor.server.Application - Autoreload is disabled because the development mode is off.
2025-09-19 04:32:46.424 [Test worker] INFO io.ktor.server.Application - Application started in 0.001 seconds.
2025-09-19 04:32:46.426 [DefaultDispatcher-worker-7 @coroutine#177] INFO io.ktor.server.Application - Responding at http://0.0.0.0:38729
2025-09-19 04:32:46.427 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:38729/resources/appmanifest.json
2025-09-19 04:32:46.427 [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:38729/resources/appmanifest.json.
2025-09-19 04:32:46.427 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:38729/resources/appmanifest.json
2025-09-19 04:32:46.429 [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-19 04:32:46.431 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:38729/resources/appmanifest.json
2025-09-19 04:32:46.431 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:38729/resources/appmanifest.json
2025-09-19 04:32:46.431 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:38729/resources/appmanifest.json
ERROR: http://localhost:38729/resources/appmanifest.json Link to http://localhost:38729/resources/appmanifest.json: No last-modified or etag header found
2025-09-19 04:32:46.431 [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:38729/resources/appmanifest.json.
2025-09-19 04:32:46.431 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:38729/resources/appmanifest.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:46.432 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:38729/resources/appmanifest.json
2025-09-19 04:32:46.432 [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:38729/resources/appmanifest.json.
2025-09-19 04:32:46.432 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:38729/resources/appmanifest.json
2025-09-19 04:32:46.433 [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-19 04:32:46.434 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:38729/resources/appmanifest.json
2025-09-19 04:32:46.434 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:38729/resources/appmanifest.json
2025-09-19 04:32:46.434 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:38729/resources/appmanifest.json
2025-09-19 04:32:46.434 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:38729/resources/appmanifest.json to class kotlinx.io.Source
2025-09-19 04:32:46.442 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:38729/resources/app.html
2025-09-19 04:32:46.442 [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:38729/resources/app.html.
2025-09-19 04:32:46.442 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:38729/resources/app.html
2025-09-19 04:32:46.445 [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-19 04:32:46.447 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:38729/resources/app.html
2025-09-19 04:32:46.447 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:38729/resources/app.html
2025-09-19 04:32:46.447 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:38729/resources/app.html
ERROR: http://localhost:38729/resources/appmanifest.json Link to http://localhost:38729/resources/app.html: No last-modified or etag header found
2025-09-19 04:32:46.447 [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:38729/resources/app.html.
2025-09-19 04:32:46.447 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:38729/resources/app.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:46.447 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:38729/resources/index.json
2025-09-19 04:32:46.447 [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:38729/resources/index.json.
2025-09-19 04:32:46.447 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:38729/resources/index.json
2025-09-19 04:32:46.449 [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-19 04:32:46.450 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:38729/resources/index.json
2025-09-19 04:32:46.450 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:38729/resources/index.json
2025-09-19 04:32:46.450 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:38729/resources/index.json
ERROR: http://localhost:38729/resources/appmanifest.json Link to http://localhost:38729/resources/index.json: No last-modified or etag header found
2025-09-19 04:32:46.451 [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:38729/resources/index.json.
2025-09-19 04:32:46.451 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:38729/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:46.451 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:38729/resources/index.json
2025-09-19 04:32:46.451 [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:38729/resources/index.json.
2025-09-19 04:32:46.452 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:38729/resources/index.json
2025-09-19 04:32:46.453 [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-19 04:32:46.456 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:38729/resources/index.json
2025-09-19 04:32:46.456 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:38729/resources/index.json
2025-09-19 04:32:46.456 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:38729/resources/index.json
ERROR: http://localhost:38729/resources/appmanifest.json Link to http://localhost:38729/resources/index.json: No last-modified or etag header found
2025-09-19 04:32:46.456 [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:38729/resources/index.json.
2025-09-19 04:32:46.456 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:38729/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:46.457 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:38729/resources/index.json
2025-09-19 04:32:46.457 [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:38729/resources/index.json.
2025-09-19 04:32:46.457 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:38729/resources/index.json
2025-09-19 04:32:46.459 [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-19 04:32:46.461 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:38729/resources/index.json
2025-09-19 04:32:46.461 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:38729/resources/index.json
2025-09-19 04:32:46.461 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:38729/resources/index.json
2025-09-19 04:32:46.461 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:38729/resources/index.json to class kotlinx.io.Source
WARN: http://localhost:38729/resources/index.json Navigation link to grade1/grade1.json SHOULD contain an icon
DEBUG: http://localhost:38729/resources/index.json Skipping link as it has already been visited: http://localhost:38729/resources/index.json
2025-09-19 04:32:46.528 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:38729/resources/grade1/grade1.json
2025-09-19 04:32:46.528 [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:38729/resources/grade1/grade1.json.
2025-09-19 04:32:46.528 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:38729/resources/grade1/grade1.json
2025-09-19 04:32:46.530 [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-19 04:32:46.531 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:38729/resources/grade1/grade1.json
2025-09-19 04:32:46.531 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:38729/resources/grade1/grade1.json
2025-09-19 04:32:46.531 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:38729/resources/grade1/grade1.json
ERROR: http://localhost:38729/resources/index.json Link to http://localhost:38729/resources/grade1/grade1.json: No last-modified or etag header found
2025-09-19 04:32:46.531 [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:38729/resources/grade1/grade1.json.
2025-09-19 04:32:46.532 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:38729/resources/grade1/grade1.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:46.532 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:38729/resources/grade1/grade1.json
2025-09-19 04:32:46.532 [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:38729/resources/grade1/grade1.json.
2025-09-19 04:32:46.532 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:38729/resources/grade1/grade1.json
2025-09-19 04:32:46.533 [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-19 04:32:46.534 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:38729/resources/grade1/grade1.json
2025-09-19 04:32:46.534 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:38729/resources/grade1/grade1.json
2025-09-19 04:32:46.534 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:38729/resources/grade1/grade1.json
2025-09-19 04:32:46.534 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:38729/resources/grade1/grade1.json to class kotlinx.io.Source
DEBUG: http://localhost:38729/resources/grade1/grade1.json Validating Opds Publication: title "Lesson 001" and identifier: http://example.app/id/lesson001
2025-09-19 04:32:46.536 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:38729/resources/grade1/lesson001/cover.png
2025-09-19 04:32:46.536 [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:38729/resources/grade1/lesson001/cover.png.
2025-09-19 04:32:46.536 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:38729/resources/grade1/lesson001/cover.png
2025-09-19 04:32:46.537 [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-19 04:32:46.538 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:38729/resources/grade1/lesson001/cover.png
2025-09-19 04:32:46.538 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:38729/resources/grade1/lesson001/cover.png
2025-09-19 04:32:46.538 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:38729/resources/grade1/lesson001/cover.png
ERROR: http://localhost:38729/resources/grade1/grade1.json Link to http://localhost:38729/resources/grade1/lesson001/cover.png: No last-modified or etag header found
2025-09-19 04:32:46.538 [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:38729/resources/grade1/lesson001/cover.png.
2025-09-19 04:32:46.538 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:38729/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:46.539 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:38729/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:46.539 [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:38729/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:46.539 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:38729/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:46.540 [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-19 04:32:46.541 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:38729/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:46.541 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:38729/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:46.541 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:38729/resources/grade1/lesson001/lesson001.html
ERROR: http://localhost:38729/resources/grade1/grade1.json Link to http://localhost:38729/resources/grade1/lesson001/lesson001.html: No last-modified or etag header found
2025-09-19 04:32:46.541 [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:38729/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:46.541 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:38729/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:46.544 [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:38729/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:38729/resources/grade1/grade1.json
2025-09-19 04:32:46.547 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:38729/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:46.547 [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:38729/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:46.547 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:38729/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:46.549 [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-19 04:32:46.550 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:38729/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:46.550 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:38729/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:46.550 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:38729/resources/grade1/lesson001/lesson001.json
ERROR: http://localhost:38729/resources/grade1/grade1.json Link to http://localhost:38729/resources/grade1/lesson001/lesson001.json: No last-modified or etag header found
2025-09-19 04:32:46.551 [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:38729/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:46.551 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:38729/resources/grade1/lesson001/lesson001.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:46.551 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:38729/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:46.551 [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:38729/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:46.551 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:38729/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:46.552 [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-19 04:32:46.554 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:38729/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:46.554 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:38729/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:46.554 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:38729/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:46.554 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:38729/resources/grade1/lesson001/lesson001.json to class kotlinx.io.Source
DEBUG: http://localhost:38729/resources/grade1/lesson001/lesson001.json Validating Opds Publication: title "Lesson 001" and identifier: https://example.app/id/lesson001
2025-09-19 04:32:46.593 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:38729/resources/grade1/lesson001/cover.png
2025-09-19 04:32:46.593 [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:38729/resources/grade1/lesson001/cover.png.
2025-09-19 04:32:46.593 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:38729/resources/grade1/lesson001/cover.png
2025-09-19 04:32:46.594 [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-19 04:32:46.596 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:38729/resources/grade1/lesson001/cover.png
2025-09-19 04:32:46.596 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:38729/resources/grade1/lesson001/cover.png
2025-09-19 04:32:46.596 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:38729/resources/grade1/lesson001/cover.png
ERROR: http://localhost:38729/resources/grade1/lesson001/lesson001.json Link to http://localhost:38729/resources/grade1/lesson001/cover.png: No last-modified or etag header found
2025-09-19 04:32:46.596 [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:38729/resources/grade1/lesson001/cover.png.
2025-09-19 04:32:46.596 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:38729/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:46.596 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:38729/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:46.596 [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:38729/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:46.596 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:38729/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:46.598 [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-19 04:32:46.599 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:38729/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:46.599 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:38729/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:46.599 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:38729/resources/grade1/lesson001/lesson001.html
ERROR: http://localhost:38729/resources/grade1/lesson001/lesson001.json Link to http://localhost:38729/resources/grade1/lesson001/lesson001.html: No last-modified or etag header found
2025-09-19 04:32:46.599 [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:38729/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:46.600 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:38729/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:46.603 [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-19 04:32:46.605 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:38729/resources/grade1/lesson001/audio.ogg
2025-09-19 04:32:46.606 [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:38729/resources/grade1/lesson001/audio.ogg.
2025-09-19 04:32:46.606 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:38729/resources/grade1/lesson001/audio.ogg
2025-09-19 04:32:46.607 [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-19 04:32:46.609 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:38729/resources/grade1/lesson001/audio.ogg
2025-09-19 04:32:46.609 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:38729/resources/grade1/lesson001/audio.ogg
2025-09-19 04:32:46.609 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:38729/resources/grade1/lesson001/audio.ogg
ERROR: http://localhost:38729/resources/grade1/lesson001/lesson001.json Link to http://localhost:38729/resources/grade1/lesson001/audio.ogg: No last-modified or etag header found
2025-09-19 04:32:46.609 [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:38729/resources/grade1/lesson001/audio.ogg.
2025-09-19 04:32:46.609 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:38729/resources/grade1/lesson001/audio.ogg to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:46.610 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:38729/resources/grade1/lesson001/video.mp4
2025-09-19 04:32:46.610 [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:38729/resources/grade1/lesson001/video.mp4.
2025-09-19 04:32:46.610 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:38729/resources/grade1/lesson001/video.mp4
2025-09-19 04:32:46.611 [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-19 04:32:46.612 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:38729/resources/grade1/lesson001/video.mp4
2025-09-19 04:32:46.612 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:38729/resources/grade1/lesson001/video.mp4
2025-09-19 04:32:46.612 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:38729/resources/grade1/lesson001/video.mp4
ERROR: http://localhost:38729/resources/grade1/lesson001/lesson001.json Link to http://localhost:38729/resources/grade1/lesson001/video.mp4: No last-modified or etag header found
2025-09-19 04:32:46.612 [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:38729/resources/grade1/lesson001/video.mp4.
2025-09-19 04:32:46.612 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:38729/resources/grade1/lesson001/video.mp4 to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:46.618 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:38729/resources/grade1/lesson001/script.js
2025-09-19 04:32:46.618 [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:38729/resources/grade1/lesson001/script.js.
2025-09-19 04:32:46.618 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:38729/resources/grade1/lesson001/script.js
2025-09-19 04:32:46.619 [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-19 04:32:46.621 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:38729/resources/grade1/lesson001/script.js
2025-09-19 04:32:46.621 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:38729/resources/grade1/lesson001/script.js
2025-09-19 04:32:46.621 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:38729/resources/grade1/lesson001/script.js
ERROR: http://localhost:38729/resources/grade1/lesson001/lesson001.json Link to http://localhost:38729/resources/grade1/lesson001/script.js: No last-modified or etag header found
2025-09-19 04:32:46.621 [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:38729/resources/grade1/lesson001/script.js.
2025-09-19 04:32:46.621 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:38729/resources/grade1/lesson001/script.js to class io.ktor.utils.io.ByteReadChannel
DEBUG: http://localhost:38729/resources/grade1/lesson001/lesson001.json Skipping link as it has already been visited: http://localhost:38729/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:46.621 [Test worker @coroutine#179] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:38729/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:46.621 [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:38729/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:46.621 [Test worker @coroutine#179] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:38729/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:46.622 [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-19 04:32:46.624 [Test worker @coroutine#179] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:38729/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:46.624 [Test worker @coroutine#179] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:38729/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:46.624 [Test worker @coroutine#179] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:38729/resources/grade1/lesson001/lesson001.html
ERROR: http://localhost:38729/resources/grade1/lesson001/lesson001.json Link to http://localhost:38729/resources/grade1/lesson001/lesson001.html: No last-modified or etag header found
2025-09-19 04:32:46.624 [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:38729/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:46.624 [Test worker @coroutine#179] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:38729/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
DEBUG: http://localhost:38729/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:38729/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:38729/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:38729/resources/grade1/lesson001/lesson001.json
Test running on port 33697
2025-09-19 04:32:48.659 [Test worker] INFO io.ktor.server.Application - Autoreload is disabled because the development mode is off.
2025-09-19 04:32:48.659 [Test worker] INFO io.ktor.server.Application - Application started in 0.0 seconds.
2025-09-19 04:32:48.661 [DefaultDispatcher-worker-10 @coroutine#298] INFO io.ktor.server.Application - Responding at http://0.0.0.0:33697
2025-09-19 04:32:48.662 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/appmanifest.json
2025-09-19 04:32:48.662 [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:33697/resources/appmanifest.json.
2025-09-19 04:32:48.662 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/appmanifest.json
2025-09-19 04:32:48.663 [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-19 04:32:48.664 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/appmanifest.json
2025-09-19 04:32:48.664 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/appmanifest.json
2025-09-19 04:32:48.664 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/appmanifest.json
2025-09-19 04:32:48.664 [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:33697/resources/appmanifest.json.
2025-09-19 04:32:48.664 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:33697/resources/appmanifest.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:48.665 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/appmanifest.json
2025-09-19 04:32:48.665 [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:33697/resources/appmanifest.json.
2025-09-19 04:32:48.665 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/appmanifest.json
2025-09-19 04:32:48.665 [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-19 04:32:48.666 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/appmanifest.json
2025-09-19 04:32:48.666 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/appmanifest.json
2025-09-19 04:32:48.666 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/appmanifest.json
2025-09-19 04:32:48.666 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/appmanifest.json
2025-09-19 04:32:48.666 [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:33697/resources/appmanifest.json.
2025-09-19 04:32:48.666 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/appmanifest.json
2025-09-19 04:32:48.667 [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-19 04:32:48.667 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/appmanifest.json
2025-09-19 04:32:48.667 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/appmanifest.json
2025-09-19 04:32:48.667 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/appmanifest.json
2025-09-19 04:32:48.667 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:33697/resources/appmanifest.json to class kotlinx.io.Source
2025-09-19 04:32:48.672 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/app.html
2025-09-19 04:32:48.672 [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:33697/resources/app.html.
2025-09-19 04:32:48.672 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/app.html
2025-09-19 04:32:48.673 [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-19 04:32:48.674 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/app.html
2025-09-19 04:32:48.675 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/app.html
2025-09-19 04:32:48.675 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/app.html
2025-09-19 04:32:48.675 [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:33697/resources/app.html.
2025-09-19 04:32:48.675 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:33697/resources/app.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:48.675 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/app.html
2025-09-19 04:32:48.675 [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:33697/resources/app.html.
2025-09-19 04:32:48.675 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/app.html
2025-09-19 04:32:48.676 [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-19 04:32:48.677 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/app.html
2025-09-19 04:32:48.677 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/app.html
2025-09-19 04:32:48.677 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/app.html
2025-09-19 04:32:48.677 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/index.json
2025-09-19 04:32:48.677 [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:33697/resources/index.json.
2025-09-19 04:32:48.677 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/index.json
2025-09-19 04:32:48.678 [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-19 04:32:48.679 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/index.json
2025-09-19 04:32:48.679 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/index.json
2025-09-19 04:32:48.679 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/index.json
2025-09-19 04:32:48.679 [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:33697/resources/index.json.
2025-09-19 04:32:48.679 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:33697/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:48.679 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/index.json
2025-09-19 04:32:48.679 [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:33697/resources/index.json.
2025-09-19 04:32:48.679 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/index.json
2025-09-19 04:32:48.680 [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-19 04:32:48.681 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/index.json
2025-09-19 04:32:48.681 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/index.json
2025-09-19 04:32:48.681 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/index.json
2025-09-19 04:32:48.681 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/index.json
2025-09-19 04:32:48.681 [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:33697/resources/index.json.
2025-09-19 04:32:48.681 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/index.json
2025-09-19 04:32:48.682 [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-19 04:32:48.683 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/index.json
2025-09-19 04:32:48.683 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/index.json
2025-09-19 04:32:48.683 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/index.json
2025-09-19 04:32:48.684 [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:33697/resources/index.json.
2025-09-19 04:32:48.684 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:33697/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:48.684 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/index.json
2025-09-19 04:32:48.684 [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:33697/resources/index.json.
2025-09-19 04:32:48.684 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/index.json
2025-09-19 04:32:48.685 [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-19 04:32:48.686 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/index.json
2025-09-19 04:32:48.686 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/index.json
2025-09-19 04:32:48.686 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/index.json
2025-09-19 04:32:48.686 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/index.json
2025-09-19 04:32:48.686 [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:33697/resources/index.json.
2025-09-19 04:32:48.686 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/index.json
2025-09-19 04:32:48.687 [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-19 04:32:48.688 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/index.json
2025-09-19 04:32:48.688 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/index.json
2025-09-19 04:32:48.688 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/index.json
2025-09-19 04:32:48.688 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:33697/resources/index.json to class kotlinx.io.Source
WARN: http://localhost:33697/resources/index.json Navigation link to grade1/grade1.json SHOULD contain an icon
DEBUG: http://localhost:33697/resources/index.json Skipping link as it has already been visited: http://localhost:33697/resources/index.json
2025-09-19 04:32:48.740 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/grade1/grade1.json
2025-09-19 04:32:48.740 [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:33697/resources/grade1/grade1.json.
2025-09-19 04:32:48.740 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/grade1/grade1.json
2025-09-19 04:32:48.741 [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-19 04:32:48.742 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/grade1/grade1.json
2025-09-19 04:32:48.742 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/grade1/grade1.json
2025-09-19 04:32:48.742 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/grade1/grade1.json
2025-09-19 04:32:48.742 [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:33697/resources/grade1/grade1.json.
2025-09-19 04:32:48.742 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:33697/resources/grade1/grade1.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:48.743 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/grade1/grade1.json
2025-09-19 04:32:48.743 [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:33697/resources/grade1/grade1.json.
2025-09-19 04:32:48.743 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/grade1/grade1.json
2025-09-19 04:32:48.743 [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-19 04:32:48.744 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/grade1/grade1.json
2025-09-19 04:32:48.744 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/grade1/grade1.json
2025-09-19 04:32:48.744 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/grade1/grade1.json
2025-09-19 04:32:48.745 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/grade1/grade1.json
2025-09-19 04:32:48.745 [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:33697/resources/grade1/grade1.json.
2025-09-19 04:32:48.745 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/grade1/grade1.json
2025-09-19 04:32:48.746 [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-19 04:32:48.746 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/grade1/grade1.json
2025-09-19 04:32:48.746 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/grade1/grade1.json
2025-09-19 04:32:48.746 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/grade1/grade1.json
2025-09-19 04:32:48.747 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:33697/resources/grade1/grade1.json to class kotlinx.io.Source
DEBUG: http://localhost:33697/resources/grade1/grade1.json Validating Opds Publication: title "Lesson 001" and identifier: http://example.app/id/lesson001
2025-09-19 04:32:48.748 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/grade1/cover-small.jpg
2025-09-19 04:32:48.748 [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:33697/resources/grade1/cover-small.jpg.
2025-09-19 04:32:48.748 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/grade1/cover-small.jpg
2025-09-19 04:32:48.749 [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-19 04:32:48.750 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/grade1/cover-small.jpg
2025-09-19 04:32:48.750 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/grade1/cover-small.jpg
2025-09-19 04:32:48.750 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/grade1/cover-small.jpg
ERROR: http://localhost:33697/resources/grade1/grade1.json Link to http://localhost:33697/resources/grade1/cover-small.jpg: Response status code not HTTP OK/200. Got: 404
2025-09-19 04:32:48.750 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:33697/resources/grade1/cover-small.jpg to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:48.750 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.751 [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:33697/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:48.751 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.751 [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-19 04:32:48.752 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.752 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.752 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.752 [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:33697/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:48.752 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:33697/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:48.753 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.753 [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:33697/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:48.753 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.754 [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-19 04:32:48.754 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.754 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.754 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.757 [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:33697/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:33697/resources/grade1/grade1.json
2025-09-19 04:32:48.759 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:48.759 [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:33697/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:48.760 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:48.761 [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-19 04:32:48.762 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:48.762 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:48.762 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:48.762 [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:33697/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:48.762 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:33697/resources/grade1/lesson001/lesson001.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:48.762 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:48.762 [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:33697/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:48.762 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:48.763 [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-19 04:32:48.764 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:48.764 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:48.764 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:48.764 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:48.764 [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:33697/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:48.764 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:48.765 [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-19 04:32:48.766 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:48.766 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:48.766 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:48.766 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:33697/resources/grade1/lesson001/lesson001.json to class kotlinx.io.Source
DEBUG: http://localhost:33697/resources/grade1/lesson001/lesson001.json Validating Opds Publication: title "Lesson 001" and identifier: https://example.app/id/lesson001
2025-09-19 04:32:48.800 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/grade1/lesson001/cover.png
2025-09-19 04:32:48.800 [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:33697/resources/grade1/lesson001/cover.png.
2025-09-19 04:32:48.800 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/grade1/lesson001/cover.png
2025-09-19 04:32:48.801 [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-19 04:32:48.803 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/grade1/lesson001/cover.png
2025-09-19 04:32:48.803 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/grade1/lesson001/cover.png
2025-09-19 04:32:48.803 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/grade1/lesson001/cover.png
2025-09-19 04:32:48.803 [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:33697/resources/grade1/lesson001/cover.png.
2025-09-19 04:32:48.803 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:33697/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:48.803 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/grade1/lesson001/cover.png
2025-09-19 04:32:48.803 [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:33697/resources/grade1/lesson001/cover.png.
2025-09-19 04:32:48.803 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/grade1/lesson001/cover.png
2025-09-19 04:32:48.804 [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-19 04:32:48.804 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/grade1/lesson001/cover.png
2025-09-19 04:32:48.804 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/grade1/lesson001/cover.png
2025-09-19 04:32:48.804 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/grade1/lesson001/cover.png
2025-09-19 04:32:48.805 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.805 [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:33697/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:48.805 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.806 [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-19 04:32:48.806 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.806 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.806 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.806 [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:33697/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:48.806 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:33697/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:48.807 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.807 [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:33697/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:48.807 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.807 [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-19 04:32:48.808 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.808 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.808 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.810 [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:33697/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:33697/resources/grade1/lesson001/lesson001.json Skipping link as it has already been visited: http://localhost:33697/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:48.812 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.812 [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:33697/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:48.812 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.813 [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-19 04:32:48.813 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.813 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.813 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.814 [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:33697/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:48.814 [Test worker @coroutine#300] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:33697/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:48.814 [Test worker @coroutine#300] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.814 [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:33697/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:48.814 [Test worker @coroutine#300] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.814 [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-19 04:32:48.815 [Test worker @coroutine#300] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.815 [Test worker @coroutine#300] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:33697/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:48.815 [Test worker @coroutine#300] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:33697/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:33697/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:33697/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:33697/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:33697/resources/grade1/lesson001/lesson001.json
Test running on port 44043
2025-09-19 04:32:50.905 [Test worker] INFO io.ktor.server.Application - Autoreload is disabled because the development mode is off.
2025-09-19 04:32:50.905 [Test worker] INFO io.ktor.server.Application - Application started in 0.0 seconds.
2025-09-19 04:32:50.914 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/appmanifest.json
2025-09-19 04:32:50.914 [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:44043/resources/appmanifest.json.
2025-09-19 04:32:50.914 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/appmanifest.json
2025-09-19 04:32:50.914 [DefaultDispatcher-worker-6 @coroutine#429] INFO io.ktor.server.Application - Responding at http://0.0.0.0:44043
2025-09-19 04:32:50.924 [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-19 04:32:50.935 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/appmanifest.json
2025-09-19 04:32:50.935 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/appmanifest.json
2025-09-19 04:32:50.935 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/appmanifest.json
2025-09-19 04:32:50.936 [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:44043/resources/appmanifest.json.
2025-09-19 04:32:50.936 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44043/resources/appmanifest.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:50.936 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/appmanifest.json
2025-09-19 04:32:50.936 [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:44043/resources/appmanifest.json.
2025-09-19 04:32:50.936 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/appmanifest.json
2025-09-19 04:32:50.937 [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-19 04:32:50.941 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/appmanifest.json
2025-09-19 04:32:50.941 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/appmanifest.json
2025-09-19 04:32:50.941 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/appmanifest.json
2025-09-19 04:32:50.941 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/appmanifest.json
2025-09-19 04:32:50.941 [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:44043/resources/appmanifest.json.
2025-09-19 04:32:50.942 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/appmanifest.json
2025-09-19 04:32:50.943 [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-19 04:32:50.944 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/appmanifest.json
2025-09-19 04:32:50.944 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/appmanifest.json
2025-09-19 04:32:50.944 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/appmanifest.json
2025-09-19 04:32:50.944 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44043/resources/appmanifest.json to class kotlinx.io.Source
2025-09-19 04:32:50.947 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/app.html
2025-09-19 04:32:50.947 [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:44043/resources/app.html.
2025-09-19 04:32:50.947 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/app.html
2025-09-19 04:32:50.950 [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-19 04:32:50.961 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/app.html
2025-09-19 04:32:50.961 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/app.html
2025-09-19 04:32:50.961 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/app.html
2025-09-19 04:32:50.962 [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:44043/resources/app.html.
2025-09-19 04:32:50.962 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44043/resources/app.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:50.962 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/app.html
2025-09-19 04:32:50.962 [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:44043/resources/app.html.
2025-09-19 04:32:50.962 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/app.html
2025-09-19 04:32:50.966 [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-19 04:32:50.970 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/app.html
2025-09-19 04:32:50.970 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/app.html
2025-09-19 04:32:50.970 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/app.html
2025-09-19 04:32:50.971 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/index.json
2025-09-19 04:32:50.971 [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:44043/resources/index.json.
2025-09-19 04:32:50.971 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/index.json
2025-09-19 04:32:50.975 [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-19 04:32:50.978 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/index.json
2025-09-19 04:32:50.978 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/index.json
2025-09-19 04:32:50.978 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/index.json
2025-09-19 04:32:50.979 [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:44043/resources/index.json.
2025-09-19 04:32:50.979 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44043/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:50.979 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/index.json
2025-09-19 04:32:50.979 [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:44043/resources/index.json.
2025-09-19 04:32:50.979 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/index.json
2025-09-19 04:32:50.981 [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-19 04:32:50.987 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/index.json
2025-09-19 04:32:50.987 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/index.json
2025-09-19 04:32:50.987 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/index.json
2025-09-19 04:32:50.987 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/index.json
2025-09-19 04:32:50.987 [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:44043/resources/index.json.
2025-09-19 04:32:50.987 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/index.json
2025-09-19 04:32:50.989 [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-19 04:32:50.990 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/index.json
2025-09-19 04:32:50.990 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/index.json
2025-09-19 04:32:50.990 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/index.json
2025-09-19 04:32:50.990 [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:44043/resources/index.json.
2025-09-19 04:32:50.992 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44043/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:50.994 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/index.json
2025-09-19 04:32:50.994 [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:44043/resources/index.json.
2025-09-19 04:32:50.994 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/index.json
2025-09-19 04:32:50.995 [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-19 04:32:50.996 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/index.json
2025-09-19 04:32:50.996 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/index.json
2025-09-19 04:32:50.996 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/index.json
2025-09-19 04:32:50.997 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/index.json
2025-09-19 04:32:50.997 [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:44043/resources/index.json.
2025-09-19 04:32:50.997 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/index.json
2025-09-19 04:32:50.998 [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-19 04:32:50.999 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/index.json
2025-09-19 04:32:51.001 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/index.json
2025-09-19 04:32:51.001 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/index.json
2025-09-19 04:32:51.001 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44043/resources/index.json to class kotlinx.io.Source
WARN: http://localhost:44043/resources/index.json Navigation link to grade1/grade1.json SHOULD contain an icon
DEBUG: http://localhost:44043/resources/index.json Skipping link as it has already been visited: http://localhost:44043/resources/index.json
2025-09-19 04:32:51.086 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/grade1/grade1.json
2025-09-19 04:32:51.086 [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:44043/resources/grade1/grade1.json.
2025-09-19 04:32:51.090 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/grade1/grade1.json
2025-09-19 04:32:51.092 [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-19 04:32:51.100 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/grade1/grade1.json
2025-09-19 04:32:51.100 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/grade1/grade1.json
2025-09-19 04:32:51.100 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/grade1/grade1.json
2025-09-19 04:32:51.100 [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:44043/resources/grade1/grade1.json.
2025-09-19 04:32:51.100 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44043/resources/grade1/grade1.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:51.101 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/grade1/grade1.json
2025-09-19 04:32:51.101 [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:44043/resources/grade1/grade1.json.
2025-09-19 04:32:51.101 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/grade1/grade1.json
2025-09-19 04:32:51.106 [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-19 04:32:51.114 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/grade1/grade1.json
2025-09-19 04:32:51.114 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/grade1/grade1.json
2025-09-19 04:32:51.114 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/grade1/grade1.json
2025-09-19 04:32:51.115 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/grade1/grade1.json
2025-09-19 04:32:51.115 [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:44043/resources/grade1/grade1.json.
2025-09-19 04:32:51.115 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/grade1/grade1.json
2025-09-19 04:32:51.118 [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-19 04:32:51.119 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/grade1/grade1.json
2025-09-19 04:32:51.120 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/grade1/grade1.json
2025-09-19 04:32:51.120 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/grade1/grade1.json
2025-09-19 04:32:51.120 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44043/resources/grade1/grade1.json to class kotlinx.io.Source
DEBUG: http://localhost:44043/resources/grade1/grade1.json Validating Opds Publication: title "Lesson 001" and identifier: http://example.app/id/lesson001
2025-09-19 04:32:51.122 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/grade1/cover-small.jpg
2025-09-19 04:32:51.122 [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:44043/resources/grade1/cover-small.jpg.
2025-09-19 04:32:51.122 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/grade1/cover-small.jpg
2025-09-19 04:32:51.127 [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-19 04:32:51.128 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/grade1/cover-small.jpg
2025-09-19 04:32:51.128 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/grade1/cover-small.jpg
2025-09-19 04:32:51.128 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/grade1/cover-small.jpg
ERROR: http://localhost:44043/resources/grade1/grade1.json Link to http://localhost:44043/resources/grade1/cover-small.jpg: Response status code not HTTP OK/200. Got: 404
2025-09-19 04:32:51.128 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44043/resources/grade1/cover-small.jpg to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:51.129 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.129 [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:44043/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:51.129 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.130 [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-19 04:32:51.132 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.132 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.132 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.132 [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:44043/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:51.132 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44043/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:51.133 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.133 [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:44043/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:51.133 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.138 [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-19 04:32:51.139 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.140 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.140 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.153 [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:44043/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:44043/resources/grade1/grade1.json
2025-09-19 04:32:51.163 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:51.163 [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:44043/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:51.163 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:51.164 [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-19 04:32:51.170 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:51.170 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:51.170 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:51.171 [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:44043/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:51.171 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44043/resources/grade1/lesson001/lesson001.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:51.171 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:51.171 [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:44043/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:51.171 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:51.172 [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-19 04:32:51.174 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:51.174 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:51.174 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:51.174 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:51.174 [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:44043/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:51.174 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:51.175 [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-19 04:32:51.180 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:51.180 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:51.181 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:51.181 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44043/resources/grade1/lesson001/lesson001.json to class kotlinx.io.Source
DEBUG: http://localhost:44043/resources/grade1/lesson001/lesson001.json Validating Opds Publication: title "Lesson 001" and identifier: https://example.app/id/lesson001
2025-09-19 04:32:51.243 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/grade1/lesson001/cover.png
2025-09-19 04:32:51.247 [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:44043/resources/grade1/lesson001/cover.png.
2025-09-19 04:32:51.247 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/grade1/lesson001/cover.png
2025-09-19 04:32:51.251 [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-19 04:32:51.253 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/grade1/lesson001/cover.png
2025-09-19 04:32:51.253 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/grade1/lesson001/cover.png
2025-09-19 04:32:51.253 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/grade1/lesson001/cover.png
ERROR: http://localhost:44043/resources/grade1/lesson001/lesson001.json Link to http://localhost:44043/resources/grade1/lesson001/cover.png: Response status code not HTTP OK/200. Got: 404
2025-09-19 04:32:51.253 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44043/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:51.253 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.253 [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:44043/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:51.253 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.254 [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-19 04:32:51.262 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.263 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.263 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.263 [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:44043/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:51.263 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44043/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:51.263 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.263 [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:44043/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:51.263 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.264 [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-19 04:32:51.276 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.276 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.276 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.285 [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-19 04:32:51.290 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/grade1/lesson001/audio.ogg
2025-09-19 04:32:51.290 [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:44043/resources/grade1/lesson001/audio.ogg.
2025-09-19 04:32:51.290 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/grade1/lesson001/audio.ogg
2025-09-19 04:32:51.293 [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-19 04:32:51.296 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/grade1/lesson001/audio.ogg
2025-09-19 04:32:51.296 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/grade1/lesson001/audio.ogg
2025-09-19 04:32:51.296 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/grade1/lesson001/audio.ogg
ERROR: http://localhost:44043/resources/grade1/lesson001/lesson001.json Link to http://localhost:44043/resources/grade1/lesson001/audio.ogg: Response status code not HTTP OK/200. Got: 404
2025-09-19 04:32:51.297 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44043/resources/grade1/lesson001/audio.ogg to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:51.310 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/grade1/lesson001/video.mp4
2025-09-19 04:32:51.310 [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:44043/resources/grade1/lesson001/video.mp4.
2025-09-19 04:32:51.310 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/grade1/lesson001/video.mp4
2025-09-19 04:32:51.322 [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-19 04:32:51.324 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/grade1/lesson001/video.mp4
2025-09-19 04:32:51.324 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/grade1/lesson001/video.mp4
2025-09-19 04:32:51.324 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/grade1/lesson001/video.mp4
ERROR: http://localhost:44043/resources/grade1/lesson001/lesson001.json Link to http://localhost:44043/resources/grade1/lesson001/video.mp4: Response status code not HTTP OK/200. Got: 404
2025-09-19 04:32:51.324 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44043/resources/grade1/lesson001/video.mp4 to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:51.324 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/grade1/lesson001/script.js
2025-09-19 04:32:51.324 [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:44043/resources/grade1/lesson001/script.js.
2025-09-19 04:32:51.324 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/grade1/lesson001/script.js
2025-09-19 04:32:51.330 [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-19 04:32:51.332 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/grade1/lesson001/script.js
2025-09-19 04:32:51.332 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/grade1/lesson001/script.js
2025-09-19 04:32:51.332 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/grade1/lesson001/script.js
ERROR: http://localhost:44043/resources/grade1/lesson001/lesson001.json Link to http://localhost:44043/resources/grade1/lesson001/script.js: Response status code not HTTP OK/200. Got: 404
2025-09-19 04:32:51.332 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44043/resources/grade1/lesson001/script.js to class io.ktor.utils.io.ByteReadChannel
DEBUG: http://localhost:44043/resources/grade1/lesson001/lesson001.json Skipping link as it has already been visited: http://localhost:44043/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:51.332 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.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:44043/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:51.332 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.335 [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-19 04:32:51.339 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.339 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.339 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.340 [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:44043/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:51.343 [Test worker @coroutine#431] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:44043/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:51.344 [Test worker @coroutine#431] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.344 [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:44043/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:51.344 [Test worker @coroutine#431] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.345 [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-19 04:32:51.353 [Test worker @coroutine#431] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.353 [Test worker @coroutine#431] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:44043/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:51.353 [Test worker @coroutine#431] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:44043/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:44043/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:44043/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:44043/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:44043/resources/grade1/lesson001/lesson001.json
Test running on port 46275
2025-09-19 04:32:53.458 [Test worker] INFO io.ktor.server.Application - Autoreload is disabled because the development mode is off.
2025-09-19 04:32:53.459 [Test worker] INFO io.ktor.server.Application - Application started in 0.001 seconds.
2025-09-19 04:32:53.461 [DefaultDispatcher-worker-8 @coroutine#567] INFO io.ktor.server.Application - Responding at http://0.0.0.0:46275
2025-09-19 04:32:53.463 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/appmanifest.json
2025-09-19 04:32:53.464 [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:46275/resources/appmanifest.json.
2025-09-19 04:32:53.464 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/appmanifest.json
2025-09-19 04:32:53.472 [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-19 04:32:53.475 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/appmanifest.json
2025-09-19 04:32:53.475 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/appmanifest.json
2025-09-19 04:32:53.475 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/appmanifest.json
2025-09-19 04:32:53.475 [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:46275/resources/appmanifest.json.
2025-09-19 04:32:53.475 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:46275/resources/appmanifest.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:53.475 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/appmanifest.json
2025-09-19 04:32:53.475 [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:46275/resources/appmanifest.json.
2025-09-19 04:32:53.475 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/appmanifest.json
2025-09-19 04:32:53.476 [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-19 04:32:53.480 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/appmanifest.json
2025-09-19 04:32:53.481 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/appmanifest.json
2025-09-19 04:32:53.481 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/appmanifest.json
2025-09-19 04:32:53.481 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/appmanifest.json
2025-09-19 04:32:53.481 [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:46275/resources/appmanifest.json.
2025-09-19 04:32:53.481 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/appmanifest.json
2025-09-19 04:32:53.486 [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-19 04:32:53.490 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/appmanifest.json
2025-09-19 04:32:53.490 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/appmanifest.json
2025-09-19 04:32:53.490 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/appmanifest.json
2025-09-19 04:32:53.490 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:46275/resources/appmanifest.json to class kotlinx.io.Source
2025-09-19 04:32:53.497 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/app.html
2025-09-19 04:32:53.497 [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:46275/resources/app.html.
2025-09-19 04:32:53.497 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/app.html
2025-09-19 04:32:53.498 [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-19 04:32:53.500 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/app.html
2025-09-19 04:32:53.500 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/app.html
2025-09-19 04:32:53.500 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/app.html
2025-09-19 04:32:53.500 [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:46275/resources/app.html.
2025-09-19 04:32:53.500 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:46275/resources/app.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:53.500 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/app.html
2025-09-19 04:32:53.500 [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:46275/resources/app.html.
2025-09-19 04:32:53.500 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/app.html
2025-09-19 04:32:53.504 [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-19 04:32:53.505 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/app.html
2025-09-19 04:32:53.505 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/app.html
2025-09-19 04:32:53.505 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/app.html
2025-09-19 04:32:53.505 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/index.json
2025-09-19 04:32:53.505 [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:46275/resources/index.json.
2025-09-19 04:32:53.505 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/index.json
2025-09-19 04:32:53.506 [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-19 04:32:53.506 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/index.json
2025-09-19 04:32:53.506 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/index.json
2025-09-19 04:32:53.506 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/index.json
2025-09-19 04:32:53.506 [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:46275/resources/index.json.
2025-09-19 04:32:53.506 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:46275/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:53.506 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/index.json
2025-09-19 04:32:53.506 [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:46275/resources/index.json.
2025-09-19 04:32:53.506 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/index.json
2025-09-19 04:32:53.507 [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-19 04:32:53.507 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/index.json
2025-09-19 04:32:53.507 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/index.json
2025-09-19 04:32:53.507 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/index.json
2025-09-19 04:32:53.507 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/index.json
2025-09-19 04:32:53.507 [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:46275/resources/index.json.
2025-09-19 04:32:53.507 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/index.json
2025-09-19 04:32:53.508 [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-19 04:32:53.508 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/index.json
2025-09-19 04:32:53.508 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/index.json
2025-09-19 04:32:53.508 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/index.json
2025-09-19 04:32:53.508 [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:46275/resources/index.json.
2025-09-19 04:32:53.508 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:46275/resources/index.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:53.508 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/index.json
2025-09-19 04:32:53.508 [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:46275/resources/index.json.
2025-09-19 04:32:53.508 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/index.json
2025-09-19 04:32:53.509 [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-19 04:32:53.509 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/index.json
2025-09-19 04:32:53.509 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/index.json
2025-09-19 04:32:53.509 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/index.json
2025-09-19 04:32:53.509 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/index.json
2025-09-19 04:32:53.509 [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:46275/resources/index.json.
2025-09-19 04:32:53.509 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/index.json
2025-09-19 04:32:53.510 [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-19 04:32:53.510 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/index.json
2025-09-19 04:32:53.510 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/index.json
2025-09-19 04:32:53.510 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/index.json
2025-09-19 04:32:53.510 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:46275/resources/index.json to class kotlinx.io.Source
WARN: http://localhost:46275/resources/index.json Navigation link to grade1/grade1.json SHOULD contain an icon
DEBUG: http://localhost:46275/resources/index.json Skipping link as it has already been visited: http://localhost:46275/resources/index.json
2025-09-19 04:32:53.600 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/grade1/grade1.json
2025-09-19 04:32:53.600 [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:46275/resources/grade1/grade1.json.
2025-09-19 04:32:53.600 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/grade1/grade1.json
2025-09-19 04:32:53.615 [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-19 04:32:53.620 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/grade1/grade1.json
2025-09-19 04:32:53.620 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/grade1/grade1.json
2025-09-19 04:32:53.620 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/grade1/grade1.json
2025-09-19 04:32:53.620 [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:46275/resources/grade1/grade1.json.
2025-09-19 04:32:53.620 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:46275/resources/grade1/grade1.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:53.620 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/grade1/grade1.json
2025-09-19 04:32:53.620 [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:46275/resources/grade1/grade1.json.
2025-09-19 04:32:53.620 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/grade1/grade1.json
2025-09-19 04:32:53.622 [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-19 04:32:53.628 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/grade1/grade1.json
2025-09-19 04:32:53.628 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/grade1/grade1.json
2025-09-19 04:32:53.628 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/grade1/grade1.json
2025-09-19 04:32:53.629 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/grade1/grade1.json
2025-09-19 04:32:53.629 [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:46275/resources/grade1/grade1.json.
2025-09-19 04:32:53.629 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/grade1/grade1.json
2025-09-19 04:32:53.632 [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-19 04:32:53.637 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/grade1/grade1.json
2025-09-19 04:32:53.637 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/grade1/grade1.json
2025-09-19 04:32:53.637 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/grade1/grade1.json
2025-09-19 04:32:53.638 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:46275/resources/grade1/grade1.json to class kotlinx.io.Source
DEBUG: http://localhost:46275/resources/grade1/grade1.json Validating Opds Publication: title "Lesson 001" and identifier: http://example.app/id/lesson001
2025-09-19 04:32:53.641 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/grade1/cover-small.jpg
2025-09-19 04:32:53.641 [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:46275/resources/grade1/cover-small.jpg.
2025-09-19 04:32:53.641 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/grade1/cover-small.jpg
2025-09-19 04:32:53.642 [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-19 04:32:53.645 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/grade1/cover-small.jpg
2025-09-19 04:32:53.645 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/grade1/cover-small.jpg
2025-09-19 04:32:53.645 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/grade1/cover-small.jpg
ERROR: http://localhost:46275/resources/grade1/grade1.json Link to http://localhost:46275/resources/grade1/cover-small.jpg: Response status code not HTTP OK/200. Got: 404
2025-09-19 04:32:53.645 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:46275/resources/grade1/cover-small.jpg to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:53.647 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.647 [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:46275/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:53.647 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.649 [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-19 04:32:53.654 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.654 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.654 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.654 [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:46275/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:53.654 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:46275/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:53.654 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.654 [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:46275/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:53.654 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.657 [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-19 04:32:53.661 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.661 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.661 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.666 [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:46275/resources/grade1/grade1.json Manifest not discovered for learning resource ID URL: http://localhost:46275/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:46275/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:46275/resources/grade1/grade1.json
2025-09-19 04:32:53.670 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:53.671 [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:46275/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:53.671 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:53.678 [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-19 04:32:53.682 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:53.682 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:53.682 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:53.683 [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:46275/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:53.683 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:46275/resources/grade1/lesson001/lesson001.json to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:53.685 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:53.685 [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:46275/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:53.685 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:53.690 [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-19 04:32:53.692 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:53.693 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:53.693 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:53.696 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:53.696 [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:46275/resources/grade1/lesson001/lesson001.json.
2025-09-19 04:32:53.696 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:53.698 [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-19 04:32:53.699 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:53.699 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:53.699 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:53.699 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:46275/resources/grade1/lesson001/lesson001.json to class kotlinx.io.Source
DEBUG: http://localhost:46275/resources/grade1/lesson001/lesson001.json Validating Opds Publication: title "Lesson 001" and identifier: https://example.app/id/lesson001
2025-09-19 04:32:53.755 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/grade1/lesson001/cover.png
2025-09-19 04:32:53.755 [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:46275/resources/grade1/lesson001/cover.png.
2025-09-19 04:32:53.755 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/grade1/lesson001/cover.png
2025-09-19 04:32:53.765 [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-19 04:32:53.766 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/grade1/lesson001/cover.png
2025-09-19 04:32:53.766 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/grade1/lesson001/cover.png
2025-09-19 04:32:53.766 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/grade1/lesson001/cover.png
2025-09-19 04:32:53.766 [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:46275/resources/grade1/lesson001/cover.png.
2025-09-19 04:32:53.766 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:46275/resources/grade1/lesson001/cover.png to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:53.767 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/grade1/lesson001/cover.png
2025-09-19 04:32:53.767 [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:46275/resources/grade1/lesson001/cover.png.
2025-09-19 04:32:53.767 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/grade1/lesson001/cover.png
2025-09-19 04:32:53.771 [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-19 04:32:53.774 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/grade1/lesson001/cover.png
2025-09-19 04:32:53.774 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/grade1/lesson001/cover.png
2025-09-19 04:32:53.774 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/grade1/lesson001/cover.png
2025-09-19 04:32:53.775 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.775 [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:46275/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:53.775 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.776 [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-19 04:32:53.778 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.778 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.778 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.778 [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:46275/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:53.778 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:46275/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:53.778 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.778 [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:46275/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:53.778 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.779 [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-19 04:32:53.780 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.780 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.780 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.784 [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:46275/resources/grade1/lesson001/lesson001.json Manifest not discovered for learning resource ID URL: http://localhost:46275/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:46275/resources/grade1/lesson001/lesson001.json Skipping link as it has already been visited: http://localhost:46275/resources/grade1/lesson001/lesson001.json
2025-09-19 04:32:53.786 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.786 [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:46275/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:53.786 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.787 [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-19 04:32:53.788 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.788 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.788 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.788 [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:46275/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:53.788 [Test worker @coroutine#569] TRACE i.k.c.plugins.defaultTransformers - Transformed with default transformers response body for http://localhost:46275/resources/grade1/lesson001/lesson001.html to class io.ktor.utils.io.ByteReadChannel
2025-09-19 04:32:53.789 [Test worker @coroutine#569] TRACE i.k.c.p.c.ContentNegotiation - Adding Accept=application/json header for http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.789 [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:46275/resources/grade1/lesson001/lesson001.html.
2025-09-19 04:32:53.789 [Test worker @coroutine#569] TRACE i.ktor.client.plugins.HttpPlainText - Adding Accept-Charset=UTF-8 to http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.789 [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-19 04:32:53.790 [Test worker @coroutine#569] TRACE io.ktor.client.plugins.SaveBody - Skipping body saving for http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.790 [Test worker @coroutine#569] TRACE i.k.client.plugins.HttpCallValidator - Validating response for request http://localhost:46275/resources/grade1/lesson001/lesson001.html
2025-09-19 04:32:53.790 [Test worker @coroutine#569] TRACE i.k.c.p.DefaultResponseValidation - Skipping default response validation for http://localhost:46275/resources/grade1/lesson001/lesson001.html
DEBUG: http://localhost:46275/resources/grade1/grade1.json Skipping link as it has already been visited: http://localhost:46275/resources/grade1/lesson001/lesson001.html