if (containers == null || containers.size() == 1 || containerCount == 1) { LOG.info("Balancing does not apply. Invoking grouper."); return group(tasks);
@Test(expected = UnsupportedOperationException.class) public void testBalancerResultImmutable() { Set<TaskModel> taskModels = generateTaskModels(3); Set<ContainerModel> prevContainers = new GroupByContainerCount(3).group(taskModels); Map<TaskName, String> prevTaskToContainerMapping = generateTaskContainerMapping(prevContainers); GrouperMetadataImpl grouperMetadata = new GrouperMetadataImpl(new HashMap<>(), new HashMap<>(), new HashMap<>(), prevTaskToContainerMapping); Set<ContainerModel> containers = new GroupByContainerCount(2).group(taskModels, grouperMetadata); containers.remove(containers.iterator().next()); }
@Test public void testBalancerEmptyTaskMapping() { Set<TaskModel> taskModels = generateTaskModels(3); GrouperMetadataImpl grouperMetadata = new GrouperMetadataImpl(new HashMap<>(), new HashMap<>(), new HashMap<>(), new HashMap<>()); Set<ContainerModel> groupContainers = new GroupByContainerCount(1).group(taskModels); Set<ContainerModel> balanceContainers = new GroupByContainerCount(1).group(taskModels, grouperMetadata); // Results should be the same as calling group() assertEquals(groupContainers, balanceContainers); }
@Test(expected = IllegalArgumentException.class) public void testGroupEmptyTasks() { new GroupByContainerCount(1).group(new HashSet<>()); }
@Test(expected = IllegalArgumentException.class) public void testBalancerNewContainerCountGreaterThanTasks() { Set<TaskModel> taskModels = generateTaskModels(3); Set<ContainerModel> prevContainers = new GroupByContainerCount(3).group(taskModels); Map<TaskName, String> prevTaskToContainerMapping = generateTaskContainerMapping(prevContainers); GrouperMetadataImpl grouperMetadata = new GrouperMetadataImpl(new HashMap<>(), new HashMap<>(), new HashMap<>(), prevTaskToContainerMapping); new GroupByContainerCount(5).group(taskModels, grouperMetadata); // Should throw }
@Test(expected = IllegalArgumentException.class) public void testBalancerEmptyTasks() { Set<TaskModel> taskModels = generateTaskModels(3); Set<ContainerModel> prevContainers = new GroupByContainerCount(3).group(taskModels); Map<TaskName, String> prevTaskToContainerMapping = generateTaskContainerMapping(prevContainers); GrouperMetadataImpl grouperMetadata = new GrouperMetadataImpl(new HashMap<>(), new HashMap<>(), new HashMap<>(), prevTaskToContainerMapping); new GroupByContainerCount(5).group(new HashSet<>(), grouperMetadata); }
@Test public void testGroupTaskCountIncrease() { int taskCount = 3; Set<TaskModel> taskModels = generateTaskModels(taskCount); Set<ContainerModel> prevContainers = new GroupByContainerCount(2).group(generateTaskModels(taskCount - 1)); // Here's the key step Map<TaskName, String> prevTaskToContainerMapping = generateTaskContainerMapping(prevContainers); GrouperMetadataImpl grouperMetadata = new GrouperMetadataImpl(new HashMap<>(), new HashMap<>(), new HashMap<>(), prevTaskToContainerMapping); Set<ContainerModel> groupContainers = new GroupByContainerCount(1).group(taskModels); Set<ContainerModel> balanceContainers = new GroupByContainerCount(1).group(taskModels, grouperMetadata); // Results should be the same as calling group() assertEquals(groupContainers, balanceContainers); }
@Test(expected = UnsupportedOperationException.class) public void testGrouperResultImmutable() { Set<TaskModel> taskModels = generateTaskModels(3); Set<ContainerModel> containers = new GroupByContainerCount(3).group(taskModels); containers.remove(containers.iterator().next()); }
@Test public void testBalancerNewContainerCountOne() { Set<TaskModel> taskModels = generateTaskModels(3); Set<ContainerModel> prevContainers = new GroupByContainerCount(3).group(taskModels); Map<TaskName, String> prevTaskToContainerMapping = generateTaskContainerMapping(prevContainers); GrouperMetadataImpl grouperMetadata = new GrouperMetadataImpl(new HashMap<>(), new HashMap<>(), new HashMap<>(), prevTaskToContainerMapping); Set<ContainerModel> groupContainers = new GroupByContainerCount(1).group(taskModels); Set<ContainerModel> balanceContainers = new GroupByContainerCount(1).group(taskModels, grouperMetadata); // Results should be the same as calling group() assertEquals(groupContainers, balanceContainers); }
@Test public void testBalancerOldContainerCountOne() { Set<TaskModel> taskModels = generateTaskModels(3); Set<ContainerModel> prevContainers = new GroupByContainerCount(1).group(taskModels); Map<TaskName, String> prevTaskToContainerMapping = generateTaskContainerMapping(prevContainers); GrouperMetadataImpl grouperMetadata = new GrouperMetadataImpl(new HashMap<>(), new HashMap<>(), new HashMap<>(), prevTaskToContainerMapping); Set<ContainerModel> groupContainers = new GroupByContainerCount(3).group(taskModels); Set<ContainerModel> balanceContainers = new GroupByContainerCount(3).group(taskModels, grouperMetadata); // Results should be the same as calling group() assertEquals(groupContainers, balanceContainers); }
@Test public void testGroupTaskCountDecrease() { int taskCount = 3; Set<TaskModel> taskModels = generateTaskModels(taskCount); Set<ContainerModel> prevContainers = new GroupByContainerCount(3).group(generateTaskModels(taskCount + 1)); // Here's the key step Map<TaskName, String> prevTaskToContainerMapping = generateTaskContainerMapping(prevContainers); GrouperMetadataImpl grouperMetadata = new GrouperMetadataImpl(new HashMap<>(), new HashMap<>(), new HashMap<>(), prevTaskToContainerMapping); Set<ContainerModel> groupContainers = new GroupByContainerCount(1).group(taskModels); Set<ContainerModel> balanceContainers = new GroupByContainerCount(1).group(taskModels, grouperMetadata); // Results should be the same as calling group() assertEquals(groupContainers, balanceContainers); }
@Test(expected = IllegalArgumentException.class) public void testGroupFewerTasksThanContainers() { Set<TaskModel> taskModels = new HashSet<>(); taskModels.add(getTaskModel(1)); new GroupByContainerCount(2).group(taskModels); }
@Test public void testBalancerWithNullLocalityManager() { Set<TaskModel> taskModels = generateTaskModels(3); Set<ContainerModel> groupContainers = new GroupByContainerCount(3).group(taskModels); Set<ContainerModel> balanceContainers = new GroupByContainerCount(3).balance(taskModels, null); // Results should be the same as calling group() assertEquals(groupContainers, balanceContainers); } }
@Test public void testGroupHappyPath() { Set<TaskModel> taskModels = generateTaskModels(5); Set<ContainerModel> containers = new GroupByContainerCount(2).group(taskModels); Map<String, ContainerModel> containersMap = new HashMap<>(); for (ContainerModel container : containers) { containersMap.put(container.getId(), container); } assertEquals(2, containers.size()); ContainerModel container0 = containersMap.get("0"); ContainerModel container1 = containersMap.get("1"); assertNotNull(container0); assertNotNull(container1); assertEquals("0", container0.getId()); assertEquals("1", container1.getId()); assertEquals(3, container0.getTasks().size()); assertEquals(2, container1.getTasks().size()); assertTrue(container0.getTasks().containsKey(getTaskName(0))); assertTrue(container0.getTasks().containsKey(getTaskName(2))); assertTrue(container0.getTasks().containsKey(getTaskName(4))); assertTrue(container1.getTasks().containsKey(getTaskName(1))); assertTrue(container1.getTasks().containsKey(getTaskName(3))); }
GrouperMetadataImpl grouperMetadata = new GrouperMetadataImpl(new HashMap<>(), new HashMap<>(), new HashMap<>(), prevTaskToContainerMapping); Set<ContainerModel> containers = new GroupByContainerCount(3).group(taskModels, grouperMetadata);
public void testBalancerAfterContainerSame() { Set<TaskModel> taskModels = generateTaskModels(9); Set<ContainerModel> prevContainers = new GroupByContainerCount(2).group(taskModels); Map<TaskName, String> prevTaskToContainerMapping = generateTaskContainerMapping(prevContainers); Set<ContainerModel> containers = new GroupByContainerCount(2).group(taskModels, grouperMetadata);
public void testBalancerAfterContainerDecrease() { Set<TaskModel> taskModels = generateTaskModels(9); Set<ContainerModel> prevContainers = new GroupByContainerCount(4).group(taskModels); Map<TaskName, String> prevTaskToContainerMapping = generateTaskContainerMapping(prevContainers); GrouperMetadataImpl grouperMetadata = new GrouperMetadataImpl(new HashMap<>(), new HashMap<>(), new HashMap<>(), prevTaskToContainerMapping); Set<ContainerModel> containers = new GroupByContainerCount(2).group(taskModels, grouperMetadata);
Set<TaskModel> taskModels = generateTaskModels(21); Set<ContainerModel> containers = new GroupByContainerCount(2).group(taskModels);