From 55a6b0b26b7385ba594986758a6865c642675ada Mon Sep 17 00:00:00 2001 From: Mincong HUANG Date: Wed, 11 Nov 2020 13:58:27 +0100 Subject: [PATCH 1/2] Add feature flag --- .../reliability/featureflag/MyJob.java | 21 +++++++ .../reliability/featureflag/MyJobTest.java | 56 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 reliability/src/test/java/io/mincong/reliability/featureflag/MyJob.java create mode 100644 reliability/src/test/java/io/mincong/reliability/featureflag/MyJobTest.java 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..ac48d42f --- /dev/null +++ b/reliability/src/test/java/io/mincong/reliability/featureflag/MyJob.java @@ -0,0 +1,21 @@ +package io.mincong.reliability.featureflag; + +import java.util.Set; + +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..535d7bef --- /dev/null +++ b/reliability/src/test/java/io/mincong/reliability/featureflag/MyJobTest.java @@ -0,0 +1,56 @@ +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; + +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"); + } +} From 0a50fcffc64aebf1bb370cbfa40928080e7fd549 Mon Sep 17 00:00:00 2001 From: Mincong HUANG Date: Sun, 15 Nov 2020 17:42:43 +0100 Subject: [PATCH 2/2] Add URL --- .../test/java/io/mincong/reliability/featureflag/MyJob.java | 4 ++++ .../java/io/mincong/reliability/featureflag/MyJobTest.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/reliability/src/test/java/io/mincong/reliability/featureflag/MyJob.java b/reliability/src/test/java/io/mincong/reliability/featureflag/MyJob.java index ac48d42f..074459eb 100644 --- a/reliability/src/test/java/io/mincong/reliability/featureflag/MyJob.java +++ b/reliability/src/test/java/io/mincong/reliability/featureflag/MyJob.java @@ -2,6 +2,10 @@ import java.util.Set; +/** + * @author Mincong Huang + * @blog https://mincong.io/2020/11/11/feature-flag/ + */ public class MyJob { private final Set values; diff --git a/reliability/src/test/java/io/mincong/reliability/featureflag/MyJobTest.java b/reliability/src/test/java/io/mincong/reliability/featureflag/MyJobTest.java index 535d7bef..d520b414 100644 --- a/reliability/src/test/java/io/mincong/reliability/featureflag/MyJobTest.java +++ b/reliability/src/test/java/io/mincong/reliability/featureflag/MyJobTest.java @@ -6,6 +6,10 @@ 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