Skip to content

Commit

Permalink
#5: share request counter between logger entities
Browse files Browse the repository at this point in the history
  • Loading branch information
xe11 committed Jan 5, 2024
1 parent fa03b86 commit 99ab34f
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ internal class CompositeTagProvider(
) {

private val urlTagProvider = UrlTagProvider()
private val requestNumberTagProvider = RequestNumberTagProvider()
private val requestNumberTagProvider = RequestNumberTagProvider.globalCounter

fun getTag(request: Request): String {
val tagUtils = TagUtilsImpl(request, urlTagProvider, requestNumberTagProvider)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,15 @@ internal class RequestNumberTagProvider : TagProvider {
repeat(min(9, exponent)) { result *= 10 }
return result
}

companion object {

private var _globalCounter = RequestNumberTagProvider()
val globalCounter: RequestNumberTagProvider
get() = _globalCounter

internal fun resetGlobalCounter() {
_globalCounter = RequestNumberTagProvider()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import xe11.ok.logger.level.Level
import xe11.ok.logger.level.OkHttpLogLevel
import xe11.ok.logger.printer.ChunkingPrinter
import xe11.ok.logger.printer.Printer
import xe11.ok.logger.tag.RequestNumberTagProvider
import java.io.InterruptedIOException
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.toJavaDuration
Expand All @@ -27,6 +28,7 @@ internal class TaggedHttpLoggingInterceptorIntegrationTest {

@BeforeEach
fun setUp() {
RequestNumberTagProvider.resetGlobalCounter()
server.start()
}

Expand Down Expand Up @@ -345,12 +347,53 @@ internal class TaggedHttpLoggingInterceptorIntegrationTest {
)
}

private fun buildClient(config: Config? = null): OkHttpClient {
@Test
fun `requests should be logged with their sequence number when requests made via different clients (and logger) entities`() {
val url = server.url("/test/a/b")
val port = server.port
val request = Request.Builder()
.url(url)
.header("User-Agent", "okhttp/test")
.build()
val response = MockResponse()
.setResponseCode(503)
.setHeader("Test-Header", 42)
.setBody(
"""
Error
response
body
""".trimIndent()
)

server.enqueue(response)
val client1 = buildClient(logLevel = OkHttpLogLevel.BASIC)
client1.newCall(request).execute()
server.enqueue(response)
val client2 = buildClient(logLevel = OkHttpLogLevel.BASIC)
client2.newCall(request).execute()

testPrinter.assertLines(
"""
INFO nwk: TesAB #1 ->> HIT GET http://localhost:$port/test/a/b
ERROR nwk: TesAB #1 --> GET http://localhost:$port/test/a/b http/1.1
ERROR nwk: TesAB #1 <-- 503 Server Error http://localhost:$port/test/a/b
INFO nwk: TesAB #2 ->> HIT GET http://localhost:$port/test/a/b
ERROR nwk: TesAB #2 --> GET http://localhost:$port/test/a/b http/1.1
ERROR nwk: TesAB #2 <-- 503 Server Error http://localhost:$port/test/a/b
"""
)
}

private fun buildClient(
config: Config? = null,
logLevel: OkHttpLogLevel = OkHttpLogLevel.BODY,
): OkHttpClient {
val cfg = config ?: defaultTestConfig()

val interceptor = TaggedHttpLoggingInterceptor(
DefaultLogCollectorFactory(cfg)
).apply { level = OkHttpLogLevel.BODY }
).apply { level = logLevel }

val client = OkHttpClient.Builder()
.addNetworkInterceptor(interceptor)
Expand Down Expand Up @@ -382,8 +425,12 @@ private fun TestPrinter.assertLines(expectedMultiline: String) {
}
}

private val timingWithBodyLength = "ms, \\d+-byte body\\)".toRegex()
private fun String.removeRequestDuration(): String {
return if (this.endsWith("ms)")) {
return if (
this.endsWith("ms)") ||
this.contains(timingWithBodyLength)
) {
this.substring(0, this.lastIndexOf(" ("))
} else {
this
Expand Down

0 comments on commit 99ab34f

Please sign in to comment.