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();
   }
 }

Reply via email to