@Test public void testResolve_RequiredServices() throws Exception { List<String> requiredServices = new ArrayList<String>(); requiredServices.add("foo"); requiredServices.add("bar"); // specified in child only ServiceInfo info = new ServiceInfo(); ServiceInfo parentInfo = new ServiceInfo(); info.setRequiredServices(requiredServices); ServiceModule service = resolveService(info, parentInfo); assertEquals(requiredServices, service.getModuleInfo().getRequiredServices()); // specified in parent only info.setRequiredServices(null); parentInfo.setRequiredServices(requiredServices); service = resolveService(info, parentInfo); assertEquals(requiredServices, service.getModuleInfo().getRequiredServices()); // specified in both info.setRequiredServices(requiredServices); parentInfo.setRequiredServices(Collections.singletonList("other")); service = resolveService(info, parentInfo); assertEquals(requiredServices, service.getModuleInfo().getRequiredServices()); // not set in either info.setRequiredServices(null); parentInfo.setRequiredServices(null); service = resolveService(info, parentInfo); assertTrue(service.getModuleInfo().getRequiredServices().isEmpty()); }
@Override public void resolve( ServiceModule parentModule, Map<String, StackModule> allStacks, Map<String, ServiceModule> commonServices) throws AmbariException { if (!serviceInfo.isValid() || !parentModule.isValid()) return; ServiceInfo parent = parentModule.getModuleInfo(); if (serviceInfo.getComment() == null) { serviceInfo.setComment(parent.getComment()); } if (serviceInfo.getDisplayName() == null) { serviceInfo.setDisplayName(parent.getDisplayName()); } if (serviceInfo.getVersion() == null) { serviceInfo.setVersion(parent.getVersion()); } if (serviceInfo.getRequiredServices() == null || serviceInfo.getRequiredServices().size() == 0) { serviceInfo.setRequiredServices( parent.getRequiredServices() != null ? parent.getRequiredServices() : Collections.<String>emptyList()); } if (serviceInfo.isRestartRequiredAfterChange() == null) { serviceInfo.setRestartRequiredAfterChange(parent.isRestartRequiredAfterChange()); } if (serviceInfo.isRestartRequiredAfterRackChange() == null) { serviceInfo.setRestartRequiredAfterRackChange(parent.isRestartRequiredAfterRackChange()); } if (serviceInfo.isMonitoringService() == null) { serviceInfo.setMonitoringService(parent.isMonitoringService()); } if (serviceInfo.getOsSpecifics().isEmpty()) { serviceInfo.setOsSpecifics(parent.getOsSpecifics()); } if (serviceInfo.getCommandScript() == null) { serviceInfo.setCommandScript(parent.getCommandScript()); } if (serviceInfo.getServicePackageFolder() == null) { serviceInfo.setServicePackageFolder(parent.getServicePackageFolder()); } if (serviceInfo.getMetricsFile() == null) { serviceInfo.setMetricsFile(parent.getMetricsFile()); } if (serviceInfo.getAlertsFile() == null) { serviceInfo.setAlertsFile(parent.getAlertsFile()); } if (serviceInfo.getKerberosDescriptorFile() == null) { serviceInfo.setKerberosDescriptorFile(parent.getKerberosDescriptorFile()); } if (serviceInfo.getThemesMap().isEmpty()) { serviceInfo.setThemesMap(parent.getThemesMap()); } if (serviceInfo.getWidgetsDescriptorFile() == null) { serviceInfo.setWidgetsDescriptorFile(parent.getWidgetsDescriptorFile()); } mergeCustomCommands(parent.getCustomCommands(), serviceInfo.getCustomCommands()); mergeConfigDependencies(parent); mergeComponents(parentModule, allStacks, commonServices); mergeConfigurations(parentModule, allStacks, commonServices); mergeThemes(parentModule, allStacks, commonServices); mergeExcludedConfigTypes(parent); mergeServiceProperties(parent.getServicePropertyList()); }