Skip to content

Commit b71e710

Browse files
committed
Add tests for Joran
Signed-off-by: Dmitry Sulman <[email protected]>
1 parent c135acd commit b71e710

File tree

10 files changed

+120
-5
lines changed

10 files changed

+120
-5
lines changed

logback-access-reactor-netty-spring-boot-starter/src/main/kotlin/io/github/dmitrysulman/logback/access/reactor/netty/joran/LogbackAccessSpringProfileModelHandler.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ class LogbackAccessSpringProfileModelHandler(
2626
val profiles =
2727
(model as LogbackAccessSpringProfileModel)
2828
.name
29-
.split(",")
30-
.map { OptionHelper.substVars(it.trim(), mic, context) }
29+
?.split(",")
30+
?.map { OptionHelper.substVars(it.trim(), mic, context) }
31+
?: emptyList()
3132
if (profiles.isEmpty() || !environment.matchesProfiles(*profiles.toTypedArray())) {
3233
model.deepMarkAsSkipped()
3334
}

logback-access-reactor-netty-spring-boot-starter/src/main/kotlin/io/github/dmitrysulman/logback/access/reactor/netty/joran/LogbackAccessSpringProfileWithinSecondPhaseElementSanityChecker.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class LogbackAccessSpringProfileWithinSecondPhaseElementSanityChecker :
2424
}
2525

2626
deepFindNestedSubModelsOfType(LogbackAccessSpringProfileModel::class.java, secondsPhaseModels)
27-
?.takeIf { it.isNotEmpty() }
27+
.takeIf { it.isNotEmpty() }
2828
?.also {
2929
addWarn("<springProfile> elements cannot be nested within an <appender> element")
3030
}?.forEach {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.github.dmitrysulman.logback.access.reactor.netty.autoconfigure.integration
1+
package io.github.dmitrysulman.logback.access.reactor.netty
22

33
import ch.qos.logback.access.common.spi.IAccessEvent
44
import ch.qos.logback.core.AppenderBase

logback-access-reactor-netty-spring-boot-starter/src/test/kotlin/io/github/dmitrysulman/logback/access/reactor/netty/autoconfigure/ReactorNettyAccessLogFactoryAutoConfigurationTests.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import org.springframework.boot.autoconfigure.AutoConfigurations
1111
import org.springframework.boot.autoconfigure.web.reactive.ReactiveWebServerFactoryAutoConfiguration
1212
import org.springframework.boot.test.context.FilteredClassLoader
1313
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner
14+
import org.springframework.boot.test.context.runner.WebApplicationContextRunner
1415
import org.springframework.context.annotation.Bean
1516
import org.springframework.context.annotation.Configuration
1617
import reactor.netty.http.server.HttpServer
@@ -37,6 +38,27 @@ class ReactorNettyAccessLogFactoryAutoConfigurationTests {
3738
}
3839
}
3940

