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); } }
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 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 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 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 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 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 asyncEventQueue() { regionAttributes.setAsyncEventQueueIds(null); assertThat(regionAttributes.getAsyncEventQueueIdsAsSet()).isNull(); regionAttributes.setAsyncEventQueueIds(""); assertThat(regionAttributes.getAsyncEventQueueIdsAsSet()).isNotNull().isEmpty(); regionAttributes.setAsyncEventQueueIds("abc,def"); assertThat(regionAttributes.getAsyncEventQueueIdsAsSet()).isNotNull().hasSize(2); } }
@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 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(); }
regionAttributesType.setAsyncEventQueueIds(StringUtils.join(asyncEventQueueIds, ","));
existingAttributes.setAsyncEventQueueIds(deltaAttributes.getAsyncEventQueueIds());