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 {
|
public class FeatureFlagsManager implements Managed {
|
||||||
|
|
||||||
private final FeatureFlags featureFlagDatabase;
|
private final FeatureFlags featureFlagDatabase;
|
||||||
private final ScheduledExecutorService refreshExecutorService;
|
private final ScheduledExecutorService refreshExecutorService;
|
||||||
private ScheduledFuture<?> refreshFuture;
|
private ScheduledFuture<?> refreshFuture;
|
||||||
private final AtomicReference<Map<String, Boolean>> featureFlags = new AtomicReference<>(Collections.emptyMap());
|
private final AtomicReference<Map<String, Boolean>> featureFlags = new AtomicReference<>(Collections.emptyMap());
|
||||||
|
|
||||||
private static final String GAUGE_NAME = "status";
|
private static final String GAUGE_NAME = "status";
|
||||||
private static final String FLAG_TAG_NAME = "flag";
|
private static final String FLAG_TAG_NAME = "flag";
|
||||||
|
@ -70,6 +70,7 @@ public class FeatureFlagsManager implements Managed {
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
void refreshFeatureFlags() {
|
void refreshFeatureFlags() {
|
||||||
final Map<String, Boolean> refreshedFeatureFlags = featureFlagDatabase.getFeatureFlags();
|
final Map<String, Boolean> refreshedFeatureFlags = featureFlagDatabase.getFeatureFlags();
|
||||||
|
|
||||||
featureFlags.set(refreshedFeatureFlags);
|
featureFlags.set(refreshedFeatureFlags);
|
||||||
|
|
||||||
for (final Map.Entry<String, Boolean> entry : refreshedFeatureFlags.entrySet()) {
|
for (final Map.Entry<String, Boolean> entry : refreshedFeatureFlags.entrySet()) {
|
||||||
|
|
|
@ -60,6 +60,17 @@ public class FeatureFlagsControllerTest {
|
||||||
verify(FEATURE_FLAG_MANAGER).setFeatureFlag("testFlag", true);
|
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()
|
final Response response = resources.getJerseyTest()
|
||||||
.target("/v1/featureflag/testFlag")
|
.target("/v1/featureflag/testFlag")
|
||||||
|
|
|
@ -1,44 +1,46 @@
|
||||||
package org.whispersystems.textsecuregcm.storage;
|
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.Before;
|
||||||
|
import org.junit.Rule;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.whispersystems.textsecuregcm.configuration.CircuitBreakerConfiguration;
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.ScheduledExecutorService;
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
public class FeatureFlagsManagerTest {
|
public class FeatureFlagsManagerTest {
|
||||||
|
|
||||||
private FeatureFlags featureFlagDatabase;
|
|
||||||
private FeatureFlagsManager featureFlagsManager;
|
private FeatureFlagsManager featureFlagsManager;
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public PreparedDbRule db = EmbeddedPostgresRules.preparedDatabase(LiquibasePreparer.forClasspathLocation("accountsdb.xml"));
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
featureFlagDatabase = mock(FeatureFlags.class);
|
final FaultTolerantDatabase database = new FaultTolerantDatabase("featureFlagsTest",
|
||||||
featureFlagsManager = new FeatureFlagsManager(featureFlagDatabase, mock(ScheduledExecutorService.class));
|
Jdbi.create(db.getTestDatabase()),
|
||||||
|
new CircuitBreakerConfiguration());
|
||||||
|
|
||||||
|
featureFlagsManager = new FeatureFlagsManager(new FeatureFlags(database), mock(ScheduledExecutorService.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsFeatureFlagActive() {
|
public void testIsFeatureFlagActive() {
|
||||||
final Map<String, Boolean> featureFlags = new HashMap<>();
|
final String flagName = "testFlag";
|
||||||
featureFlags.put("testFlag", true);
|
|
||||||
|
|
||||||
when(featureFlagDatabase.getFeatureFlags()).thenReturn(featureFlags);
|
assertFalse(featureFlagsManager.isFeatureFlagActive(flagName));
|
||||||
|
|
||||||
assertFalse(featureFlagsManager.isFeatureFlagActive("testFlag"));
|
featureFlagsManager.setFeatureFlag(flagName, true);
|
||||||
|
assertTrue(featureFlagsManager.isFeatureFlagActive(flagName));
|
||||||
|
|
||||||
featureFlagsManager.refreshFeatureFlags();
|
featureFlagsManager.setFeatureFlag(flagName, false);
|
||||||
|
assertFalse(featureFlagsManager.isFeatureFlagActive(flagName));
|
||||||
assertTrue(featureFlagsManager.isFeatureFlagActive("testFlag"));
|
|
||||||
|
|
||||||
featureFlags.put("testFlag", false);
|
|
||||||
featureFlagsManager.refreshFeatureFlags();
|
|
||||||
|
|
||||||
assertFalse(featureFlagsManager.isFeatureFlagActive("testFlag"));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue