private void addAsyncEventQueueId(String queueName, RegionAttributesType attributes) { String asyncEventQueueList = attributes.getAsyncEventQueueIds(); if (asyncEventQueueList == null) { asyncEventQueueList = ""; } if (!asyncEventQueueList.contains(queueName)) { if (asyncEventQueueList.length() > 0) { asyncEventQueueList += ','; } asyncEventQueueList += queueName; attributes.setAsyncEventQueueIds(asyncEventQueueList); } }
@Test public void alterWithNoAsyncEventQueueIds() { RegionConfig deltaConfig = getDeltaRegionConfig("alter region --name=regionA --async-event-queue-id=''"); assertThat(deltaConfig.getRegionAttributes().getAsyncEventQueueIds()).isEqualTo(""); assertThat(deltaConfig.getRegionAttributes().getGatewaySenderIds()).isNull(); RegionAttributesType existingAttributes = new RegionAttributesType(); existingRegionConfig.setRegionAttributes(existingAttributes); existingAttributes.setAsyncEventQueueIds("xyz"); existingAttributes.setGatewaySenderIds("xyz"); command.updateConfigForGroup("cluster", cacheConfig, deltaConfig); assertThat(existingAttributes.getGatewaySenderIds()).isEqualTo("xyz"); assertThat(existingAttributes.getAsyncEventQueueIds()).isEqualTo(""); assertThat(existingAttributes.getAsyncEventQueueIdsAsSet()).isNotNull().isEmpty(); }
private boolean removeJdbcAsyncEventQueueId(RegionAttributesType attributes, String regionName) { String queueName = CreateMappingCommand.createAsyncEventQueueName(regionName); String queueIds = attributes.getAsyncEventQueueIds(); if (queueIds == null) { return false; } List<String> queues = new ArrayList<>(Arrays.asList(queueIds.split(","))); if (queues.contains(queueName)) { queues.remove(queueName); String newQueueIds = String.join(",", queues); attributes.setAsyncEventQueueIds(newQueueIds); return true; } return false; }
@Test public void generatesWithAsyncEventQueueIds() { asyncEventQueueIds = Arrays.stream(new String[] {"id-1", "id-2"}).collect(Collectors.toSet()); generate(); assertThat(config.getRegionAttributes().getAsyncEventQueueIds()) .contains("id-1"); assertThat(config.getRegionAttributes().getAsyncEventQueueIds()) .contains("id-2"); }
@Test public void updateClusterConfigWithSynchronousAndOneMatchingRegionAndExistingQueuesDoesNotAddsAsyncEventQueueIdToRegion() { arguments[1] = true; List<RegionConfig> list = new ArrayList<>(); List<CacheElement> listCacheElements = new ArrayList<>(); when(matchingRegion.getCustomRegionElements()).thenReturn(listCacheElements); list.add(matchingRegion); when(cacheConfig.getRegions()).thenReturn(list); List<CacheConfig.AsyncEventQueue> queueList = new ArrayList<>(); when(cacheConfig.getAsyncEventQueues()).thenReturn(queueList); when(matchingRegionAttributes.getAsyncEventQueueIds()).thenReturn("q1,q2"); createRegionMappingCommand.updateConfigForGroup(null, cacheConfig, arguments); verify(matchingRegionAttributes, never()).setAsyncEventQueueIds(any()); }
@Test public void updateClusterConfigWithOneMatchingRegionAndJdbcAsyncQueueIdRemovesTheId() { List<RegionConfig> list = new ArrayList<>(); List<CacheElement> listCacheElements = new ArrayList<>(); RegionMapping matchingMapping = mock(RegionMapping.class); listCacheElements.add(matchingMapping); when(matchingRegion.getCustomRegionElements()).thenReturn(listCacheElements); list.add(matchingRegion); when(cacheConfig.getRegions()).thenReturn(list); String queueName = CreateMappingCommand.createAsyncEventQueueName(regionName); when(matchingRegionAttributes.getAsyncEventQueueIds()).thenReturn(queueName); boolean modified = destroyRegionMappingCommand.updateConfigForGroup(null, cacheConfig, regionName); verify(matchingRegionAttributes, times(1)).setAsyncEventQueueIds(""); assertThat(modified).isTrue(); }
@Test public void updateClusterConfigWithOneMatchingRegionAndNullQueuesAddsAsyncEventQueueIdToRegion() { List<RegionConfig> list = new ArrayList<>(); List<CacheElement> listCacheElements = new ArrayList<>(); when(matchingRegion.getCustomRegionElements()).thenReturn(listCacheElements); list.add(matchingRegion); when(cacheConfig.getRegions()).thenReturn(list); List<CacheConfig.AsyncEventQueue> queueList = new ArrayList<>(); when(cacheConfig.getAsyncEventQueues()).thenReturn(queueList); when(matchingRegionAttributes.getAsyncEventQueueIds()).thenReturn(null); createRegionMappingCommand.updateConfigForGroup(null, cacheConfig, arguments); ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class); verify(matchingRegionAttributes).setAsyncEventQueueIds(argument.capture()); String queueName = CreateMappingCommand.createAsyncEventQueueName(regionName); assertThat(argument.getValue()).isEqualTo(queueName); }
@Test public void updateClusterConfigWithOneMatchingRegionAndEmptyQueuesAddsAsyncEventQueueIdToRegion() { List<RegionConfig> list = new ArrayList<>(); List<CacheElement> listCacheElements = new ArrayList<>(); when(matchingRegion.getCustomRegionElements()).thenReturn(listCacheElements); list.add(matchingRegion); when(cacheConfig.getRegions()).thenReturn(list); List<CacheConfig.AsyncEventQueue> queueList = new ArrayList<>(); when(cacheConfig.getAsyncEventQueues()).thenReturn(queueList); when(matchingRegionAttributes.getAsyncEventQueueIds()).thenReturn(""); createRegionMappingCommand.updateConfigForGroup(null, cacheConfig, arguments); ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class); verify(matchingRegionAttributes).setAsyncEventQueueIds(argument.capture()); String queueName = CreateMappingCommand.createAsyncEventQueueName(regionName); assertThat(argument.getValue()).isEqualTo(queueName); }
@Test public void updateClusterConfigWithOneMatchingRegionAndExistingQueuesAddsAsyncEventQueueIdToRegion() { List<RegionConfig> list = new ArrayList<>(); List<CacheElement> listCacheElements = new ArrayList<>(); when(matchingRegion.getCustomRegionElements()).thenReturn(listCacheElements); list.add(matchingRegion); when(cacheConfig.getRegions()).thenReturn(list); List<CacheConfig.AsyncEventQueue> queueList = new ArrayList<>(); when(cacheConfig.getAsyncEventQueues()).thenReturn(queueList); when(matchingRegionAttributes.getAsyncEventQueueIds()).thenReturn("q1,q2"); createRegionMappingCommand.updateConfigForGroup(null, cacheConfig, arguments); ArgumentCaptor<String> argument = ArgumentCaptor.forClass(String.class); verify(matchingRegionAttributes).setAsyncEventQueueIds(argument.capture()); String queueName = CreateMappingCommand.createAsyncEventQueueName(regionName); assertThat(argument.getValue()).isEqualTo("q1,q2," + queueName); }
@Test public void updateClusterConfigWithOneMatchingRegionAndQueuesContainingDuplicateDoesNotModifyAsyncEventQueueIdOnRegion() { List<RegionConfig> list = new ArrayList<>(); List<CacheElement> listCacheElements = new ArrayList<>(); when(matchingRegion.getCustomRegionElements()).thenReturn(listCacheElements); list.add(matchingRegion); when(cacheConfig.getRegions()).thenReturn(list); List<CacheConfig.AsyncEventQueue> queueList = new ArrayList<>(); when(cacheConfig.getAsyncEventQueues()).thenReturn(queueList); String queueName = CreateMappingCommand.createAsyncEventQueueName(regionName); String existingQueues = "q1," + queueName + ",q2"; when(matchingRegionAttributes.getAsyncEventQueueIds()).thenReturn(existingQueues); createRegionMappingCommand.updateConfigForGroup(null, cacheConfig, arguments); verify(matchingRegionAttributes, never()).setAsyncEventQueueIds(any()); }
@Test public void updateClusterConfigWithOneMatchingRegionAndJdbcAsyncQueueIdsRemovesTheId() { List<RegionConfig> list = new ArrayList<>(); List<CacheElement> listCacheElements = new ArrayList<>(); RegionMapping matchingMapping = mock(RegionMapping.class); listCacheElements.add(matchingMapping); when(matchingRegion.getCustomRegionElements()).thenReturn(listCacheElements); list.add(matchingRegion); when(cacheConfig.getRegions()).thenReturn(list); String queueName = CreateMappingCommand.createAsyncEventQueueName(regionName); when(matchingRegionAttributes.getAsyncEventQueueIds()) .thenReturn(queueName + "1," + queueName + "," + queueName + "2"); boolean modified = destroyRegionMappingCommand.updateConfigForGroup(null, cacheConfig, regionName); verify(matchingRegionAttributes, times(1)) .setAsyncEventQueueIds(queueName + "1," + queueName + "2"); assertThat(modified).isTrue(); } }
@Test public void alterWithAsyncEventQueueIds() { RegionConfig deltaConfig = getDeltaRegionConfig("alter region --name=regionA --async-event-queue-id=abc,def"); assertThat(deltaConfig.getRegionAttributes().getAsyncEventQueueIds()).isEqualTo("abc,def"); assertThat(deltaConfig.getRegionAttributes().getGatewaySenderIds()).isNull(); RegionAttributesType existingAttributes = new RegionAttributesType(); existingRegionConfig.setRegionAttributes(existingAttributes); existingAttributes.setAsyncEventQueueIds("xyz"); existingAttributes.setGatewaySenderIds("xyz"); command.updateConfigForGroup("cluster", cacheConfig, deltaConfig); assertThat(existingAttributes.getGatewaySenderIds()).isEqualTo("xyz"); assertThat(existingAttributes.getAsyncEventQueueIds()).isEqualTo("abc,def"); }
@Test public void alterWithCloningEnabled() { RegionAttributesType regionAttributes = getDeltaRegionConfig("alter region --name=regionA --enable-cloning=false") .getRegionAttributes(); assertThat(regionAttributes.isCloningEnabled()).isFalse(); assertThat(regionAttributes.getAsyncEventQueueIds()).isNull(); assertThat(regionAttributes.getDataPolicy()).isNull(); assertThat(regionAttributes.getGatewaySenderIds()).isNull(); assertThat(regionAttributes.getCacheLoader()).isNull(); assertThat(regionAttributes.getCacheWriter()).isNull(); assertThat(regionAttributes.getCacheListeners()).isNotNull().isEmpty(); assertThat(regionAttributes.getEvictionAttributes()).isNull(); assertThat(regionAttributes.getEntryIdleTime()).isNull(); assertThat(regionAttributes.getEntryTimeToLive()).isNull(); assertThat(regionAttributes.getRegionIdleTime()).isNull(); assertThat(regionAttributes.getRegionTimeToLive()).isNull(); }
if (regionAttributes.getAsyncEventQueueIds() != null) { Arrays.stream(regionAttributes.getAsyncEventQueueIds().split(",")) .forEach(gsi -> factory.addAsyncEventQueueId(gsi));
if (deltaAttributes.getAsyncEventQueueIds() != null) { existingAttributes.setAsyncEventQueueIds(deltaAttributes.getAsyncEventQueueIds());