@Test public void updateShouldInsertIfNotExist() { doCallRealMethod().when(service).updateCacheConfig(any(), any()); doCallRealMethod().when(service).getCacheConfig(any()); Region region = mock(Region.class); doReturn(region).when(service).getConfigurationRegion(); service.updateCacheConfig("non-existing-group", cc -> cc); verify(region).put(eq("non-existing-group"), any()); }
@Test public void gatewayReceiverCanBeCreatedButIsNotPersistedWithoutConfigurationService() { doReturn(mock(Set.class)).when(command).getMembers(any(), any()); doReturn(null).when(command).getConfigurationPersistenceService(); result1 = new CliFunctionResult("member", CliFunctionResult.StatusState.OK, "result1"); functionResults.add(result1); gfsh.executeAndAssertThat(command, "create gateway-receiver").statusIsSuccess() .containsOutput( "Cluster configuration service is not running. Configuration change is not persisted"); verify(ccService, never()).addXmlEntity(any(), any()); verify(ccService, never()).updateCacheConfig(any(), any()); }
@Test public void configurationIsNotPersistedWhenCreationOnOnlyMemberFails() { doReturn(mock(Set.class)).when(command).getMembers(any(), any()); doReturn(ccService).when(command).getConfigurationPersistenceService(); result1 = new CliFunctionResult("member", CliFunctionResult.StatusState.ERROR, "result1"); functionResults.add(result1); // does not delete because command failed, so hasNoFailToPersistError should still be true gfsh.executeAndAssertThat(command, "create gateway-receiver").statusIsError(); verify(ccService, never()).updateCacheConfig(any(), any()); }
@Test public void gatewayReceiverIsCreatedButNotPersistedWithMemberOption() { doReturn(mock(Set.class)).when(command).getMembers(any(), any()); doReturn(ccService).when(command).getConfigurationPersistenceService(); result1 = new CliFunctionResult("member", CliFunctionResult.StatusState.OK, "result1"); functionResults.add(result1); gfsh.executeAndAssertThat(command, "create gateway-receiver --member=xyz").statusIsSuccess() .containsOutput( "Configuration change is not persisted because the command is executed on specific member"); verify(ccService, never()).addXmlEntity(any(), any()); verify(ccService, never()).updateCacheConfig(any(), any()); }
@Test public void configurationIsPersistedWhenCreationOnAnyMemberFails() { doReturn(mock(Set.class)).when(command).getMembers(any(), any()); doReturn(ccService).when(command).getConfigurationPersistenceService(); result1 = new CliFunctionResult("member", CliFunctionResult.StatusState.ERROR, "result1"); functionResults.add(result1); CliFunctionResult result2 = new CliFunctionResult("member", CliFunctionResult.StatusState.OK, "result2"); functionResults.add(result2); // does not delete because command failed, so hasNoFailToPersistError should still be true gfsh.executeAndAssertThat(command, "create gateway-receiver").statusIsSuccess(); verify(ccService, times(1)).updateCacheConfig(any(), any()); } }
@Test public void whenNoMembersFoundAndClusterConfigRunningThenUpdateClusterConfig() { List<JndiBindingsType.JndiBinding> bindings = new ArrayList<>(); JndiBindingsType.JndiBinding jndiBinding = new JndiBindingsType.JndiBinding(); jndiBinding.setJndiName("name"); bindings.add(jndiBinding); doReturn(bindings).when(cacheConfig).getJndiBindings(); gfsh.executeAndAssertThat(command, COMMAND + " --name=name").statusIsSuccess() .containsOutput("No members found.") .containsOutput("Changes to configuration for group 'cluster' are persisted."); verify(ccService).updateCacheConfig(any(), any()); verify(command).updateConfigForGroup(eq("cluster"), eq(cacheConfig), any()); }
@Test public void command_succeeded_but_no_cluster_config_service() { doReturn(null).when(command).getConfigurationPersistenceService(); doReturn(Collections.emptySet()).when(command).getMembers(any(), any()); List<CliFunctionResult> functionResults = new ArrayList<>(); functionResults.add(new CliFunctionResult("member1", StatusState.OK, "SUCCESS")); doReturn(functionResults).when(command).executeAndGetFunctionResult(isA(Function.class), isA(Object.class), isA(Set.class)); gfsh.executeAndAssertThat(command, MINIUM_COMMAND).statusIsSuccess() .containsOutput(CommandExecutor.SERVICE_NOT_RUNNING_CHANGE_NOT_PERSISTED); verify(service, never()).updateCacheConfig(any(), any()); } }
@Test public void executionShouldCorrectlyConfigureReadSerializedWhenFlagIsSetAsTrue() { // Custom Configuration as True gfshParserRule.executeAndAssertThat(command, BASE_COMMAND_STRING + "--read-serialized=true") .statusIsSuccess().containsOutput("persistent = false") .containsOutput("read-serialized = true").containsOutput("ignore-unread-fields = false"); verify(clusterConfigurationService, times(1)).updateCacheConfig(any(), any()); verify(command, times(0)).createReflectionBasedAutoSerializer(anyBoolean(), any()); }
@Test public void executionShouldCorrectlyConfigureReadSerializedWhenFlagIsSetAsFalse() { // Custom Configuration as False gfshParserRule.executeAndAssertThat(command, BASE_COMMAND_STRING + "--read-serialized=false") .statusIsSuccess().containsOutput("persistent = false") .containsOutput("read-serialized = false").containsOutput("ignore-unread-fields = false"); verify(clusterConfigurationService, times(1)).updateCacheConfig(any(), any()); verify(command, times(0)).createReflectionBasedAutoSerializer(anyBoolean(), any()); }
@Test public void executionShouldCorrectlyConfigureIgnoreUnreadFieldsWhenFlagIsSetAsTrue() { // Custom Configuration as True gfshParserRule .executeAndAssertThat(command, BASE_COMMAND_STRING + "--ignore-unread-fields=true") .statusIsSuccess().containsOutput("persistent = false") .containsOutput("read-serialized = false").containsOutput("ignore-unread-fields = true"); verify(clusterConfigurationService, times(1)).updateCacheConfig(any(), any()); verify(command, times(0)).createReflectionBasedAutoSerializer(anyBoolean(), any()); }
@Test public void executionShouldCorrectlyConfigureIgnoreUnreadFieldsWhenFlagIsSetAsFalse() { // Custom Configuration as False gfshParserRule .executeAndAssertThat(command, BASE_COMMAND_STRING + "--ignore-unread-fields=false") .statusIsSuccess().containsOutput("persistent = false") .containsOutput("read-serialized = false").containsOutput("ignore-unread-fields = false"); verify(clusterConfigurationService, times(1)).updateCacheConfig(any(), any()); verify(command, times(0)).createReflectionBasedAutoSerializer(anyBoolean(), any()); }
@Test public void executionShouldCorrectlyConfigurePersistenceWhenCustomDiskStoreIsUsed() { // Custom Disk Store gfshParserRule.executeAndAssertThat(command, BASE_COMMAND_STRING + "--disk-store=myDiskStore") .statusIsSuccess().containsOutput("persistent = true") .containsOutput("disk-store = myDiskStore").containsOutput("read-serialized = false") .containsOutput("ignore-unread-fields = false"); verify(clusterConfigurationService, times(1)).updateCacheConfig(any(), any()); verify(command, times(0)).createReflectionBasedAutoSerializer(anyBoolean(), any()); }
@Test public void executionShouldCorrectlyConfigurePersistenceWhenDefaultDiskStoreIsUsed() { // Default Disk Store gfshParserRule.executeAndAssertThat(command, BASE_COMMAND_STRING + "--disk-store") .statusIsSuccess().containsOutput("persistent = true") .containsOutput("disk-store = DEFAULT").containsOutput("read-serialized = false") .containsOutput("ignore-unread-fields = false"); verify(clusterConfigurationService, times(1)).updateCacheConfig(any(), any()); verify(command, times(0)).createReflectionBasedAutoSerializer(anyBoolean(), any()); }
@Test public void whenNoMembersFoundAndClusterConfigRunningWithPooledTypeThenUpdateClusterConfig() { List<JndiBindingsType.JndiBinding> bindings = new ArrayList<>(); JndiBindingsType.JndiBinding jndiBinding = new JndiBindingsType.JndiBinding(); jndiBinding.setJndiName("name"); jndiBinding.setType(CreateJndiBindingCommand.DATASOURCE_TYPE.POOLED.getType()); bindings.add(jndiBinding); doReturn(bindings).when(cacheConfig).getJndiBindings(); gfsh.executeAndAssertThat(command, COMMAND + " --name=name").statusIsSuccess() .containsOutput("No members found, data source removed from cluster configuration.") .containsOutput("Changes to configuration for group 'cluster' are persisted."); verify(ccService).updateCacheConfig(any(), any()); verify(command).updateConfigForGroup(eq("cluster"), eq(cacheConfig), isNotNull()); }
@Test public void whenNoMembersFoundAndClusterConfigRunningThenUpdateClusterConfig() { List<JndiBindingsType.JndiBinding> bindings = new ArrayList<>(); JndiBindingsType.JndiBinding jndiBinding = new JndiBindingsType.JndiBinding(); jndiBinding.setJndiName("name"); jndiBinding.setType(CreateJndiBindingCommand.DATASOURCE_TYPE.SIMPLE.getType()); bindings.add(jndiBinding); doReturn(bindings).when(cacheConfig).getJndiBindings(); gfsh.executeAndAssertThat(command, COMMAND + " --name=name").statusIsSuccess() .containsOutput("No members found, data source removed from cluster configuration.") .containsOutput("Changes to configuration for group 'cluster' are persisted."); verify(ccService).updateCacheConfig(any(), any()); verify(command).updateConfigForGroup(eq("cluster"), eq(cacheConfig), isNotNull()); }
@Test public void whenNoMembersFoundAndClusterConfigRunningAndRegionUsingOtherDataSourceThenUpdateClusterConfig() { List<JndiBindingsType.JndiBinding> bindings = new ArrayList<>(); JndiBindingsType.JndiBinding jndiBinding = new JndiBindingsType.JndiBinding(); jndiBinding.setJndiName("name"); jndiBinding.setType(CreateJndiBindingCommand.DATASOURCE_TYPE.SIMPLE.getType()); bindings.add(jndiBinding); doReturn(bindings).when(cacheConfig).getJndiBindings(); setupRegionConfigToUseDataSource("otherDataSource"); gfsh.executeAndAssertThat(command, COMMAND + " --name=name").statusIsSuccess() .containsOutput("No members found, data source removed from cluster configuration.") .containsOutput("Changes to configuration for group 'cluster' are persisted."); verify(ccService).updateCacheConfig(any(), any()); verify(command).updateConfigForGroup(eq("cluster"), eq(cacheConfig), isNotNull()); }
@Test public void executionShouldCorrectlyConfigurePortableAutoSerializableClassesWhenUsingCustomPattern() { String[] patterns = new String[] {"com.company.DomainObject.*#identity=id"}; // Custom Settings gfshParserRule .executeAndAssertThat(command, BASE_COMMAND_STRING + "--portable-auto-serializable-classes=" + patterns[0]) .statusIsSuccess().containsOutput("persistent = false") .containsOutput("read-serialized = false").containsOutput("ignore-unread-fields = false") .containsOutput("Portable Classes = [com.company.DomainObject.*#identity=id]") .containsOutput("PDX Serializer = org.apache.geode.pdx.ReflectionBasedAutoSerializer"); verify(clusterConfigurationService, times(1)).updateCacheConfig(any(), any()); verify(command, times(1)).createReflectionBasedAutoSerializer(true, patterns); }
@Test public void executionShouldCorrectlyConfigureAutoSerializableClassesWhenUsingCustomPattern() { String[] patterns = new String[] {"com.company.DomainObject.*#identity=id"}; // Custom Settings gfshParserRule .executeAndAssertThat(command, BASE_COMMAND_STRING + "--auto-serializable-classes=" + patterns[0]) .statusIsSuccess().containsOutput("persistent = false") .containsOutput("read-serialized = false").containsOutput("ignore-unread-fields = false") .containsOutput("Non Portable Classes = [com.company.DomainObject.*#identity=id]") .containsOutput("PDX Serializer = org.apache.geode.pdx.ReflectionBasedAutoSerializer"); verify(clusterConfigurationService, times(1)).updateCacheConfig(any(), any()); verify(command, times(1)).createReflectionBasedAutoSerializer(false, patterns); } }
@Test public void updateGatewayReceiverConfig() { service.updateCacheConfig("cluster", cacheConfig -> { CacheConfig.GatewayReceiver receiver = new CacheConfig.GatewayReceiver(); cacheConfig.setGatewayReceiver(receiver); return cacheConfig; }); System.out.println(configuration.getCacheXmlContent()); assertThat(configuration.getCacheXmlContent()).contains("<gateway-receiver/>"); }
@Test public void updateRegionConfig() { service.updateCacheConfig("cluster", cacheConfig -> { RegionConfig regionConfig = new RegionConfig(); regionConfig.setName("regionA"); regionConfig.setType("REPLICATE"); cacheConfig.getRegions().add(regionConfig); return cacheConfig; }); System.out.println(configuration.getCacheXmlContent()); assertThat(configuration.getCacheXmlContent()) .contains("<region name=\"regionA\" refid=\"REPLICATE\">"); }