From 9ee9fe4732f343b37f5766a1c4007095a85d47d3 Mon Sep 17 00:00:00 2001 From: Lahiru Maramba Date: Wed, 6 Jan 2021 16:51:49 -0500 Subject: [PATCH 1/2] chore(rc): Refactor RC integration tests --- .../remoteconfig/FirebaseRemoteConfigIT.java | 162 +++++++++++++----- 1 file changed, 119 insertions(+), 43 deletions(-) diff --git a/src/test/java/com/google/firebase/remoteconfig/FirebaseRemoteConfigIT.java b/src/test/java/com/google/firebase/remoteconfig/FirebaseRemoteConfigIT.java index 3a13d8d86..c03fe55f0 100644 --- a/src/test/java/com/google/firebase/remoteconfig/FirebaseRemoteConfigIT.java +++ b/src/test/java/com/google/firebase/remoteconfig/FirebaseRemoteConfigIT.java @@ -42,89 +42,133 @@ public class FirebaseRemoteConfigIT { private static FirebaseRemoteConfig remoteConfig; - private static final long timestamp = System.currentTimeMillis(); - - private static final Map PARAMETERS = ImmutableMap.of( - "welcome_message_text", new Parameter() - .setDefaultValue(ParameterValue - .of(String.format("welcome to app %s", timestamp))) - .setConditionalValues(ImmutableMap.of( - "ios_en", - ParameterValue.of(String.format("welcome to app en %s", timestamp)) - )) - .setDescription("text for welcome message!"), - "header_text", new Parameter() - .setDefaultValue(ParameterValue.inAppDefault())); - - private static final Map PARAMETER_GROUPS = ImmutableMap.of( - "new menu", new ParameterGroup() - .setDescription(String.format("New Menu %s", timestamp)) - .setParameters(ImmutableMap.of( - "pumpkin_spice_season", new Parameter() - .setDefaultValue(ParameterValue.of("true")) - .setDescription("Whether it's currently pumpkin spice season.")) - )); - private static final List CONDITIONS = ImmutableList.of( new Condition("ios_en", "device.os == 'ios' && device.country in ['us', 'uk']") .setTagColor(TagColor.INDIGO), new Condition("android_en", "device.os == 'android' && device.country in ['us', 'uk']")); - private static final Version VERSION = Version - .withDescription(String.format("promo config %s", timestamp)); - @BeforeClass public static void setUpClass() { remoteConfig = FirebaseRemoteConfig.getInstance(IntegrationTestUtils.ensureDefaultApp()); } @Test - public void testTemplateOperations() throws FirebaseRemoteConfigException { + public void testValidateTemplate() throws FirebaseRemoteConfigException { + final Template inputTemplate = remoteConfig.getTemplate(); + final Map expectedParameters = getParameters(); + final Map expectedParameterGroups = getParameterGroups(); + final Version expectedVersion = getVersion(); + inputTemplate.setParameters(expectedParameters) + .setParameterGroups(expectedParameterGroups) + .setConditions(CONDITIONS) + .setVersion(expectedVersion); + + Template validatedTemplate = remoteConfig.validateTemplate(inputTemplate); + + assertEquals(inputTemplate, validatedTemplate); + } + + @Test + public void testPublishTemplate() throws FirebaseRemoteConfigException { // get template to fetch the active template with correct etag final Template oldTemplate = remoteConfig.getTemplate(); final Template inputTemplate = Template.fromJSON(oldTemplate.toJSON()); - final String versionNumber = oldTemplate.getVersion().getVersionNumber(); - + final Map parameters = getParameters(); + final Map parameterGroups = getParameterGroups(); + final Version version = getVersion(); // modify template - inputTemplate.setParameters(PARAMETERS) - .setParameterGroups(PARAMETER_GROUPS) + inputTemplate.setParameters(parameters) + .setParameterGroups(parameterGroups) .setConditions(CONDITIONS) - .setVersion(VERSION); - - // validate template - Template validatedTemplate = remoteConfig.validateTemplate(inputTemplate); - assertEquals(inputTemplate.getETag(), validatedTemplate.getETag()); - assertEquals(PARAMETERS, validatedTemplate.getParameters()); - assertEquals(PARAMETER_GROUPS, validatedTemplate.getParameterGroups()); - assertEquals(CONDITIONS, validatedTemplate.getConditions()); - assertEquals(VERSION, validatedTemplate.getVersion()); + .setVersion(version); // publish template Template publishedTemplate = remoteConfig.publishTemplate(inputTemplate); + assertNotEquals(inputTemplate.getETag(), publishedTemplate.getETag()); - assertEquals(PARAMETERS, publishedTemplate.getParameters()); - assertEquals(PARAMETER_GROUPS, publishedTemplate.getParameterGroups()); + assertEquals(parameters, publishedTemplate.getParameters()); + assertEquals(parameterGroups, publishedTemplate.getParameterGroups()); assertEquals(CONDITIONS, publishedTemplate.getConditions()); - assertNotEquals(VERSION, publishedTemplate.getVersion()); + assertNotEquals(version, publishedTemplate.getVersion()); + } + + @Test + public void testGetTemplate() throws FirebaseRemoteConfigException { + // get template to fetch the active template with correct etag + // modify and publish a known template to test get template operation. + final Template oldTemplate = remoteConfig.getTemplate(); + final Template inputTemplate = Template.fromJSON(oldTemplate.toJSON()); + final Map parameters = getParameters(); + final Map parameterGroups = getParameterGroups(); + final Version version = getVersion(); + inputTemplate.setParameters(parameters) + .setParameterGroups(parameterGroups) + .setConditions(CONDITIONS) + .setVersion(version); + // publish a known template + Template publishedTemplate = remoteConfig.publishTemplate(inputTemplate); // get template Template currentTemplate = remoteConfig.getTemplate(); + assertEquals(publishedTemplate, currentTemplate); + } + + @Test + public void testGetTemplateAtVersion() throws FirebaseRemoteConfigException { + // get template to fetch the active template with correct etag + // store the template version number + // publish a new template to test get template at version operation. + final Template oldTemplate = remoteConfig.getTemplate(); + final Template inputTemplate = Template.fromJSON(oldTemplate.toJSON()); + final String versionNumber = oldTemplate.getVersion().getVersionNumber(); + final Map parameters = getParameters(); + final Map parameterGroups = getParameterGroups(); + final Version version = getVersion(); + inputTemplate.setParameters(parameters) + .setParameterGroups(parameterGroups) + .setConditions(CONDITIONS) + .setVersion(version); + // publish a new template + Template publishedTemplate = remoteConfig.publishTemplate(inputTemplate); // get template at version Template atVersionTemplate = remoteConfig.getTemplateAtVersion(versionNumber); + assertEquals(oldTemplate, atVersionTemplate); assertEquals(versionNumber, atVersionTemplate.getVersion().getVersionNumber()); + assertNotEquals(publishedTemplate, atVersionTemplate); + } + + @Test + public void testRollbackTemplate() throws FirebaseRemoteConfigException { + // get template to fetch the active template with correct etag. + // store the template version number to rollback. + final Template oldTemplate = remoteConfig.getTemplate(); + final Template inputTemplate = Template.fromJSON(oldTemplate.toJSON()); + final String versionNumber = oldTemplate.getVersion().getVersionNumber(); + final Map parameters = getParameters(); + final Map parameterGroups = getParameterGroups(); + final Version version = getVersion(); + inputTemplate.setParameters(parameters) + .setParameterGroups(parameterGroups) + .setConditions(CONDITIONS) + .setVersion(version); + // publish a new template before rolling back to versionNumber + Template publishedTemplate = remoteConfig.publishTemplate(inputTemplate); // rollback template Template rolledBackTemplate = remoteConfig.rollback(versionNumber); + assertEquals(String.format("Rollback to version %s", versionNumber), rolledBackTemplate.getVersion().getDescription()); // get template to verify rollback Template activeTemplate = remoteConfig.getTemplate(); + assertEquals(rolledBackTemplate, activeTemplate); + assertNotEquals(publishedTemplate, activeTemplate); } @Test @@ -196,4 +240,36 @@ public void onSuccess(ListVersionsPage result) { assertEquals(versions.size(), collected.get()); assertNull(error.get()); } + + private Map getParameters() { + final long timestamp = System.currentTimeMillis(); + return ImmutableMap.of( + "welcome_message_text", new Parameter() + .setDefaultValue(ParameterValue + .of(String.format("welcome to app %s", timestamp))) + .setConditionalValues(ImmutableMap.of( + "ios_en", + ParameterValue.of(String.format("welcome to app en %s", timestamp)) + )) + .setDescription("text for welcome message!"), + "header_text", new Parameter() + .setDefaultValue(ParameterValue.inAppDefault())); + } + + private Map getParameterGroups() { + final long timestamp = System.currentTimeMillis(); + return ImmutableMap.of( + "new menu", new ParameterGroup() + .setDescription(String.format("New Menu %s", timestamp)) + .setParameters(ImmutableMap.of( + "pumpkin_spice_season", new Parameter() + .setDefaultValue(ParameterValue.of("true")) + .setDescription("Whether it's currently pumpkin spice season.")) + )); + } + + private Version getVersion() { + final long timestamp = System.currentTimeMillis(); + return Version.withDescription(String.format("promo config %s", timestamp)); + } } From 16e18782e3d89b8d069756d04f30dfd97fa54bba Mon Sep 17 00:00:00 2001 From: Lahiru Maramba Date: Thu, 7 Jan 2021 14:56:45 -0500 Subject: [PATCH 2/2] Avoid template cloning --- .../remoteconfig/FirebaseRemoteConfigIT.java | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/test/java/com/google/firebase/remoteconfig/FirebaseRemoteConfigIT.java b/src/test/java/com/google/firebase/remoteconfig/FirebaseRemoteConfigIT.java index c03fe55f0..bb90c6cb9 100644 --- a/src/test/java/com/google/firebase/remoteconfig/FirebaseRemoteConfigIT.java +++ b/src/test/java/com/google/firebase/remoteconfig/FirebaseRemoteConfigIT.java @@ -72,8 +72,7 @@ public void testValidateTemplate() throws FirebaseRemoteConfigException { @Test public void testPublishTemplate() throws FirebaseRemoteConfigException { // get template to fetch the active template with correct etag - final Template oldTemplate = remoteConfig.getTemplate(); - final Template inputTemplate = Template.fromJSON(oldTemplate.toJSON()); + final Template inputTemplate = remoteConfig.getTemplate(); final Map parameters = getParameters(); final Map parameterGroups = getParameterGroups(); final Version version = getVersion(); @@ -90,6 +89,7 @@ public void testPublishTemplate() throws FirebaseRemoteConfigException { assertEquals(parameters, publishedTemplate.getParameters()); assertEquals(parameterGroups, publishedTemplate.getParameterGroups()); assertEquals(CONDITIONS, publishedTemplate.getConditions()); + assertEquals(version.getDescription(), publishedTemplate.getVersion().getDescription()); assertNotEquals(version, publishedTemplate.getVersion()); } @@ -97,8 +97,7 @@ public void testPublishTemplate() throws FirebaseRemoteConfigException { public void testGetTemplate() throws FirebaseRemoteConfigException { // get template to fetch the active template with correct etag // modify and publish a known template to test get template operation. - final Template oldTemplate = remoteConfig.getTemplate(); - final Template inputTemplate = Template.fromJSON(oldTemplate.toJSON()); + final Template inputTemplate = remoteConfig.getTemplate(); final Map parameters = getParameters(); final Map parameterGroups = getParameterGroups(); final Version version = getVersion(); @@ -120,9 +119,9 @@ public void testGetTemplateAtVersion() throws FirebaseRemoteConfigException { // get template to fetch the active template with correct etag // store the template version number // publish a new template to test get template at version operation. - final Template oldTemplate = remoteConfig.getTemplate(); - final Template inputTemplate = Template.fromJSON(oldTemplate.toJSON()); - final String versionNumber = oldTemplate.getVersion().getVersionNumber(); + final Template previousTemplate = remoteConfig.getTemplate(); + final String versionNumber = previousTemplate.getVersion().getVersionNumber(); + final Template inputTemplate = new Template(previousTemplate.getETag()); final Map parameters = getParameters(); final Map parameterGroups = getParameterGroups(); final Version version = getVersion(); @@ -136,7 +135,7 @@ public void testGetTemplateAtVersion() throws FirebaseRemoteConfigException { // get template at version Template atVersionTemplate = remoteConfig.getTemplateAtVersion(versionNumber); - assertEquals(oldTemplate, atVersionTemplate); + assertEquals(previousTemplate, atVersionTemplate); assertEquals(versionNumber, atVersionTemplate.getVersion().getVersionNumber()); assertNotEquals(publishedTemplate, atVersionTemplate); } @@ -145,9 +144,8 @@ public void testGetTemplateAtVersion() throws FirebaseRemoteConfigException { public void testRollbackTemplate() throws FirebaseRemoteConfigException { // get template to fetch the active template with correct etag. // store the template version number to rollback. - final Template oldTemplate = remoteConfig.getTemplate(); - final Template inputTemplate = Template.fromJSON(oldTemplate.toJSON()); - final String versionNumber = oldTemplate.getVersion().getVersionNumber(); + final Template inputTemplate = remoteConfig.getTemplate(); + final String versionNumber = inputTemplate.getVersion().getVersionNumber(); final Map parameters = getParameters(); final Map parameterGroups = getParameterGroups(); final Version version = getVersion();