Skip to content

Commit 04a53d6

Browse files
committed
Add tests
Signed-off-by: Dmitry Sulman <[email protected]>
1 parent 2ef3673 commit 04a53d6

File tree

4 files changed

+106
-13
lines changed

4 files changed

+106
-13
lines changed

logback-access-reactor-netty-spring-boot-starter/src/main/resources/logback-access-reactor-netty/logback-access-default-config.xml

Lines changed: 0 additions & 9 deletions
This file was deleted.

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

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ package io.github.dmitrysulman.logback.access.reactor.netty.autoconfigure
33
import ch.qos.logback.core.status.OnConsoleStatusListener
44
import io.github.dmitrysulman.logback.access.reactor.netty.ReactorNettyAccessLogFactory
55
import io.kotest.matchers.booleans.shouldBeTrue
6+
import io.kotest.matchers.nulls.shouldNotBeNull
7+
import io.kotest.matchers.shouldBe
8+
import io.kotest.matchers.string.shouldEndWith
9+
import io.mockk.every
610
import io.mockk.mockk
711
import io.mockk.verify
812
import org.assertj.core.api.AssertionsForInterfaceTypes.assertThat
@@ -16,7 +20,13 @@ import org.springframework.boot.test.context.runner.ReactiveWebApplicationContex
1620
import org.springframework.boot.test.context.runner.WebApplicationContextRunner
1721
import org.springframework.context.annotation.Bean
1822
import org.springframework.context.annotation.Configuration
23+
import org.springframework.core.io.Resource
24+
import org.springframework.core.io.ResourceLoader
25+
import org.springframework.util.ResourceUtils
1926
import reactor.netty.http.server.HttpServer
27+
import java.io.ByteArrayInputStream
28+
import java.net.URL
29+
import java.net.URLConnection
2030

2131
class ReactorNettyAccessLogFactoryAutoConfigurationTests {
2232
@Test
@@ -136,6 +146,96 @@ class ReactorNettyAccessLogFactoryAutoConfigurationTests {
136146
}
137147
}
138148

