@Test
// merging of "client to update configs", whatever that means, is different than most other non-module merges
// in that the collections aren't merged if any "client to update configs" is specified in the child.
// So, the merged result is either the child collection or if null, the parent collection.
public void testResolve_ClientToUpdateConfigs() {

  List<String> clientsToUpdate = new ArrayList<String>();
  String client1 = "one";
  String client2 = "two";
  clientsToUpdate.add(client1);
  clientsToUpdate.add(client2);
  ComponentInfo info = new ComponentInfo();
  ComponentInfo parentInfo = new ComponentInfo();
  // parent has value set, child value is null
  parentInfo.setClientsToUpdateConfigs(clientsToUpdate);
  assertEquals(clientsToUpdate, resolveComponent(info, parentInfo).getModuleInfo().getClientsToUpdateConfigs());
  // child has value set, parent value is null
  info.setClientsToUpdateConfigs(clientsToUpdate);
  parentInfo.setClientsToUpdateConfigs(null);
  assertEquals(clientsToUpdate, resolveComponent(info, parentInfo).getModuleInfo().getClientsToUpdateConfigs());
  // value set in both parent and child; merge parent and child
  List<String> clientsToUpdate2 = new ArrayList<String>();
  String client3 = "two";
  String client4 = "four";
  clientsToUpdate2.add(client3);
  clientsToUpdate2.add(client4);
  info.setClientsToUpdateConfigs(clientsToUpdate2);
  parentInfo.setClientsToUpdateConfigs(clientsToUpdate);
  List<String> resolvedClientsToUpdate = resolveComponent(info, parentInfo).getModuleInfo().getClientsToUpdateConfigs();
  assertEquals(2, resolvedClientsToUpdate.size());
  assertTrue(resolvedClientsToUpdate.contains(client3));
  assertTrue(resolvedClientsToUpdate.contains(client4));
}