|
@@ -42,6 +42,7 @@ import org.apache.ambari.server.orm.DBAccessor;
|
|
|
import org.apache.ambari.server.security.SecurityHelper;
|
|
|
import org.apache.ambari.server.serveraction.kerberos.KDCType;
|
|
|
import org.apache.ambari.server.serveraction.kerberos.KerberosCredential;
|
|
|
+import org.apache.ambari.server.serveraction.kerberos.KerberosMissingAdminCredentialsException;
|
|
|
import org.apache.ambari.server.serveraction.kerberos.KerberosOperationException;
|
|
|
import org.apache.ambari.server.serveraction.kerberos.KerberosOperationHandler;
|
|
|
import org.apache.ambari.server.serveraction.kerberos.KerberosOperationHandlerFactory;
|
|
@@ -90,7 +91,6 @@ import java.util.Map;
|
|
|
import java.util.Set;
|
|
|
|
|
|
import static org.easymock.EasyMock.*;
|
|
|
-import static org.easymock.EasyMock.createNiceMock;
|
|
|
import static org.junit.Assert.assertFalse;
|
|
|
import static org.junit.Assert.assertTrue;
|
|
|
|
|
@@ -236,7 +236,7 @@ public class KerberosHelperTest extends EasyMockSupport {
|
|
|
testEnableKerberos(new KerberosCredential("principal", "password", "keytab"), true, false);
|
|
|
}
|
|
|
|
|
|
- @Test(expected = IllegalArgumentException.class)
|
|
|
+ @Test(expected = KerberosMissingAdminCredentialsException.class)
|
|
|
public void testEnableKerberosMissingCredentials() throws Exception {
|
|
|
try {
|
|
|
testEnableKerberos(null, true, false);
|
|
@@ -246,7 +246,7 @@ public class KerberosHelperTest extends EasyMockSupport {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @Test(expected = IllegalArgumentException.class)
|
|
|
+ @Test(expected = KerberosMissingAdminCredentialsException.class)
|
|
|
public void testEnableKerberosInvalidCredentials() throws Exception {
|
|
|
try {
|
|
|
testEnableKerberos(new KerberosCredential("invalid_principal", "password", "keytab"), true, false);
|
|
@@ -271,7 +271,7 @@ public class KerberosHelperTest extends EasyMockSupport {
|
|
|
testEnsureIdentities(new KerberosCredential("principal", "password", "keytab"));
|
|
|
}
|
|
|
|
|
|
- @Test(expected = IllegalArgumentException.class)
|
|
|
+ @Test(expected = KerberosMissingAdminCredentialsException.class)
|
|
|
public void testEnsureIdentitiesMissingCredentials() throws Exception {
|
|
|
try {
|
|
|
testEnsureIdentities(null);
|
|
@@ -281,7 +281,7 @@ public class KerberosHelperTest extends EasyMockSupport {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- @Test(expected = IllegalArgumentException.class)
|
|
|
+ @Test(expected = KerberosMissingAdminCredentialsException.class)
|
|
|
public void testEnsureIdentitiesInvalidCredentials() throws Exception {
|
|
|
try {
|
|
|
testEnsureIdentities(new KerberosCredential("invalid_principal", "password", "keytab"));
|
|
@@ -290,6 +290,30 @@ public class KerberosHelperTest extends EasyMockSupport {
|
|
|
throw e;
|
|
|
}
|
|
|
}
|
|
|
+ @Test
|
|
|
+ public void testDeleteIdentities() throws Exception {
|
|
|
+ testDeleteIdentities(new KerberosCredential("principal", "password", "keytab"));
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test(expected = KerberosMissingAdminCredentialsException.class)
|
|
|
+ public void testDeleteIdentitiesMissingCredentials() throws Exception {
|
|
|
+ try {
|
|
|
+ testDeleteIdentities(null);
|
|
|
+ } catch (IllegalArgumentException e) {
|
|
|
+ Assert.assertTrue(e.getMessage().startsWith("Missing KDC administrator credentials"));
|
|
|
+ throw e;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test(expected = KerberosMissingAdminCredentialsException.class)
|
|
|
+ public void testDeleteIdentitiesInvalidCredentials() throws Exception {
|
|
|
+ try {
|
|
|
+ testDeleteIdentities(new KerberosCredential("invalid_principal", "password", "keytab"));
|
|
|
+ } catch (IllegalArgumentException e) {
|
|
|
+ Assert.assertTrue(e.getMessage().startsWith("Invalid KDC administrator credentials"));
|
|
|
+ throw e;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
@Test
|
|
|
public void testExecuteCustomOperationsInvalidOperation() throws Exception {
|
|
@@ -741,6 +765,10 @@ public class KerberosHelperTest extends EasyMockSupport {
|
|
|
}
|
|
|
})
|
|
|
.once();
|
|
|
+ expect(clusters.getHost("host1"))
|
|
|
+ .andReturn(host)
|
|
|
+ .once();
|
|
|
+
|
|
|
|
|
|
final AmbariManagementController ambariManagementController = injector.getInstance(AmbariManagementController.class);
|
|
|
expect(ambariManagementController.findConfigurationTagsWithOverrides(cluster, "host1"))
|
|
@@ -857,7 +885,11 @@ public class KerberosHelperTest extends EasyMockSupport {
|
|
|
expect(requestStageContainer.getId()).andReturn(1L).once();
|
|
|
requestStageContainer.addStages(anyObject(List.class));
|
|
|
expectLastCall().once();
|
|
|
- // TODO: Add more of these when more stages are added.
|
|
|
+ // Delete Keytabs Stage
|
|
|
+ expect(requestStageContainer.getLastStageId()).andReturn(2L).anyTimes();
|
|
|
+ expect(requestStageContainer.getId()).andReturn(1L).once();
|
|
|
+ requestStageContainer.addStages(anyObject(List.class));
|
|
|
+ expectLastCall().once();
|
|
|
// Clean-up/Finalize Stage
|
|
|
expect(requestStageContainer.getLastStageId()).andReturn(3L).anyTimes();
|
|
|
expect(requestStageContainer.getId()).andReturn(1L).once();
|
|
@@ -1162,6 +1194,40 @@ public class KerberosHelperTest extends EasyMockSupport {
|
|
|
verifyAll();
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ public void testIsClusterKerberosEnabled_false() throws Exception {
|
|
|
+ KerberosHelper kerberosHelper = injector.getInstance(KerberosHelper.class);
|
|
|
+ Cluster cluster = createStrictMock(Cluster.class);
|
|
|
+
|
|
|
+ expect(cluster.getSecurityType()).andReturn(SecurityType.NONE);
|
|
|
+
|
|
|
+ replay(cluster);
|
|
|
+ assertFalse(kerberosHelper.isClusterKerberosEnabled(cluster));
|
|
|
+ verify(cluster);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void testIsClusterKerberosEnabled_true() throws Exception {
|
|
|
+ KerberosHelper kerberosHelper = injector.getInstance(KerberosHelper.class);
|
|
|
+ Cluster cluster = createStrictMock(Cluster.class);
|
|
|
+
|
|
|
+ expect(cluster.getSecurityType()).andReturn(SecurityType.KERBEROS);
|
|
|
+
|
|
|
+ replay(cluster);
|
|
|
+ assertTrue(kerberosHelper.isClusterKerberosEnabled(cluster));
|
|
|
+ verify(cluster);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setClusterController() throws Exception {
|
|
|
+ KerberosHelper kerberosHelper = injector.getInstance(KerberosHelper.class);
|
|
|
+
|
|
|
+ Class<?> c = kerberosHelper.getClass();
|
|
|
+
|
|
|
+ Field f = c.getDeclaredField("clusterController");
|
|
|
+ f.setAccessible(true);
|
|
|
+ f.set(kerberosHelper, clusterController);
|
|
|
+ }
|
|
|
+
|
|
|
private void setupGetDescriptorFromCluster(KerberosDescriptor kerberosDescriptor) throws Exception {
|
|
|
ResourceProvider resourceProvider = createStrictMock(ResourceProvider.class);
|
|
|
expect(clusterController.ensureResourceProvider(Resource.Type.Artifact)).andReturn(resourceProvider).once();
|
|
@@ -1495,37 +1561,278 @@ public class KerberosHelperTest extends EasyMockSupport {
|
|
|
verifyAll();
|
|
|
}
|
|
|
|
|
|
- @Test
|
|
|
- public void testIsClusterKerberosEnabled_false() throws Exception {
|
|
|
+ private void testDeleteIdentities(final KerberosCredential kerberosCredential) throws Exception {
|
|
|
KerberosHelper kerberosHelper = injector.getInstance(KerberosHelper.class);
|
|
|
- Cluster cluster = createStrictMock(Cluster.class);
|
|
|
|
|
|
- expect(cluster.getSecurityType()).andReturn(SecurityType.NONE);
|
|
|
+ final ServiceComponentHost schKerberosClient = createMock(ServiceComponentHost.class);
|
|
|
+ expect(schKerberosClient.getServiceName()).andReturn(Service.Type.KERBEROS.name()).anyTimes();
|
|
|
+ expect(schKerberosClient.getServiceComponentName()).andReturn(Role.KERBEROS_CLIENT.name()).anyTimes();
|
|
|
+ expect(schKerberosClient.getHostName()).andReturn("host1").anyTimes();
|
|
|
+ expect(schKerberosClient.getState()).andReturn(State.INSTALLED).anyTimes();
|
|
|
|
|
|
- replay(cluster);
|
|
|
- assertFalse(kerberosHelper.isClusterKerberosEnabled(cluster));
|
|
|
- verify(cluster);
|
|
|
- }
|
|
|
+ final ServiceComponentHost sch1 = createMock(ServiceComponentHost.class);
|
|
|
+ expect(sch1.getServiceName()).andReturn("SERVICE1").anyTimes();
|
|
|
+ expect(sch1.getServiceComponentName()).andReturn("COMPONENT1").anyTimes();
|
|
|
+ expect(sch1.getHostName()).andReturn("host1").anyTimes();
|
|
|
|
|
|
- @Test
|
|
|
- public void testIsClusterKerberosEnabled_true() throws Exception {
|
|
|
- KerberosHelper kerberosHelper = injector.getInstance(KerberosHelper.class);
|
|
|
- Cluster cluster = createStrictMock(Cluster.class);
|
|
|
+ final ServiceComponentHost sch2 = createStrictMock(ServiceComponentHost.class);
|
|
|
+ expect(sch2.getServiceName()).andReturn("SERVICE2").anyTimes();
|
|
|
+ expect(sch2.getServiceComponentName()).andReturn("COMPONENT3").anyTimes();
|
|
|
|
|
|
- expect(cluster.getSecurityType()).andReturn(SecurityType.KERBEROS);
|
|
|
+ final ServiceComponentHost sch3 = createStrictMock(ServiceComponentHost.class);
|
|
|
+ expect(sch3.getServiceName()).andReturn("SERVICE3").anyTimes();
|
|
|
+ expect(sch3.getServiceComponentName()).andReturn("COMPONENT3").anyTimes();
|
|
|
+ expect(sch3.getHostName()).andReturn("host1").anyTimes();
|
|
|
|
|
|
- replay(cluster);
|
|
|
- assertTrue(kerberosHelper.isClusterKerberosEnabled(cluster));
|
|
|
- verify(cluster);
|
|
|
- }
|
|
|
+ final Host host = createNiceMock(Host.class);
|
|
|
+ expect(host.getHostName()).andReturn("host1").anyTimes();
|
|
|
+ expect(host.getState()).andReturn(HostState.HEALTHY).anyTimes();
|
|
|
|
|
|
- private void setClusterController() throws Exception {
|
|
|
- KerberosHelper kerberosHelper = injector.getInstance(KerberosHelper.class);
|
|
|
+ final ServiceComponent serviceComponentKerberosClient = createNiceMock(ServiceComponent.class);
|
|
|
+ expect(serviceComponentKerberosClient.getName()).andReturn(Role.KERBEROS_CLIENT.name()).anyTimes();
|
|
|
+ expect(serviceComponentKerberosClient.getServiceComponentHosts()).andReturn(Collections.singletonMap("host1", schKerberosClient)).anyTimes();
|
|
|
|
|
|
- Class<?> c = kerberosHelper.getClass();
|
|
|
+ final Service serviceKerberos = createStrictMock(Service.class);
|
|
|
+ expect(serviceKerberos.getName()).andReturn(Service.Type.KERBEROS.name()).anyTimes();
|
|
|
+ expect(serviceKerberos.getServiceComponents())
|
|
|
+ .andReturn(Collections.singletonMap(Role.KERBEROS_CLIENT.name(), serviceComponentKerberosClient))
|
|
|
+ .times(3);
|
|
|
|
|
|
- Field f = c.getDeclaredField("clusterController");
|
|
|
- f.setAccessible(true);
|
|
|
- f.set(kerberosHelper, clusterController);
|
|
|
+ final Service service1 = createStrictMock(Service.class);
|
|
|
+ expect(service1.getName()).andReturn("SERVICE1").anyTimes();
|
|
|
+ expect(service1.getServiceComponents())
|
|
|
+ .andReturn(Collections.<String, ServiceComponent>emptyMap())
|
|
|
+ .times(3);
|
|
|
+
|
|
|
+ final Service service2 = createStrictMock(Service.class);
|
|
|
+ expect(service2.getName()).andReturn("SERVICE2").anyTimes();
|
|
|
+ expect(service2.getServiceComponents())
|
|
|
+ .andReturn(Collections.<String, ServiceComponent>emptyMap())
|
|
|
+ .times(3);
|
|
|
+
|
|
|
+ final Map<String, String> kerberosEnvProperties = createNiceMock(Map.class);
|
|
|
+ expect(kerberosEnvProperties.get("kdc_type")).andReturn("mit-kdc").anyTimes();
|
|
|
+ expect(kerberosEnvProperties.get("realm")).andReturn("FOOBAR.COM").anyTimes();
|
|
|
+
|
|
|
+ final Config kerberosEnvConfig = createNiceMock(Config.class);
|
|
|
+ expect(kerberosEnvConfig.getProperties()).andReturn(kerberosEnvProperties).anyTimes();
|
|
|
+
|
|
|
+ final Map<String, String> krb5ConfProperties = createNiceMock(Map.class);
|
|
|
+
|
|
|
+ final Config krb5ConfConfig = createNiceMock(Config.class);
|
|
|
+ expect(krb5ConfConfig.getProperties()).andReturn(krb5ConfProperties).anyTimes();
|
|
|
+
|
|
|
+ final Cluster cluster = createNiceMock(Cluster.class);
|
|
|
+ expect(cluster.getDesiredConfigByType("krb5-conf")).andReturn(krb5ConfConfig).anyTimes();
|
|
|
+ expect(cluster.getDesiredConfigByType("kerberos-env")).andReturn(kerberosEnvConfig).anyTimes();
|
|
|
+ expect(cluster.getClusterName()).andReturn("c1").anyTimes();
|
|
|
+ expect(cluster.getServices())
|
|
|
+ .andReturn(new HashMap<String, Service>() {
|
|
|
+ {
|
|
|
+ put(Service.Type.KERBEROS.name(), serviceKerberos);
|
|
|
+ put("SERVICE1", service1);
|
|
|
+ put("SERVICE2", service2);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .anyTimes();
|
|
|
+ expect(cluster.getServiceComponentHosts("host1"))
|
|
|
+ .andReturn(new ArrayList<ServiceComponentHost>() {
|
|
|
+ {
|
|
|
+ add(sch1);
|
|
|
+ add(sch2);
|
|
|
+ add(sch3);
|
|
|
+ add(schKerberosClient);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .once();
|
|
|
+ expect(cluster.getCurrentStackVersion())
|
|
|
+ .andReturn(new StackId("HDP", "2.2"))
|
|
|
+ .anyTimes();
|
|
|
+ expect(cluster.getSessionAttributes()).andReturn(new HashMap<String, Object>() {{
|
|
|
+ if (kerberosCredential != null) {
|
|
|
+ put("kerberos_admin/" + KerberosCredential.KEY_NAME_PRINCIPAL, kerberosCredential.getPrincipal());
|
|
|
+ put("kerberos_admin/" + KerberosCredential.KEY_NAME_PASSWORD, kerberosCredential.getPassword());
|
|
|
+ put("kerberos_admin/" + KerberosCredential.KEY_NAME_KEYTAB, kerberosCredential.getKeytab());
|
|
|
+ }
|
|
|
+ }}).anyTimes();
|
|
|
+
|
|
|
+ final Clusters clusters = injector.getInstance(Clusters.class);
|
|
|
+ expect(clusters.getHostsForCluster("c1"))
|
|
|
+ .andReturn(new HashMap<String, Host>() {
|
|
|
+ {
|
|
|
+ put("host1", host);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .once();
|
|
|
+ expect(clusters.getHost("host1"))
|
|
|
+ .andReturn(host)
|
|
|
+ .once();
|
|
|
+
|
|
|
+ final AmbariManagementController ambariManagementController = injector.getInstance(AmbariManagementController.class);
|
|
|
+ expect(ambariManagementController.findConfigurationTagsWithOverrides(cluster, "host1"))
|
|
|
+ .andReturn(Collections.<String, Map<String, String>>emptyMap())
|
|
|
+ .once();
|
|
|
+ expect(ambariManagementController.findConfigurationTagsWithOverrides(cluster, null))
|
|
|
+ .andReturn(Collections.<String, Map<String, String>>emptyMap())
|
|
|
+ .once();
|
|
|
+ expect(ambariManagementController.getRoleCommandOrder(cluster))
|
|
|
+ .andReturn(createNiceMock(RoleCommandOrder.class))
|
|
|
+ .once();
|
|
|
+
|
|
|
+ final ConfigHelper configHelper = injector.getInstance(ConfigHelper.class);
|
|
|
+ expect(configHelper.getEffectiveConfigProperties(anyObject(Cluster.class), anyObject(Map.class)))
|
|
|
+ .andReturn(new HashMap<String, Map<String, String>>() {
|
|
|
+ {
|
|
|
+ put("cluster-env", new HashMap<String, String>() {{
|
|
|
+ put("kerberos_domain", "FOOBAR.COM");
|
|
|
+ }});
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .times(2);
|
|
|
+
|
|
|
+ final KerberosPrincipalDescriptor principalDescriptor1a = createMock(KerberosPrincipalDescriptor.class);
|
|
|
+ expect(principalDescriptor1a.getValue()).andReturn("component1a/_HOST@${realm}").anyTimes();
|
|
|
+ expect(principalDescriptor1a.getType()).andReturn(KerberosPrincipalType.SERVICE).anyTimes();
|
|
|
+ expect(principalDescriptor1a.getLocalUsername()).andReturn(null).anyTimes();
|
|
|
+ expect(principalDescriptor1a.getConfiguration()).andReturn("service1b-site/component1.kerberos.principal").anyTimes();
|
|
|
+
|
|
|
+ final KerberosPrincipalDescriptor principalDescriptor1b = createMock(KerberosPrincipalDescriptor.class);
|
|
|
+ expect(principalDescriptor1b.getValue()).andReturn("component1b/_HOST@${realm}").anyTimes();
|
|
|
+ expect(principalDescriptor1b.getType()).andReturn(KerberosPrincipalType.SERVICE).anyTimes();
|
|
|
+ expect(principalDescriptor1b.getLocalUsername()).andReturn(null).anyTimes();
|
|
|
+ expect(principalDescriptor1b.getConfiguration()).andReturn("service1b-site/component1.kerberos.principal").anyTimes();
|
|
|
+
|
|
|
+ final KerberosPrincipalDescriptor principalDescriptor3 = createMock(KerberosPrincipalDescriptor.class);
|
|
|
+ expect(principalDescriptor3.getValue()).andReturn("component3/${host}@${realm}").anyTimes();
|
|
|
+ expect(principalDescriptor3.getType()).andReturn(KerberosPrincipalType.SERVICE).anyTimes();
|
|
|
+ expect(principalDescriptor3.getLocalUsername()).andReturn(null).anyTimes();
|
|
|
+ expect(principalDescriptor3.getConfiguration()).andReturn("service3-site/component3.kerberos.principal").anyTimes();
|
|
|
+
|
|
|
+ final KerberosKeytabDescriptor keytabDescriptor1 = createMock(KerberosKeytabDescriptor.class);
|
|
|
+ expect(keytabDescriptor1.getFile()).andReturn("${keytab_dir}/service1.keytab").once();
|
|
|
+ expect(keytabDescriptor1.getOwnerName()).andReturn("service1").once();
|
|
|
+ expect(keytabDescriptor1.getOwnerAccess()).andReturn("rw").once();
|
|
|
+ expect(keytabDescriptor1.getGroupName()).andReturn("hadoop").once();
|
|
|
+ expect(keytabDescriptor1.getGroupAccess()).andReturn("").once();
|
|
|
+ expect(keytabDescriptor1.getConfiguration()).andReturn("service1-site/component1.keytab.file").once();
|
|
|
+
|
|
|
+ final KerberosKeytabDescriptor keytabDescriptor3 = createMock(KerberosKeytabDescriptor.class);
|
|
|
+ expect(keytabDescriptor3.getFile()).andReturn("${keytab_dir}/service3.keytab").once();
|
|
|
+ expect(keytabDescriptor3.getOwnerName()).andReturn("service3").once();
|
|
|
+ expect(keytabDescriptor3.getOwnerAccess()).andReturn("rw").once();
|
|
|
+ expect(keytabDescriptor3.getGroupName()).andReturn("hadoop").once();
|
|
|
+ expect(keytabDescriptor3.getGroupAccess()).andReturn("").once();
|
|
|
+ expect(keytabDescriptor3.getConfiguration()).andReturn("service3-site/component3.keytab.file").once();
|
|
|
+
|
|
|
+ final KerberosIdentityDescriptor identityDescriptor1a = createMock(KerberosIdentityDescriptor.class);
|
|
|
+ expect(identityDescriptor1a.getName()).andReturn("identity1a").anyTimes();
|
|
|
+ expect(identityDescriptor1a.getPrincipalDescriptor()).andReturn(principalDescriptor1a).anyTimes();
|
|
|
+ expect(identityDescriptor1a.getKeytabDescriptor()).andReturn(keytabDescriptor1).anyTimes();
|
|
|
+
|
|
|
+ final KerberosIdentityDescriptor identityDescriptor1b = createMock(KerberosIdentityDescriptor.class);
|
|
|
+ expect(identityDescriptor1b.getName()).andReturn("identity1b").anyTimes();
|
|
|
+ expect(identityDescriptor1b.getPrincipalDescriptor()).andReturn(principalDescriptor1b).anyTimes();
|
|
|
+
|
|
|
+ final KerberosIdentityDescriptor identityDescriptor3 = createMock(KerberosIdentityDescriptor.class);
|
|
|
+ expect(identityDescriptor3.getName()).andReturn("identity3").anyTimes();
|
|
|
+ expect(identityDescriptor3.getPrincipalDescriptor()).andReturn(principalDescriptor3).anyTimes();
|
|
|
+ expect(identityDescriptor3.getKeytabDescriptor()).andReturn(keytabDescriptor3).anyTimes();
|
|
|
+
|
|
|
+ final ArrayList<KerberosIdentityDescriptor> identityDescriptors1 = new ArrayList<KerberosIdentityDescriptor>() {{
|
|
|
+ add(identityDescriptor1a);
|
|
|
+ add(identityDescriptor1b);
|
|
|
+ }};
|
|
|
+ final KerberosComponentDescriptor componentDescriptor1 = createStrictMock(KerberosComponentDescriptor.class);
|
|
|
+ expect(componentDescriptor1.getIdentities(true)).andReturn(identityDescriptors1).times(1);
|
|
|
+ expect(componentDescriptor1.getConfigurations(true)).andReturn(null).times(1);
|
|
|
+ expect(componentDescriptor1.getIdentities(true)).andReturn(identityDescriptors1).times(1);
|
|
|
+ expect(componentDescriptor1.getAuthToLocalProperties()).andReturn(null).times(1);
|
|
|
+
|
|
|
+ final ArrayList<KerberosIdentityDescriptor> identityDescriptors3 = new ArrayList<KerberosIdentityDescriptor>() {{
|
|
|
+ add(identityDescriptor3);
|
|
|
+ }};
|
|
|
+ final KerberosComponentDescriptor componentDescriptor3 = createStrictMock(KerberosComponentDescriptor.class);
|
|
|
+ expect(componentDescriptor3.getIdentities(true)).andReturn(identityDescriptors3).times(1);
|
|
|
+ expect(componentDescriptor3.getConfigurations(true)).andReturn(null).times(1);
|
|
|
+
|
|
|
+ final KerberosServiceDescriptor serviceDescriptor1 = createMock(KerberosServiceDescriptor.class);
|
|
|
+ expect(serviceDescriptor1.getIdentities(true)).andReturn(null).times(1);
|
|
|
+ expect(serviceDescriptor1.getName()).andReturn("SERVICE1").times(1);
|
|
|
+ expect(serviceDescriptor1.getIdentities(true)).andReturn(null).times(1);
|
|
|
+ expect(serviceDescriptor1.getComponents()).andReturn(new HashMap<String, KerberosComponentDescriptor>(){{
|
|
|
+ put("COMPONENT1", componentDescriptor1);
|
|
|
+ }}).times(1);
|
|
|
+ expect(serviceDescriptor1.getComponent("COMPONENT1")).andReturn(componentDescriptor1).once();
|
|
|
+ expect(serviceDescriptor1.getAuthToLocalProperties()).andReturn(null).once();
|
|
|
+
|
|
|
+ final KerberosServiceDescriptor serviceDescriptor3 = createMock(KerberosServiceDescriptor.class);
|
|
|
+ expect(serviceDescriptor3.getIdentities(true)).andReturn(null).times(1);
|
|
|
+ expect(serviceDescriptor3.getName()).andReturn("SERVICE3").times(1);
|
|
|
+ expect(serviceDescriptor3.getComponent("COMPONENT3")).andReturn(componentDescriptor3).once();
|
|
|
+
|
|
|
+ final KerberosDescriptor kerberosDescriptor = createStrictMock(KerberosDescriptor.class);
|
|
|
+ expect(kerberosDescriptor.getProperties()).andReturn(null).once();
|
|
|
+ expect(kerberosDescriptor.getService("SERVICE1")).andReturn(serviceDescriptor1).once();
|
|
|
+ expect(kerberosDescriptor.getService("SERVICE3")).andReturn(serviceDescriptor3).once();
|
|
|
+ expect(kerberosDescriptor.getIdentities()).andReturn(null).once();
|
|
|
+ expect(kerberosDescriptor.getAuthToLocalProperties()).andReturn(null).once();
|
|
|
+ expect(kerberosDescriptor.getServices()).andReturn(new HashMap<String, KerberosServiceDescriptor>()
|
|
|
+ {{
|
|
|
+ put("SERVCE1", serviceDescriptor1);
|
|
|
+ put("SERVCE2", serviceDescriptor3);
|
|
|
+ }}).once();
|
|
|
+
|
|
|
+ setupGetDescriptorFromCluster(kerberosDescriptor);
|
|
|
+
|
|
|
+ final StageFactory stageFactory = injector.getInstance(StageFactory.class);
|
|
|
+ expect(stageFactory.createNew(anyLong(), anyObject(String.class), anyObject(String.class),
|
|
|
+ anyLong(), anyObject(String.class), anyObject(String.class), anyObject(String.class),
|
|
|
+ anyObject(String.class)))
|
|
|
+ .andAnswer(new IAnswer<Stage>() {
|
|
|
+ @Override
|
|
|
+ public Stage answer() throws Throwable {
|
|
|
+ Stage stage = createNiceMock(Stage.class);
|
|
|
+
|
|
|
+ expect(stage.getHostRoleCommands())
|
|
|
+ .andReturn(Collections.<String, Map<String, HostRoleCommand>>emptyMap())
|
|
|
+ .anyTimes();
|
|
|
+ replay(stage);
|
|
|
+ return stage;
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .anyTimes();
|
|
|
+
|
|
|
+ // This is a STRICT mock to help ensure that the end result is what we want.
|
|
|
+ final RequestStageContainer requestStageContainer = createStrictMock(RequestStageContainer.class);
|
|
|
+ // Delete Principals Stage
|
|
|
+ expect(requestStageContainer.getLastStageId()).andReturn(-1L).anyTimes();
|
|
|
+ expect(requestStageContainer.getId()).andReturn(1L).once();
|
|
|
+ requestStageContainer.addStages(anyObject(List.class));
|
|
|
+ expectLastCall().once();
|
|
|
+ // Delete Keytabs Stage
|
|
|
+ expect(requestStageContainer.getLastStageId()).andReturn(-1L).anyTimes();
|
|
|
+ expect(requestStageContainer.getId()).andReturn(1L).once();
|
|
|
+ requestStageContainer.addStages(anyObject(List.class));
|
|
|
+ expectLastCall().once();
|
|
|
+ // Clean-up/Finalize Stage
|
|
|
+ expect(requestStageContainer.getLastStageId()).andReturn(-1L).anyTimes();
|
|
|
+ expect(requestStageContainer.getId()).andReturn(1L).once();
|
|
|
+ requestStageContainer.addStages(anyObject(List.class));
|
|
|
+ expectLastCall().once();
|
|
|
+
|
|
|
+ replayAll();
|
|
|
+
|
|
|
+ // Needed by infrastructure
|
|
|
+ injector.getInstance(AmbariMetaInfo.class).init();
|
|
|
+
|
|
|
+ Map<String, Collection<String>> serviceComponentFilter = new HashMap<String, Collection<String>>();
|
|
|
+ Collection<String> identityFilter = Arrays.asList("identity1a", "identity3");
|
|
|
+
|
|
|
+ serviceComponentFilter.put("SERVICE3", Collections.singleton("COMPONENT3"));
|
|
|
+ serviceComponentFilter.put("SERVICE1", null);
|
|
|
+
|
|
|
+ kerberosHelper.deleteIdentities(cluster, serviceComponentFilter, identityFilter, requestStageContainer);
|
|
|
+
|
|
|
+ verifyAll();
|
|
|
}
|
|
|
}
|