149+
@Test
150+
fun `should load configuration from provided configuration file resource`() {
151+
ReactiveWebApplicationContextRunner()
152+
.withConfiguration(AutoConfigurations.of(ReactorNettyAccessLogFactoryAutoConfiguration::class.java))
153+
.withPropertyValues("logback.access.reactor.netty.config=file:./src/test/resources/file/logback-access-file.xml")
154+
.run { context ->
155+
val factory = context.getBean<ReactorNettyAccessLogFactory>()
156+
factory.accessContext.getAppender("FILE").shouldNotBeNull()
157+
}
158+
}
159+
160+
@Test
161+
fun `should load configuration from provided configuration classpath resource`() {
162+
ReactiveWebApplicationContextRunner()
163+
.withConfiguration(AutoConfigurations.of(ReactorNettyAccessLogFactoryAutoConfiguration::class.java))
164+
.withPropertyValues("logback.access.reactor.netty.config=classpath:logback-access-stdout.xml")
165+
.run { context ->
166+
val factory = context.getBean<ReactorNettyAccessLogFactory>()
167+
factory.accessContext.getAppender("CAPTURE").shouldNotBeNull()
168+
}
169+
}
170+
171+
@Test
172+
fun `should load configuration from default filename configuration file resource`() {
173+
val resourceLoaderMock = mockk<ResourceLoader>()
174+
val resourceMock = mockk<Resource>()
175+
val urlMock = mockk<URL>(relaxed = true)
176+
val urlConnectionMock = mockk<URLConnection>(relaxed = true)
177+
every { resourceMock.exists() } returns true
178+
every { resourceMock.url } returns urlMock
179+
every { urlMock.file } returns "default"
180+
every { urlMock.openConnection() } returns urlConnectionMock
181+
every { urlConnectionMock.inputStream } returns ByteArrayInputStream("<configuration></configuration>".toByteArray())
182+
every { resourceLoaderMock.getResource("file:logback-access.xml") } returns resourceMock
183+
ReactiveWebApplicationContextRunner()
184+
.withConfiguration(AutoConfigurations.of(ReactorNettyAccessLogFactoryAutoConfiguration::class.java))
185+
.withBean("resourceLoader", ResourceLoader::class.java, { resourceLoaderMock })
186+
.run { context ->
187+
val factory = context.getBean<ReactorNettyAccessLogFactory>()
188+
factory.accessContext.name shouldBe "default"
189+
}
190+
}
191+
192+
@Test
193+
fun `should load configuration from default filename configuration classpath resource`() {
194+
val resourceLoaderMock = mockk<ResourceLoader>()
195+
val filenameResourceMock = mockk<Resource>()
196+
val classpathResourceMock = mockk<Resource>()
197+
val urlMock = mockk<URL>(relaxed = true)
198+
val urlConnectionMock = mockk<URLConnection>(relaxed = true)
199+
every { filenameResourceMock.exists() } returns false
200+
every { classpathResourceMock.exists() } returns true
201+
every { classpathResourceMock.url } returns urlMock
202+
every { urlMock.file } returns "default"
203+
every { urlMock.openConnection() } returns urlConnectionMock
204+
every { urlConnectionMock.inputStream } returns ByteArrayInputStream("<configuration></configuration>".toByteArray())
205+
every { resourceLoaderMock.getResource("file:logback-access.xml") } returns filenameResourceMock
206+
every { resourceLoaderMock.getResource("classpath:logback-access.xml") } returns classpathResourceMock
207+
ReactiveWebApplicationContextRunner()
208+
.withConfiguration(AutoConfigurations.of(ReactorNettyAccessLogFactoryAutoConfiguration::class.java))
209+
.withBean("resourceLoader", ResourceLoader::class.java, { resourceLoaderMock })
210+
.run { context ->
211+
val factory = context.getBean<ReactorNettyAccessLogFactory>()
212+
factory.accessContext.name shouldBe "default"
213+
}
214+
}
215+
216+
@Test
217+
fun `should load configuration from default configuration file`() {
218+
val resourceLoaderMock = mockk<ResourceLoader>()
219+
val filenameResourceMock = mockk<Resource>()
220+
val classpathResourceMock = mockk<Resource>()
221+
val defaultResourceMock = mockk<Resource>()
222+
every { filenameResourceMock.exists() } returns false
223+
every { classpathResourceMock.exists() } returns false
224+
every { defaultResourceMock.url } returns
225+
ResourceUtils.getURL("classpath:logback-access-reactor-netty/logback-access-default-config.xml")
226+
every { resourceLoaderMock.getResource("file:logback-access.xml") } returns filenameResourceMock
227+
every { resourceLoaderMock.getResource("classpath:logback-access.xml") } returns classpathResourceMock
228+
every { resourceLoaderMock.getResource("classpath:logback-access-reactor-netty/logback-access-default-config.xml") } returns
229+
defaultResourceMock
230+
ReactiveWebApplicationContextRunner()
231+
.withConfiguration(AutoConfigurations.of(ReactorNettyAccessLogFactoryAutoConfiguration::class.java))
232+
.withBean("resourceLoader", ResourceLoader::class.java, { resourceLoaderMock })
233+
.run { context ->
234+
val factory = context.getBean<ReactorNettyAccessLogFactory>()
235+
factory.accessContext.name shouldEndWith "logback-access-reactor-netty/logback-access-default-config.xml"
236+
}
237+
}
238+
139239
@Configuration(proxyBeanMethods = false)
140240
class CustomReactorNettyAccessLogFactoryConfiguration {
141241
@Bean
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<configuration>
2+
<appender name="FILE" class="io.github.dmitrysulman.logback.access.reactor.netty.EventCaptureAppender" />
3+
<appender-ref ref="FILE" />
4+
</configuration>

logback-access-reactor-netty/src/test/kotlin/io/github/dmitrysulman/logback/access/reactor/netty/ReactorNettyAccessLogFactoryTests.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import ch.qos.logback.access.common.joran.JoranConfigurator
44
import ch.qos.logback.core.joran.spi.JoranException
55
import ch.qos.logback.core.status.OnConsoleStatusListener
66
import io.github.dmitrysulman.logback.access.reactor.netty.ReactorNettyAccessLogFactory.Companion.CONFIG_FILE_NAME_PROPERTY
7-
import io.github.dmitrysulman.logback.access.reactor.netty.ReactorNettyAccessLogFactory.Companion.DEFAULT_CONFIGURATION
8-
import io.github.dmitrysulman.logback.access.reactor.netty.ReactorNettyAccessLogFactory.Companion.DEFAULT_CONFIG_FILE_NAME
97
import io.github.dmitrysulman.logback.access.reactor.netty.integration.EventCaptureAppender
108
import io.kotest.assertions.throwables.shouldThrowExactly
119
import io.kotest.matchers.booleans.shouldBeTrue
@@ -124,11 +122,11 @@ class ReactorNettyAccessLogFactoryTests {
124122
@Test
125123
fun `test not existing default config file fallback to default configuration`() {
126124
val reactorNettyAccessLogFactory = spyk<ReactorNettyAccessLogFactory>(recordPrivateCalls = true)
127-
every { reactorNettyAccessLogFactory["getConfigFromFileName"](DEFAULT_CONFIG_FILE_NAME) } throws FileNotFoundException()
125+
every { reactorNettyAccessLogFactory["getConfigFromFileName"]("logback-access.xml") } throws FileNotFoundException()
128126
val getDefaultConfigMethod = reactorNettyAccessLogFactory::class.java.getDeclaredMethod("getDefaultConfig")
129127
getDefaultConfigMethod.trySetAccessible()
130128
val defaultConfigUrl = getDefaultConfigMethod.invoke(reactorNettyAccessLogFactory) as URL
131-
defaultConfigUrl.toString() shouldEndWith DEFAULT_CONFIGURATION
129+
defaultConfigUrl.toString() shouldEndWith "logback-access-reactor-netty/logback-access-default-config.xml"
132130
defaultConfigUrl.openStream().reader().use {
133131
it.readText() shouldBe
134132
"""

0 commit comments

Comments
 (0)