diff --git a/microservices-modules/micronaut-configuration/pom.xml b/microservices-modules/micronaut-configuration/pom.xml index 1dc87f6a29c8..001d6745c7cc 100644 --- a/microservices-modules/micronaut-configuration/pom.xml +++ b/microservices-modules/micronaut-configuration/pom.xml @@ -1,7 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung.micronaut micronaut-configuration diff --git a/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/ServerApplication.java b/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/ServerApplication.java new file mode 100644 index 000000000000..f4e569fca392 --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/ServerApplication.java @@ -0,0 +1,14 @@ +package com.baeldung.micronaut.environments; + +import io.micronaut.context.env.Environment; +import io.micronaut.runtime.Micronaut; + +public class ServerApplication { + + public static void main(String[] args) { + Micronaut.build(args) + .defaultEnvironments(Environment.DEVELOPMENT) + .mainClass(ServerApplication.class) + .start(); + } +} diff --git a/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/HostResolver.java b/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/HostResolver.java new file mode 100644 index 000000000000..9dba93a566dd --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/HostResolver.java @@ -0,0 +1,28 @@ +package com.baeldung.micronaut.environments.services; + +import java.util.Set; + +import io.micronaut.context.ApplicationContext; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; + +@Singleton +public class HostResolver { + + @Inject + ApplicationContext applicationContext; + + public String getHost() { + // avoid this messy code by using property files + Set activeEnvironments = applicationContext.getEnvironment() + .getActiveNames(); + + if (activeEnvironments.contains("dev") || activeEnvironments.contains("local")) { + return "localhost"; + } else if (activeEnvironments.contains("production")) { + return "my-service.us-west-2.amazonaws.com"; + } else { + throw new RuntimeException("Unsupported environment: " + activeEnvironments); + } + } +} diff --git a/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/eventsourcing/EventSourcingService.java b/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/eventsourcing/EventSourcingService.java new file mode 100644 index 000000000000..3764e6050263 --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/eventsourcing/EventSourcingService.java @@ -0,0 +1,8 @@ +package com.baeldung.micronaut.environments.services.eventsourcing; + +public interface EventSourcingService { + + // this method would be void, but for the purpose of our tutorial, + // we have it returning something, so that we can easily test it. + String sendEvent(String event); +} diff --git a/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/eventsourcing/KafkaEventSourcingService.java b/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/eventsourcing/KafkaEventSourcingService.java new file mode 100644 index 000000000000..94238826dcc5 --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/eventsourcing/KafkaEventSourcingService.java @@ -0,0 +1,14 @@ +package com.baeldung.micronaut.environments.services.eventsourcing; + +import io.micronaut.context.annotation.Requires; +import jakarta.inject.Singleton; + +@Singleton +@Requires(env = "production") +public class KafkaEventSourcingService implements EventSourcingService { + + @Override + public String sendEvent(String event) { + return "using kafka to send message: [" + event + "]"; + } +} diff --git a/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/eventsourcing/VoidEventSourcingService.java b/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/eventsourcing/VoidEventSourcingService.java new file mode 100644 index 000000000000..e961d704d8d0 --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/eventsourcing/VoidEventSourcingService.java @@ -0,0 +1,15 @@ +package com.baeldung.micronaut.environments.services.eventsourcing; + +import io.micronaut.context.annotation.Requires; +import io.micronaut.context.env.Environment; +import jakarta.inject.Singleton; + +@Singleton +@Requires(env = Environment.DEVELOPMENT) +public class VoidEventSourcingService implements EventSourcingService { + + @Override + public String sendEvent(String event) { + return "void service. [" + event + "] was not sent"; + } +} diff --git a/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/logging/ConsoleLoggingServiceImpl.java b/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/logging/ConsoleLoggingServiceImpl.java new file mode 100644 index 000000000000..9ddee5febb9a --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/logging/ConsoleLoggingServiceImpl.java @@ -0,0 +1,12 @@ +package com.baeldung.micronaut.environments.services.logging; + +import jakarta.inject.Singleton; + +@Singleton +public class ConsoleLoggingServiceImpl implements LoggingService { + + @Override + public String log(String message) { + return "logging to console: [" + message + "]"; + } +} diff --git a/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/logging/FileLoggingServiceImpl.java b/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/logging/FileLoggingServiceImpl.java new file mode 100644 index 000000000000..d9d7cacf23a9 --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/logging/FileLoggingServiceImpl.java @@ -0,0 +1,16 @@ +package com.baeldung.micronaut.environments.services.logging; + +import io.micronaut.context.annotation.Replaces; +import io.micronaut.context.annotation.Requires; +import jakarta.inject.Singleton; + +@Singleton +@Requires(env = { "production", "canary-production" }) +@Replaces(LoggingService.class) +public class FileLoggingServiceImpl implements LoggingService { + + @Override + public String log(String message) { + return "logging to some file: [" + message + "]"; + } +} diff --git a/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/logging/LoggingService.java b/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/logging/LoggingService.java new file mode 100644 index 000000000000..53510eeb4af1 --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/main/java/com/baeldung/micronaut/environments/services/logging/LoggingService.java @@ -0,0 +1,8 @@ +package com.baeldung.micronaut.environments.services.logging; + +public interface LoggingService { + + // this method would be void, but for the purpose of our tutorial, + // we have it returning something, so that we can easily test it. + String log(String message); +} diff --git a/microservices-modules/micronaut-configuration/src/main/resources/application-dev.yml b/microservices-modules/micronaut-configuration/src/main/resources/application-dev.yml new file mode 100644 index 000000000000..e18def981db3 --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/main/resources/application-dev.yml @@ -0,0 +1,3 @@ +service: + test: + property: 'something-in-dev' diff --git a/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/eventsourcing/DevEnvironmentEventSourcingUnitTest.java b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/eventsourcing/DevEnvironmentEventSourcingUnitTest.java new file mode 100644 index 000000000000..b86a500e41d8 --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/eventsourcing/DevEnvironmentEventSourcingUnitTest.java @@ -0,0 +1,39 @@ +package com.baeldung.micronaut.environments.services.eventsourcing; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +import io.micronaut.context.ApplicationContext; +import io.micronaut.context.annotation.Property; +import io.micronaut.test.extensions.junit5.annotation.MicronautTest; +import jakarta.inject.Inject; + +@MicronautTest(environments = { "dev" }) +public class DevEnvironmentEventSourcingUnitTest { + + @Inject + EventSourcingService eventSourcingService; + @Inject + ApplicationContext applicationContext; + @Property(name = "service.test.property") + String testProperty; + + @Test + public void whenEnvironmentIsSetToDev_thenActiveEnvironmentsAreTestAndDev() { + assertThat(applicationContext.getEnvironment() + .getActiveNames()).containsExactlyInAnyOrder("test", "dev"); + } + + @Test + public void whenEnvironmentIsSetToDev_thenTestPropertyGetsValueFromDev() { + assertThat(testProperty).isEqualTo("something-in-dev"); + } + + @Test + public void givenEnvironmentIsSetToDev_whenSendEvent_thenVoidServiceIsUsed() { + String devEvent = eventSourcingService.sendEvent("something"); + + assertThat(devEvent).isEqualTo("void service. [something] was not sent"); + } +} diff --git a/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/eventsourcing/InvalidEnvironmentEventSourcingUnitTest.java b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/eventsourcing/InvalidEnvironmentEventSourcingUnitTest.java new file mode 100644 index 000000000000..6b60104f77ca --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/eventsourcing/InvalidEnvironmentEventSourcingUnitTest.java @@ -0,0 +1,38 @@ +package com.baeldung.micronaut.environments.services.eventsourcing; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import org.junit.jupiter.api.Test; + +import com.baeldung.micronaut.environments.ServerApplication; + +import io.micronaut.context.ApplicationContext; +import io.micronaut.context.exceptions.NoSuchBeanException; +import io.micronaut.runtime.Micronaut; + +public class InvalidEnvironmentEventSourcingUnitTest { + + @Test + public void whenEnvironmentIsNotSet_thenEventSourcingServiceBeanIsNotCreated() { + ApplicationContext applicationContext = Micronaut.run(ServerApplication.class); + applicationContext.start(); + + assertThat(applicationContext.getEnvironment() + .getActiveNames()).containsExactly("test"); + assertThatThrownBy(() -> applicationContext.getBean(EventSourcingService.class)).isInstanceOf(NoSuchBeanException.class) + .hasMessageContaining("None of the required environments [production] are active: [test]"); + } + + @Test + public void whenEnvironmentIsNotSet_thenTestPropertyGetsValueFromDeductedEnvironment() { + ApplicationContext applicationContext = Micronaut.run(ServerApplication.class); + applicationContext.start(); + + assertThat(applicationContext.getEnvironment() + .getActiveNames()).containsExactly("test"); + assertThat(applicationContext.getProperty("service.test.property", String.class)).isNotEmpty(); + assertThat(applicationContext.getProperty("service.test.property", String.class) + .get()).isEqualTo("something-in-test"); + } +} diff --git a/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/eventsourcing/MultipleEnvironmentsEventSourcingUnitTest.java b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/eventsourcing/MultipleEnvironmentsEventSourcingUnitTest.java new file mode 100644 index 000000000000..d9108da0c43f --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/eventsourcing/MultipleEnvironmentsEventSourcingUnitTest.java @@ -0,0 +1,48 @@ +package com.baeldung.micronaut.environments.services.eventsourcing; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import org.junit.jupiter.api.Test; + +import io.micronaut.context.ApplicationContext; +import io.micronaut.context.exceptions.NonUniqueBeanException; + +public class MultipleEnvironmentsEventSourcingUnitTest { + + @Test + public void whenEnvironmentIsSetToBothProductionAndDev_thenEventSourcingServiceBeanHasConflict() { + ApplicationContext applicationContext = ApplicationContext.builder("dev", "production") + .build(); + applicationContext.start(); + + assertThat(applicationContext.getEnvironment() + .getActiveNames()).containsExactly("test", "dev", "production"); + assertThatThrownBy(() -> applicationContext.getBean(EventSourcingService.class)).isInstanceOf(NonUniqueBeanException.class) + .hasMessageStartingWith("Multiple possible bean candidates found: ["); + } + + @Test + public void whenEnvironmentIsSetToBothProductionAndDev_thenTestPropertyGetsValueBasedOnPriority() { + ApplicationContext applicationContext = ApplicationContext.builder("dev", "production") + .build(); + applicationContext.start(); + + assertThat(applicationContext.getEnvironment() + .getActiveNames()).containsExactly("test", "dev", "production"); + assertThat(applicationContext.getProperty("service.test.property", String.class)).isNotEmpty(); + assertThat(applicationContext.getProperty("service.test.property", String.class) + .get()).isEqualTo("something-in-dev"); + } + + @Test + public void whenEnvironmentIsSetToBothProductionAndDev_thenMissingPropertyIsEmpty() { + ApplicationContext applicationContext = ApplicationContext.builder("dev", "production") + .build(); + applicationContext.start(); + + assertThat(applicationContext.getEnvironment() + .getActiveNames()).containsExactly("test", "dev", "production"); + assertThat(applicationContext.getProperty("service.dummy.property", String.class)).isEmpty(); + } +} diff --git a/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/eventsourcing/ProductionEnvironmentEventSourcingUnitTest.java b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/eventsourcing/ProductionEnvironmentEventSourcingUnitTest.java new file mode 100644 index 000000000000..937c32395f54 --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/eventsourcing/ProductionEnvironmentEventSourcingUnitTest.java @@ -0,0 +1,31 @@ +package com.baeldung.micronaut.environments.services.eventsourcing; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +import io.micronaut.context.ApplicationContext; +import io.micronaut.test.extensions.junit5.annotation.MicronautTest; +import jakarta.inject.Inject; + +@MicronautTest(environments = { "production" }) +public class ProductionEnvironmentEventSourcingUnitTest { + + @Inject + EventSourcingService eventSourcingService; + @Inject + ApplicationContext applicationContext; + + @Test + public void whenEnvironmentIsSetToProduction_thenActiveEnvironmentsAreTestAndProduction() { + assertThat(applicationContext.getEnvironment() + .getActiveNames()).containsExactlyInAnyOrder("test", "production"); + } + + @Test + public void givenEnvironmentIsSetToProduction_whenSendEvent_thenKafkaServiceIsUsed() { + String devEvent = eventSourcingService.sendEvent("something"); + + assertThat(devEvent).isEqualTo("using kafka to send message: [something]"); + } +} diff --git a/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/hostresolver/DevEnvironmentHostResolverUnitTest.java b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/hostresolver/DevEnvironmentHostResolverUnitTest.java new file mode 100644 index 000000000000..081bbe9c4f4b --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/hostresolver/DevEnvironmentHostResolverUnitTest.java @@ -0,0 +1,33 @@ +package com.baeldung.micronaut.environments.services.hostresolver; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +import com.baeldung.micronaut.environments.services.HostResolver; + +import io.micronaut.context.ApplicationContext; +import io.micronaut.test.extensions.junit5.annotation.MicronautTest; +import jakarta.inject.Inject; + +@MicronautTest(environments = { "dev" }) +public class DevEnvironmentHostResolverUnitTest { + + @Inject + HostResolver hostResolver; + @Inject + ApplicationContext applicationContext; + + @Test + public void whenEnvironmentIsSetToDev_thenActiveEnvironmentsAreTestAndDev() { + assertThat(applicationContext.getEnvironment() + .getActiveNames()).containsExactlyInAnyOrder("test", "dev"); + } + + @Test + public void givenEnvironmentIsSetToDev_whenGetHost_thenTheResolverReturnsLocalhost() { + String devHost = hostResolver.getHost(); + + assertThat(devHost).isEqualTo("localhost"); + } +} diff --git a/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/hostresolver/InvalidEnvironmentHostResolverUnitTest.java b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/hostresolver/InvalidEnvironmentHostResolverUnitTest.java new file mode 100644 index 000000000000..907cb4f7639e --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/hostresolver/InvalidEnvironmentHostResolverUnitTest.java @@ -0,0 +1,33 @@ +package com.baeldung.micronaut.environments.services.hostresolver; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import org.junit.jupiter.api.Test; + +import com.baeldung.micronaut.environments.services.HostResolver; + +import io.micronaut.context.ApplicationContext; +import io.micronaut.test.extensions.junit5.annotation.MicronautTest; +import jakarta.inject.Inject; + +@MicronautTest(environments = { "no-mans-land" }) +public class InvalidEnvironmentHostResolverUnitTest { + + @Inject + HostResolver hostResolver; + @Inject + ApplicationContext applicationContext; + + @Test + public void whenEnvironmentIsSetToIrrelevant_thenActiveEnvironmentsAreTheExpectedOnes() { + assertThat(applicationContext.getEnvironment() + .getActiveNames()).containsExactlyInAnyOrder("test", "no-mans-land"); + } + + @Test + public void givenEnvironmentIsSetToIrrelevant_whenGetHost_throwsUnsupportedEnvironmentException() { + assertThatThrownBy(() -> hostResolver.getHost()).isInstanceOf(RuntimeException.class) + .hasMessageContaining("Unsupported environment: "); + } +} diff --git a/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/hostresolver/LocalEnvironmentHostResolverUnitTest.java b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/hostresolver/LocalEnvironmentHostResolverUnitTest.java new file mode 100644 index 000000000000..c8851b7f5e99 --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/hostresolver/LocalEnvironmentHostResolverUnitTest.java @@ -0,0 +1,33 @@ +package com.baeldung.micronaut.environments.services.hostresolver; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +import com.baeldung.micronaut.environments.services.HostResolver; + +import io.micronaut.context.ApplicationContext; +import io.micronaut.test.extensions.junit5.annotation.MicronautTest; +import jakarta.inject.Inject; + +@MicronautTest(environments = { "local" }) +public class LocalEnvironmentHostResolverUnitTest { + + @Inject + HostResolver hostResolver; + @Inject + ApplicationContext applicationContext; + + @Test + public void whenEnvironmentIsSetToLocal_thenActiveEnvironmentsAreTestAndLocal() { + assertThat(applicationContext.getEnvironment() + .getActiveNames()).containsExactlyInAnyOrder("test", "local"); + } + + @Test + public void givenEnvironmentIsSetToLocal_whenGetHost_thenTheResolverReturnsLocalhost() { + String localHost = hostResolver.getHost(); + + assertThat(localHost).isEqualTo("localhost"); + } +} diff --git a/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/hostresolver/ProductionEnvironmentHostResolverUnitTest.java b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/hostresolver/ProductionEnvironmentHostResolverUnitTest.java new file mode 100644 index 000000000000..ad65863bb624 --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/hostresolver/ProductionEnvironmentHostResolverUnitTest.java @@ -0,0 +1,33 @@ +package com.baeldung.micronaut.environments.services.hostresolver; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +import com.baeldung.micronaut.environments.services.HostResolver; + +import io.micronaut.context.ApplicationContext; +import io.micronaut.test.extensions.junit5.annotation.MicronautTest; +import jakarta.inject.Inject; + +@MicronautTest(environments = { "production" }) +public class ProductionEnvironmentHostResolverUnitTest { + + @Inject + HostResolver hostResolver; + @Inject + ApplicationContext applicationContext; + + @Test + public void whenEnvironmentIsSetToProduction_thenActiveEnvironmentsAreTestAndProduction() { + assertThat(applicationContext.getEnvironment() + .getActiveNames()).containsExactlyInAnyOrder("test", "production"); + } + + @Test + public void givenEnvironmentIsSetToProduction_whenGetHost_thenTheResolverReturnsProdUrl() { + String prodHost = hostResolver.getHost(); + + assertThat(prodHost).isEqualTo("my-service.us-west-2.amazonaws.com"); + } +} diff --git a/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/logging/CanaryProductionEnvironmentLoggingUnitTest.java b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/logging/CanaryProductionEnvironmentLoggingUnitTest.java new file mode 100644 index 000000000000..54c443ae06f7 --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/logging/CanaryProductionEnvironmentLoggingUnitTest.java @@ -0,0 +1,31 @@ +package com.baeldung.micronaut.environments.services.logging; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +import io.micronaut.context.ApplicationContext; +import io.micronaut.test.extensions.junit5.annotation.MicronautTest; +import jakarta.inject.Inject; + +@MicronautTest(environments = { "canary-production" }) +public class CanaryProductionEnvironmentLoggingUnitTest { + + @Inject + LoggingService loggingService; + @Inject + ApplicationContext applicationContext; + + @Test + public void whenEnvironmentIsSetToCanaryProduction_thenActiveEnvironmentsAreTestAndCanaryProduction() { + assertThat(applicationContext.getEnvironment() + .getActiveNames()).containsExactlyInAnyOrder("test", "canary-production"); + } + + @Test + public void givenEnvironmentIsSetToCanaryProduction_whenLog_thenOverridesDefaultAndUsesFileLoggingService() { + String prodLog = loggingService.log("something"); + + assertThat(prodLog).isEqualTo("logging to some file: [something]"); + } +} diff --git a/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/logging/InvalidEnvironmentLoggingUnitTest.java b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/logging/InvalidEnvironmentLoggingUnitTest.java new file mode 100644 index 000000000000..d51e97667954 --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/logging/InvalidEnvironmentLoggingUnitTest.java @@ -0,0 +1,26 @@ +package com.baeldung.micronaut.environments.services.logging; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +import com.baeldung.micronaut.environments.ServerApplication; + +import io.micronaut.context.ApplicationContext; +import io.micronaut.runtime.Micronaut; + +public class InvalidEnvironmentLoggingUnitTest { + + @Test + public void whenEnvironmentIsNotSet_thenLoggingServiceImplementationIsTheDefaultOne() { + ApplicationContext applicationContext = Micronaut.run(ServerApplication.class); + applicationContext.start(); + + LoggingService loggingService = applicationContext.getBean(LoggingService.class); + + assertThat(applicationContext.getEnvironment() + .getActiveNames()).containsExactly("test"); + assertThat(loggingService).isNotNull(); + assertThat(loggingService).isExactlyInstanceOf(ConsoleLoggingServiceImpl.class); + } +} diff --git a/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/logging/NonProductionEnvironmentLoggingUnitTest.java b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/logging/NonProductionEnvironmentLoggingUnitTest.java new file mode 100644 index 000000000000..d91eeb933618 --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/logging/NonProductionEnvironmentLoggingUnitTest.java @@ -0,0 +1,31 @@ +package com.baeldung.micronaut.environments.services.logging; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +import io.micronaut.context.ApplicationContext; +import io.micronaut.test.extensions.junit5.annotation.MicronautTest; +import jakarta.inject.Inject; + +@MicronautTest(environments = { "dev" }) +public class NonProductionEnvironmentLoggingUnitTest { + + @Inject + LoggingService loggingService; + @Inject + ApplicationContext applicationContext; + + @Test + public void whenEnvironmentIsSetToDev_thenActiveEnvironmentsAreTestAndDev() { + assertThat(applicationContext.getEnvironment() + .getActiveNames()).containsExactlyInAnyOrder("test", "dev"); + } + + @Test + public void givenEnvironmentIsSetToDev_whenLog_thenUsesDefaultLoggingService() { + String devLog = loggingService.log("something"); + + assertThat(devLog).isEqualTo("logging to console: [something]"); + } +} diff --git a/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/logging/ProductionEnvironmentLoggingUnitTest.java b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/logging/ProductionEnvironmentLoggingUnitTest.java new file mode 100644 index 000000000000..21083c0ea28b --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/environments/services/logging/ProductionEnvironmentLoggingUnitTest.java @@ -0,0 +1,31 @@ +package com.baeldung.micronaut.environments.services.logging; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +import io.micronaut.context.ApplicationContext; +import io.micronaut.test.extensions.junit5.annotation.MicronautTest; +import jakarta.inject.Inject; + +@MicronautTest(environments = { "production" }) +public class ProductionEnvironmentLoggingUnitTest { + + @Inject + LoggingService loggingService; + @Inject + ApplicationContext applicationContext; + + @Test + public void whenEnvironmentIsSetToProduction_thenActiveEnvironmentsAreTestAndProduction() { + assertThat(applicationContext.getEnvironment() + .getActiveNames()).containsExactlyInAnyOrder("test", "production"); + } + + @Test + public void givenEnvironmentIsSetToProduction_whenLog_thenOverridesDefaultAndUsesFileLoggingService() { + String prodLog = loggingService.log("something"); + + assertThat(prodLog).isEqualTo("logging to some file: [something]"); + } +} diff --git a/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/httpfilters/FiltersOrderTest.java b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/httpfilters/FiltersOrderUnitTest.java similarity index 99% rename from microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/httpfilters/FiltersOrderTest.java rename to microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/httpfilters/FiltersOrderUnitTest.java index 44ad21772175..b82bc08a5619 100644 --- a/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/httpfilters/FiltersOrderTest.java +++ b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/httpfilters/FiltersOrderUnitTest.java @@ -19,7 +19,7 @@ import io.restassured.specification.RequestSpecification; @MicronautTest -class FiltersOrderTest { +class FiltersOrderUnitTest { private ListAppender customFilterLogs; private ListAppender requestIDFilterLogs; diff --git a/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/httpfilters/ServerApplicationTest.java b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/httpfilters/ServerApplicationUnitTest.java similarity index 99% rename from microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/httpfilters/ServerApplicationTest.java rename to microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/httpfilters/ServerApplicationUnitTest.java index 5be31e36b853..30a70eecb7fc 100644 --- a/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/httpfilters/ServerApplicationTest.java +++ b/microservices-modules/micronaut-configuration/src/test/java/com/baeldung/micronaut/httpfilters/ServerApplicationUnitTest.java @@ -16,7 +16,7 @@ import io.restassured.specification.RequestSpecification; @MicronautTest -class ServerApplicationTest { +class ServerApplicationUnitTest { private static final String FILTERED_ENDPOINTS_PATH = "micronaut-configuration-tutorials/filters-annotations"; diff --git a/microservices-modules/micronaut-configuration/src/test/resources/application-test.yml b/microservices-modules/micronaut-configuration/src/test/resources/application-test.yml new file mode 100644 index 000000000000..4b971f55231b --- /dev/null +++ b/microservices-modules/micronaut-configuration/src/test/resources/application-test.yml @@ -0,0 +1,7 @@ +micronaut: + server: + port: -1 + +service: + test: + property: 'something-in-test'