11package io.github.dmitrysulman.logback.access.reactor.netty
22
33import ch.qos.logback.access.common.spi.AccessContext
4+ import io.kotest.matchers.booleans.shouldBeFalse
5+ import io.kotest.matchers.collections.shouldBeEmpty
46import io.kotest.matchers.collections.shouldContain
7+ import io.kotest.matchers.longs.shouldBeZero
8+ import io.kotest.matchers.maps.shouldBeEmpty
59import io.kotest.matchers.maps.shouldContainKey
10+ import io.kotest.matchers.nulls.shouldBeNull
11+ import io.kotest.matchers.nulls.shouldNotBeNull
612import io.kotest.matchers.shouldBe
13+ import io.kotest.matchers.string.shouldBeEmpty
714import io.mockk.every
815import io.mockk.mockk
916import io.mockk.verify
@@ -17,6 +24,9 @@ import java.io.ByteArrayOutputStream
1724import java.io.ObjectInputStream
1825import java.io.ObjectOutputStream
1926import java.net.SocketAddress
27+ import java.time.Instant
28+ import java.time.ZoneId
29+ import java.time.ZonedDateTime
2030import java.util.Collections
2131import io.netty.handler.codec.http.cookie.Cookie as NettyCookie
2232
@@ -142,9 +152,9 @@ class AccessEventTests {
142152
143153 val accessEvent = AccessEvent (mockArgProvider, mockContext)
144154
145- accessEvent.requestURI.isEmpty() shouldBe true
146- accessEvent.queryString.isEmpty() shouldBe true
147- accessEvent.requestParameterMap.isEmpty() shouldBe true
155+ accessEvent.requestURI.shouldBeEmpty()
156+ accessEvent.queryString.shouldBeEmpty()
157+ accessEvent.requestParameterMap.shouldBeEmpty()
148158 accessEvent.getRequestParameter(PARAM ) shouldBe NA_ARRAY
149159 }
150160
@@ -157,7 +167,7 @@ class AccessEventTests {
157167 val accessEvent = AccessEvent (mockArgProvider, mockContext)
158168
159169 accessEvent.queryString shouldBe " ?"
160- accessEvent.requestParameterMap.isEmpty() shouldBe true
170+ accessEvent.requestParameterMap.shouldBeEmpty()
161171 accessEvent.getRequestParameter(PARAM ) shouldBe NA_ARRAY
162172 }
163173
@@ -169,8 +179,8 @@ class AccessEventTests {
169179
170180 val accessEvent = AccessEvent (mockArgProvider, mockContext)
171181
172- accessEvent.queryString.isEmpty() shouldBe true
173- accessEvent.requestParameterMap.isEmpty() shouldBe true
182+ accessEvent.queryString.shouldBeEmpty()
183+ accessEvent.requestParameterMap.shouldBeEmpty()
174184 accessEvent.getRequestParameter(PARAM ) shouldBe NA_ARRAY
175185 }
176186
@@ -227,7 +237,7 @@ class AccessEventTests {
227237 val accessEvent = AccessEvent (mockArgProvider, mockContext)
228238
229239 accessEvent.queryString shouldBe " ?param1="
230- accessEvent.requestParameterMap.isEmpty() shouldBe true
240+ accessEvent.requestParameterMap.shouldBeEmpty()
231241 accessEvent.getRequestParameter(" param1" ) shouldBe NA_ARRAY
232242 }
233243
@@ -315,10 +325,11 @@ class AccessEventTests {
315325 accessEvent.remoteUser shouldBe NA
316326 accessEvent.getRequestHeader(HEADER ) shouldBe NA
317327 accessEvent.getResponseHeader(HEADER ) shouldBe NA
318- accessEvent.requestHeaderMap.isEmpty() shouldBe true
319- accessEvent.requestHeaderNames.hasMoreElements() shouldBe false
320- accessEvent.responseHeaderMap.isEmpty() shouldBe true
321- accessEvent.responseHeaderNameList.isEmpty() shouldBe true
328+ accessEvent.requestHeaderMap.shouldBeEmpty()
329+ accessEvent.requestHeaderNames.hasMoreElements().shouldBeFalse()
330+ accessEvent.responseHeaderMap.shouldBeEmpty()
331+ accessEvent.responseHeaderNameList.shouldBeEmpty()
332+ accessEvent.cookies.shouldBeEmpty()
322333 accessEvent.getCookie(COOKIE ) shouldBe NA
323334 }
324335
@@ -348,6 +359,7 @@ class AccessEventTests {
348359 add(DefaultCookie (" cookie2" , " value21" ))
349360 add(DefaultCookie (" cookie2" , " value22" ))
350361 },
362+ " cookie3" to emptySet(),
351363 )
352364
353365 val accessEvent = AccessEvent (mockArgProvider, mockContext)
@@ -357,6 +369,7 @@ class AccessEventTests {
357369 accessEvent.cookies shouldContain Cookie (" cookie2" , " value21" )
358370 accessEvent.getCookie(" cookie1" ) shouldBe " value1"
359371 accessEvent.getCookie(" cookie2" ) shouldBe " value21"
372+ accessEvent.getCookie(" cookie3" ) shouldBe NA
360373 accessEvent.getCookie(" not_exist" ) shouldBe NA
361374 }
362375
@@ -451,7 +464,7 @@ class AccessEventTests {
451464 accessEvent.getRequestParameter(" no_param" ) shouldBe NA_ARRAY
452465 accessEvent.protocol shouldBe HTTP11
453466 accessEvent.requestURL shouldBe " $GET $REQUEST_URI$QUERY_STRING $HTTP11 "
454- accessEvent.statusCode shouldBe OK .toInt()
467+ accessEvent.statusCode shouldBe OK_STATUS_CODE .toInt()
455468 accessEvent.contentLength shouldBe CONTENT_LENGTH
456469 accessEvent.elapsedTime shouldBe DURATION
457470 accessEvent.elapsedSeconds shouldBe DURATION_SECONDS
@@ -460,22 +473,27 @@ class AccessEventTests {
460473 accessEvent.serverName shouldBe IP_ADDRESS
461474 accessEvent.localPort shouldBe PORT
462475 accessEvent.remoteUser shouldBe USERNAME
463- accessEvent.sequenceNumber shouldBe 0
476+ accessEvent.sequenceNumber.shouldBeZero()
464477 accessEvent.getRequestHeader(HEADER ) shouldBe NA
465478 accessEvent.getResponseHeader(HEADER ) shouldBe NA
466- accessEvent.requestHeaderMap.isEmpty() shouldBe true
467- accessEvent.requestHeaderNames.hasMoreElements() shouldBe false
468- accessEvent.responseHeaderMap.isEmpty() shouldBe true
469- accessEvent.responseHeaderNameList.isEmpty() shouldBe true
470- accessEvent.cookies.isEmpty() shouldBe true
479+ accessEvent.requestHeaderMap.shouldBeEmpty()
480+ accessEvent.requestHeaderNames.hasMoreElements().shouldBeFalse()
481+ accessEvent.responseHeaderMap.shouldBeEmpty()
482+ accessEvent.responseHeaderNameList.shouldBeEmpty()
483+ accessEvent.cookies.shouldBeEmpty()
471484 accessEvent.getCookie(COOKIE ) shouldBe NA
472485 accessEvent.threadName shouldBe THREAD
473- accessEvent.request shouldBe null
474- accessEvent.response shouldBe null
486+ accessEvent.request.shouldBeNull()
487+ accessEvent.response.shouldBeNull()
475488 accessEvent.sessionID shouldBe NA
476489 accessEvent.getAttribute(ATTRIBUTE ) shouldBe NA
477- accessEvent.requestContent.isEmpty() shouldBe true
478- accessEvent.responseContent.isEmpty() shouldBe true
490+ accessEvent.requestContent.shouldBeEmpty()
491+ accessEvent.responseContent.shouldBeEmpty()
492+ accessEvent.serverAdapter.shouldNotBeNull()
493+ accessEvent.serverAdapter.requestTimestamp shouldBe TIMESTAMP
494+ accessEvent.serverAdapter.contentLength shouldBe CONTENT_LENGTH
495+ accessEvent.serverAdapter.statusCode shouldBe OK_STATUS_CODE .toInt()
496+ accessEvent.serverAdapter.buildResponseHeaderMap().shouldBeEmpty()
479497 }
480498
481499 private fun mockArgProvider (mockArgProvider : AccessLogArgProvider ) {
@@ -488,10 +506,11 @@ class AccessEventTests {
488506 every { mockArgProvider.method() } returns GET
489507 every { mockArgProvider.uri() } returns " $REQUEST_URI$QUERY_STRING "
490508 every { mockArgProvider.protocol() } returns HTTP11
491- every { mockArgProvider.status() } returns OK
509+ every { mockArgProvider.status() } returns OK_STATUS_CODE
492510 every { mockArgProvider.contentLength() } returns CONTENT_LENGTH
493511 every { mockArgProvider.duration() } returns DURATION
494512 every { mockArgProvider.user() } returns USERNAME
513+ every { mockArgProvider.accessDateTime() } returns ZonedDateTime .ofInstant(Instant .ofEpochMilli(TIMESTAMP ), ZoneId .of(" UTC" ))
495514 every { mockArgProvider.requestHeaderIterator() } returns Collections .emptyIterator()
496515 every { mockArgProvider.responseHeaderIterator() } returns Collections .emptyIterator()
497516 every { mockArgProvider.cookies() } returns emptyMap()
@@ -503,7 +522,7 @@ class AccessEventTests {
503522 private val NA_ARRAY = arrayOf(NA )
504523 private const val GET = " GET"
505524 private const val HTTP11 = " HTTP/1.1"
506- private const val OK = " 200"
525+ private const val OK_STATUS_CODE = " 200"
507526 private const val IP_ADDRESS = " 192.168.1.1"
508527 private const val USERNAME = " username"
509528 private const val PORT = 1000
@@ -518,5 +537,6 @@ class AccessEventTests {
518537 private const val REQUEST_URI = " /test"
519538 private const val QUERY_STRING = " ?param=value"
520539 private const val DURATION_SECONDS = 1L
540+ private const val TIMESTAMP = 1746734856000
521541 }
522542}
0 commit comments