41+
@Test
42+
fun `should not supply beans when is not reactive web application`() {
43+
WebApplicationContextRunner()
44+
.withConfiguration(AutoConfigurations.of(ReactorNettyAccessLogFactoryAutoConfiguration::class.java))
45+
.run { context ->
46+
assertThat(context).doesNotHaveBean(ReactorNettyAccessLogFactory::class.java)
47+
assertThat(context).doesNotHaveBean(ReactorNettyAccessLogWebServerFactoryCustomizer::class.java)
48+
}
49+
}
50+
51+
@Test
52+
fun `should not supply beans when disabled by the property`() {
53+
ReactiveWebApplicationContextRunner()
54+
.withConfiguration(AutoConfigurations.of(ReactorNettyAccessLogFactoryAutoConfiguration::class.java))
55+
.withPropertyValues("logback.access.reactor.netty.enabled=false")
56+
.run { context ->
57+
assertThat(context).doesNotHaveBean(ReactorNettyAccessLogFactory::class.java)
58+
assertThat(context).doesNotHaveBean(ReactorNettyAccessLogWebServerFactoryCustomizer::class.java)
59+
}
60+
}
61+
4062
@Test
4163
fun `should not supply beans when already has user defined beans in the context`() {
4264
ReactiveWebApplicationContextRunner()

logback-access-reactor-netty-spring-boot-starter/src/test/kotlin/io/github/dmitrysulman/logback/access/reactor/netty/autoconfigure/integration/IntegrationTests.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.dmitrysulman.logback.access.reactor.netty.autoconfigure.integration
22

3+
import io.github.dmitrysulman.logback.access.reactor.netty.EventCaptureAppender
34
import io.github.dmitrysulman.logback.access.reactor.netty.ReactorNettyAccessLogFactory
45
import io.kotest.matchers.shouldBe
56
import org.junit.jupiter.api.Test
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
package io.github.dmitrysulman.logback.access.reactor.netty.joran
2+
3+
import io.github.dmitrysulman.logback.access.reactor.netty.EventCaptureAppender
4+
import io.github.dmitrysulman.logback.access.reactor.netty.ReactorNettyAccessLogFactory
5+
import io.github.dmitrysulman.logback.access.reactor.netty.autoconfigure.ReactorNettyAccessLogFactoryAutoConfiguration
6+
import io.kotest.matchers.nulls.shouldBeNull
7+
import io.kotest.matchers.shouldBe
8+
import io.mockk.every
9+
import io.mockk.mockk
10+
import org.junit.jupiter.api.Test
11+
import org.junit.jupiter.params.ParameterizedTest
12+
import org.junit.jupiter.params.provider.CsvSource
13+
import org.junit.jupiter.params.provider.ValueSource
14+
import org.springframework.beans.factory.getBean
15+
import org.springframework.boot.autoconfigure.AutoConfigurations
16+
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner
17+
import reactor.netty.http.server.logging.AccessLogArgProvider
18+
19+
class LogbackAccessJoranConfiguratorTests {
20+
@ParameterizedTest
21+
@CsvSource(
22+
"dev, logback-access-springprofile-dev.xml",
23+
"'dev,prod',logback-access-springprofile-dev.xml",
24+
"dev, logback-access-springprofile-included.xml",
25+
"'dev,prod',logback-access-springprofile-included.xml",
26+
)
27+
fun `should log event with springProfile configuration`(
28+
profile: String,
29+
filename: String,
30+
) {
31+
ReactiveWebApplicationContextRunner()
32+
.withConfiguration(AutoConfigurations.of(ReactorNettyAccessLogFactoryAutoConfiguration::class.java))
33+
.withPropertyValues("spring.profiles.active=$profile")
34+
.withPropertyValues("logback.access.reactor.netty.config=classpath:$filename")
35+
.run { context ->
36+
val factory = context.getBean<ReactorNettyAccessLogFactory>()
37+
val mockArgProvider = mockk<AccessLogArgProvider>(relaxed = true)
38+
val uri = "/test"
39+
every { mockArgProvider.uri() } returns uri
40+
factory.apply(mockArgProvider).log()
41+
val eventCaptureAppender = factory.accessContext.getAppender("CAPTURE") as EventCaptureAppender
42+
eventCaptureAppender.list.size shouldBe 1
43+
eventCaptureAppender.list.first().requestURI shouldBe uri
44+
}
45+
}
46+
47+
@ParameterizedTest
48+
@ValueSource(
49+
strings = [
50+
"logback-access-springprofile-dev.xml",
51+
"logback-access-springprofile-included.xml",
52+
],
53+
)
54+
fun `should not log event with prod springProfile configuration`(filename: String) {
55+
ReactiveWebApplicationContextRunner()
56+
.withConfiguration(AutoConfigurations.of(ReactorNettyAccessLogFactoryAutoConfiguration::class.java))
57+
.withPropertyValues("spring.profiles.active=prod")
58+
.withPropertyValues("logback.access.reactor.netty.config=classpath:$filename")
59+
.run { context ->
60+
val factory = context.getBean<ReactorNettyAccessLogFactory>()
61+
factory.accessContext.getAppender("CAPTURE").shouldBeNull()
62+
}
63+
}
64+
65+
@Test
66+
fun `should not log event with empty springProfile configuration`() {
67+
ReactiveWebApplicationContextRunner()
68+
.withConfiguration(AutoConfigurations.of(ReactorNettyAccessLogFactoryAutoConfiguration::class.java))
69+
.withPropertyValues("spring.profiles.active=dev")
70+
.withPropertyValues("logback.access.reactor.netty.config=classpath:logback-access-springprofile-empty.xml")
71+
.run { context ->
72+
val factory = context.getBean<ReactorNettyAccessLogFactory>()
73+
factory.accessContext.getAppender("CAPTURE").shouldBeNull()
74+
}
75+
}
76+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<configuration>
2+
<springProfile name="dev">
3+
<appender name="CAPTURE" class="io.github.dmitrysulman.logback.access.reactor.netty.EventCaptureAppender"/>
4+
<appender-ref ref="CAPTURE"/>
5+
</springProfile>
6+
</configuration>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<configuration>
2+
<springProfile>
3+
<appender name="CAPTURE" class="io.github.dmitrysulman.logback.access.reactor.netty.EventCaptureAppender"/>
4+
<appender-ref ref="CAPTURE"/>
5+
</springProfile>
6+
</configuration>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<configuration>
2+
<include file="src/test/resources/logback-access-springprofile-dev.xml" />
3+
</configuration>

logback-access-reactor-netty-spring-boot-starter/src/test/resources/logback-access-stdout.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<configuration>
2-
<appender name="CAPTURE" class="io.github.dmitrysulman.logback.access.reactor.netty.autoconfigure.integration.EventCaptureAppender" />
2+
<appender name="CAPTURE" class="io.github.dmitrysulman.logback.access.reactor.netty.EventCaptureAppender" />
33
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
44
<encoder>
55
<pattern>common</pattern>

0 commit comments

Comments
 (0)