|
|
@@ -55,8 +55,8 @@ 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.AmbariManagementControllerImpl;
|
|
|
-import org.apache.ambari.server.controller.KerberosHelper;
|
|
|
import org.apache.ambari.server.controller.MaintenanceStateHelper;
|
|
|
+import org.apache.ambari.server.controller.ServiceConfigVersionResponse;
|
|
|
import org.apache.ambari.server.orm.DBAccessor;
|
|
|
import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo;
|
|
|
import org.apache.ambari.server.orm.dao.ArtifactDAO;
|
|
|
@@ -74,6 +74,7 @@ import org.apache.ambari.server.state.StackInfo;
|
|
|
import org.apache.ambari.server.state.kerberos.KerberosComponentDescriptor;
|
|
|
import org.apache.ambari.server.state.kerberos.KerberosDescriptor;
|
|
|
import org.apache.ambari.server.state.kerberos.KerberosDescriptorFactory;
|
|
|
+import org.apache.ambari.server.state.kerberos.KerberosIdentityDescriptor;
|
|
|
import org.apache.ambari.server.state.kerberos.KerberosServiceDescriptor;
|
|
|
import org.apache.ambari.server.state.stack.OsFamily;
|
|
|
import org.apache.commons.io.FileUtils;
|
|
|
@@ -131,41 +132,16 @@ public class UpgradeCatalog260Test {
|
|
|
@Mock(type = MockType.NICE)
|
|
|
private OsFamily osFamily;
|
|
|
|
|
|
- @Mock(type = MockType.NICE)
|
|
|
- private KerberosHelper kerberosHelper;
|
|
|
-
|
|
|
- @Mock(type = MockType.NICE)
|
|
|
- private ActionManager actionManager;
|
|
|
-
|
|
|
- @Mock(type = MockType.NICE)
|
|
|
- private Config config;
|
|
|
-
|
|
|
- @Mock(type = MockType.STRICT)
|
|
|
- private Service service;
|
|
|
-
|
|
|
- @Mock(type = MockType.NICE)
|
|
|
- private Clusters clusters;
|
|
|
-
|
|
|
- @Mock(type = MockType.NICE)
|
|
|
- private Cluster cluster;
|
|
|
-
|
|
|
- @Mock(type = MockType.NICE)
|
|
|
- private Injector injector;
|
|
|
-
|
|
|
@Rule
|
|
|
public TemporaryFolder temporaryFolder = new TemporaryFolder();
|
|
|
|
|
|
@Before
|
|
|
public void init() {
|
|
|
- reset(entityManagerProvider, injector);
|
|
|
+ reset(entityManagerProvider);
|
|
|
|
|
|
expect(entityManagerProvider.get()).andReturn(entityManager).anyTimes();
|
|
|
|
|
|
- expect(injector.getInstance(Gson.class)).andReturn(null).anyTimes();
|
|
|
- expect(injector.getInstance(MaintenanceStateHelper.class)).andReturn(null).anyTimes();
|
|
|
- expect(injector.getInstance(KerberosHelper.class)).andReturn(kerberosHelper).anyTimes();
|
|
|
-
|
|
|
- replay(entityManagerProvider, injector);
|
|
|
+ replay(entityManagerProvider);
|
|
|
}
|
|
|
|
|
|
@After
|
|
|
@@ -227,17 +203,7 @@ public class UpgradeCatalog260Test {
|
|
|
|
|
|
replay(dbAccessor, configuration, connection, statement, resultSet);
|
|
|
|
|
|
- Module module = new Module() {
|
|
|
- @Override
|
|
|
- public void configure(Binder binder) {
|
|
|
- binder.bind(DBAccessor.class).toInstance(dbAccessor);
|
|
|
- binder.bind(OsFamily.class).toInstance(osFamily);
|
|
|
- binder.bind(EntityManager.class).toInstance(entityManager);
|
|
|
- binder.bind(Configuration.class).toInstance(configuration);
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- Injector injector = Guice.createInjector(module);
|
|
|
+ Injector injector = getInjector();
|
|
|
UpgradeCatalog260 upgradeCatalog260 = injector.getInstance(UpgradeCatalog260.class);
|
|
|
upgradeCatalog260.executeDDLUpdates();
|
|
|
|
|
|
@@ -261,7 +227,7 @@ public class UpgradeCatalog260Test {
|
|
|
expectLastCall().once();
|
|
|
}
|
|
|
|
|
|
- public void expectRenameServiceDeletedColumn(Capture<DBColumnInfo> unmapped) throws SQLException {
|
|
|
+ public void expectRenameServiceDeletedColumn(Capture<DBColumnInfo> unmapped) throws SQLException {
|
|
|
dbAccessor.renameColumn(eq(UpgradeCatalog260.CLUSTER_CONFIG_TABLE), eq(UpgradeCatalog260.SERVICE_DELETED_COLUMN), capture(unmapped));
|
|
|
expectLastCall().once();
|
|
|
}
|
|
|
@@ -355,7 +321,7 @@ public class UpgradeCatalog260Test {
|
|
|
}
|
|
|
|
|
|
public void expectUpdateUpgradeTable(Capture<DBColumnInfo> rvid,
|
|
|
- Capture<DBColumnInfo> orchestration, Capture<DBColumnInfo> revertAllowed)
|
|
|
+ Capture<DBColumnInfo> orchestration, Capture<DBColumnInfo> revertAllowed)
|
|
|
throws SQLException {
|
|
|
|
|
|
dbAccessor.clearTable(eq(UpgradeCatalog260.UPGRADE_TABLE));
|
|
|
@@ -557,17 +523,7 @@ public class UpgradeCatalog260Test {
|
|
|
expectLastCall().once();
|
|
|
replay(dbAccessor, configuration, connection, statement, resultSet);
|
|
|
|
|
|
- Module module = new Module() {
|
|
|
- @Override
|
|
|
- public void configure(Binder binder) {
|
|
|
- binder.bind(DBAccessor.class).toInstance(dbAccessor);
|
|
|
- binder.bind(OsFamily.class).toInstance(osFamily);
|
|
|
- binder.bind(EntityManager.class).toInstance(entityManager);
|
|
|
- binder.bind(Configuration.class).toInstance(configuration);
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
- Injector injector = Guice.createInjector(module);
|
|
|
+ Injector injector = getInjector();
|
|
|
UpgradeCatalog260 upgradeCatalog260 = injector.getInstance(UpgradeCatalog260.class);
|
|
|
upgradeCatalog260.executePreDMLUpdates();
|
|
|
|
|
|
@@ -605,27 +561,17 @@ public class UpgradeCatalog260Test {
|
|
|
@Test
|
|
|
public void testEnsureZeppelinProxyUserConfigs() throws AmbariException {
|
|
|
|
|
|
- final Clusters clusters = createMock(Clusters.class);
|
|
|
+ Injector injector = getInjector();
|
|
|
+
|
|
|
+ final Clusters clusters = injector.getInstance(Clusters.class);
|
|
|
final Cluster cluster = createMock(Cluster.class);
|
|
|
final Config zeppelinEnvConf = createMock(Config.class);
|
|
|
final Config coreSiteConf = createMock(Config.class);
|
|
|
final Config coreSiteConfNew = createMock(Config.class);
|
|
|
- final AmbariManagementController controller = createMock(AmbariManagementController.class);
|
|
|
+ final AmbariManagementController controller = injector.getInstance(AmbariManagementController.class);
|
|
|
|
|
|
Capture<? extends Map<String, String>> captureCoreSiteConfProperties = newCapture();
|
|
|
|
|
|
- Module module = new Module() {
|
|
|
- @Override
|
|
|
- public void configure(Binder binder) {
|
|
|
- binder.bind(DBAccessor.class).toInstance(dbAccessor);
|
|
|
- binder.bind(OsFamily.class).toInstance(osFamily);
|
|
|
- binder.bind(EntityManager.class).toInstance(entityManager);
|
|
|
- binder.bind(Configuration.class).toInstance(configuration);
|
|
|
- binder.bind(Clusters.class).toInstance(clusters);
|
|
|
- binder.bind(AmbariManagementController.class).toInstance(controller);
|
|
|
- }
|
|
|
- };
|
|
|
-
|
|
|
expect(clusters.getClusters()).andReturn(Collections.singletonMap("c1", cluster)).once();
|
|
|
|
|
|
expect(cluster.getClusterName()).andReturn("c1").atLeastOnce();
|
|
|
@@ -648,7 +594,6 @@ public class UpgradeCatalog260Test {
|
|
|
|
|
|
replay(clusters, cluster, zeppelinEnvConf, coreSiteConf, coreSiteConfNew, controller);
|
|
|
|
|
|
- Injector injector = Guice.createInjector(module);
|
|
|
UpgradeCatalog260 upgradeCatalog260 = injector.getInstance(UpgradeCatalog260.class);
|
|
|
upgradeCatalog260.ensureZeppelinProxyUserConfigs();
|
|
|
|
|
|
@@ -662,6 +607,8 @@ public class UpgradeCatalog260Test {
|
|
|
@Test
|
|
|
public void testUpdateKerberosDescriptorArtifact() throws Exception {
|
|
|
|
|
|
+ Injector injector = getInjector();
|
|
|
+
|
|
|
URL systemResourceURL = ClassLoader.getSystemResource("kerberos/test_kerberos_descriptor_ranger_kms.json");
|
|
|
Assert.assertNotNull(systemResourceURL);
|
|
|
|
|
|
@@ -672,28 +619,71 @@ public class UpgradeCatalog260Test {
|
|
|
serviceDescriptor = kerberosDescriptor.getService("RANGER_KMS");
|
|
|
Assert.assertNotNull(serviceDescriptor);
|
|
|
Assert.assertNotNull(serviceDescriptor.getIdentity("/smokeuser"));
|
|
|
+ Assert.assertNotNull(serviceDescriptor.getIdentity("/spnego"));
|
|
|
|
|
|
KerberosComponentDescriptor componentDescriptor;
|
|
|
componentDescriptor = serviceDescriptor.getComponent("RANGER_KMS_SERVER");
|
|
|
Assert.assertNotNull(componentDescriptor);
|
|
|
Assert.assertNotNull(componentDescriptor.getIdentity("/smokeuser"));
|
|
|
+ Assert.assertNotNull(componentDescriptor.getIdentity("/spnego"));
|
|
|
+ Assert.assertNotNull(componentDescriptor.getIdentity("/spnego").getPrincipalDescriptor());
|
|
|
+ Assert.assertEquals("invalid_name@${realm}", componentDescriptor.getIdentity("/spnego").getPrincipalDescriptor().getValue());
|
|
|
|
|
|
ArtifactEntity artifactEntity = createMock(ArtifactEntity.class);
|
|
|
|
|
|
expect(artifactEntity.getArtifactData()).andReturn(kerberosDescriptor.toMap()).once();
|
|
|
|
|
|
Capture<Map<String, Object>> captureMap = newCapture();
|
|
|
+ expect(artifactEntity.getForeignKeys()).andReturn(Collections.singletonMap("cluster", "2"));
|
|
|
artifactEntity.setArtifactData(capture(captureMap));
|
|
|
expectLastCall().once();
|
|
|
|
|
|
ArtifactDAO artifactDAO = createMock(ArtifactDAO.class);
|
|
|
expect(artifactDAO.merge(artifactEntity)).andReturn(artifactEntity).atLeastOnce();
|
|
|
|
|
|
- replay(artifactDAO, artifactEntity);
|
|
|
+ Map<String, String> properties = new HashMap<>();
|
|
|
+ properties.put("ranger.ks.kerberos.principal", "correct_value@EXAMPLE.COM");
|
|
|
+ properties.put("xasecure.audit.jaas.Client.option.principal", "wrong_value@EXAMPLE.COM");
|
|
|
+
|
|
|
+ Config config = createMock(Config.class);
|
|
|
+ expect(config.getProperties()).andReturn(properties).anyTimes();
|
|
|
+ expect(config.getPropertiesAttributes()).andReturn(Collections.<String, Map<String, String>>emptyMap()).anyTimes();
|
|
|
+ expect(config.getTag()).andReturn("version1").anyTimes();
|
|
|
+ expect(config.getType()).andReturn("ranger-kms-audit").anyTimes();
|
|
|
+
|
|
|
+ Config newConfig = createMock(Config.class);
|
|
|
+ expect(newConfig.getTag()).andReturn("version2").anyTimes();
|
|
|
+ expect(newConfig.getType()).andReturn("ranger-kms-audit").anyTimes();
|
|
|
+
|
|
|
+ ServiceConfigVersionResponse response = createMock(ServiceConfigVersionResponse.class);
|
|
|
+
|
|
|
+ StackId stackId = createMock(StackId.class);
|
|
|
+
|
|
|
+ Cluster cluster = createMock(Cluster.class);
|
|
|
+ expect(cluster.getDesiredStackVersion()).andReturn(stackId).anyTimes();
|
|
|
+ expect(cluster.getDesiredConfigByType("dbks-site")).andReturn(config).anyTimes();
|
|
|
+ expect(cluster.getDesiredConfigByType("ranger-kms-audit")).andReturn(config).anyTimes();
|
|
|
+ expect(cluster.getConfigsByType("ranger-kms-audit")).andReturn(Collections.singletonMap("version1", config)).anyTimes();
|
|
|
+ expect(cluster.getServiceByConfigType("ranger-kms-audit")).andReturn("RANGER").anyTimes();
|
|
|
+ expect(cluster.getClusterName()).andReturn("cl1").anyTimes();
|
|
|
+ expect(cluster.getConfig(eq("ranger-kms-audit"), anyString())).andReturn(newConfig).once();
|
|
|
+ expect(cluster.addDesiredConfig("ambari-upgrade", Collections.singleton(newConfig), "Updated ranger-kms-audit during Ambari Upgrade from 2.5.2 to 2.6.0.")).andReturn(response).once();
|
|
|
+
|
|
|
+ final Clusters clusters = injector.getInstance(Clusters.class);
|
|
|
+ expect(clusters.getCluster(2L)).andReturn(cluster).anyTimes();
|
|
|
|
|
|
- UpgradeCatalog260 upgradeCatalog260 = createMockBuilder(UpgradeCatalog260.class).createMock();
|
|
|
+ Capture<? extends Map<String, String>> captureProperties = newCapture();
|
|
|
+
|
|
|
+ AmbariManagementController controller = injector.getInstance(AmbariManagementController.class);
|
|
|
+ expect(controller.createConfig(eq(cluster), eq(stackId), eq("ranger-kms-audit"), capture(captureProperties), anyString(), anyObject(Map.class)))
|
|
|
+ .andReturn(null)
|
|
|
+ .once();
|
|
|
+
|
|
|
+ replay(artifactDAO, artifactEntity, cluster, clusters, config, newConfig, response, controller, stackId);
|
|
|
+
|
|
|
+ UpgradeCatalog260 upgradeCatalog260 = injector.getInstance(UpgradeCatalog260.class);
|
|
|
upgradeCatalog260.updateKerberosDescriptorArtifact(artifactDAO, artifactEntity);
|
|
|
- verify(artifactDAO, artifactEntity);
|
|
|
+ verify(artifactDAO, artifactEntity, cluster, clusters, config, newConfig, response, controller, stackId);
|
|
|
|
|
|
KerberosDescriptor kerberosDescriptorUpdated = new KerberosDescriptorFactory().createInstance(captureMap.getValue());
|
|
|
Assert.assertNotNull(kerberosDescriptorUpdated);
|
|
|
@@ -701,10 +691,27 @@ public class UpgradeCatalog260Test {
|
|
|
Assert.assertNull(kerberosDescriptorUpdated.getService("RANGER_KMS").getIdentity("/smokeuser"));
|
|
|
Assert.assertNull(kerberosDescriptorUpdated.getService("RANGER_KMS").getComponent("RANGER_KMS_SERVER").getIdentity("/smokeuser"));
|
|
|
|
|
|
+ KerberosIdentityDescriptor identity;
|
|
|
+
|
|
|
+ Assert.assertNull(kerberosDescriptorUpdated.getService("RANGER_KMS").getIdentity("/spnego"));
|
|
|
+ identity = kerberosDescriptorUpdated.getService("RANGER_KMS").getIdentity("ranger_kms_spnego");
|
|
|
+ Assert.assertNotNull(identity);
|
|
|
+ Assert.assertEquals("/spnego", identity.getReference());
|
|
|
+
|
|
|
+ Assert.assertNull(kerberosDescriptorUpdated.getService("RANGER_KMS").getComponent("RANGER_KMS_SERVER").getIdentity("/spnego"));
|
|
|
+ identity = kerberosDescriptorUpdated.getService("RANGER_KMS").getComponent("RANGER_KMS_SERVER").getIdentity("ranger_kms_ranger_kms_server_spnego");
|
|
|
+ Assert.assertNotNull(identity);
|
|
|
+ Assert.assertEquals("/spnego", identity.getReference());
|
|
|
+ Assert.assertNotNull(identity.getPrincipalDescriptor());
|
|
|
+ Assert.assertNull(identity.getPrincipalDescriptor().getValue());
|
|
|
+
|
|
|
+ Assert.assertTrue(captureProperties.hasCaptured());
|
|
|
+ Map<String, String> newProperties = captureProperties.getValue();
|
|
|
+ Assert.assertEquals("correct_value@EXAMPLE.COM", newProperties.get("xasecure.audit.jaas.Client.option.principal"));
|
|
|
}
|
|
|
|
|
|
@Test
|
|
|
- public void testUpdateAmsConfigs() throws Exception{
|
|
|
+ public void testUpdateAmsConfigs() throws Exception {
|
|
|
|
|
|
Map<String, String> oldProperties = new HashMap<String, String>() {
|
|
|
{
|
|
|
@@ -832,5 +839,19 @@ public class UpgradeCatalog260Test {
|
|
|
verify(clusters, cluster, controller, widgetDAO, widgetEntity, stackInfo, serviceInfo);
|
|
|
}
|
|
|
|
|
|
+ private Injector getInjector() {
|
|
|
+
|
|
|
+ return Guice.createInjector(new Module() {
|
|
|
+ @Override
|
|
|
+ public void configure(Binder binder) {
|
|
|
+ binder.bind(DBAccessor.class).toInstance(dbAccessor);
|
|
|
+ binder.bind(OsFamily.class).toInstance(osFamily);
|
|
|
+ binder.bind(EntityManager.class).toInstance(entityManager);
|
|
|
+ binder.bind(Configuration.class).toInstance(configuration);
|
|
|
+ binder.bind(Clusters.class).toInstance(createMock(Clusters.class));
|
|
|
+ binder.bind(AmbariManagementController.class).toInstance(createMock(AmbariManagementController.class));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
}
|