Repository: ambari Updated Branches: refs/heads/trunk 3508f08f9 -> fe39b6460
http://git-wip-us.apache.org/repos/asf/ambari/blob/fe39b646/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/KerberosIdentityDataFileWriterFactory.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/KerberosIdentityDataFileWriterFactory.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/KerberosIdentityDataFileWriterFactory.java new file mode 100644 index 0000000..6176071 --- /dev/null +++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/KerberosIdentityDataFileWriterFactory.java @@ -0,0 +1,44 @@ +/* + * 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.serveraction.kerberos; + +import com.google.inject.Singleton; + +import java.io.File; +import java.io.IOException; + +/** + * KerberosIdentityDataFileWriterFactory creates KerberosIdentityDataFileWriter instances. + */ +@Singleton +public class KerberosIdentityDataFileWriterFactory { + /** + * Creates a new createKerberosIdentityDataFileWriter + * <p/> + * The file is opened upon creation, so there is no need to manually open it unless manually + * closed before using. + * + * @param file a File declaring where to write the data + * @return the created KerberosIdentityDataFileWriter + * @throws java.io.IOException if an error occurs while accessing the file + */ + public KerberosIdentityDataFileWriter createKerberosIdentityDataFileWriter(File file) throws IOException { + return new KerberosIdentityDataFileWriter(file); + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/fe39b646/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 73a4ad6..a92fb12 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 @@ -29,7 +29,7 @@ import org.apache.ambari.server.state.Clusters; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static org.apache.ambari.server.serveraction.kerberos.KerberosActionDataFile.DATA_FILE_NAME; +import static org.apache.ambari.server.serveraction.kerberos.KerberosIdentityDataFileReader.DATA_FILE_NAME; import java.io.File; import java.io.IOException; @@ -42,7 +42,7 @@ import java.util.Map; * <p/> * This class provides helper methods used to get common properties from the command parameters map * and iterate through the Kerberos identity metadata file - * (see {@link org.apache.ambari.server.serveraction.kerberos.KerberosActionDataFile}). + * (see {@link org.apache.ambari.server.serveraction.kerberos.KerberosIdentityDataFileReader}). */ public abstract class KerberosServerAction extends AbstractServerAction { /** @@ -117,6 +117,11 @@ public abstract class KerberosServerAction extends AbstractServerAction { @Inject private KerberosOperationHandlerFactory kerberosOperationHandlerFactory; + /** + * The KerberosIdentityDataFileReaderFactory to use to obtain KerberosIdentityDataFileReader instances + */ + @Inject + private KerberosIdentityDataFileReaderFactory kerberosIdentityDataFileReaderFactory; /** * Given a (command parameter) Map and a property name, attempts to safely retrieve the requested @@ -305,12 +310,12 @@ public abstract class KerberosServerAction extends AbstractServerAction { /** * Iterates through the Kerberos identity metadata from the - * {@link org.apache.ambari.server.serveraction.kerberos.KerberosActionDataFile} and calls the - * implementing class to handle each identity found. + * {@link org.apache.ambari.server.serveraction.kerberos.KerberosIdentityDataFileReader} and calls + * the implementing class to handle each identity found. * <p/> * Using the "data_directory" value from this action's command parameters map, creates a - * {@link org.apache.ambari.server.serveraction.kerberos.KerberosActionDataFileReader} to parse - * the relative index.dat file and iterate through its "records". Each "record" is process using + * {@link KerberosIdentityDataFileReader} to parse + * the relative identity.dat file and iterate through its "records". Each "record" is process using * {@link #processRecord(java.util.Map, String, KerberosOperationHandler, java.util.Map)}. * * @param requestSharedDataContext a Map to be used a shared data among all ServerActions related @@ -345,14 +350,14 @@ public abstract class KerberosServerAction extends AbstractServerAction { LOG.error(message); throw new AmbariException(message); } - // The "index" file may or may not exist in the data directory, depending on if there - // is work to do or not. - File indexFile = new File(dataDirectory, DATA_FILE_NAME); + // The "identity data" file may or may not exist in the data directory, depending on if + // there is work to do or not. + File identityDataFile = new File(dataDirectory, DATA_FILE_NAME); - if (indexFile.exists()) { - if (!indexFile.canRead()) { + if (identityDataFile.exists()) { + if (!identityDataFile.canRead()) { String message = String.format("Failed to process the identities, cannot read the index file: %s", - indexFile.getAbsolutePath()); + identityDataFile.getAbsolutePath()); actionLog.writeStdErr(message); LOG.error(message); throw new AmbariException(message); @@ -378,9 +383,9 @@ public abstract class KerberosServerAction extends AbstractServerAction { } // Create the data file reader to parse and iterate through the records - KerberosActionDataFileReader reader = null; + KerberosIdentityDataFileReader reader = null; try { - reader = new KerberosActionDataFileReader(indexFile); + reader = kerberosIdentityDataFileReaderFactory.createKerberosIdentityDataFileReader(identityDataFile); for (Map<String, String> record : reader) { // Process the current record commandReport = processRecord(record, defaultRealm, handler, requestSharedDataContext); @@ -397,7 +402,7 @@ public abstract class KerberosServerAction extends AbstractServerAction { throw new AmbariException(e.getMessage(), e); } catch (IOException e) { String message = String.format("Failed to process the identities, cannot read the index file: %s", - indexFile.getAbsolutePath()); + identityDataFile.getAbsolutePath()); actionLog.writeStdErr(message); LOG.error(message, e); throw new AmbariException(message, e); @@ -483,8 +488,8 @@ public abstract class KerberosServerAction extends AbstractServerAction { CommandReport commandReport = null; if (record != null) { - String principal = record.get(KerberosActionDataFile.PRINCIPAL); - String host = record.get(KerberosActionDataFile.HOSTNAME); + String principal = record.get(KerberosIdentityDataFileReader.PRINCIPAL); + String host = record.get(KerberosIdentityDataFileReader.HOSTNAME); if (principal != null) { // Evaluate the principal "pattern" found in the record to generate the "evaluated principal" http://git-wip-us.apache.org/repos/asf/ambari/blob/fe39b646/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerAction.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerAction.java index 9e342d0..f2484e6 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerAction.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerAction.java @@ -37,6 +37,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentMap; /** @@ -54,6 +55,12 @@ public class UpdateKerberosConfigsServerAction extends AbstractServerAction { private ConfigHelper configHelper; /** + * The KerberosConfigDataFileReaderFactory to use to obtain KerberosConfigDataFileReader instances + */ + @Inject + private KerberosConfigDataFileReaderFactory kerberosConfigDataFileReaderFactory; + + /** * Executes this ServerAction * <p/> * This is typically called by the ServerActionExecutor in it's own thread, but there is no @@ -87,65 +94,40 @@ public class UpdateKerberosConfigsServerAction extends AbstractServerAction { // If the data directory exists, attempt to process further, else assume there is no work to do if (dataDirectory.exists()) { - KerberosActionDataFileReader indexReader = null; KerberosConfigDataFileReader configReader = null; + Set<String> configTypes = new HashSet<String>(); try { - // If the action data file exists, iterate over the records to find the identity-specific - // configuration settings to update - File indexFile = new File(dataDirectory, KerberosActionDataFile.DATA_FILE_NAME); - if (indexFile.exists()) { - indexReader = new KerberosActionDataFileReader(indexFile); - - for (Map<String, String> record : indexReader) { - String principal = record.get(KerberosActionDataFile.PRINCIPAL); - String principalConfig = record.get(KerberosActionDataFile.PRINCIPAL_CONFIGURATION); - String[] principalTokens = principalConfig.split("/"); - if (principalTokens.length == 2) { - String principalConfigType = principalTokens[0]; - String principalConfigProp = principalTokens[1]; - addConfigTypePropVal(propertiesToSet, principalConfigType, principalConfigProp, principal); - } - - String keytabPath = record.get(KerberosActionDataFile.KEYTAB_FILE_PATH); - String keytabConfig = record.get(KerberosActionDataFile.KEYTAB_FILE_CONFIGURATION); - String[] keytabTokens = keytabConfig.split("/"); - if (keytabTokens.length == 2) { - String keytabConfigType = keytabTokens[0]; - String keytabConfigProp = keytabTokens[1]; - addConfigTypePropVal(propertiesToSet, keytabConfigType, keytabConfigProp, keytabPath); - } - } - } - // If the config data file exists, iterate over the records to find the (explicit) // configuration settings to update - File configFile = new File(dataDirectory, KerberosConfigDataFile.DATA_FILE_NAME); + File configFile = new File(dataDirectory, KerberosConfigDataFileReader.DATA_FILE_NAME); if (configFile.exists()) { - configReader = new KerberosConfigDataFileReader(configFile); + configReader = kerberosConfigDataFileReaderFactory.createKerberosConfigDataFileReader(configFile); for (Map<String, String> record : configReader) { - String configType = record.get(KerberosConfigDataFile.CONFIGURATION_TYPE); - String configKey = record.get(KerberosConfigDataFile.KEY); - String configVal = record.get(KerberosConfigDataFile.VALUE); - String configOp = record.get(KerberosConfigDataFile.OPERATION); + String configType = record.get(KerberosConfigDataFileReader.CONFIGURATION_TYPE); + String configKey = record.get(KerberosConfigDataFileReader.KEY); + String configOp = record.get(KerberosConfigDataFileReader.OPERATION); + + configTypes.add(configType); - if (KerberosConfigDataFile.OPERATION_TYPE_REMOVE.equals(configOp)) { + if (KerberosConfigDataFileReader.OPERATION_TYPE_REMOVE.equals(configOp)) { removeConfigTypeProp(propertiesToRemove, configType, configKey); } else { + String configVal = record.get(KerberosConfigDataFileReader.VALUE); addConfigTypePropVal(propertiesToSet, configType, configKey, configVal); } } } - if (!propertiesToSet.isEmpty()) { + if (!configTypes.isEmpty()) { String configNote = cluster.getSecurityType() == SecurityType.KERBEROS ? "Enabling Kerberos" : "Disabling Kerberos"; - for (Map.Entry<String, Map<String, String>> entry : propertiesToSet.entrySet()) { - String type = entry.getKey(); - - configHelper.updateConfigType(cluster, controller, type, entry.getValue(), propertiesToRemove.get(type), + for (String configType : configTypes) { + configHelper.updateConfigType(cluster, controller, configType, + propertiesToSet.get(configType), + propertiesToRemove.get(configType), authenticatedUserName, configNote); } } @@ -156,13 +138,6 @@ public class UpdateKerberosConfigsServerAction extends AbstractServerAction { commandReport = createCommandReport(1, HostRoleStatus.FAILED, "{}", actionLog.getStdOut(), actionLog.getStdErr()); } finally { - if (indexReader != null && !indexReader.isClosed()) { - try { - indexReader.close(); - } catch (Throwable t) { - // ignored - } - } if (configReader != null && !configReader.isClosed()) { try { configReader.close(); http://git-wip-us.apache.org/repos/asf/ambari/blob/fe39b646/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 5541523..c9d8735 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 @@ -84,8 +84,8 @@ import org.apache.ambari.server.orm.InMemoryDefaultTestModule; import org.apache.ambari.server.orm.OrmTestHelper; import org.apache.ambari.server.orm.dao.RepositoryVersionDAO; import org.apache.ambari.server.orm.entities.RepositoryVersionEntity; -import org.apache.ambari.server.serveraction.kerberos.KerberosActionDataFile; -import org.apache.ambari.server.serveraction.kerberos.KerberosActionDataFileBuilder; +import org.apache.ambari.server.serveraction.kerberos.KerberosIdentityDataFileWriter; +import org.apache.ambari.server.serveraction.kerberos.KerberosIdentityDataFileWriterFactory; import org.apache.ambari.server.serveraction.kerberos.KerberosServerAction; import org.apache.ambari.server.state.Alert; import org.apache.ambari.server.state.AlertState; @@ -2494,17 +2494,15 @@ public class TestHeartbeatHandler { properties = kcp.get(0); Assert.assertNotNull(properties); - Assert.assertEquals("c6403.ambari.apache.org", properties.get(KerberosActionDataFile.HOSTNAME)); - Assert.assertEquals("HDFS", properties.get(KerberosActionDataFile.SERVICE)); - Assert.assertEquals("DATANODE", properties.get(KerberosActionDataFile.COMPONENT)); - Assert.assertEquals("dn/_HOST@_REALM", properties.get(KerberosActionDataFile.PRINCIPAL)); - Assert.assertEquals("hdfs-site/dfs.namenode.kerberos.principal", properties.get(KerberosActionDataFile.PRINCIPAL_CONFIGURATION)); - Assert.assertEquals("/etc/security/keytabs/dn.service.keytab", properties.get(KerberosActionDataFile.KEYTAB_FILE_PATH)); - Assert.assertEquals("hdfs", properties.get(KerberosActionDataFile.KEYTAB_FILE_OWNER_NAME)); - Assert.assertEquals("r", properties.get(KerberosActionDataFile.KEYTAB_FILE_OWNER_ACCESS)); - Assert.assertEquals("hadoop", properties.get(KerberosActionDataFile.KEYTAB_FILE_GROUP_NAME)); - Assert.assertEquals("", properties.get(KerberosActionDataFile.KEYTAB_FILE_GROUP_ACCESS)); - Assert.assertEquals("hdfs-site/dfs.namenode.keytab.file", properties.get(KerberosActionDataFile.KEYTAB_FILE_CONFIGURATION)); + Assert.assertEquals("c6403.ambari.apache.org", properties.get(KerberosIdentityDataFileWriter.HOSTNAME)); + Assert.assertEquals("HDFS", properties.get(KerberosIdentityDataFileWriter.SERVICE)); + Assert.assertEquals("DATANODE", properties.get(KerberosIdentityDataFileWriter.COMPONENT)); + Assert.assertEquals("dn/_HOST@_REALM", properties.get(KerberosIdentityDataFileWriter.PRINCIPAL)); + Assert.assertEquals("/etc/security/keytabs/dn.service.keytab", properties.get(KerberosIdentityDataFileWriter.KEYTAB_FILE_PATH)); + Assert.assertEquals("hdfs", properties.get(KerberosIdentityDataFileWriter.KEYTAB_FILE_OWNER_NAME)); + Assert.assertEquals("r", properties.get(KerberosIdentityDataFileWriter.KEYTAB_FILE_OWNER_ACCESS)); + Assert.assertEquals("hadoop", properties.get(KerberosIdentityDataFileWriter.KEYTAB_FILE_GROUP_NAME)); + Assert.assertEquals("", properties.get(KerberosIdentityDataFileWriter.KEYTAB_FILE_GROUP_ACCESS)); Assert.assertEquals(Base64.encodeBase64String("hello".getBytes()), kcp.get(0).get(KerberosServerAction.KEYTAB_CONTENT_BASE64)); @@ -2516,17 +2514,15 @@ public class TestHeartbeatHandler { properties = kcp.get(0); Assert.assertNotNull(properties); - Assert.assertEquals("c6403.ambari.apache.org", properties.get(KerberosActionDataFile.HOSTNAME)); - Assert.assertEquals("HDFS", properties.get(KerberosActionDataFile.SERVICE)); - Assert.assertEquals("DATANODE", properties.get(KerberosActionDataFile.COMPONENT)); - Assert.assertEquals("dn/_HOST@_REALM", properties.get(KerberosActionDataFile.PRINCIPAL)); - Assert.assertFalse(properties.containsKey(KerberosActionDataFile.PRINCIPAL_CONFIGURATION)); - Assert.assertEquals("/etc/security/keytabs/dn.service.keytab", properties.get(KerberosActionDataFile.KEYTAB_FILE_PATH)); - Assert.assertFalse(properties.containsKey(KerberosActionDataFile.KEYTAB_FILE_OWNER_NAME)); - Assert.assertFalse(properties.containsKey(KerberosActionDataFile.KEYTAB_FILE_OWNER_ACCESS)); - Assert.assertFalse(properties.containsKey(KerberosActionDataFile.KEYTAB_FILE_GROUP_NAME)); - Assert.assertFalse(properties.containsKey(KerberosActionDataFile.KEYTAB_FILE_GROUP_ACCESS)); - Assert.assertFalse(properties.containsKey(KerberosActionDataFile.KEYTAB_FILE_CONFIGURATION)); + Assert.assertEquals("c6403.ambari.apache.org", properties.get(KerberosIdentityDataFileWriter.HOSTNAME)); + Assert.assertEquals("HDFS", properties.get(KerberosIdentityDataFileWriter.SERVICE)); + Assert.assertEquals("DATANODE", properties.get(KerberosIdentityDataFileWriter.COMPONENT)); + Assert.assertEquals("dn/_HOST@_REALM", properties.get(KerberosIdentityDataFileWriter.PRINCIPAL)); + Assert.assertEquals("/etc/security/keytabs/dn.service.keytab", properties.get(KerberosIdentityDataFileWriter.KEYTAB_FILE_PATH)); + Assert.assertFalse(properties.containsKey(KerberosIdentityDataFileWriter.KEYTAB_FILE_OWNER_NAME)); + Assert.assertFalse(properties.containsKey(KerberosIdentityDataFileWriter.KEYTAB_FILE_OWNER_ACCESS)); + Assert.assertFalse(properties.containsKey(KerberosIdentityDataFileWriter.KEYTAB_FILE_GROUP_NAME)); + Assert.assertFalse(properties.containsKey(KerberosIdentityDataFileWriter.KEYTAB_FILE_GROUP_ACCESS)); Assert.assertFalse(properties.containsKey(KerberosServerAction.KEYTAB_CONTENT_BASE64)); } @@ -2606,8 +2602,8 @@ public class TestHeartbeatHandler { private File createTestKeytabData() throws Exception { File dataDirectory = temporaryFolder.newFolder(); - File indexFile = new File(dataDirectory, KerberosActionDataFile.DATA_FILE_NAME); - KerberosActionDataFileBuilder kerberosActionDataFileBuilder = new KerberosActionDataFileBuilder(indexFile); + File identityDataFile = new File(dataDirectory, KerberosIdentityDataFileWriter.DATA_FILE_NAME); + KerberosIdentityDataFileWriter kerberosIdentityDataFileWriter = injector.getInstance(KerberosIdentityDataFileWriterFactory.class).createKerberosIdentityDataFileWriter(identityDataFile); File hostDirectory = new File(dataDirectory, "c6403.ambari.apache.org"); File keytabFile; @@ -2616,12 +2612,12 @@ public class TestHeartbeatHandler { else throw new Exception("Failed to create " + hostDirectory.getAbsolutePath()); - kerberosActionDataFileBuilder.addRecord("c6403.ambari.apache.org", "HDFS", "DATANODE", - "dn/_HOST@_REALM", "service", "hdfs-site/dfs.namenode.kerberos.principal", + kerberosIdentityDataFileWriter.writeRecord("c6403.ambari.apache.org", "HDFS", "DATANODE", + "dn/_HOST@_REALM", "service", "/etc/security/keytabs/dn.service.keytab", - "hdfs", "r", "hadoop", "", "hdfs-site/dfs.namenode.keytab.file", "false"); + "hdfs", "r", "hadoop", "", "false"); - kerberosActionDataFileBuilder.close(); + kerberosIdentityDataFileWriter.close(); // Ensure the host directory exists... FileWriter fw = new FileWriter(keytabFile); http://git-wip-us.apache.org/repos/asf/ambari/blob/fe39b646/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java index e451ad1..5e71991 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java @@ -41,6 +41,8 @@ import org.apache.ambari.server.metadata.RoleCommandOrder; 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.KerberosConfigDataFileWriter; +import org.apache.ambari.server.serveraction.kerberos.KerberosConfigDataFileWriterFactory; import org.apache.ambari.server.serveraction.kerberos.KerberosCredential; import org.apache.ambari.server.serveraction.kerberos.KerberosMissingAdminCredentialsException; import org.apache.ambari.server.serveraction.kerberos.KerberosOperationException; @@ -80,6 +82,7 @@ import org.junit.Test; import javax.persistence.EntityManager; +import java.io.File; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; @@ -100,6 +103,7 @@ public class KerberosHelperTest extends EasyMockSupport { private static Injector injector; private final ClusterController clusterController = createStrictMock(ClusterController.class); private final KerberosDescriptorFactory kerberosDescriptorFactory = createStrictMock(KerberosDescriptorFactory.class); + private final KerberosConfigDataFileWriterFactory kerberosConfigDataFileWriterFactory = createStrictMock(KerberosConfigDataFileWriterFactory.class); private final AmbariMetaInfo metaInfo = createNiceMock(AmbariMetaInfo.class); @Before @@ -166,6 +170,7 @@ public class KerberosHelperTest extends EasyMockSupport { bind(KerberosOperationHandlerFactory.class).toInstance(kerberosOperationHandlerFactory); bind(ClusterController.class).toInstance(clusterController); bind(KerberosDescriptorFactory.class).toInstance(kerberosDescriptorFactory); + bind(KerberosConfigDataFileWriterFactory.class).toInstance(kerberosConfigDataFileWriterFactory); } }); @@ -379,6 +384,25 @@ public class KerberosHelperTest extends EasyMockSupport { KerberosHelper kerberosHelper = injector.getInstance(KerberosHelper.class); + KerberosConfigDataFileWriter kerberosConfigDataFileWriter = createMock(KerberosConfigDataFileWriter.class); + kerberosConfigDataFileWriter.addRecord("cluster-env", "security_enabled", "true", "SET"); + expectLastCall().times(1); + kerberosConfigDataFileWriter.addRecord("service1-site", "component1.kerberos.principal", "component1/_HOST@${realm}", "SET"); + expectLastCall().times(1); + kerberosConfigDataFileWriter.addRecord("service1-site", "component1.keytab.file", "${keytab_dir}/service1.keytab", "SET"); + expectLastCall().times(1); + kerberosConfigDataFileWriter.addRecord("service2-site", "component2.kerberos.principal", "component2/host1@${realm}", "SET"); + expectLastCall().times(1); + kerberosConfigDataFileWriter.addRecord("service2-site", "component2.keytab.file", "${keytab_dir}/service2.keytab", "SET"); + expectLastCall().times(1); + kerberosConfigDataFileWriter.close(); + expectLastCall().times(1); + + KerberosConfigDataFileWriterFactory factory = injector.getInstance(KerberosConfigDataFileWriterFactory.class); + expect(factory.createKerberosConfigDataFileWriter(anyObject(File.class))) + .andReturn(kerberosConfigDataFileWriter) + .times(1); + final StackId stackVersion = createNiceMock(StackId.class); final ServiceComponentHost schKerberosClient = createMock(ServiceComponentHost.class); @@ -658,6 +682,25 @@ public class KerberosHelperTest extends EasyMockSupport { KerberosHelper kerberosHelper = injector.getInstance(KerberosHelper.class); + KerberosConfigDataFileWriter kerberosConfigDataFileWriter = createMock(KerberosConfigDataFileWriter.class); + kerberosConfigDataFileWriter.addRecord("cluster-env", "security_enabled", "false", "SET"); + expectLastCall().times(1); + kerberosConfigDataFileWriter.addRecord("service1-site", "component1.kerberos.principal", null, "REMOVE"); + expectLastCall().times(1); + kerberosConfigDataFileWriter.addRecord("service1-site", "component1.keytab.file", null, "REMOVE"); + expectLastCall().times(1); + kerberosConfigDataFileWriter.addRecord("service2-site", "component2.kerberos.principal", null, "REMOVE"); + expectLastCall().times(1); + kerberosConfigDataFileWriter.addRecord("service2-site", "component2.keytab.file", null, "REMOVE"); + expectLastCall().times(1); + kerberosConfigDataFileWriter.close(); + expectLastCall().times(1); + + KerberosConfigDataFileWriterFactory factory = injector.getInstance(KerberosConfigDataFileWriterFactory.class); + expect(factory.createKerberosConfigDataFileWriter(anyObject(File.class))) + .andReturn(kerberosConfigDataFileWriter) + .times(1); + final StackId stackVersion = createNiceMock(StackId.class); final ServiceComponentHost schKerberosClient = createMock(ServiceComponentHost.class); http://git-wip-us.apache.org/repos/asf/ambari/blob/fe39b646/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosActionDataFileTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosActionDataFileTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosActionDataFileTest.java deleted file mode 100644 index b467760..0000000 --- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosActionDataFileTest.java +++ /dev/null @@ -1,212 +0,0 @@ -/* - * 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.serveraction.kerberos; - -import junit.framework.Assert; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TemporaryFolder; - -import java.io.File; -import java.util.Iterator; -import java.util.Map; - -/** - * This is a test to see how well the KerberosActionDataFileBuilder and KerberosActionDataFileReader - * work when the data temporaryDirectory is opened, close, reopened, and appended to. - */ -public class KerberosActionDataFileTest { - - @Rule - public TemporaryFolder folder = new TemporaryFolder(); - - @Test - public void testKerberosActionDataFile() throws Exception { - File file = folder.newFile(); - Assert.assertNotNull(file); - - // Write the data - KerberosActionDataFileBuilder builder = new KerberosActionDataFileBuilder(file); - Assert.assertFalse(builder.isClosed()); - - for (int i = 0; i < 10; i++) { - builder.addRecord("hostName" + i, "serviceName" + i, "serviceComponentName" + i, - "principal" + i, "principal_type" + i, "principalConfiguration" + i, "keytabFilePath" + i, - "keytabFileOwnerName" + i, "keytabFileOwnerAccess" + i, - "keytabFileGroupName" + i, "keytabFileGroupAccess" + i, - "keytabFileConfiguration" + i, "false"); - } - - // Add some odd characters - builder.addRecord("hostName's", "serviceName#", "serviceComponentName\"", - "principal", "principal_type", "principalConfiguration", "keytabFilePath", - "'keytabFileOwnerName'", "<keytabFileOwnerAccess>", - "\"keytabFileGroupName\"", "keytab,File,Group,Access", - "\"keytab,'File',Configuration\"", "false"); - - builder.close(); - Assert.assertTrue(builder.isClosed()); - - // Read the data... - KerberosActionDataFileReader reader = new KerberosActionDataFileReader(file); - Assert.assertFalse(reader.isClosed()); - - Iterator<Map<String, String>> iterator = reader.iterator(); - Assert.assertNotNull(iterator); - - // Test iterator - int i = 0; - while (iterator.hasNext()) { - Map<String, String> record = iterator.next(); - - if (i < 10) { - Assert.assertEquals("hostName" + i, record.get(KerberosActionDataFile.HOSTNAME)); - Assert.assertEquals("serviceName" + i, record.get(KerberosActionDataFile.SERVICE)); - Assert.assertEquals("serviceComponentName" + i, record.get(KerberosActionDataFile.COMPONENT)); - Assert.assertEquals("principal" + i, record.get(KerberosActionDataFile.PRINCIPAL)); - Assert.assertEquals("principal_type" + i, record.get(KerberosActionDataFile.PRINCIPAL_TYPE)); - Assert.assertEquals("principalConfiguration" + i, record.get(KerberosActionDataFile.PRINCIPAL_CONFIGURATION)); - Assert.assertEquals("keytabFilePath" + i, record.get(KerberosActionDataFile.KEYTAB_FILE_PATH)); - Assert.assertEquals("keytabFileOwnerName" + i, record.get(KerberosActionDataFile.KEYTAB_FILE_OWNER_NAME)); - Assert.assertEquals("keytabFileOwnerAccess" + i, record.get(KerberosActionDataFile.KEYTAB_FILE_OWNER_ACCESS)); - Assert.assertEquals("keytabFileGroupName" + i, record.get(KerberosActionDataFile.KEYTAB_FILE_GROUP_NAME)); - Assert.assertEquals("keytabFileGroupAccess" + i, record.get(KerberosActionDataFile.KEYTAB_FILE_GROUP_ACCESS)); - Assert.assertEquals("keytabFileConfiguration" + i, record.get(KerberosActionDataFile.KEYTAB_FILE_CONFIGURATION)); - Assert.assertEquals("false", record.get(KerberosActionDataFile.KEYTAB_FILE_IS_CACHABLE)); - } else { - Assert.assertEquals("hostName's", record.get(KerberosActionDataFile.HOSTNAME)); - Assert.assertEquals("serviceName#", record.get(KerberosActionDataFile.SERVICE)); - Assert.assertEquals("serviceComponentName\"", record.get(KerberosActionDataFile.COMPONENT)); - Assert.assertEquals("principal", record.get(KerberosActionDataFile.PRINCIPAL)); - Assert.assertEquals("principal_type", record.get(KerberosActionDataFile.PRINCIPAL_TYPE)); - Assert.assertEquals("principalConfiguration", record.get(KerberosActionDataFile.PRINCIPAL_CONFIGURATION)); - Assert.assertEquals("keytabFilePath", record.get(KerberosActionDataFile.KEYTAB_FILE_PATH)); - Assert.assertEquals("'keytabFileOwnerName'", record.get(KerberosActionDataFile.KEYTAB_FILE_OWNER_NAME)); - Assert.assertEquals("<keytabFileOwnerAccess>", record.get(KerberosActionDataFile.KEYTAB_FILE_OWNER_ACCESS)); - Assert.assertEquals("\"keytabFileGroupName\"", record.get(KerberosActionDataFile.KEYTAB_FILE_GROUP_NAME)); - Assert.assertEquals("keytab,File,Group,Access", record.get(KerberosActionDataFile.KEYTAB_FILE_GROUP_ACCESS)); - Assert.assertEquals("\"keytab,'File',Configuration\"", record.get(KerberosActionDataFile.KEYTAB_FILE_CONFIGURATION)); - Assert.assertEquals("false", record.get(KerberosActionDataFile.KEYTAB_FILE_IS_CACHABLE)); - } - - i++; - } - - reader.close(); - Assert.assertTrue(reader.isClosed()); - reader.open(); - Assert.assertFalse(reader.isClosed()); - - i = 0; - for (Map<String, String> record : reader) { - if (i < 10) { - Assert.assertEquals("hostName" + i, record.get(KerberosActionDataFile.HOSTNAME)); - Assert.assertEquals("serviceName" + i, record.get(KerberosActionDataFile.SERVICE)); - Assert.assertEquals("serviceComponentName" + i, record.get(KerberosActionDataFile.COMPONENT)); - Assert.assertEquals("principal" + i, record.get(KerberosActionDataFile.PRINCIPAL)); - Assert.assertEquals("principal_type" + i, record.get(KerberosActionDataFile.PRINCIPAL_TYPE)); - Assert.assertEquals("principalConfiguration" + i, record.get(KerberosActionDataFile.PRINCIPAL_CONFIGURATION)); - Assert.assertEquals("keytabFilePath" + i, record.get(KerberosActionDataFile.KEYTAB_FILE_PATH)); - Assert.assertEquals("keytabFileOwnerName" + i, record.get(KerberosActionDataFile.KEYTAB_FILE_OWNER_NAME)); - Assert.assertEquals("keytabFileOwnerAccess" + i, record.get(KerberosActionDataFile.KEYTAB_FILE_OWNER_ACCESS)); - Assert.assertEquals("keytabFileGroupName" + i, record.get(KerberosActionDataFile.KEYTAB_FILE_GROUP_NAME)); - Assert.assertEquals("keytabFileGroupAccess" + i, record.get(KerberosActionDataFile.KEYTAB_FILE_GROUP_ACCESS)); - Assert.assertEquals("keytabFileConfiguration" + i, record.get(KerberosActionDataFile.KEYTAB_FILE_CONFIGURATION)); - } else { - Assert.assertEquals("hostName's", record.get(KerberosActionDataFile.HOSTNAME)); - Assert.assertEquals("serviceName#", record.get(KerberosActionDataFile.SERVICE)); - Assert.assertEquals("serviceComponentName\"", record.get(KerberosActionDataFile.COMPONENT)); - Assert.assertEquals("principal", record.get(KerberosActionDataFile.PRINCIPAL)); - Assert.assertEquals("principal_type", record.get(KerberosActionDataFile.PRINCIPAL_TYPE)); - Assert.assertEquals("principalConfiguration", record.get(KerberosActionDataFile.PRINCIPAL_CONFIGURATION)); - Assert.assertEquals("keytabFilePath", record.get(KerberosActionDataFile.KEYTAB_FILE_PATH)); - Assert.assertEquals("'keytabFileOwnerName'", record.get(KerberosActionDataFile.KEYTAB_FILE_OWNER_NAME)); - Assert.assertEquals("<keytabFileOwnerAccess>", record.get(KerberosActionDataFile.KEYTAB_FILE_OWNER_ACCESS)); - Assert.assertEquals("\"keytabFileGroupName\"", record.get(KerberosActionDataFile.KEYTAB_FILE_GROUP_NAME)); - Assert.assertEquals("keytab,File,Group,Access", record.get(KerberosActionDataFile.KEYTAB_FILE_GROUP_ACCESS)); - Assert.assertEquals("\"keytab,'File',Configuration\"", record.get(KerberosActionDataFile.KEYTAB_FILE_CONFIGURATION)); - } - - i++; - } - - reader.close(); - Assert.assertTrue(reader.isClosed()); - - // Add an additional record - builder.open(); - Assert.assertFalse(builder.isClosed()); - - builder.addRecord("hostName", "serviceName", "serviceComponentName", - "principal","principal_type", "principalConfiguration", "keytabFilePath", - "keytabFileOwnerName", "keytabFileOwnerAccess", - "keytabFileGroupName", "keytabFileGroupAccess", - "keytabFileConfiguration", "true"); - - builder.close(); - Assert.assertTrue(builder.isClosed()); - - reader = new KerberosActionDataFileReader(file); - Assert.assertFalse(reader.isClosed()); - - i = 0; - for (Map<String, String> record : reader) { - i++; - } - - Assert.assertEquals(12, i); - - reader.close(); - Assert.assertTrue(reader.isClosed()); - - // Add an additional record - builder = new KerberosActionDataFileBuilder(file); - Assert.assertFalse(builder.isClosed()); - - builder.addRecord("hostName", "serviceName", "serviceComponentName", - "principal", "principal_type", "principalConfiguration", "keytabFilePath", - "keytabFileOwnerName", "keytabFileOwnerAccess", - "keytabFileGroupName", "keytabFileGroupAccess", - "keytabFileConfiguration", "true"); - - builder.close(); - Assert.assertTrue(builder.isClosed()); - - reader.open(); - Assert.assertFalse(reader.isClosed()); - - i = 0; - for (Map<String, String> record : reader) { - i++; - } - - Assert.assertEquals(13, i); - - reader.close(); - Assert.assertTrue(reader.isClosed()); - - // trying to iterate over a closed reader... - i = 0; - for (Map<String, String> record : reader) { - i++; - } - Assert.assertEquals(0, i); - - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/fe39b646/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosConfigDataFileTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosConfigDataFileTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosConfigDataFileTest.java index 413de0b..4a1d4f9 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosConfigDataFileTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosConfigDataFileTest.java @@ -28,7 +28,7 @@ import java.util.Iterator; import java.util.Map; /** - * This is a test to see how well the KerberosConfigDataFileBuilder and KerberosConfigDataFileReader + * This is a test to see how well the KerberosConfigDataFileWriter and KerberosConfigDataFileReader * work when the data temporaryDirectory is opened, close, reopened, and appended to. */ public class KerberosConfigDataFileTest { @@ -36,27 +36,30 @@ public class KerberosConfigDataFileTest { @Rule public TemporaryFolder folder = new TemporaryFolder(); + private KerberosConfigDataFileReaderFactory kerberosConfigDataFileReaderFactory = new KerberosConfigDataFileReaderFactory(); + private KerberosConfigDataFileWriterFactory kerberosConfigDataFileWriterFactory = new KerberosConfigDataFileWriterFactory(); + @Test public void testKerberosConfigDataFile() throws Exception { File file = folder.newFile(); Assert.assertNotNull(file); // Write the data - KerberosConfigDataFileBuilder builder = new KerberosConfigDataFileBuilder(file); - Assert.assertFalse(builder.isClosed()); + KerberosConfigDataFileWriter writer = kerberosConfigDataFileWriterFactory.createKerberosConfigDataFileWriter(file); + Assert.assertFalse(writer.isClosed()); for (int i = 0; i < 10; i++) { - builder.addRecord("config-type" + i, "key" + i, "value" + i, KerberosConfigDataFile.OPERATION_TYPE_SET); + writer.addRecord("config-type" + i, "key" + i, "value" + i, KerberosConfigDataFileWriter.OPERATION_TYPE_SET); } for (int i = 10; i < 15; i++) { - builder.addRecord("config-type" + i, "key" + i, "value" + i, KerberosConfigDataFile.OPERATION_TYPE_REMOVE); + writer.addRecord("config-type" + i, "key" + i, "value" + i, KerberosConfigDataFileWriter.OPERATION_TYPE_REMOVE); } - builder.close(); - Assert.assertTrue(builder.isClosed()); + writer.close(); + Assert.assertTrue(writer.isClosed()); // Read the data... - KerberosConfigDataFileReader reader = new KerberosConfigDataFileReader(file); + KerberosConfigDataFileReader reader = kerberosConfigDataFileReaderFactory.createKerberosConfigDataFileReader(file); Assert.assertFalse(reader.isClosed()); Iterator<Map<String, String>> iterator = reader.iterator(); @@ -68,15 +71,15 @@ public class KerberosConfigDataFileTest { Map<String, String> record = iterator.next(); if (i < 15) { - Assert.assertEquals("config-type" + i, record.get(KerberosConfigDataFile.CONFIGURATION_TYPE)); - Assert.assertEquals("key" + i, record.get(KerberosConfigDataFile.KEY)); - Assert.assertEquals("value" + i, record.get(KerberosConfigDataFile.VALUE)); + Assert.assertEquals("config-type" + i, record.get(KerberosConfigDataFileReader.CONFIGURATION_TYPE)); + Assert.assertEquals("key" + i, record.get(KerberosConfigDataFileReader.KEY)); + Assert.assertEquals("value" + i, record.get(KerberosConfigDataFileReader.VALUE)); if(i<10) { - Assert.assertEquals("SET", record.get(KerberosConfigDataFile.OPERATION)); + Assert.assertEquals("SET", record.get(KerberosConfigDataFileReader.OPERATION)); } else { - Assert.assertEquals("REMOVE", record.get(KerberosConfigDataFile.OPERATION)); + Assert.assertEquals("REMOVE", record.get(KerberosConfigDataFileReader.OPERATION)); } } @@ -93,9 +96,9 @@ public class KerberosConfigDataFileTest { i = 0; for (Map<String, String> record : reader) { if (i < 10) { - Assert.assertEquals("config-type" + i, record.get(KerberosConfigDataFile.CONFIGURATION_TYPE)); - Assert.assertEquals("key" + i, record.get(KerberosConfigDataFile.KEY)); - Assert.assertEquals("value" + i, record.get(KerberosConfigDataFile.VALUE)); + Assert.assertEquals("config-type" + i, record.get(KerberosConfigDataFileReader.CONFIGURATION_TYPE)); + Assert.assertEquals("key" + i, record.get(KerberosConfigDataFileReader.KEY)); + Assert.assertEquals("value" + i, record.get(KerberosConfigDataFileReader.VALUE)); } i++; @@ -107,15 +110,15 @@ public class KerberosConfigDataFileTest { Assert.assertTrue(reader.isClosed()); // Add an additional record - builder.open(); - Assert.assertFalse(builder.isClosed()); + writer.open(); + Assert.assertFalse(writer.isClosed()); - builder.addRecord("config-type", "key", "value", KerberosConfigDataFile.OPERATION_TYPE_SET); + writer.addRecord("config-type", "key", "value", KerberosConfigDataFileReader.OPERATION_TYPE_SET); - builder.close(); - Assert.assertTrue(builder.isClosed()); + writer.close(); + Assert.assertTrue(writer.isClosed()); - reader = new KerberosConfigDataFileReader(file); + reader = kerberosConfigDataFileReaderFactory.createKerberosConfigDataFileReader(file); Assert.assertFalse(reader.isClosed()); i = 0; @@ -129,13 +132,13 @@ public class KerberosConfigDataFileTest { Assert.assertTrue(reader.isClosed()); // Add an additional record - builder = new KerberosConfigDataFileBuilder(file); - Assert.assertFalse(builder.isClosed()); + writer = kerberosConfigDataFileWriterFactory.createKerberosConfigDataFileWriter(file); + Assert.assertFalse(writer.isClosed()); - builder.addRecord("config-type", "key", "value", KerberosConfigDataFile.OPERATION_TYPE_REMOVE); + writer.addRecord("config-type", "key", "value", KerberosConfigDataFileReader.OPERATION_TYPE_REMOVE); - builder.close(); - Assert.assertTrue(builder.isClosed()); + writer.close(); + Assert.assertTrue(writer.isClosed()); reader.open(); Assert.assertFalse(reader.isClosed()); http://git-wip-us.apache.org/repos/asf/ambari/blob/fe39b646/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosIdentityDataFileTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosIdentityDataFileTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosIdentityDataFileTest.java new file mode 100644 index 0000000..70f538b --- /dev/null +++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/KerberosIdentityDataFileTest.java @@ -0,0 +1,207 @@ +/* + * 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.serveraction.kerberos; + +import junit.framework.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; + +import java.io.File; +import java.util.Iterator; +import java.util.Map; + +/** + * This is a test to see how well the KerberosIdentityDataFileWriter and KerberosIdentityDataFileReader + * work when the data temporaryDirectory is opened, close, reopened, and appended to. + */ +public class KerberosIdentityDataFileTest { + + @Rule + public TemporaryFolder folder = new TemporaryFolder(); + + private KerberosIdentityDataFileReaderFactory kerberosIdentityDataFileReaderFactory = new KerberosIdentityDataFileReaderFactory(); + private KerberosIdentityDataFileWriterFactory kerberosIdentityDataFileWriterFactory = new KerberosIdentityDataFileWriterFactory(); + + @Test + public void testKerberosIdentityDataFile() throws Exception { + File file = folder.newFile(); + Assert.assertNotNull(file); + + // Write the data + KerberosIdentityDataFileWriter writer = kerberosIdentityDataFileWriterFactory.createKerberosIdentityDataFileWriter(file); + Assert.assertFalse(writer.isClosed()); + + for (int i = 0; i < 10; i++) { + writer.writeRecord("hostName" + i, "serviceName" + i, "serviceComponentName" + i, + "principal" + i, "principal_type" + i, "keytabFilePath" + i, + "keytabFileOwnerName" + i, "keytabFileOwnerAccess" + i, + "keytabFileGroupName" + i, "keytabFileGroupAccess" + i, + "false"); + } + + // Add some odd characters + writer.writeRecord("hostName's", "serviceName#", "serviceComponentName\"", + "principal", "principal_type", "keytabFilePath", + "'keytabFileOwnerName'", "<keytabFileOwnerAccess>", + "\"keytabFileGroupName\"", "keytab,File,Group,Access", + "false"); + + writer.close(); + Assert.assertTrue(writer.isClosed()); + + // Read the data... + KerberosIdentityDataFileReader reader = kerberosIdentityDataFileReaderFactory.createKerberosIdentityDataFileReader(file); + Assert.assertFalse(reader.isClosed()); + + Iterator<Map<String, String>> iterator = reader.iterator(); + Assert.assertNotNull(iterator); + + // Test iterator + int i = 0; + while (iterator.hasNext()) { + Map<String, String> record = iterator.next(); + + if (i < 10) { + Assert.assertEquals("hostName" + i, record.get(KerberosIdentityDataFileReader.HOSTNAME)); + Assert.assertEquals("serviceName" + i, record.get(KerberosIdentityDataFileReader.SERVICE)); + Assert.assertEquals("serviceComponentName" + i, record.get(KerberosIdentityDataFileReader.COMPONENT)); + Assert.assertEquals("principal" + i, record.get(KerberosIdentityDataFileReader.PRINCIPAL)); + Assert.assertEquals("principal_type" + i, record.get(KerberosIdentityDataFileReader.PRINCIPAL_TYPE)); + Assert.assertEquals("keytabFilePath" + i, record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_PATH)); + Assert.assertEquals("keytabFileOwnerName" + i, record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_OWNER_NAME)); + Assert.assertEquals("keytabFileOwnerAccess" + i, record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_OWNER_ACCESS)); + Assert.assertEquals("keytabFileGroupName" + i, record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_GROUP_NAME)); + Assert.assertEquals("keytabFileGroupAccess" + i, record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_GROUP_ACCESS)); + Assert.assertEquals("false", record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_IS_CACHABLE)); + } else { + Assert.assertEquals("hostName's", record.get(KerberosIdentityDataFileReader.HOSTNAME)); + Assert.assertEquals("serviceName#", record.get(KerberosIdentityDataFileReader.SERVICE)); + Assert.assertEquals("serviceComponentName\"", record.get(KerberosIdentityDataFileReader.COMPONENT)); + Assert.assertEquals("principal", record.get(KerberosIdentityDataFileReader.PRINCIPAL)); + Assert.assertEquals("principal_type", record.get(KerberosIdentityDataFileReader.PRINCIPAL_TYPE)); + Assert.assertEquals("keytabFilePath", record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_PATH)); + Assert.assertEquals("'keytabFileOwnerName'", record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_OWNER_NAME)); + Assert.assertEquals("<keytabFileOwnerAccess>", record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_OWNER_ACCESS)); + Assert.assertEquals("\"keytabFileGroupName\"", record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_GROUP_NAME)); + Assert.assertEquals("keytab,File,Group,Access", record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_GROUP_ACCESS)); + Assert.assertEquals("false", record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_IS_CACHABLE)); + } + + i++; + } + + reader.close(); + Assert.assertTrue(reader.isClosed()); + reader.open(); + Assert.assertFalse(reader.isClosed()); + + i = 0; + for (Map<String, String> record : reader) { + if (i < 10) { + Assert.assertEquals("hostName" + i, record.get(KerberosIdentityDataFileReader.HOSTNAME)); + Assert.assertEquals("serviceName" + i, record.get(KerberosIdentityDataFileReader.SERVICE)); + Assert.assertEquals("serviceComponentName" + i, record.get(KerberosIdentityDataFileReader.COMPONENT)); + Assert.assertEquals("principal" + i, record.get(KerberosIdentityDataFileReader.PRINCIPAL)); + Assert.assertEquals("principal_type" + i, record.get(KerberosIdentityDataFileReader.PRINCIPAL_TYPE)); + Assert.assertEquals("keytabFilePath" + i, record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_PATH)); + Assert.assertEquals("keytabFileOwnerName" + i, record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_OWNER_NAME)); + Assert.assertEquals("keytabFileOwnerAccess" + i, record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_OWNER_ACCESS)); + Assert.assertEquals("keytabFileGroupName" + i, record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_GROUP_NAME)); + Assert.assertEquals("keytabFileGroupAccess" + i, record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_GROUP_ACCESS)); + } else { + Assert.assertEquals("hostName's", record.get(KerberosIdentityDataFileReader.HOSTNAME)); + Assert.assertEquals("serviceName#", record.get(KerberosIdentityDataFileReader.SERVICE)); + Assert.assertEquals("serviceComponentName\"", record.get(KerberosIdentityDataFileReader.COMPONENT)); + Assert.assertEquals("principal", record.get(KerberosIdentityDataFileReader.PRINCIPAL)); + Assert.assertEquals("principal_type", record.get(KerberosIdentityDataFileReader.PRINCIPAL_TYPE)); + Assert.assertEquals("keytabFilePath", record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_PATH)); + Assert.assertEquals("'keytabFileOwnerName'", record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_OWNER_NAME)); + Assert.assertEquals("<keytabFileOwnerAccess>", record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_OWNER_ACCESS)); + Assert.assertEquals("\"keytabFileGroupName\"", record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_GROUP_NAME)); + Assert.assertEquals("keytab,File,Group,Access", record.get(KerberosIdentityDataFileReader.KEYTAB_FILE_GROUP_ACCESS)); + } + + i++; + } + + reader.close(); + Assert.assertTrue(reader.isClosed()); + + // Add an additional record + writer.open(); + Assert.assertFalse(writer.isClosed()); + + writer.writeRecord("hostName", "serviceName", "serviceComponentName", + "principal", "principal_type", "keytabFilePath", + "keytabFileOwnerName", "keytabFileOwnerAccess", + "keytabFileGroupName", "keytabFileGroupAccess", + "true"); + + writer.close(); + Assert.assertTrue(writer.isClosed()); + + reader = kerberosIdentityDataFileReaderFactory.createKerberosIdentityDataFileReader(file); + Assert.assertFalse(reader.isClosed()); + + i = 0; + for (Map<String, String> record : reader) { + i++; + } + + Assert.assertEquals(12, i); + + reader.close(); + Assert.assertTrue(reader.isClosed()); + + // Add an additional record + writer = kerberosIdentityDataFileWriterFactory.createKerberosIdentityDataFileWriter(file); + Assert.assertFalse(writer.isClosed()); + + writer.writeRecord("hostName", "serviceName", "serviceComponentName", + "principal", "principal_type", "keytabFilePath", + "keytabFileOwnerName", "keytabFileOwnerAccess", + "keytabFileGroupName", "keytabFileGroupAccess", + "true"); + + writer.close(); + Assert.assertTrue(writer.isClosed()); + + reader.open(); + Assert.assertFalse(reader.isClosed()); + + i = 0; + for (Map<String, String> record : reader) { + i++; + } + + Assert.assertEquals(13, i); + + reader.close(); + Assert.assertTrue(reader.isClosed()); + + // trying to iterate over a closed reader... + i = 0; + for (Map<String, String> record : reader) { + i++; + } + Assert.assertEquals(0, i); + + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/ambari/blob/fe39b646/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 b0345aa..336090b 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 @@ -80,7 +80,7 @@ public class KerberosServerActionTest { if (requestSharedDataContext.get("FAIL") != null) { return createCommandReport(1, HostRoleStatus.FAILED, "{}", "ERROR", "ERROR"); } else { - requestSharedDataContext.put(identityRecord.get(KerberosActionDataFile.PRINCIPAL), evaluatedPrincipal); + requestSharedDataContext.put(identityRecord.get(KerberosIdentityDataFileReader.PRINCIPAL), evaluatedPrincipal); return null; } } @@ -103,16 +103,16 @@ public class KerberosServerActionTest { Assert.assertTrue(temporaryDirectory.mkdirs()); // Create a data file - KerberosActionDataFileBuilder builder = - new KerberosActionDataFileBuilder(new File(temporaryDirectory, KerberosActionDataFile.DATA_FILE_NAME)); + KerberosIdentityDataFileWriter writer = + new KerberosIdentityDataFileWriter(new File(temporaryDirectory, KerberosIdentityDataFileWriter.DATA_FILE_NAME)); for (int i = 0; i < 10; i++) { - builder.addRecord("hostName", "serviceName" + i, "serviceComponentName" + i, - "principal|_HOST|_REALM" + i, "principal_type", "principalConfiguration" + i, "keytabFilePath" + i, + writer.writeRecord("hostName", "serviceName" + i, "serviceComponentName" + i, + "principal|_HOST|_REALM" + i, "principal_type", "keytabFilePath" + i, "keytabFileOwnerName" + i, "keytabFileOwnerAccess" + i, "keytabFileGroupName" + i, "keytabFileGroupAccess" + i, - "keytabFileConfiguration" + i, "false"); + "false"); } - builder.close(); + writer.close(); commandParams.put(KerberosServerAction.DATA_DIRECTORY, temporaryDirectory.getAbsolutePath()); commandParams.put(KerberosServerAction.DEFAULT_REALM, "REALM.COM"); @@ -133,7 +133,7 @@ public class KerberosServerActionTest { @After public void tearDown() throws Exception { if (temporaryDirectory != null) { - new File(temporaryDirectory, KerberosActionDataFile.DATA_FILE_NAME).delete(); + new File(temporaryDirectory, KerberosIdentityDataFileWriter.DATA_FILE_NAME).delete(); temporaryDirectory.delete(); } } http://git-wip-us.apache.org/repos/asf/ambari/blob/fe39b646/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerActionTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerActionTest.java index 23ab519..d6f9efe 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerActionTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/UpdateKerberosConfigsServerActionTest.java @@ -23,29 +23,23 @@ import com.google.inject.Guice; import com.google.inject.Injector; import org.apache.ambari.server.agent.ExecutionCommand; import org.apache.ambari.server.controller.AmbariManagementController; -import org.apache.ambari.server.controller.ConfigurationRequest; import org.apache.ambari.server.state.Cluster; import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.ConfigHelper; -import org.apache.commons.codec.digest.DigestUtils; -import org.easymock.EasyMock; -import org.junit.After; +import org.easymock.EasyMockSupport; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; -import java.io.BufferedWriter; import java.io.File; -import java.io.FileWriter; import java.util.Collection; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.ConcurrentMap; import static org.easymock.EasyMock.*; -public class UpdateKerberosConfigsServerActionTest { +public class UpdateKerberosConfigsServerActionTest extends EasyMockSupport{ @Rule public TemporaryFolder testFolder = new TemporaryFolder(); @@ -53,95 +47,61 @@ public class UpdateKerberosConfigsServerActionTest { private Injector injector; private UpdateKerberosConfigsServerAction action; - private final AmbariManagementController controller = EasyMock.createNiceMock(AmbariManagementController.class); - private final ConfigHelper configHelper = createNiceMock(ConfigHelper.class); - private final Clusters clusters = EasyMock.createNiceMock(Clusters.class); - private final Cluster cluster = EasyMock.createNiceMock(Cluster.class); @Before public void setup() throws Exception { - setupIndexDat(); - setupConfigDat(); + final AmbariManagementController controller = createNiceMock(AmbariManagementController.class); + final Clusters clusters = createNiceMock(Clusters.class); + final Cluster cluster = createNiceMock(Cluster.class); expect(controller.getClusters()).andReturn(clusters).once(); - replay(controller); - - configHelper.updateConfigType(anyObject(Cluster.class), anyObject(AmbariManagementController.class), - anyObject(String.class), anyObject(Map.class), anyObject(Collection.class), anyObject(String.class), anyObject(String.class)); - expectLastCall().atLeastOnce(); - replay(configHelper); - - replay(cluster); expect(clusters.getCluster(anyObject(String.class))).andReturn(cluster).once(); - replay(clusters); injector = Guice.createInjector(new AbstractModule() { @Override protected void configure() { bind(AmbariManagementController.class).toInstance(controller); - bind(ConfigHelper.class).toInstance(configHelper); + bind(ConfigHelper.class).toInstance(createNiceMock(ConfigHelper.class)); } }); - action = injector.getInstance(UpdateKerberosConfigsServerAction.class); - } - - private void setupIndexDat() throws Exception { - - File indexFile; - KerberosActionDataFileBuilder kerberosActionDataFileBuilder = null; dataDir = testFolder.getRoot().getAbsolutePath(); - indexFile = new File(dataDir, KerberosActionDataFile.DATA_FILE_NAME); - kerberosActionDataFileBuilder = new KerberosActionDataFileBuilder(indexFile); - - kerberosActionDataFileBuilder.addRecord("c6403.ambari.apache.org", "HDFS", "DATANODE", - "dn/_HOST@_REALM", "service", "hdfs-site/dfs.namenode.kerberos.principal", - "/etc/security/keytabs/dn.service.keytab", - "hdfs", "r", "hadoop", "", "hdfs-site/dfs.namenode.keytab.file", "false"); - - kerberosActionDataFileBuilder.close(); - File hostDirectory = new File(dataDir, "c6403.ambari.apache.org"); - - // Ensure the host directory exists... - if (hostDirectory.exists() || hostDirectory.mkdirs()) { - File file = new File(hostDirectory, DigestUtils.sha1Hex("/etc/security/keytabs/dn.service.keytab")); - if (!file.exists()) { - file.createNewFile(); - } + setupConfigDat(); - FileWriter fw = new FileWriter(file.getAbsoluteFile()); - BufferedWriter bw = new BufferedWriter(fw); - bw.write("hello"); - bw.close(); - } + action = injector.getInstance(UpdateKerberosConfigsServerAction.class); } private void setupConfigDat() throws Exception { - File configFile = new File(dataDir, KerberosConfigDataFile.DATA_FILE_NAME); - FileWriter fw = new FileWriter(configFile.getAbsoluteFile()); - BufferedWriter bw = new BufferedWriter(fw); - bw.write("config,key,value\n"); - bw.write("hdfs-site,hadoop.security.authentication,kerberos"); - bw.close(); + File configFile = new File(dataDir, KerberosConfigDataFileWriter.DATA_FILE_NAME); + KerberosConfigDataFileWriterFactory factory = injector.getInstance(KerberosConfigDataFileWriterFactory.class); + KerberosConfigDataFileWriter writer = factory.createKerberosConfigDataFileWriter(configFile); + writer.addRecord("hdfs-site", "hadoop.security.authentication", "kerberos", KerberosConfigDataFileWriter.OPERATION_TYPE_SET); + writer.addRecord("hdfs-site", "remove.me", null, KerberosConfigDataFileWriter.OPERATION_TYPE_REMOVE); + writer.close(); } @Test public void testUpdateConfig() throws Exception { - ExecutionCommand executionCommand = new ExecutionCommand(); Map<String, String> commandParams = new HashMap<String, String>(); commandParams.put(KerberosServerAction.DATA_DIRECTORY, dataDir); + + ExecutionCommand executionCommand = new ExecutionCommand(); executionCommand.setCommandParams(commandParams); - action.setExecutionCommand(executionCommand); + ConfigHelper configHelper = injector.getInstance(ConfigHelper.class); + configHelper.updateConfigType(anyObject(Cluster.class), anyObject(AmbariManagementController.class), + anyObject(String.class), anyObject(Map.class), anyObject(Collection.class), anyObject(String.class), anyObject(String.class)); + expectLastCall().atLeastOnce(); - ConcurrentMap<String, Object> requestSharedDataContext = null; + replayAll(); - action.execute(requestSharedDataContext); + action.setExecutionCommand(executionCommand); + action.execute(null); - verify(controller, clusters, cluster, configHelper); + verifyAll(); } @Test @@ -150,8 +110,12 @@ public class UpdateKerberosConfigsServerActionTest { Map<String, String> commandParams = new HashMap<String, String>(); executionCommand.setCommandParams(commandParams); + replayAll(); + action.setExecutionCommand(executionCommand); action.execute(null); + + verifyAll(); } @Test @@ -161,7 +125,11 @@ public class UpdateKerberosConfigsServerActionTest { commandParams.put(KerberosServerAction.DATA_DIRECTORY, testFolder.newFolder().getAbsolutePath()); executionCommand.setCommandParams(commandParams); + replayAll(); + action.setExecutionCommand(executionCommand); action.execute(null); + + verifyAll(); } }
