blob: f0bddf8de061a834a16862c6eea5e78579de563c [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ambari.server.controller.internal;
import static org.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.createNiceMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertFalse;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.configuration.Configuration;
import org.apache.ambari.server.controller.AmbariManagementController;
import org.apache.ambari.server.controller.RequestStatusResponse;
import org.apache.ambari.server.controller.ServiceComponentHostRequest;
import org.apache.ambari.server.controller.ServiceComponentHostResponse;
import org.apache.ambari.server.controller.spi.Predicate;
import org.apache.ambari.server.controller.spi.Request;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.spi.ResourceProvider;
import org.apache.ambari.server.controller.spi.SystemException;
import org.apache.ambari.server.controller.utilities.PredicateBuilder;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.stack.StackManager;
import org.apache.ambari.server.state.ClientConfigFileDefinition;
import org.apache.ambari.server.state.Cluster;
import org.apache.ambari.server.state.Clusters;
import org.apache.ambari.server.state.CommandScriptDefinition;
import org.apache.ambari.server.state.ComponentInfo;
import org.apache.ambari.server.state.Config;
import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.DesiredConfig;
import org.apache.ambari.server.state.Host;
import org.apache.ambari.server.state.PropertyInfo;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.state.ServiceComponentHost;
import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.ServiceOsSpecific;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.utils.StageUtils;
import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
/**
* TaskResourceProvider tests.
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest( {ClientConfigResourceProvider.class, StageUtils.class} )
public class ClientConfigResourceProviderTest {
@Test
public void testCreateResources() throws Exception {
Resource.Type type = Resource.Type.ClientConfig;
AmbariManagementController managementController = createMock(AmbariManagementController.class);
RequestStatusResponse response = createNiceMock(RequestStatusResponse.class);
// replay
replay(managementController, response);
ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
type,
PropertyHelper.getPropertyIds(type),
PropertyHelper.getKeyPropertyIds(type),
managementController);
// add the property map to a set for the request. add more maps for multiple creates
Set<Map<String, Object>> propertySet = new LinkedHashSet<Map<String, Object>>();
Map<String, Object> properties = new LinkedHashMap<String, Object>();
// add properties to the request map
properties.put(ClientConfigResourceProvider.COMPONENT_CLUSTER_NAME_PROPERTY_ID, "c1");
properties.put(ClientConfigResourceProvider.COMPONENT_COMPONENT_NAME_PROPERTY_ID, "HDFS_CLIENT");
properties.put(ClientConfigResourceProvider.COMPONENT_SERVICE_NAME_PROPERTY_ID, "HDFS");
propertySet.add(properties);
// create the request
Request request = PropertyHelper.getCreateRequest(propertySet, null);
try {
provider.createResources(request);
Assert.fail("Expected an UnsupportedOperationException");
} catch (SystemException e) {
// expected
}
// verify
verify(managementController, response);
}
@Test
public void testUpdateResources() throws Exception {
Resource.Type type = Resource.Type.ClientConfig;
AmbariManagementController managementController = createMock(AmbariManagementController.class);
RequestStatusResponse response = createNiceMock(RequestStatusResponse.class);
// replay
replay(managementController, response);
ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
type,
PropertyHelper.getPropertyIds(type),
PropertyHelper.getKeyPropertyIds(type),
managementController);
// add the property map to a set for the request.
Map<String, Object> properties = new LinkedHashMap<String, Object>();
// create the request
Request request = PropertyHelper.getUpdateRequest(properties, null);
Predicate predicate = new PredicateBuilder().property(
ClientConfigResourceProvider.COMPONENT_CLUSTER_NAME_PROPERTY_ID).equals("c1").toPredicate();
try {
provider.updateResources(request, predicate);
Assert.fail("Expected an UnsupportedOperationException");
} catch (SystemException e) {
// expected
}
// verify
verify(managementController, response);
}
@Test
public void testGetResources() throws Exception {
Resource.Type type = Resource.Type.ClientConfig;
AmbariManagementController managementController = createNiceMock(AmbariManagementController.class);
Clusters clusters = createNiceMock(Clusters.class);
Cluster cluster = createNiceMock(Cluster.class);
AmbariMetaInfo ambariMetaInfo = createNiceMock(AmbariMetaInfo.class);
StackId stackId = createNiceMock(StackId.class);
ComponentInfo componentInfo = createNiceMock(ComponentInfo.class);
ServiceInfo serviceInfo = createNiceMock(ServiceInfo.class);
CommandScriptDefinition commandScriptDefinition = createNiceMock(CommandScriptDefinition.class);
Config clusterConfig = createNiceMock(Config.class);
DesiredConfig desiredConfig = createNiceMock(DesiredConfig.class);
Host host = createNiceMock(Host.class);
Service service = createNiceMock(Service.class);
ServiceComponent serviceComponent = createNiceMock(ServiceComponent.class);
ServiceComponentHost serviceComponentHost = createNiceMock(ServiceComponentHost.class);
ServiceOsSpecific serviceOsSpecific = createNiceMock(ServiceOsSpecific.class);
ConfigHelper configHelper = createNiceMock(ConfigHelper.class);
Configuration configuration = PowerMock.createStrictMockAndExpectNew(Configuration.class);
Map<String, String> configMap = createNiceMock(Map.class);
File mockFile = PowerMock.createNiceMock(File.class);
Runtime runtime = createMock(Runtime.class);
Process process = createNiceMock(Process.class);
Map<String, DesiredConfig> desiredConfigMap = new HashMap<String, DesiredConfig>();
desiredConfigMap.put("hive-site", desiredConfig);
Map<String, Map<String, String>> allConfigTags = new HashMap<String, Map<String, String>>();
Map<String, Map<String, String>> properties = new HashMap<String, Map<String, String>>();
Map<String, Map<String, String>> configTags = new HashMap<String,
Map<String, String>>();
Map<String, Map<String, Map<String, String>>> attributes = new HashMap<String,
Map<String, Map<String, String>>>();
ClientConfigFileDefinition clientConfigFileDefinition = new ClientConfigFileDefinition();
clientConfigFileDefinition.setDictionaryName("pig-env");
clientConfigFileDefinition.setFileName("pig-env.sh");
clientConfigFileDefinition.setType("env");
List <ClientConfigFileDefinition> clientConfigFileDefinitionList = new LinkedList<ClientConfigFileDefinition>();
clientConfigFileDefinitionList.add(clientConfigFileDefinition);
ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
type,
PropertyHelper.getPropertyIds(type),
PropertyHelper.getKeyPropertyIds(type),
managementController);
// create the request
Request request = PropertyHelper.getReadRequest(ClientConfigResourceProvider.COMPONENT_CLUSTER_NAME_PROPERTY_ID, "c1",
ClientConfigResourceProvider.COMPONENT_COMPONENT_NAME_PROPERTY_ID,
ClientConfigResourceProvider.COMPONENT_SERVICE_NAME_PROPERTY_ID);
Predicate predicate = new PredicateBuilder().property(ClientConfigResourceProvider.COMPONENT_CLUSTER_NAME_PROPERTY_ID).equals("c1").
toPredicate();
String clusterName = "C1";
String serviceName = "PIG";
String componentName = "PIG";
String displayName = "Pig Client";
String hostName = "Host100";
String desiredState = "INSTALLED";
String stackName = "S1";
String stackVersion = "V1";
String stackRoot="/tmp/stacks/S1/V1";
String packageFolder="PIG/package";
if (System.getProperty("os.name").contains("Windows")) {
stackRoot = "C:\\tmp\\stacks\\S1\\V1";
packageFolder = "PIG\\package";
}
HashMap<String, Host> hosts = new HashMap<String, Host>();
hosts.put(hostName, host);
HashMap<String, Service> services = new HashMap<String, Service>();
services.put(serviceName,service);
HashMap<String, ServiceComponent> serviceComponentMap = new HashMap<String, ServiceComponent>();
serviceComponentMap.put(componentName,serviceComponent);
HashMap<String, ServiceComponentHost> serviceComponentHosts = new HashMap<String, ServiceComponentHost>();
serviceComponentHosts.put(componentName, serviceComponentHost);
HashMap<String, ServiceOsSpecific> serviceOsSpecificHashMap = new HashMap<String, ServiceOsSpecific>();
serviceOsSpecificHashMap.put("key",serviceOsSpecific);
ServiceComponentHostResponse shr1 = new ServiceComponentHostResponse(clusterName, serviceName, componentName, displayName, hostName, desiredState, "", null, null, null);
Set<ServiceComponentHostResponse> responses = new LinkedHashSet<ServiceComponentHostResponse>();
responses.add(shr1);
Map<String, String> returnConfigMap = new HashMap<String, String>();
returnConfigMap.put(Configuration.SERVER_TMP_DIR_KEY, Configuration.SERVER_TMP_DIR_DEFAULT);
returnConfigMap.put(Configuration.AMBARI_PYTHON_WRAP_KEY, Configuration.AMBARI_PYTHON_WRAP_DEFAULT);
// set expectations
expect(managementController.getConfigHelper()).andReturn(configHelper);
expect(managementController.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
expect(managementController.getClusters()).andReturn(clusters).anyTimes();
expect(clusters.getCluster(clusterName)).andReturn(cluster).anyTimes();
expect(configHelper.getEffectiveConfigProperties(cluster, configTags)).andReturn(properties);
expect(clusterConfig.getType()).andReturn(Configuration.HIVE_CONFIG_TAG).anyTimes();
expect(configHelper.getEffectiveConfigAttributes(cluster, configTags)).andReturn(attributes);
expect(configMap.get(Configuration.SERVER_TMP_DIR_KEY)).andReturn(Configuration.SERVER_TMP_DIR_DEFAULT);
expect(configMap.get(Configuration.AMBARI_PYTHON_WRAP_KEY)).andReturn(Configuration.AMBARI_PYTHON_WRAP_DEFAULT);
expect(configuration.getConfigsMap()).andReturn(returnConfigMap);
expect(configuration.getResourceDirPath()).andReturn(stackRoot);
expect(configuration.getJavaVersion()).andReturn(8);
expect(configuration.areHostsSysPrepped()).andReturn("false");
expect(configuration.isAgentStackRetryOnInstallEnabled()).andReturn("false");
expect(configuration.getAgentStackRetryOnInstallCount()).andReturn("5");
expect(configuration.getExternalScriptTimeout()).andReturn(Integer.parseInt(Configuration.EXTERNAL_SCRIPT_TIMEOUT_DEFAULT));
Map<String,String> props = new HashMap<String, String>();
props.put(Configuration.HIVE_METASTORE_PASSWORD_PROPERTY, "pass");
props.put("key","value");
expect(clusterConfig.getProperties()).andReturn(props);
expect(configHelper.getEffectiveDesiredTags(cluster, hostName)).andReturn(allConfigTags);
expect(cluster.getClusterName()).andReturn(clusterName);
expect(managementController.getHostComponents((Set<ServiceComponentHostRequest>) anyObject())).andReturn(responses).anyTimes();
expect(cluster.getCurrentStackVersion()).andReturn(stackId);
PowerMock.mockStaticPartial(StageUtils.class, "getClusterHostInfo");
Map<String, Set<String>> clusterHostInfo = new HashMap<String, Set<String>>();
Set<String> all_hosts = new HashSet<String>(Arrays.asList("Host100","Host101","Host102"));
Set<String> some_hosts = new HashSet<String>(Arrays.asList("0-1","2"));
Set<String> ohter_hosts = new HashSet<String>(Arrays.asList("0,1"));
Set<String> clusterHostTypes = new HashSet<String>(Arrays.asList("nm_hosts", "hs_host",
"namenode_host", "rm_host", "snamenode_host", "slave_hosts", "zookeeper_hosts"));
for (String hostTypes: clusterHostTypes) {
if (hostTypes.equals("slave_hosts")) {
clusterHostInfo.put(hostTypes, ohter_hosts);
} else {
clusterHostInfo.put(hostTypes, some_hosts);
}
}
Map<String, Host> stringHostMap = new HashMap<String, Host>();
stringHostMap.put(hostName, host);
clusterHostInfo.put("all_hosts",all_hosts);
expect(StageUtils.getClusterHostInfo(cluster)).andReturn(clusterHostInfo);
expect(stackId.getStackName()).andReturn(stackName).anyTimes();
expect(stackId.getStackVersion()).andReturn(stackVersion).anyTimes();
expect(ambariMetaInfo.getComponent(stackName, stackVersion, serviceName, componentName)).andReturn(componentInfo);
expect(ambariMetaInfo.getService(stackName, stackVersion, serviceName)).andReturn(serviceInfo);
expect(serviceInfo.getServicePackageFolder()).andReturn(packageFolder);
expect(ambariMetaInfo.getComponent((String) anyObject(), (String) anyObject(),
(String) anyObject(), (String) anyObject())).andReturn(componentInfo).anyTimes();
expect(componentInfo.getCommandScript()).andReturn(commandScriptDefinition);
expect(componentInfo.getClientConfigFiles()).andReturn(clientConfigFileDefinitionList);
expect(cluster.getConfig("hive-site", null)).andReturn(clusterConfig);
expect(cluster.getDesiredConfigs()).andReturn(desiredConfigMap);
expect(clusters.getHost(hostName)).andReturn(host);
HashMap<String, String> rcaParams = new HashMap<String, String>();
rcaParams.put("key","value");
expect(managementController.getRcaParameters()).andReturn(rcaParams).anyTimes();
expect(ambariMetaInfo.getService(stackName, stackVersion, serviceName)).andReturn(serviceInfo);
expect(serviceInfo.getOsSpecifics()).andReturn(new HashMap<String, ServiceOsSpecific>()).anyTimes();
Set<String> userSet = new HashSet<String>();
userSet.add("hdfs");
expect(configHelper.getPropertyValuesWithPropertyType(stackId, PropertyInfo.PropertyType.USER, cluster, desiredConfigMap)).andReturn(userSet);
PowerMock.expectNew(File.class, new Class<?>[]{String.class}, anyObject(String.class)).andReturn(mockFile).anyTimes();
PowerMock.createNiceMockAndExpectNew(PrintWriter.class, anyObject());
expect(mockFile.getParent()).andReturn("");
PowerMock.mockStatic(Runtime.class);
expect(mockFile.exists()).andReturn(true);
String commandLine = "ambari-python-wrap /tmp/stacks/S1/V1/PIG/package/null generate_configs null " +
"/tmp/stacks/S1/V1/PIG/package /var/lib/ambari-server/tmp/structured-out.json " +
"INFO /var/lib/ambari-server/tmp";
if (System.getProperty("os.name").contains("Windows")) {
commandLine = "ambari-python-wrap " + stackRoot +
"\\PIG\\package\\null generate_configs null " +
stackRoot + "\\PIG\\package /var/lib/ambari-server/tmp\\structured-out.json " +
"INFO /var/lib/ambari-server/tmp";
}
ProcessBuilder processBuilder = PowerMock.createNiceMock(ProcessBuilder.class);
PowerMock.expectNew(ProcessBuilder.class,Arrays.asList(commandLine.split("\\s+"))).andReturn(processBuilder).once();
expect(processBuilder.start()).andReturn(process).once();
InputStream inputStream = new ByteArrayInputStream("some logging info".getBytes());
expect(process.getInputStream()).andReturn(inputStream);
// replay
replay(managementController, clusters, cluster, ambariMetaInfo, stackId, componentInfo, commandScriptDefinition,
clusterConfig, host, service, serviceComponent, serviceComponentHost, serviceInfo, configHelper,
runtime, process, configMap);
PowerMock.replayAll();
Set<Resource> resources = provider.getResources(request, predicate);
assertFalse(resources.isEmpty());
// verify
verify(managementController, clusters, cluster, ambariMetaInfo, stackId, componentInfo,commandScriptDefinition,
clusterConfig, host, service, serviceComponent, serviceComponentHost, serviceInfo, configHelper,
runtime, process);
PowerMock.verifyAll();
}
@Test
public void testGetResourcesFromCommonServices() throws Exception {
Resource.Type type = Resource.Type.ClientConfig;
AmbariManagementController managementController = createNiceMock(AmbariManagementController.class);
Clusters clusters = createNiceMock(Clusters.class);
Cluster cluster = createNiceMock(Cluster.class);
AmbariMetaInfo ambariMetaInfo = createNiceMock(AmbariMetaInfo.class);
StackId stackId = createNiceMock(StackId.class);
ComponentInfo componentInfo = createNiceMock(ComponentInfo.class);
ServiceInfo serviceInfo = createNiceMock(ServiceInfo.class);
CommandScriptDefinition commandScriptDefinition = createNiceMock(CommandScriptDefinition.class);
Config clusterConfig = createNiceMock(Config.class);
DesiredConfig desiredConfig = createNiceMock(DesiredConfig.class);
Host host = createNiceMock(Host.class);
Service service = createNiceMock(Service.class);
ServiceComponent serviceComponent = createNiceMock(ServiceComponent.class);
ServiceComponentHost serviceComponentHost = createNiceMock(ServiceComponentHost.class);
ServiceOsSpecific serviceOsSpecific = createNiceMock(ServiceOsSpecific.class);
ConfigHelper configHelper = createNiceMock(ConfigHelper.class);
Configuration configuration = PowerMock.createStrictMockAndExpectNew(Configuration.class);
Map<String, String> configMap = createNiceMock(Map.class);
File mockFile = PowerMock.createNiceMock(File.class);
Runtime runtime = createMock(Runtime.class);
Process process = createNiceMock(Process.class);
Map<String, DesiredConfig> desiredConfigMap = new HashMap<String, DesiredConfig>();
desiredConfigMap.put("hive-site", desiredConfig);
Map<String, Map<String, String>> allConfigTags = new HashMap<String, Map<String, String>>();
Map<String, Map<String, String>> properties = new HashMap<String, Map<String, String>>();
Map<String, Map<String, String>> configTags = new HashMap<String,
Map<String, String>>();
Map<String, Map<String, Map<String, String>>> attributes = new HashMap<String,
Map<String, Map<String, String>>>();
ClientConfigFileDefinition clientConfigFileDefinition = new ClientConfigFileDefinition();
clientConfigFileDefinition.setDictionaryName("pig-env");
clientConfigFileDefinition.setFileName("pig-env.sh");
clientConfigFileDefinition.setType("env");
List <ClientConfigFileDefinition> clientConfigFileDefinitionList = new LinkedList<ClientConfigFileDefinition>();
clientConfigFileDefinitionList.add(clientConfigFileDefinition);
ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
type,
PropertyHelper.getPropertyIds(type),
PropertyHelper.getKeyPropertyIds(type),
managementController);
// create the request
Request request = PropertyHelper.getReadRequest(ClientConfigResourceProvider.COMPONENT_CLUSTER_NAME_PROPERTY_ID, "c1",
ClientConfigResourceProvider.COMPONENT_COMPONENT_NAME_PROPERTY_ID,
ClientConfigResourceProvider.COMPONENT_SERVICE_NAME_PROPERTY_ID);
Predicate predicate = new PredicateBuilder().property(ClientConfigResourceProvider.COMPONENT_CLUSTER_NAME_PROPERTY_ID).equals("c1").
toPredicate();
String clusterName = "C1";
String serviceName = "PIG";
String componentName = "PIG";
String displayName = "Pig Client";
String hostName = "Host100";
String desiredState = "INSTALLED";
String stackName = "S1";
String stackVersion = "V1";
String stackRoot="/tmp/stacks/S1/V1";
String packageFolder= StackManager.COMMON_SERVICES + "/PIG/package";
String commonServicesPath = "/var/lib/ambari-server/src/main/resources" + File.separator + "common-services";
if (System.getProperty("os.name").contains("Windows")) {
stackRoot = "C:\\tmp\\stacks\\S1\\V1";
packageFolder = StackManager.COMMON_SERVICES + "\\PIG\\package";
}
HashMap<String, Host> hosts = new HashMap<String, Host>();
hosts.put(hostName, host);
HashMap<String, Service> services = new HashMap<String, Service>();
services.put(serviceName,service);
HashMap<String, ServiceComponent> serviceComponentMap = new HashMap<String, ServiceComponent>();
serviceComponentMap.put(componentName,serviceComponent);
HashMap<String, ServiceComponentHost> serviceComponentHosts = new HashMap<String, ServiceComponentHost>();
serviceComponentHosts.put(componentName, serviceComponentHost);
HashMap<String, ServiceOsSpecific> serviceOsSpecificHashMap = new HashMap<String, ServiceOsSpecific>();
serviceOsSpecificHashMap.put("key",serviceOsSpecific);
ServiceComponentHostResponse shr1 = new ServiceComponentHostResponse(clusterName, serviceName, componentName, displayName, hostName, desiredState, "", null, null, null);
Set<ServiceComponentHostResponse> responses = new LinkedHashSet<ServiceComponentHostResponse>();
responses.add(shr1);
Map<String, String> returnConfigMap = new HashMap<String, String>();
returnConfigMap.put(Configuration.SERVER_TMP_DIR_KEY, Configuration.SERVER_TMP_DIR_DEFAULT);
returnConfigMap.put(Configuration.AMBARI_PYTHON_WRAP_KEY, Configuration.AMBARI_PYTHON_WRAP_DEFAULT);
// set expectations
expect(managementController.getConfigHelper()).andReturn(configHelper);
expect(managementController.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
expect(managementController.getClusters()).andReturn(clusters).anyTimes();
expect(clusters.getCluster(clusterName)).andReturn(cluster).anyTimes();
expect(configHelper.getEffectiveConfigProperties(cluster, configTags)).andReturn(properties);
expect(clusterConfig.getType()).andReturn(Configuration.HIVE_CONFIG_TAG).anyTimes();
expect(configHelper.getEffectiveConfigAttributes(cluster, configTags)).andReturn(attributes);
expect(configMap.get(Configuration.SERVER_TMP_DIR_KEY)).andReturn(Configuration.SERVER_TMP_DIR_DEFAULT);
expect(configMap.get(Configuration.AMBARI_PYTHON_WRAP_KEY)).andReturn(Configuration.AMBARI_PYTHON_WRAP_DEFAULT);
expect(configuration.getConfigsMap()).andReturn(returnConfigMap);
expect(configuration.getResourceDirPath()).andReturn("/var/lib/ambari-server/src/main/resources");
expect(configuration.getJavaVersion()).andReturn(8);
expect(configuration.areHostsSysPrepped()).andReturn("false");
expect(configuration.isAgentStackRetryOnInstallEnabled()).andReturn("false");
expect(configuration.getAgentStackRetryOnInstallCount()).andReturn("5");
expect(configuration.getExternalScriptTimeout()).andReturn(Integer.parseInt(Configuration.EXTERNAL_SCRIPT_TIMEOUT_DEFAULT));
Map<String,String> props = new HashMap<String, String>();
props.put(Configuration.HIVE_METASTORE_PASSWORD_PROPERTY, "pass");
props.put("key","value");
expect(clusterConfig.getProperties()).andReturn(props);
expect(configHelper.getEffectiveDesiredTags(cluster, hostName)).andReturn(allConfigTags);
expect(cluster.getClusterName()).andReturn(clusterName);
expect(managementController.getHostComponents((Set<ServiceComponentHostRequest>) anyObject())).andReturn(responses).anyTimes();
expect(cluster.getCurrentStackVersion()).andReturn(stackId);
PowerMock.mockStaticPartial(StageUtils.class, "getClusterHostInfo");
Map<String, Set<String>> clusterHostInfo = new HashMap<String, Set<String>>();
Set<String> all_hosts = new HashSet<String>(Arrays.asList("Host100","Host101","Host102"));
Set<String> some_hosts = new HashSet<String>(Arrays.asList("0-1","2"));
Set<String> ohter_hosts = new HashSet<String>(Arrays.asList("0,1"));
Set<String> clusterHostTypes = new HashSet<String>(Arrays.asList("nm_hosts", "hs_host",
"namenode_host", "rm_host", "snamenode_host", "slave_hosts", "zookeeper_hosts"));
for (String hostTypes: clusterHostTypes) {
if (hostTypes.equals("slave_hosts")) {
clusterHostInfo.put(hostTypes, ohter_hosts);
} else {
clusterHostInfo.put(hostTypes, some_hosts);
}
}
Map<String, Host> stringHostMap = new HashMap<String, Host>();
stringHostMap.put(hostName, host);
clusterHostInfo.put("all_hosts",all_hosts);
expect(StageUtils.getClusterHostInfo(cluster)).andReturn(clusterHostInfo);
expect(stackId.getStackName()).andReturn(stackName).anyTimes();
expect(stackId.getStackVersion()).andReturn(stackVersion).anyTimes();
expect(ambariMetaInfo.getComponent(stackName, stackVersion, serviceName, componentName)).andReturn(componentInfo);
expect(ambariMetaInfo.getService(stackName, stackVersion, serviceName)).andReturn(serviceInfo);
expect(serviceInfo.getServicePackageFolder()).andReturn(packageFolder);
expect(ambariMetaInfo.getComponent((String) anyObject(), (String) anyObject(),
(String) anyObject(), (String) anyObject())).andReturn(componentInfo).anyTimes();
expect(componentInfo.getCommandScript()).andReturn(commandScriptDefinition);
expect(componentInfo.getClientConfigFiles()).andReturn(clientConfigFileDefinitionList);
expect(cluster.getConfig("hive-site", null)).andReturn(clusterConfig);
expect(cluster.getDesiredConfigs()).andReturn(desiredConfigMap);
expect(clusters.getHost(hostName)).andReturn(host);
HashMap<String, String> rcaParams = new HashMap<String, String>();
rcaParams.put("key","value");
expect(managementController.getRcaParameters()).andReturn(rcaParams).anyTimes();
expect(ambariMetaInfo.getService(stackName, stackVersion, serviceName)).andReturn(serviceInfo);
expect(serviceInfo.getOsSpecifics()).andReturn(new HashMap<String, ServiceOsSpecific>()).anyTimes();
Set<String> userSet = new HashSet<String>();
userSet.add("hdfs");
expect(configHelper.getPropertyValuesWithPropertyType(stackId, PropertyInfo.PropertyType.USER, cluster, desiredConfigMap)).andReturn(userSet);
PowerMock.expectNew(File.class, new Class<?>[]{String.class}, anyObject(String.class)).andReturn(mockFile).anyTimes();
PowerMock.createNiceMockAndExpectNew(PrintWriter.class, anyObject());
expect(mockFile.getParent()).andReturn("");
PowerMock.mockStatic(Runtime.class);
expect(mockFile.exists()).andReturn(true);
String commandLine = "ambari-python-wrap " + commonServicesPath + "/PIG/package/null generate_configs null " +
commonServicesPath + "/PIG/package /var/lib/ambari-server/tmp/structured-out.json " +
"INFO /var/lib/ambari-server/tmp";
if (System.getProperty("os.name").contains("Windows")) {
commandLine = "ambari-python-wrap " + commonServicesPath +
"\\PIG\\package\\null generate_configs null " +
commonServicesPath + "\\PIG\\package /var/lib/ambari-server/tmp\\structured-out.json " +
"INFO /var/lib/ambari-server/tmp";
}
ProcessBuilder processBuilder = PowerMock.createNiceMock(ProcessBuilder.class);
PowerMock.expectNew(ProcessBuilder.class,Arrays.asList(commandLine.split("\\s+"))).andReturn(processBuilder).once();
expect(processBuilder.start()).andReturn(process).once();
InputStream inputStream = new ByteArrayInputStream("some logging info".getBytes());
expect(process.getInputStream()).andReturn(inputStream);
// replay
replay(managementController, clusters, cluster, ambariMetaInfo, stackId, componentInfo, commandScriptDefinition,
clusterConfig, host, service, serviceComponent, serviceComponentHost, serviceInfo, configHelper,
runtime, process, configMap);
PowerMock.replayAll();
Set<Resource> resources = provider.getResources(request, predicate);
assertFalse(resources.isEmpty());
// verify
verify(managementController, clusters, cluster, ambariMetaInfo, stackId, componentInfo,commandScriptDefinition,
clusterConfig, host, service, serviceComponent, serviceComponentHost, serviceInfo, configHelper,
runtime, process);
PowerMock.verifyAll();
}
@Test
public void testDeleteResources() throws Exception {
Resource.Type type = Resource.Type.ClientConfig;
AmbariManagementController managementController = createMock(AmbariManagementController.class);
// replay
replay(managementController);
ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
type,
PropertyHelper.getPropertyIds(type),
PropertyHelper.getKeyPropertyIds(type),
managementController);
Predicate predicate = new PredicateBuilder().property(
ClientConfigResourceProvider.COMPONENT_COMPONENT_NAME_PROPERTY_ID).equals("HDFS_CLIENT").toPredicate();
try {
provider.deleteResources(new RequestImpl(null, null, null, null), predicate);
Assert.fail("Expected an UnsupportedOperationException");
} catch (SystemException e) {
// expected
}
// verify
verify(managementController);
}
}