diff --git a/reliability/src/test/java/io/mincong/reliability/featureflag/MyJob.java b/reliability/src/test/java/io/mincong/reliability/featureflag/MyJob.java new file mode 100644 index 00000000..074459eb --- /dev/null +++ b/reliability/src/test/java/io/mincong/reliability/featureflag/MyJob.java @@ -0,0 +1,25 @@ +package io.mincong.reliability.featureflag; + +import java.util.Set; + +/** + * @author Mincong Huang + * @blog https://mincong.io/2020/11/11/feature-flag/ + */ +public class MyJob { + + private final Set values; + + public MyJob(Set values) { + this.values = values; + } + + public void run() { + var isNewFeatureEnabled = Boolean.getBoolean("NEW_FEATURE_ENABLED"); + if (isNewFeatureEnabled) { + values.add("new"); + } else { + values.add("old"); + } + } +} diff --git a/reliability/src/test/java/io/mincong/reliability/featureflag/MyJobTest.java b/reliability/src/test/java/io/mincong/reliability/featureflag/MyJobTest.java new file mode 100644 index 00000000..d520b414 --- /dev/null +++ b/reliability/src/test/java/io/mincong/reliability/featureflag/MyJobTest.java @@ -0,0 +1,60 @@ +package io.mincong.reliability.featureflag; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.HashSet; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; + +/** + * @author Mincong Huang + * @blog https://mincong.io/2020/11/11/feature-flag/ + */ +class MyJobTest { + + @AfterEach + void tearDown() { + System.clearProperty("NEW_FEATURE_ENABLED"); + } + + @Test + void itShouldEnableNewFeature() { + // Given + System.setProperty("NEW_FEATURE_ENABLED", "True"); + var set = new HashSet(); + var job = new MyJob(set); + + // When + job.run(); + + // Then + assertThat(set).containsExactly("new"); + } + + @Test + void itShouldDisableNewFeature() { + // Given + System.setProperty("NEW_FEATURE_ENABLED", "False"); + var set = new HashSet(); + var job = new MyJob(set); + + // When + job.run(); + + // Then + assertThat(set).containsExactly("old"); + } + + @Test + void itShouldFallback() { + // Given + var set = new HashSet(); + var job = new MyJob(set); + + // When + job.run(); + + // Then + assertThat(set).containsExactly("old"); + } +}