Repository: ambari Updated Branches: refs/heads/trunk e56c82998 -> a6df75fd6
AMBARI-9045. Capture security state from components for use in enabling or disabling Kerberos (rlevas) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/a6df75fd Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/a6df75fd Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/a6df75fd Branch: refs/heads/trunk Commit: a6df75fd6146569096a2678fbfbb56665a43c296 Parents: e56c829 Author: Robert Levas <rle...@hortonworks.com> Authored: Wed Jan 14 15:48:08 2015 -0500 Committer: Robert Levas <rle...@hortonworks.com> Committed: Wed Jan 14 15:48:14 2015 -0500 ---------------------------------------------------------------------- .../ambari/server/agent/ComponentStatus.java | 29 +++++++++++ .../ambari/server/agent/HeartBeatHandler.java | 20 ++++++++ .../server/controller/KerberosHelper.java | 10 +--- .../kerberos/FinalizeKerberosServerAction.java | 25 +++++++++- .../kerberos/KerberosServerAction.java | 52 ++++++++++++++++++-- .../server/agent/TestHeartbeatHandler.java | 38 ++++++++++---- .../kerberos/KerberosServerActionTest.java | 1 + 7 files changed, 151 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/a6df75fd/ambari-server/src/main/java/org/apache/ambari/server/agent/ComponentStatus.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/ComponentStatus.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/ComponentStatus.java index 8403ba6..a71bbd1 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/agent/ComponentStatus.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/ComponentStatus.java @@ -27,6 +27,14 @@ public class ComponentStatus { private String componentName; private String msg; private String status; + + /** + * A String declaring the component's security state + * + * @see org.apache.ambari.server.state.SecurityState + */ + private String securityState; + private String serviceName; private String clusterName; private String stackVersion; @@ -57,6 +65,26 @@ public class ComponentStatus { this.status = status; } + /** + * Gets the relevant component's security state. + * + * @return a String declaring this component's security state + * @see org.apache.ambari.server.state.SecurityState + */ + public String getSecurityState() { + return securityState; + } + + /** + * Sets the relevant component's security state. + * + * @param securityState a String declaring this component's security state + * @see org.apache.ambari.server.state.SecurityState + */ + public void setSecurityState(String securityState) { + this.securityState = securityState; + } + public String getStackVersion() { return stackVersion; } @@ -124,6 +152,7 @@ public class ComponentStatus { "componentName='" + componentName + '\'' + ", msg='" + msg + '\'' + ", status='" + status + '\'' + + ", securityState='" + securityState + '\'' + ", serviceName='" + serviceName + '\'' + ", clusterName='" + clusterName + '\'' + ", stackVersion='" + stackVersion + '\'' + http://git-wip-us.apache.org/repos/asf/ambari/blob/a6df75fd/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java index 2fb3c0a..b5fda49 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/HeartBeatHandler.java @@ -73,6 +73,7 @@ import org.apache.ambari.server.state.HostHealthStatus; import org.apache.ambari.server.state.HostHealthStatus.HealthStatus; import org.apache.ambari.server.state.HostState; import org.apache.ambari.server.state.MaintenanceState; +import org.apache.ambari.server.state.SecurityState; import org.apache.ambari.server.state.Service; import org.apache.ambari.server.state.ServiceComponent; import org.apache.ambari.server.state.ServiceComponentHost; @@ -595,6 +596,25 @@ public class HeartBeatHandler { } } + SecurityState prevSecurityState = scHost.getSecurityState(); + SecurityState currentSecurityState = SecurityState.valueOf(status.getSecurityState()); + if((prevSecurityState != currentSecurityState)) { + if(prevSecurityState.isEndpoint()) { + scHost.setSecurityState(currentSecurityState); + LOG.info(String.format("Security of service component %s of service %s of cluster %s " + + "has changed from %s to %s on host %s", + componentName, status.getServiceName(), status.getClusterName(), prevSecurityState, + currentSecurityState, hostname)); + } + else { + LOG.debug(String.format("Security of service component %s of service %s of cluster %s " + + "has changed from %s to %s on host %s but will be ignored since %s is a " + + "transitional state", + componentName, status.getServiceName(), status.getClusterName(), + prevSecurityState, currentSecurityState, hostname, prevSecurityState)); + } + } + if (null != status.getStackVersion() && !status.getStackVersion().isEmpty()) { scHost.setStackVersion(gson.fromJson(status.getStackVersion(), StackId.class)); } http://git-wip-us.apache.org/repos/asf/ambari/blob/a6df75fd/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelper.java index 626d130..e91d538 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelper.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelper.java @@ -1046,10 +1046,7 @@ public class KerberosHelper { @Override public SecurityState getNewSCHSecurityState() { - // TODO (rlevas): Set this to SecurityState.SECURING - // when the required infrastructure is in place - // See AMBARI-8343 and associated JIRAs (like AMBARI-8477) - return SecurityState.SECURED_KERBEROS; + return SecurityState.SECURING; } @Override @@ -1248,10 +1245,7 @@ public class KerberosHelper { @Override public SecurityState getNewSCHSecurityState() { - // TODO (rlevas): Set this to SecurityState.UNSECURING - // when the required infrastructure is in place - // See AMBARI-8343 and associated JIRAs (like AMBARI-8477) - return SecurityState.UNSECURED; + return SecurityState.UNSECURING; } @Override http://git-wip-us.apache.org/repos/asf/ambari/blob/a6df75fd/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/FinalizeKerberosServerAction.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/FinalizeKerberosServerAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/FinalizeKerberosServerAction.java index 2c6b33e..1860c97 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/FinalizeKerberosServerAction.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/FinalizeKerberosServerAction.java @@ -21,12 +21,17 @@ package org.apache.ambari.server.serveraction.kerberos; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.actionmanager.HostRoleStatus; import org.apache.ambari.server.agent.CommandReport; +import org.apache.ambari.server.state.Cluster; +import org.apache.ambari.server.state.Host; +import org.apache.ambari.server.state.SecurityState; +import org.apache.ambari.server.state.ServiceComponentHost; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentMap; @@ -58,7 +63,6 @@ public class FinalizeKerberosServerAction extends KerberosServerAction { } /** - * * @param requestSharedDataContext a Map to be used a shared data among all ServerActions related * to a given request * @return @@ -69,6 +73,22 @@ public class FinalizeKerberosServerAction extends KerberosServerAction { public CommandReport execute(ConcurrentMap<String, Object> requestSharedDataContext) throws AmbariException, InterruptedException { String dataDirectoryPath = getCommandParameterValue(DATA_DIRECTORY); + // Set the ServiceComponentHost from a transitional state to the desired endpoint state + Map<String, Host> hosts = getClusters().getHostsForCluster(getClusterName()); + if ((hosts != null) && !hosts.isEmpty()) { + Cluster cluster = getCluster(); + for (String hostname : hosts.keySet()) { + List<ServiceComponentHost> serviceComponentHosts = cluster.getServiceComponentHosts(hostname); + + for (ServiceComponentHost sch : serviceComponentHosts) { + SecurityState securityState = sch.getSecurityState(); + if (securityState.isTransitional()) { + sch.setSecurityState(sch.getDesiredSecurityState()); + } + } + } + } + // Make sure this is a relevant directory. We don't want to accidentally allow _ANY_ directory // to be deleted. if ((dataDirectoryPath != null) && dataDirectoryPath.contains("/" + DATA_DIRECTORY_PREFIX)) { @@ -90,5 +110,6 @@ public class FinalizeKerberosServerAction extends KerberosServerAction { } } - return createCommandReport(0, HostRoleStatus.COMPLETED, "{}", null, null); } + return createCommandReport(0, HostRoleStatus.COMPLETED, "{}", null, null); + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/a6df75fd/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/KerberosServerAction.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/KerberosServerAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/KerberosServerAction.java index 2f91826..7edd889 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/KerberosServerAction.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/KerberosServerAction.java @@ -22,6 +22,7 @@ import com.google.inject.Inject; import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.actionmanager.HostRoleStatus; import org.apache.ambari.server.agent.CommandReport; +import org.apache.ambari.server.agent.ExecutionCommand; import org.apache.ambari.server.serveraction.AbstractServerAction; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; @@ -222,17 +223,58 @@ public abstract class KerberosServerAction extends AbstractServerAction { } /** + * Returns the relevant cluster's name + * <p/> + * Using the data from the execution command, retrieve the relevant cluster's name. + * + * @return a String declaring the relevant cluster's name + * @throws AmbariException if the cluster's name is not available + */ + protected String getClusterName() throws AmbariException { + ExecutionCommand executionCommand = getExecutionCommand(); + String clusterName = (executionCommand == null) ? null : executionCommand.getClusterName(); + + if ((clusterName == null) || clusterName.isEmpty()) { + throw new AmbariException("Failed to retrieve the cluster name from the execution command"); + } + + return clusterName; + } + + /** + * Returns the relevant Cluster object + * + * @return the relevant Cluster + * @throws AmbariException if the Cluster object cannot be retrieved + */ + protected Cluster getCluster() throws AmbariException { + Cluster cluster = clusters.getCluster(getClusterName()); + + if (cluster == null) { + throw new AmbariException(String.format("Failed to retrieve cluster for %s", getClusterName())); + } + + return cluster; + } + + /** + * The Clusters object for this KerberosServerAction + * + * @return a Clusters object + */ + protected Clusters getClusters() { + return clusters; + } + + + /** * Given a (command parameter) Map, attempts to safely retrieve the "data_directory" property. * * @param commandParameters a Map containing the dictionary of data to interrogate * @return a String indicating the data directory or null (if not found or set) */ protected KerberosCredential getAdministratorCredential(Map<String, String> commandParameters) throws AmbariException { - Cluster cluster = clusters.getCluster(getExecutionCommand().getClusterName()); - - if (cluster == null) { - throw new AmbariException("Failed get the Cluster object"); - } + Cluster cluster = getCluster(); // Create the key like we did when we encrypted the data, based on the Cluster objects hashcode. byte[] key = Integer.toHexString(cluster.hashCode()).getBytes(); http://git-wip-us.apache.org/repos/asf/ambari/blob/a6df75fd/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java index 3cf3b67..fa09bdf 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java @@ -32,12 +32,8 @@ import static org.apache.ambari.server.agent.DummyHeartbeatConstants.HDFS; import static org.apache.ambari.server.agent.DummyHeartbeatConstants.HDFS_CLIENT; import static org.apache.ambari.server.agent.DummyHeartbeatConstants.NAMENODE; import static org.apache.ambari.server.agent.DummyHeartbeatConstants.SECONDARY_NAMENODE; -import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.*; import static org.easymock.EasyMock.createMockBuilder; -import static org.easymock.EasyMock.createNiceMock; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.reset; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -87,6 +83,7 @@ import org.apache.ambari.server.state.Host; import org.apache.ambari.server.state.HostHealthStatus; import org.apache.ambari.server.state.HostState; import org.apache.ambari.server.state.MaintenanceState; +import org.apache.ambari.server.state.SecurityState; import org.apache.ambari.server.state.Service; import org.apache.ambari.server.state.ServiceComponentHost; import org.apache.ambari.server.state.StackId; @@ -537,7 +534,9 @@ public class TestHeartbeatHandler { ServiceComponentHost serviceComponentHost3 = clusters.getCluster(DummyCluster).getService(HDFS). getServiceComponent(SECONDARY_NAMENODE).getServiceComponentHost(DummyHostname1); serviceComponentHost1.setState(State.INSTALLED); + serviceComponentHost1.setSecurityState(SecurityState.UNSECURED); serviceComponentHost2.setState(State.INSTALLED); + serviceComponentHost2.setSecurityState(SecurityState.SECURING); serviceComponentHost3.setState(State.STARTING); HeartBeat hb = new HeartBeat(); @@ -552,6 +551,7 @@ public class TestHeartbeatHandler { componentStatus1.setServiceName(HDFS); componentStatus1.setMessage(DummyHostStatus); componentStatus1.setStatus(State.STARTED.name()); + componentStatus1.setSecurityState(SecurityState.SECURED_KERBEROS.name()); componentStatus1.setComponentName(DATANODE); componentStatuses.add(componentStatus1); ComponentStatus componentStatus2 = new ComponentStatus(); @@ -559,6 +559,7 @@ public class TestHeartbeatHandler { componentStatus2.setServiceName(HDFS); componentStatus2.setMessage(DummyHostStatus); componentStatus2.setStatus(State.STARTED.name()); + componentStatus2.setSecurityState(SecurityState.UNSECURED.name()); componentStatus2.setComponentName(SECONDARY_NAMENODE); componentStatuses.add(componentStatus2); hb.setComponentStatus(componentStatuses); @@ -580,8 +581,11 @@ public class TestHeartbeatHandler { State componentState2 = serviceComponentHost2.getState(); State componentState3 = serviceComponentHost3.getState(); assertEquals(State.STARTED, componentState1); + assertEquals(SecurityState.SECURED_KERBEROS, serviceComponentHost1.getSecurityState()); assertEquals(State.INSTALLED, componentState2); + assertEquals(SecurityState.SECURING, serviceComponentHost2.getSecurityState()); assertEquals(State.STARTED, componentState3); + assertEquals(SecurityState.UNSECURED, serviceComponentHost3.getSecurityState()); } @Test @@ -687,6 +691,7 @@ public class TestHeartbeatHandler { componentStatus1.setServiceName(HDFS); componentStatus1.setMessage(DummyHostStatus); componentStatus1.setStatus(State.STARTED.name()); + componentStatus1.setSecurityState(SecurityState.UNSECURED.name()); componentStatus1.setComponentName(DATANODE); componentStatuses.add(componentStatus1); @@ -695,6 +700,7 @@ public class TestHeartbeatHandler { componentStatus2.setServiceName(HDFS); componentStatus2.setMessage(DummyHostStatus); componentStatus2.setStatus(State.INSTALLED.name()); + componentStatus2.setSecurityState(SecurityState.UNSECURED.name()); componentStatus2.setComponentName(NAMENODE); componentStatuses.add(componentStatus2); @@ -1479,11 +1485,11 @@ public class TestHeartbeatHandler { ArrayList<ComponentStatus> componentStatuses = new ArrayList<ComponentStatus>(); ComponentStatus componentStatus1 = createComponentStatus(DummyCluster, HDFS, DummyHostStatus, State.STARTED, - DATANODE, "{\"stackName\":\"HDP\",\"stackVersion\":\"1.3.0\"}"); + SecurityState.UNSECURED, DATANODE, "{\"stackName\":\"HDP\",\"stackVersion\":\"1.3.0\"}"); ComponentStatus componentStatus2 = - createComponentStatus(DummyCluster, HDFS, DummyHostStatus, State.STARTED, NAMENODE, ""); + createComponentStatus(DummyCluster, HDFS, DummyHostStatus, State.STARTED, SecurityState.UNSECURED, NAMENODE, ""); ComponentStatus componentStatus3 = createComponentStatus(DummyCluster, HDFS, DummyHostStatus, State.INSTALLED, - HDFS_CLIENT, "{\"stackName\":\"HDP\",\"stackVersion\":\"1.3.0\"}"); + SecurityState.UNSECURED, HDFS_CLIENT, "{\"stackName\":\"HDP\",\"stackVersion\":\"1.3.0\"}"); componentStatuses.add(componentStatus1); componentStatuses.add(componentStatus2); @@ -1870,12 +1876,14 @@ public class TestHeartbeatHandler { dataNodeStatus.setServiceName(HDFS); dataNodeStatus.setComponentName(DATANODE); dataNodeStatus.setStatus("STARTED"); + dataNodeStatus.setSecurityState(SecurityState.UNSECURED.name()); componentStatus.add(dataNodeStatus); ComponentStatus nameNodeStatus = new ComponentStatus(); nameNodeStatus.setClusterName(cluster.getClusterName()); nameNodeStatus.setServiceName(HDFS); nameNodeStatus.setComponentName(NAMENODE); nameNodeStatus.setStatus("STARTED"); + nameNodeStatus.setSecurityState(SecurityState.UNSECURED.name()); componentStatus.add(nameNodeStatus); hb1.setComponentStatus(componentStatus); handler.handleHeartBeat(hb1); @@ -1892,12 +1900,14 @@ public class TestHeartbeatHandler { dataNodeStatus.setServiceName(HDFS); dataNodeStatus.setComponentName(DATANODE); dataNodeStatus.setStatus("INSTALLED"); + dataNodeStatus.setSecurityState(SecurityState.UNSECURED.name()); componentStatus.add(dataNodeStatus); nameNodeStatus = new ComponentStatus(); nameNodeStatus.setClusterName(cluster.getClusterName()); nameNodeStatus.setServiceName(HDFS); nameNodeStatus.setComponentName(NAMENODE); nameNodeStatus.setStatus("STARTED"); + nameNodeStatus.setSecurityState(SecurityState.UNSECURED.name()); componentStatus.add(nameNodeStatus); hb2.setComponentStatus(componentStatus); handler.handleHeartBeat(hb2); @@ -1916,12 +1926,14 @@ public class TestHeartbeatHandler { dataNodeStatus.setServiceName(HDFS); dataNodeStatus.setComponentName(DATANODE); dataNodeStatus.setStatus("INSTALLED"); + dataNodeStatus.setSecurityState(SecurityState.UNSECURED.name()); componentStatus.add(dataNodeStatus); nameNodeStatus = new ComponentStatus(); nameNodeStatus.setClusterName(cluster.getClusterName()); nameNodeStatus.setServiceName(HDFS); nameNodeStatus.setComponentName(NAMENODE); nameNodeStatus.setStatus("STARTED"); + nameNodeStatus.setSecurityState(SecurityState.UNSECURED.name()); componentStatus.add(nameNodeStatus); hb2a.setComponentStatus(componentStatus); handler.handleHeartBeat(hb2a); @@ -1941,12 +1953,14 @@ public class TestHeartbeatHandler { dataNodeStatus.setServiceName(HDFS); dataNodeStatus.setComponentName(DATANODE); dataNodeStatus.setStatus("INSTALLED"); + dataNodeStatus.setSecurityState(SecurityState.UNSECURED.name()); componentStatus.add(dataNodeStatus); nameNodeStatus = new ComponentStatus(); nameNodeStatus.setClusterName(cluster.getClusterName()); nameNodeStatus.setServiceName(HDFS); nameNodeStatus.setComponentName(NAMENODE); nameNodeStatus.setStatus("INSTALLED"); + nameNodeStatus.setSecurityState(SecurityState.UNSECURED.name()); componentStatus.add(nameNodeStatus); hb3.setComponentStatus(componentStatus); handler.handleHeartBeat(hb3); @@ -1976,6 +1990,7 @@ public class TestHeartbeatHandler { dataNodeStatus.setServiceName(HDFS); dataNodeStatus.setComponentName(DATANODE); dataNodeStatus.setStatus("STARTED"); + dataNodeStatus.setSecurityState(SecurityState.UNSECURED.name()); componentStatus.add(dataNodeStatus); hb4.setComponentStatus(componentStatus); handler.handleHeartBeat(hb4); @@ -2133,12 +2148,14 @@ public class TestHeartbeatHandler { private ComponentStatus createComponentStatus(String clusterName, String serviceName, String message, - State state, String componentName, String stackVersion) { + State state, SecurityState securityState, + String componentName, String stackVersion) { ComponentStatus componentStatus1 = new ComponentStatus(); componentStatus1.setClusterName(clusterName); componentStatus1.setServiceName(serviceName); componentStatus1.setMessage(message); componentStatus1.setStatus(state.name()); + componentStatus1.setSecurityState(securityState.name()); componentStatus1.setComponentName(componentName); componentStatus1.setStackVersion(stackVersion); return componentStatus1; @@ -2223,6 +2240,7 @@ public class TestHeartbeatHandler { componentStatus1.setServiceName(HDFS); componentStatus1.setMessage(DummyHostStatus); componentStatus1.setStatus(State.STARTED.name()); + componentStatus1.setSecurityState(SecurityState.UNSECURED.name()); componentStatus1.setComponentName(DATANODE); componentStatus1.setExtra(extra); @@ -2257,6 +2275,7 @@ public class TestHeartbeatHandler { componentStatus1.setServiceName(HDFS); componentStatus1.setMessage(DummyHostStatus); componentStatus1.setStatus(State.STARTED.name()); + componentStatus1.setSecurityState(SecurityState.UNSECURED.name()); componentStatus1.setComponentName(DATANODE); hb.setComponentStatus(Collections.singletonList(componentStatus1)); @@ -2289,6 +2308,7 @@ public class TestHeartbeatHandler { componentStatus1.setServiceName(HDFS); componentStatus1.setMessage(DummyHostStatus); componentStatus1.setStatus(State.STARTED.name()); + componentStatus1.setSecurityState(SecurityState.UNSECURED.name()); componentStatus1.setComponentName(DATANODE); componentStatuses.add(componentStatus1); http://git-wip-us.apache.org/repos/asf/ambari/blob/a6df75fd/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosServerActionTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosServerActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosServerActionTest.java index 8e8cccd..5d72585 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosServerActionTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosServerActionTest.java @@ -117,6 +117,7 @@ public class KerberosServerActionTest { .encrypt(Integer.toHexString(cluster.hashCode()).getBytes())); when(mockExecutionCommand.getCommandParams()).thenReturn(commandParams); + when(mockExecutionCommand.getClusterName()).thenReturn("c1"); action = injector.getInstance(KerberosServerAction.class);