Make feature flag manager tests use a real database to avoid over-mocking.
This commit is contained in:
parent
08dd493f98
commit
acf52ad8a3
|
@ -26,10 +26,10 @@ import static com.codahale.metrics.MetricRegistry.name;
|
|||
*/
|
||||
public class FeatureFlagsManager implements Managed {
|
||||
|
||||
private final FeatureFlags featureFlagDatabase;
|
||||
private final ScheduledExecutorService refreshExecutorService;
|
||||
private ScheduledFuture<?> refreshFuture;
|
||||
private final AtomicReference<Map<String, Boolean>> featureFlags = new AtomicReference<>(Collections.emptyMap());
|
||||
private final FeatureFlags featureFlagDatabase;
|
||||
private final ScheduledExecutorService refreshExecutorService;
|
||||
private ScheduledFuture<?> refreshFuture;
|
||||
private final AtomicReference<Map<String, Boolean>> featureFlags = new AtomicReference<>(Collections.emptyMap());
|
||||
|
||||
private static final String GAUGE_NAME = "status";
|
||||
private static final String FLAG_TAG_NAME = "flag";
|
||||
|
@ -70,6 +70,7 @@ public class FeatureFlagsManager implements Managed {
|
|||
@VisibleForTesting
|
||||
void refreshFeatureFlags() {
|
||||
final Map<String, Boolean> refreshedFeatureFlags = featureFlagDatabase.getFeatureFlags();
|
||||
|
||||
featureFlags.set(refreshedFeatureFlags);
|
||||
|
||||
for (final Map.Entry<String, Boolean> entry : refreshedFeatureFlags.entrySet()) {
|
||||
|
|
|
@ -60,6 +60,17 @@ public class FeatureFlagsControllerTest {
|
|||
verify(FEATURE_FLAG_MANAGER).setFeatureFlag("testFlag", true);
|
||||
}
|
||||
|
||||
{
|
||||
final Response response = resources.getJerseyTest()
|
||||
.target("/v1/featureflag/secondFlag")
|
||||
.request()
|
||||
.header("Token", "first")
|
||||
.put(Entity.form(new Form().param("active", "false")));
|
||||
|
||||
assertEquals(204, response.getStatus());
|
||||
verify(FEATURE_FLAG_MANAGER).setFeatureFlag("secondFlag", false);
|
||||
}
|
||||
|
||||
{
|
||||
final Response response = resources.getJerseyTest()
|
||||
.target("/v1/featureflag/testFlag")
|
||||
|
|
|
@ -1,44 +1,46 @@
|
|||
package org.whispersystems.textsecuregcm.storage;
|
||||
|
||||
import com.opentable.db.postgres.embedded.LiquibasePreparer;
|
||||
import com.opentable.db.postgres.junit.EmbeddedPostgresRules;
|
||||
import com.opentable.db.postgres.junit.PreparedDbRule;
|
||||
import org.jdbi.v3.core.Jdbi;
|
||||
import org.junit.Before;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.whispersystems.textsecuregcm.configuration.CircuitBreakerConfiguration;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
public class FeatureFlagsManagerTest {
|
||||
|
||||
private FeatureFlags featureFlagDatabase;
|
||||
private FeatureFlagsManager featureFlagsManager;
|
||||
|
||||
@Rule
|
||||
public PreparedDbRule db = EmbeddedPostgresRules.preparedDatabase(LiquibasePreparer.forClasspathLocation("accountsdb.xml"));
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
featureFlagDatabase = mock(FeatureFlags.class);
|
||||
featureFlagsManager = new FeatureFlagsManager(featureFlagDatabase, mock(ScheduledExecutorService.class));
|
||||
final FaultTolerantDatabase database = new FaultTolerantDatabase("featureFlagsTest",
|
||||
Jdbi.create(db.getTestDatabase()),
|
||||
new CircuitBreakerConfiguration());
|
||||
|
||||
featureFlagsManager = new FeatureFlagsManager(new FeatureFlags(database), mock(ScheduledExecutorService.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsFeatureFlagActive() {
|
||||
final Map<String, Boolean> featureFlags = new HashMap<>();
|
||||
featureFlags.put("testFlag", true);
|
||||
final String flagName = "testFlag";
|
||||
|
||||
when(featureFlagDatabase.getFeatureFlags()).thenReturn(featureFlags);
|
||||
assertFalse(featureFlagsManager.isFeatureFlagActive(flagName));
|
||||
|
||||
assertFalse(featureFlagsManager.isFeatureFlagActive("testFlag"));
|
||||
featureFlagsManager.setFeatureFlag(flagName, true);
|
||||
assertTrue(featureFlagsManager.isFeatureFlagActive(flagName));
|
||||
|
||||
featureFlagsManager.refreshFeatureFlags();
|
||||
|
||||
assertTrue(featureFlagsManager.isFeatureFlagActive("testFlag"));
|
||||
|
||||
featureFlags.put("testFlag", false);
|
||||
featureFlagsManager.refreshFeatureFlags();
|
||||
|
||||
assertFalse(featureFlagsManager.isFeatureFlagActive("testFlag"));
|
||||
featureFlagsManager.setFeatureFlag(flagName, false);
|
||||
assertFalse(featureFlagsManager.isFeatureFlagActive(flagName));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue