You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2017/07/19 14:20:07 UTC

[05/13] ambari git commit: AMBARI-21450 - Fixing Unit Test Compilation Issues From trunk Merge (jonathanhurley)

http://git-wip-us.apache.org/repos/asf/ambari/blob/56362fd6/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 733d815..021186b 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
@@ -35,14 +35,17 @@ import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.ConfigHelper;
+import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.stack.OsFamily;
 import org.easymock.Capture;
 import org.easymock.CaptureType;
+import org.easymock.EasyMock;
 import org.easymock.EasyMockSupport;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
+
 import com.google.inject.AbstractModule;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
@@ -95,15 +98,15 @@ public class UpdateKerberosConfigsServerActionTest extends EasyMockSupport{
 
   @Test
   public void testUpdateConfig() throws Exception {
-    Map<String, String> commandParams = new HashMap<String, String>();
+    Map<String, String> commandParams = new HashMap<>();
     commandParams.put(KerberosServerAction.DATA_DIRECTORY, dataDir);
 
     ExecutionCommand executionCommand = new ExecutionCommand();
     executionCommand.setCommandParams(commandParams);
 
     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));
+    configHelper.updateConfigType(anyObject(Cluster.class), anyObject(StackId.class), anyObject(AmbariManagementController.class),
+        anyObject(String.class), EasyMock.<Map<String, String>>anyObject(), EasyMock.<Collection<String>>anyObject(), anyObject(String.class), anyObject(String.class));
     expectLastCall().atLeastOnce();
 
     replayAll();
@@ -117,7 +120,7 @@ public class UpdateKerberosConfigsServerActionTest extends EasyMockSupport{
   @Test
   public void testUpdateConfigMissingDataDirectory() throws Exception {
     ExecutionCommand executionCommand = new ExecutionCommand();
-    Map<String, String> commandParams = new HashMap<String, String>();
+    Map<String, String> commandParams = new HashMap<>();
     executionCommand.setCommandParams(commandParams);
 
     replayAll();
@@ -131,7 +134,7 @@ public class UpdateKerberosConfigsServerActionTest extends EasyMockSupport{
   @Test
   public void testUpdateConfigEmptyDataDirectory() throws Exception {
     ExecutionCommand executionCommand = new ExecutionCommand();
-    Map<String, String> commandParams = new HashMap<String, String>();
+    Map<String, String> commandParams = new HashMap<>();
     commandParams.put(KerberosServerAction.DATA_DIRECTORY, testFolder.newFolder().getAbsolutePath());
     executionCommand.setCommandParams(commandParams);
 
@@ -145,7 +148,7 @@ public class UpdateKerberosConfigsServerActionTest extends EasyMockSupport{
 
   @Test
   public void testUpdateConfigForceSecurityEnabled() throws Exception {
-    Map<String, String> commandParams = new HashMap<String, String>();
+    Map<String, String> commandParams = new HashMap<>();
     commandParams.put(KerberosServerAction.DATA_DIRECTORY, dataDir);
 
     ExecutionCommand executionCommand = new ExecutionCommand();
@@ -155,7 +158,7 @@ public class UpdateKerberosConfigsServerActionTest extends EasyMockSupport{
 
     Capture<String> configTypes = Capture.newInstance(CaptureType.ALL);
     Capture<Map<String, String>> configUpdates = Capture.newInstance(CaptureType.ALL);
-    configHelper.updateConfigType(anyObject(Cluster.class), anyObject(AmbariManagementController.class),
+    configHelper.updateConfigType(anyObject(Cluster.class), anyObject(StackId.class), anyObject(AmbariManagementController.class),
         capture(configTypes), capture(configUpdates), anyObject(Collection.class), anyObject(String.class), anyObject(String.class));
     expectLastCall().atLeastOnce();
 
@@ -177,4 +180,4 @@ public class UpdateKerberosConfigsServerActionTest extends EasyMockSupport{
   }
 
 
-}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/56362fd6/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java
index 976dea4..731e100 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/ConfigureActionTest.java
@@ -1,4 +1,4 @@
-/**
+/*
  * 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
@@ -32,6 +32,7 @@ import javax.persistence.EntityManager;
 
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.H2DatabaseCleaner;
+import org.apache.ambari.server.ServiceComponentNotFoundException;
 import org.apache.ambari.server.ServiceNotFoundException;
 import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
 import org.apache.ambari.server.actionmanager.HostRoleCommand;
@@ -41,12 +42,12 @@ import org.apache.ambari.server.agent.ExecutionCommand;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.OrmTestHelper;
-import org.apache.ambari.server.orm.dao.HostDAO;
-import org.apache.ambari.server.orm.dao.HostVersionDAO;
-import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
-import org.apache.ambari.server.orm.dao.StackDAO;
-import org.apache.ambari.server.orm.entities.HostVersionEntity;
-import org.apache.ambari.server.orm.entities.StackEntity;
+import org.apache.ambari.server.orm.dao.RequestDAO;
+import org.apache.ambari.server.orm.dao.UpgradeDAO;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+import org.apache.ambari.server.orm.entities.RequestEntity;
+import org.apache.ambari.server.orm.entities.UpgradeEntity;
+import org.apache.ambari.server.orm.entities.UpgradeHistoryEntity;
 import org.apache.ambari.server.serveraction.ServerAction;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
@@ -54,10 +55,14 @@ import org.apache.ambari.server.state.Config;
 import org.apache.ambari.server.state.ConfigFactory;
 import org.apache.ambari.server.state.ConfigHelper;
 import org.apache.ambari.server.state.Host;
-import org.apache.ambari.server.state.RepositoryVersionState;
 import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.ServiceComponent;
+import org.apache.ambari.server.state.ServiceComponentFactory;
+import org.apache.ambari.server.state.ServiceComponentHost;
+import org.apache.ambari.server.state.ServiceComponentHostFactory;
 import org.apache.ambari.server.state.ServiceFactory;
 import org.apache.ambari.server.state.StackId;
+import org.apache.ambari.server.state.State;
 import org.apache.ambari.server.state.stack.upgrade.ConfigUpgradeChangeDefinition.ConfigurationKeyValue;
 import org.apache.ambari.server.state.stack.upgrade.ConfigUpgradeChangeDefinition.Insert;
 import org.apache.ambari.server.state.stack.upgrade.ConfigUpgradeChangeDefinition.InsertType;
@@ -67,7 +72,10 @@ import org.apache.ambari.server.state.stack.upgrade.ConfigureTask;
 import org.apache.ambari.server.state.stack.upgrade.PropertyKeyState;
 import org.apache.ambari.server.state.stack.upgrade.TransferCoercionType;
 import org.apache.ambari.server.state.stack.upgrade.TransferOperation;
+import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
+import org.apache.commons.lang.StringUtils;
 import org.junit.After;
+import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -81,41 +89,62 @@ import com.google.inject.Injector;
  */
 public class ConfigureActionTest {
 
-  private static final String HDP_2_2_0_0 = "2.2.0.0-2041";
-  private static final String HDP_2_2_0_1 = "2.2.0.1-2270";
-  private static final StackId HDP_211_STACK = new StackId("HDP-2.1.1");
-  private static final StackId HDP_220_STACK = new StackId("HDP-2.2.0");
-
   @Inject
   private Injector m_injector;
+
   @Inject
   private OrmTestHelper m_helper;
-  @Inject
-  private RepositoryVersionDAO repoVersionDAO;
-  @Inject
-  private HostVersionDAO hostVersionDAO;
+
   @Inject
   private HostRoleCommandFactory hostRoleCommandFactory;
+
   @Inject
   private ServiceFactory serviceFactory;
+
   @Inject
   private ConfigHelper m_configHelper;
+
   @Inject
   private Clusters clusters;
+
   @Inject
-  private ConfigFactory cf;
+  private ConfigFactory configFactory;
+
   @Inject
   private ConfigureAction action;
+
   @Inject
-  private HostDAO hostDAO;
+  private RequestDAO requestDAO;
+
+  @Inject
+  private UpgradeDAO upgradeDAO;
+
   @Inject
-  private StackDAO stackDAO;
+  private ServiceComponentFactory serviceComponentFactory;
+
+  @Inject
+  private ServiceComponentHostFactory serviceComponentHostFactory;
+
+  private RepositoryVersionEntity repoVersion2110;
+  private RepositoryVersionEntity repoVersion2111;
+  private RepositoryVersionEntity repoVersion2200;
+
+  private final Map<String, Map<String, String>> NO_ATTRIBUTES = new HashMap<>();
 
   @Before
   public void setup() throws Exception {
     m_injector = Guice.createInjector(new InMemoryDefaultTestModule());
     m_injector.getInstance(GuiceJpaInitializer.class);
     m_injector.injectMembers(this);
+
+    repoVersion2110 = m_helper.getOrCreateRepositoryVersion(new StackId("HDP-2.1.1"),
+        "2.1.1.0-1234");
+    repoVersion2111 = m_helper.getOrCreateRepositoryVersion(new StackId("HDP-2.1.1"),
+        "2.1.1.1-5678");
+    repoVersion2200 = m_helper.getOrCreateRepositoryVersion(new StackId("HDP-2.2.0"),
+        "2.2.0.0-1234");
+
+    makeUpgradeCluster();
   }
 
   @After
@@ -124,18 +153,24 @@ public class ConfigureActionTest {
   }
 
 
+  /**
+   * Tests that a new configuration is created when upgrading across stack when
+   * there is no existing configuration with the correct target stack.
+   *
+   * @throws Exception
+   */
   @Test
-  public void testConfigActionUpgradeAcrossStack() throws Exception {
-    makeUpgradeCluster();
-
+  public void testNewConfigCreatedWhenUpgradingAcrossStacks() throws Exception {
     Cluster c = clusters.getCluster("c1");
     assertEquals(1, c.getConfigsByType("zoo.cfg").size());
 
-    c.setCurrentStackVersion(HDP_211_STACK);
-    c.setDesiredStackVersion(HDP_220_STACK);
-    Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {{
-          put("initLimit", "10");
-        }}, new HashMap<String, Map<String,String>>());
+    Map<String, String> properties = new HashMap<String, String>() {
+      {
+        put("initLimit", "10");
+      }
+    };
+
+    Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
 
     c.addDesiredConfig("user", Collections.singleton(config));
     assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -146,23 +181,73 @@ public class ConfigureActionTest {
     keyValue.key = "initLimit";
     keyValue.value = "11";
 
+    createUpgrade(c, repoVersion2200);
+
     Map<String, String> commandParams = new HashMap<>();
-    commandParams.put("upgrade_direction", "upgrade");
-    commandParams.put("version", HDP_2_2_0_1);
     commandParams.put("clusterName", "c1");
     commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
     commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
 
-    ExecutionCommand executionCommand = new ExecutionCommand();
-    executionCommand.setCommandParams(commandParams);
-    executionCommand.setClusterName("c1");
-
+    ExecutionCommand executionCommand = getExecutionCommand(commandParams);
     HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null,
         null, null);
 
     hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(
         executionCommand));
 
+    action.setExecutionCommand(executionCommand);
+    action.setHostRoleCommand(hostRoleCommand);
+
+    CommandReport report = action.execute(null);
+    assertNotNull(report);
+
+    assertEquals(3, c.getConfigsByType("zoo.cfg").size());
+
+    config = c.getDesiredConfigByType("zoo.cfg");
+    assertNotNull(config);
+    assertFalse(StringUtils.equals("version2", config.getTag()));
+    assertEquals("11", config.getProperties().get("initLimit"));
+  }
+
+  /**
+   * Tests that if a configuration with the target stack already exists, then it
+   * will be re-used instead of a new one created.
+   *
+   * @throws Exception
+   */
+  @Test
+  public void testConfigurationWithTargetStackUsed() throws Exception {
+    Cluster c = clusters.getCluster("c1");
+    assertEquals(1, c.getConfigsByType("zoo.cfg").size());
+
+    Map<String, String> properties = new HashMap<String, String>() {
+      {
+        put("initLimit", "10");
+      }
+    };
+
+    Config config = createConfig(c, repoVersion2200, "zoo.cfg", "version2", properties);
+
+    c.addDesiredConfig("user", Collections.singleton(config));
+    assertEquals(2, c.getConfigsByType("zoo.cfg").size());
+
+    List<ConfigurationKeyValue> configurations = new ArrayList<>();
+    ConfigurationKeyValue keyValue = new ConfigurationKeyValue();
+    configurations.add(keyValue);
+    keyValue.key = "initLimit";
+    keyValue.value = "11";
+
+    createUpgrade(c, repoVersion2200);
+
+    Map<String, String> commandParams = new HashMap<>();
+    commandParams.put("clusterName", "c1");
+    commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
+    commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
+
+    ExecutionCommand executionCommand = getExecutionCommand(commandParams);
+    HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
+
+    hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
 
     action.setExecutionCommand(executionCommand);
     action.setHostRoleCommand(hostRoleCommand);
@@ -185,31 +270,29 @@ public class ConfigureActionTest {
    */
   @Test
   public void testDeletePreserveChanges() throws Exception {
-    makeUpgradeCluster();
-
     Cluster c = clusters.getCluster("c1");
     assertEquals(1, c.getConfigsByType("zoo.cfg").size());
 
-    c.setDesiredStackVersion(HDP_220_STACK);
-
     // create a config for zoo.cfg with two values; one is a stack value and the
     // other is custom
-    Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+    Map<String, String> properties = new HashMap<String, String>() {
       {
         put("tickTime", "2000");
         put("foo", "bar");
       }
-    }, new HashMap<String, Map<String, String>>());
+    };
+
+    Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
 
     c.addDesiredConfig("user", Collections.singleton(config));
     assertEquals(2, c.getConfigsByType("zoo.cfg").size());
 
     Map<String, String> commandParams = new HashMap<>();
-    commandParams.put("upgrade_direction", "upgrade");
-    commandParams.put("version", HDP_2_2_0_1);
     commandParams.put("clusterName", "c1");
     commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
 
+    createUpgrade(c, repoVersion2111);
+
     // delete all keys, preserving edits or additions
     List<Transfer> transfers = new ArrayList<>();
     Transfer transfer = new Transfer();
@@ -220,16 +303,10 @@ public class ConfigureActionTest {
 
     commandParams.put(ConfigureTask.PARAMETER_TRANSFERS, new Gson().toJson(transfers));
 
-    ExecutionCommand executionCommand = new ExecutionCommand();
-    executionCommand.setCommandParams(commandParams);
-    executionCommand.setClusterName("c1");
-    executionCommand.setRoleParams(new HashMap<String, String>());
-    executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+    ExecutionCommand executionCommand = getExecutionCommand(commandParams);
     HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
     hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
 
-
     action.setExecutionCommand(executionCommand);
     action.setHostRoleCommand(hostRoleCommand);
 
@@ -251,18 +328,19 @@ public class ConfigureActionTest {
 
   @Test
   public void testConfigTransferCopy() throws Exception {
-    makeUpgradeCluster();
-
     Cluster c = clusters.getCluster("c1");
     assertEquals(1, c.getConfigsByType("zoo.cfg").size());
 
-    c.setDesiredStackVersion(HDP_220_STACK);
-    Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {{
-          put("initLimit", "10");
-          put("copyIt", "10");
-          put("moveIt", "10");
-          put("deleteIt", "10");
-        }}, new HashMap<String, Map<String,String>>());
+    Map<String, String> properties = new HashMap<String, String>() {
+      {
+        put("initLimit", "10");
+        put("copyIt", "10");
+        put("moveIt", "10");
+        put("deleteIt", "10");
+      }
+    };
+
+    Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
 
     c.addDesiredConfig("user", Collections.singleton(config));
     assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -273,9 +351,9 @@ public class ConfigureActionTest {
     keyValue.key = "initLimit";
     keyValue.value = "11";
 
+    createUpgrade(c, repoVersion2111);
+
     Map<String, String> commandParams = new HashMap<>();
-    commandParams.put("upgrade_direction", "upgrade");
-    commandParams.put("version", HDP_2_2_0_1);
     commandParams.put("clusterName", "c1");
     commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
     commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
@@ -319,12 +397,7 @@ public class ConfigureActionTest {
 
     commandParams.put(ConfigureTask.PARAMETER_TRANSFERS, new Gson().toJson(transfers));
 
-    ExecutionCommand executionCommand = new ExecutionCommand();
-    executionCommand.setCommandParams(commandParams);
-    executionCommand.setClusterName("c1");
-    executionCommand.setRoleParams(new HashMap<String, String>());
-    executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+    ExecutionCommand executionCommand = getExecutionCommand(commandParams);
     HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null,
         null, null);
 
@@ -388,24 +461,23 @@ public class ConfigureActionTest {
 
   @Test
   public void testCoerceValueOnCopy() throws Exception {
-    makeUpgradeCluster();
-
     Cluster c = clusters.getCluster("c1");
     assertEquals(1, c.getConfigsByType("zoo.cfg").size());
 
-    c.setDesiredStackVersion(HDP_220_STACK);
-    Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+    Map<String, String> properties = new HashMap<String, String>() {
       {
         put("zoo.server.csv", "c6401,c6402,  c6403");
       }
-    }, new HashMap<String, Map<String, String>>());
+    };
+
+    Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
 
     c.addDesiredConfig("user", Collections.singleton(config));
     assertEquals(2, c.getConfigsByType("zoo.cfg").size());
 
+    createUpgrade(c, repoVersion2111);
+
     Map<String, String> commandParams = new HashMap<>();
-    commandParams.put("upgrade_direction", "upgrade");
-    commandParams.put("version", HDP_2_2_0_1);
     commandParams.put("clusterName", "c1");
     commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
 
@@ -421,12 +493,7 @@ public class ConfigureActionTest {
 
     commandParams.put(ConfigureTask.PARAMETER_TRANSFERS, new Gson().toJson(transfers));
 
-    ExecutionCommand executionCommand = new ExecutionCommand();
-    executionCommand.setCommandParams(commandParams);
-    executionCommand.setClusterName("c1");
-    executionCommand.setRoleParams(new HashMap<String, String>());
-    executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+    ExecutionCommand executionCommand = getExecutionCommand(commandParams);
     HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
 
     hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
@@ -451,25 +518,24 @@ public class ConfigureActionTest {
 
   @Test
   public void testValueReplacement() throws Exception {
-    makeUpgradeCluster();
-
     Cluster c = clusters.getCluster("c1");
     assertEquals(1, c.getConfigsByType("zoo.cfg").size());
 
-    c.setDesiredStackVersion(HDP_220_STACK);
-    Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+    Map<String, String> properties = new HashMap<String, String>() {
       {
         put("key_to_replace", "My New Cat");
         put("key_with_no_match", "WxyAndZ");
       }
-    }, new HashMap<String, Map<String, String>>());
+    };
+
+    Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
 
     c.addDesiredConfig("user", Collections.singleton(config));
     assertEquals(2, c.getConfigsByType("zoo.cfg").size());
 
+    createUpgrade(c, repoVersion2111);
+
     Map<String, String> commandParams = new HashMap<>();
-    commandParams.put("upgrade_direction", "upgrade");
-    commandParams.put("version", HDP_2_2_0_1);
     commandParams.put("clusterName", "c1");
     commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
 
@@ -489,12 +555,7 @@ public class ConfigureActionTest {
 
     commandParams.put(ConfigureTask.PARAMETER_REPLACEMENTS, new Gson().toJson(replacements));
 
-    ExecutionCommand executionCommand = new ExecutionCommand();
-    executionCommand.setCommandParams(commandParams);
-    executionCommand.setClusterName("c1");
-    executionCommand.setRoleParams(new HashMap<String, String>());
-    executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+    ExecutionCommand executionCommand = getExecutionCommand(commandParams);
     HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
 
     hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
@@ -523,25 +584,24 @@ public class ConfigureActionTest {
    */
   @Test
   public void testValueReplacementWithMissingConfigurations() throws Exception {
-    makeUpgradeCluster();
-
     Cluster c = clusters.getCluster("c1");
     assertEquals(1, c.getConfigsByType("zoo.cfg").size());
 
-    c.setDesiredStackVersion(HDP_220_STACK);
-    Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+    Map<String, String> properties = new HashMap<String, String>() {
       {
         put("existing", "This exists!");
         put("missing", null);
       }
-    }, new HashMap<String, Map<String, String>>());
+    };
+
+    Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
 
     c.addDesiredConfig("user", Collections.singleton(config));
     assertEquals(2, c.getConfigsByType("zoo.cfg").size());
 
+    createUpgrade(c, repoVersion2111);
+
     Map<String, String> commandParams = new HashMap<>();
-    commandParams.put("upgrade_direction", "upgrade");
-    commandParams.put("version", HDP_2_2_0_1);
     commandParams.put("clusterName", "c1");
     commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
 
@@ -580,18 +640,16 @@ public class ConfigureActionTest {
 
   @Test
   public void testMultipleKeyValuesPerTask() throws Exception {
-    makeUpgradeCluster();
-
     Cluster c = clusters.getCluster("c1");
     assertEquals(1, c.getConfigsByType("zoo.cfg").size());
 
-    c.setCurrentStackVersion(HDP_211_STACK);
-    c.setDesiredStackVersion(HDP_220_STACK);
-    Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+    Map<String, String> properties = new HashMap<String, String>() {
       {
         put("fooKey", "barValue");
       }
-    }, new HashMap<String, Map<String, String>>());
+    };
+
+    Config config = createConfig(c, repoVersion2200, "zoo.cfg", "version2", properties);
 
     c.addDesiredConfig("user", Collections.singleton(config));
     assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -609,17 +667,14 @@ public class ConfigureActionTest {
     fooKey3.value = "barValue3";
     fooKey3.mask = true;
 
+    createUpgrade(c, repoVersion2200);
+
     Map<String, String> commandParams = new HashMap<>();
-    commandParams.put("upgrade_direction", "upgrade");
-    commandParams.put("version", HDP_2_2_0_1);
     commandParams.put("clusterName", "c1");
     commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
     commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
 
-    ExecutionCommand executionCommand = new ExecutionCommand();
-    executionCommand.setCommandParams(commandParams);
-    executionCommand.setClusterName("c1");
-
+    ExecutionCommand executionCommand = getExecutionCommand(commandParams);
     HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
     hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
 
@@ -643,21 +698,19 @@ public class ConfigureActionTest {
 
   @Test
   public void testAllowedSet() throws Exception {
-    makeUpgradeCluster();
-
     Cluster c = clusters.getCluster("c1");
     assertEquals(1, c.getConfigsByType("zoo.cfg").size());
 
-    c.setCurrentStackVersion(HDP_211_STACK);
-    c.setDesiredStackVersion(HDP_220_STACK);
-    Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+    Map<String, String> properties = new HashMap<String, String>() {
       {
         put("set.key.1", "s1");
         put("set.key.2", "s2");
         put("set.key.3", "s3");
         put("set.key.4", "s4");
       }
-    }, new HashMap<String, Map<String, String>>());
+    };
+
+    Config config = createConfig(c, repoVersion2200, "zoo.cfg", "version2", properties);
 
     c.addDesiredConfig("user", Collections.singleton(config));
     assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -698,18 +751,14 @@ public class ConfigureActionTest {
     fooKey5.ifType = "zoo.cfg";
     fooKey5.ifKeyState= PropertyKeyState.ABSENT;
 
+    createUpgrade(c, repoVersion2200);
 
     Map<String, String> commandParams = new HashMap<>();
-    commandParams.put("upgrade_direction", "upgrade");
-    commandParams.put("version", HDP_2_2_0_1);
     commandParams.put("clusterName", "c1");
     commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
     commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
 
-    ExecutionCommand executionCommand = new ExecutionCommand();
-    executionCommand.setCommandParams(commandParams);
-    executionCommand.setClusterName("c1");
-
+    ExecutionCommand executionCommand = getExecutionCommand(commandParams);
     HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
     hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
 
@@ -737,21 +786,19 @@ public class ConfigureActionTest {
 
   @Test
   public void testDisallowedSet() throws Exception {
-    makeUpgradeCluster();
-
     Cluster c = clusters.getCluster("c1");
     assertEquals(1, c.getConfigsByType("zoo.cfg").size());
 
-    c.setCurrentStackVersion(HDP_211_STACK);
-    c.setDesiredStackVersion(HDP_220_STACK);
-    Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+    Map<String, String> properties = new HashMap<String, String>() {
       {
         put("set.key.1", "s1");
         put("set.key.2", "s2");
         put("set.key.3", "s3");
         put("set.key.4", "s4");
       }
-    }, new HashMap<String, Map<String, String>>());
+    };
+
+    Config config = createConfig(c, repoVersion2200, "zoo.cfg", "version2", properties);
 
     c.addDesiredConfig("user", Collections.singleton(config));
     assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -782,18 +829,14 @@ public class ConfigureActionTest {
     fooKey5.ifType = "zoo.cfg";
     fooKey5.ifKeyState= PropertyKeyState.PRESENT;
 
+    createUpgrade(c, repoVersion2200);
 
     Map<String, String> commandParams = new HashMap<>();
-    commandParams.put("upgrade_direction", "upgrade");
-    commandParams.put("version", HDP_2_2_0_1);
     commandParams.put("clusterName", "c1");
     commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
     commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
 
-    ExecutionCommand executionCommand = new ExecutionCommand();
-    executionCommand.setCommandParams(commandParams);
-    executionCommand.setClusterName("c1");
-
+    ExecutionCommand executionCommand = getExecutionCommand(commandParams);
     HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
     hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
 
@@ -819,14 +862,12 @@ public class ConfigureActionTest {
 
   @Test
   public void testAllowedReplacment() throws Exception {
-    makeUpgradeCluster();
+
 
     Cluster c = clusters.getCluster("c1");
     assertEquals(1, c.getConfigsByType("zoo.cfg").size());
 
-    c.setCurrentStackVersion(HDP_211_STACK);
-    c.setDesiredStackVersion(HDP_220_STACK);
-    Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+    Map<String, String> properties = new HashMap<String, String>() {
       {
         put("replace.key.1", "r1");
         put("replace.key.2", "r2");
@@ -834,7 +875,9 @@ public class ConfigureActionTest {
         put("replace.key.4", "r4");
         put("replace.key.5", "r5");
       }
-    }, new HashMap<String, Map<String, String>>());
+    };
+
+    Config config = createConfig(c, repoVersion2200, "zoo.cfg", "version2", properties);
 
     c.addDesiredConfig("user", Collections.singleton(config));
     assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -877,17 +920,14 @@ public class ConfigureActionTest {
     replace4.ifKeyState = PropertyKeyState.ABSENT;
     replacements.add(replace4);
 
+    createUpgrade(c, repoVersion2200);
+
     Map<String, String> commandParams = new HashMap<>();
-    commandParams.put("upgrade_direction", "upgrade");
-    commandParams.put("version", HDP_2_2_0_1);
     commandParams.put("clusterName", "c1");
     commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
     commandParams.put(ConfigureTask.PARAMETER_REPLACEMENTS, new Gson().toJson(replacements));
 
-    ExecutionCommand executionCommand = new ExecutionCommand();
-    executionCommand.setCommandParams(commandParams);
-    executionCommand.setClusterName("c1");
-
+    ExecutionCommand executionCommand = getExecutionCommand(commandParams);
     HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
     hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
 
@@ -911,14 +951,10 @@ public class ConfigureActionTest {
 
   @Test
   public void testDisallowedReplacment() throws Exception {
-    makeUpgradeCluster();
-
     Cluster c = clusters.getCluster("c1");
     assertEquals(1, c.getConfigsByType("zoo.cfg").size());
 
-    c.setCurrentStackVersion(HDP_211_STACK);
-    c.setDesiredStackVersion(HDP_220_STACK);
-    Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+    Map<String, String> properties = new HashMap<String, String>() {
       {
         put("replace.key.1", "r1");
         put("replace.key.2", "r2");
@@ -926,7 +962,9 @@ public class ConfigureActionTest {
         put("replace.key.4", "r4");
         put("replace.key.5", "r5");
       }
-    }, new HashMap<String, Map<String, String>>());
+    };
+
+    Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
 
     c.addDesiredConfig("user", Collections.singleton(config));
     assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -964,17 +1002,14 @@ public class ConfigureActionTest {
     replace4.ifKeyState = PropertyKeyState.PRESENT;
     replacements.add(replace4);
 
+    createUpgrade(c, repoVersion2200);
+
     Map<String, String> commandParams = new HashMap<>();
-    commandParams.put("upgrade_direction", "upgrade");
-    commandParams.put("version", HDP_2_2_0_1);
     commandParams.put("clusterName", "c1");
     commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
     commandParams.put(ConfigureTask.PARAMETER_REPLACEMENTS, new Gson().toJson(replacements));
 
-    ExecutionCommand executionCommand = new ExecutionCommand();
-    executionCommand.setCommandParams(commandParams);
-    executionCommand.setClusterName("c1");
-
+    ExecutionCommand executionCommand = getExecutionCommand(commandParams);
     HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
     hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
 
@@ -998,17 +1033,18 @@ public class ConfigureActionTest {
 
   @Test
   public void testAllowedTransferCopy() throws Exception {
-    makeUpgradeCluster();
-
     Cluster c = clusters.getCluster("c1");
     assertEquals(1, c.getConfigsByType("zoo.cfg").size());
 
-    c.setDesiredStackVersion(HDP_220_STACK);
-    Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {{
-          put("initLimit", "10");
-          put("copy.key.1", "c1");
-          put("copy.key.2", "c2");
-        }}, new HashMap<String, Map<String,String>>());
+    Map<String, String> properties = new HashMap<String, String>() {
+      {
+        put("initLimit", "10");
+        put("copy.key.1", "c1");
+        put("copy.key.2", "c2");
+      }
+    };
+
+    Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
 
     c.addDesiredConfig("user", Collections.singleton(config));
     assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -1019,9 +1055,9 @@ public class ConfigureActionTest {
     keyValue.key = "initLimit";
     keyValue.value = "11";
 
+    createUpgrade(c, repoVersion2200);
+
     Map<String, String> commandParams = new HashMap<>();
-    commandParams.put("upgrade_direction", "upgrade");
-    commandParams.put("version", HDP_2_2_0_1);
     commandParams.put("clusterName", "c1");
     commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
     commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
@@ -1072,12 +1108,7 @@ public class ConfigureActionTest {
 
     commandParams.put(ConfigureTask.PARAMETER_TRANSFERS, new Gson().toJson(transfers));
 
-    ExecutionCommand executionCommand = new ExecutionCommand();
-    executionCommand.setCommandParams(commandParams);
-    executionCommand.setClusterName("c1");
-    executionCommand.setRoleParams(new HashMap<String, String>());
-    executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+    ExecutionCommand executionCommand = getExecutionCommand(commandParams);
     HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null,
         null, null);
 
@@ -1111,17 +1142,18 @@ public class ConfigureActionTest {
 
   @Test
   public void testDisallowedTransferCopy() throws Exception {
-    makeUpgradeCluster();
-
     Cluster c = clusters.getCluster("c1");
     assertEquals(1, c.getConfigsByType("zoo.cfg").size());
 
-    c.setDesiredStackVersion(HDP_220_STACK);
-    Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {{
-          put("initLimit", "10");
-          put("copy.key.1", "c1");
-          put("copy.key.2", "c2");
-        }}, new HashMap<String, Map<String,String>>());
+    Map<String, String> properties = new HashMap<String, String>() {
+      {
+        put("initLimit", "10");
+        put("copy.key.1", "c1");
+        put("copy.key.2", "c2");
+      }
+    };
+
+    Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
 
     c.addDesiredConfig("user", Collections.singleton(config));
     assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -1132,9 +1164,9 @@ public class ConfigureActionTest {
     keyValue.key = "initLimit";
     keyValue.value = "11";
 
+    createUpgrade(c, repoVersion2111);
+
     Map<String, String> commandParams = new HashMap<>();
-    commandParams.put("upgrade_direction", "upgrade");
-    commandParams.put("version", HDP_2_2_0_1);
     commandParams.put("clusterName", "c1");
     commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
     commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
@@ -1204,19 +1236,20 @@ public class ConfigureActionTest {
 
   @Test
   public void testAllowedTransferMove() throws Exception {
-    makeUpgradeCluster();
-
     Cluster c = clusters.getCluster("c1");
     assertEquals(1, c.getConfigsByType("zoo.cfg").size());
 
-    c.setDesiredStackVersion(HDP_220_STACK);
-    Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {{
-          put("initLimit", "10");
-          put("move.key.1", "m1");
-          put("move.key.2", "m2");
-          put("move.key.3", "m3");
-          put("move.key.4", "m4");
-        }}, new HashMap<String, Map<String,String>>());
+    Map<String, String> properties = new HashMap<String, String>() {
+      {
+        put("initLimit", "10");
+        put("move.key.1", "m1");
+        put("move.key.2", "m2");
+        put("move.key.3", "m3");
+        put("move.key.4", "m4");
+      }
+    };
+
+    Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
 
     c.addDesiredConfig("user", Collections.singleton(config));
     assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -1227,9 +1260,9 @@ public class ConfigureActionTest {
     keyValue.key = "initLimit";
     keyValue.value = "11";
 
+    createUpgrade(c, repoVersion2111);
+
     Map<String, String> commandParams = new HashMap<>();
-    commandParams.put("upgrade_direction", "upgrade");
-    commandParams.put("version", HDP_2_2_0_1);
     commandParams.put("clusterName", "c1");
     commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
     commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
@@ -1270,12 +1303,7 @@ public class ConfigureActionTest {
 
     commandParams.put(ConfigureTask.PARAMETER_TRANSFERS, new Gson().toJson(transfers));
 
-    ExecutionCommand executionCommand = new ExecutionCommand();
-    executionCommand.setCommandParams(commandParams);
-    executionCommand.setClusterName("c1");
-    executionCommand.setRoleParams(new HashMap<String, String>());
-    executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+    ExecutionCommand executionCommand = getExecutionCommand(commandParams);
     HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null,
         null, null);
 
@@ -1310,20 +1338,20 @@ public class ConfigureActionTest {
 
   @Test
   public void testDisallowedTransferMove() throws Exception {
-    makeUpgradeCluster();
-
     Cluster c = clusters.getCluster("c1");
     assertEquals(1, c.getConfigsByType("zoo.cfg").size());
 
-    c.setDesiredStackVersion(HDP_220_STACK);
-    Config config = cf.createNew(c, "zoo.cfg", "version2",
-        new HashMap<String, String>() {{
-          put("initLimit", "10");
-          put("move.key.1", "m1");
-          put("move.key.2", "m2");
-          put("move.key.3", "m3");
-          put("move.key.4", "m4");
-        }}, new HashMap<String, Map<String,String>>());
+    Map<String, String> properties = new HashMap<String, String>() {
+      {
+        put("initLimit", "10");
+        put("move.key.1", "m1");
+        put("move.key.2", "m2");
+        put("move.key.3", "m3");
+        put("move.key.4", "m4");
+      }
+    };
+
+    Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
 
     c.addDesiredConfig("user", Collections.singleton(config));
     assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -1334,9 +1362,9 @@ public class ConfigureActionTest {
     keyValue.key = "initLimit";
     keyValue.value = "11";
 
+    createUpgrade(c, repoVersion2111);
+
     Map<String, String> commandParams = new HashMap<>();
-    commandParams.put("upgrade_direction", "upgrade");
-    commandParams.put("version", HDP_2_2_0_1);
     commandParams.put("clusterName", "c1");
     commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
     commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
@@ -1371,12 +1399,7 @@ public class ConfigureActionTest {
 
     commandParams.put(ConfigureTask.PARAMETER_TRANSFERS, new Gson().toJson(transfers));
 
-    ExecutionCommand executionCommand = new ExecutionCommand();
-    executionCommand.setCommandParams(commandParams);
-    executionCommand.setClusterName("c1");
-    executionCommand.setRoleParams(new HashMap<String, String>());
-    executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+    ExecutionCommand executionCommand = getExecutionCommand(commandParams);
     HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null,
         null, null);
 
@@ -1412,19 +1435,20 @@ public class ConfigureActionTest {
 
   @Test
   public void testAllowedTransferDelete() throws Exception {
-    makeUpgradeCluster();
-
     Cluster c = clusters.getCluster("c1");
     assertEquals(1, c.getConfigsByType("zoo.cfg").size());
 
-    c.setDesiredStackVersion(HDP_220_STACK);
-    Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {{
-          put("initLimit", "10");
-          put("delete.key.1", "d1");
-          put("delete.key.2", "d2");
-          put("delete.key.3", "d3");
-          put("delete.key.4", "d4");
-        }}, new HashMap<String, Map<String,String>>());
+    Map<String, String> properties = new HashMap<String, String>() {
+      {
+        put("initLimit", "10");
+        put("delete.key.1", "d1");
+        put("delete.key.2", "d2");
+        put("delete.key.3", "d3");
+        put("delete.key.4", "d4");
+      }
+    };
+
+    Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
 
     c.addDesiredConfig("user", Collections.singleton(config));
     assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -1435,9 +1459,9 @@ public class ConfigureActionTest {
     keyValue.key = "initLimit";
     keyValue.value = "11";
 
+    createUpgrade(c, repoVersion2111);
+
     Map<String, String> commandParams = new HashMap<>();
-    commandParams.put("upgrade_direction", "upgrade");
-    commandParams.put("version", HDP_2_2_0_1);
     commandParams.put("clusterName", "c1");
     commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
     commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
@@ -1474,12 +1498,7 @@ public class ConfigureActionTest {
 
     commandParams.put(ConfigureTask.PARAMETER_TRANSFERS, new Gson().toJson(transfers));
 
-    ExecutionCommand executionCommand = new ExecutionCommand();
-    executionCommand.setCommandParams(commandParams);
-    executionCommand.setClusterName("c1");
-    executionCommand.setRoleParams(new HashMap<String, String>());
-    executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+    ExecutionCommand executionCommand = getExecutionCommand(commandParams);
     HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null,
         null, null);
 
@@ -1510,19 +1529,20 @@ public class ConfigureActionTest {
 
   @Test
   public void testDisallowedTransferDelete() throws Exception {
-    makeUpgradeCluster();
-
     Cluster c = clusters.getCluster("c1");
     assertEquals(1, c.getConfigsByType("zoo.cfg").size());
 
-    c.setDesiredStackVersion(HDP_220_STACK);
-    Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {{
-          put("initLimit", "10");
-          put("delete.key.1", "d1");
-          put("delete.key.2", "d2");
-          put("delete.key.3", "d3");
-          put("delete.key.4", "d4");
-        }}, new HashMap<String, Map<String,String>>());
+    Map<String, String> properties = new HashMap<String, String>() {
+      {
+        put("initLimit", "10");
+        put("delete.key.1", "d1");
+        put("delete.key.2", "d2");
+        put("delete.key.3", "d3");
+        put("delete.key.4", "d4");
+      }
+    };
+
+    Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
 
     c.addDesiredConfig("user", Collections.singleton(config));
     assertEquals(2, c.getConfigsByType("zoo.cfg").size());
@@ -1533,9 +1553,9 @@ public class ConfigureActionTest {
     keyValue.key = "initLimit";
     keyValue.value = "11";
 
+    createUpgrade(c, repoVersion2111);
+
     Map<String, String> commandParams = new HashMap<>();
-    commandParams.put("upgrade_direction", "upgrade");
-    commandParams.put("version", HDP_2_2_0_1);
     commandParams.put("clusterName", "c1");
     commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
     commandParams.put(ConfigureTask.PARAMETER_KEY_VALUE_PAIRS, new Gson().toJson(configurations));
@@ -1567,12 +1587,7 @@ public class ConfigureActionTest {
 
     commandParams.put(ConfigureTask.PARAMETER_TRANSFERS, new Gson().toJson(transfers));
 
-    ExecutionCommand executionCommand = new ExecutionCommand();
-    executionCommand.setCommandParams(commandParams);
-    executionCommand.setClusterName("c1");
-    executionCommand.setRoleParams(new HashMap<String, String>());
-    executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+    ExecutionCommand executionCommand = getExecutionCommand(commandParams);
     HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null,
         null, null);
 
@@ -1608,25 +1623,24 @@ public class ConfigureActionTest {
    */
   @Test
   public void testInsert() throws Exception {
-    makeUpgradeCluster();
-
     Cluster c = clusters.getCluster("c1");
     assertEquals(1, c.getConfigsByType("zoo.cfg").size());
 
-    c.setDesiredStackVersion(HDP_220_STACK);
-    Config config = cf.createNew(c, "zoo.cfg", "version2", new HashMap<String, String>() {
+    Map<String, String> properties = new HashMap<String, String>() {
       {
         put("key_to_append", "append");
         put("key_to_prepend", "prepend");
       }
-    }, new HashMap<String, Map<String, String>>());
+    };
+
+    Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version2", properties);
 
     c.addDesiredConfig("user", Collections.singleton(config));
     assertEquals(2, c.getConfigsByType("zoo.cfg").size());
 
+    createUpgrade(c, repoVersion2111);
+
     Map<String, String> commandParams = new HashMap<>();
-    commandParams.put("upgrade_direction", "upgrade");
-    commandParams.put("version", HDP_2_2_0_1);
     commandParams.put("clusterName", "c1");
     commandParams.put(ConfigureTask.PARAMETER_CONFIG_TYPE, "zoo.cfg");
 
@@ -1661,12 +1675,7 @@ public class ConfigureActionTest {
 
     commandParams.put(ConfigureTask.PARAMETER_INSERTIONS, new Gson().toJson(insertions));
 
-    ExecutionCommand executionCommand = new ExecutionCommand();
-    executionCommand.setCommandParams(commandParams);
-    executionCommand.setClusterName("c1");
-    executionCommand.setRoleParams(new HashMap<String, String>());
-    executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
-
+    ExecutionCommand executionCommand = getExecutionCommand(commandParams);
     HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
     hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
     action.setExecutionCommand(executionCommand);
@@ -1689,67 +1698,46 @@ public class ConfigureActionTest {
     assertEquals(expectedAppend, config.getProperties().get("key_to_append"));
   }
 
+  /**
+   * Creates a cluster using {@link #repoVersion2110} with ZooKeeper installed.
+   *
+   * @throws Exception
+   */
   private void makeUpgradeCluster() throws Exception {
     String clusterName = "c1";
     String hostName = "h1";
 
-    clusters.addCluster(clusterName, HDP_220_STACK);
-
-
-    StackEntity stackEntity = stackDAO.find(HDP_220_STACK.getStackName(),
-        HDP_220_STACK.getStackVersion());
-
-    assertNotNull(stackEntity);
+    clusters.addCluster(clusterName, repoVersion2110.getStackId());
 
     Cluster c = clusters.getCluster(clusterName);
-    c.setDesiredStackVersion(HDP_220_STACK);
-
-    // !!! very important, otherwise the loops that walk the list of installed
-    // service properties will not run!
-    installService(c, "ZOOKEEPER");
-
-    Config config = cf.createNew(c, "zoo.cfg", "version1", new HashMap<String, String>() {
-      {
-        put("initLimit", "10");
-      }
-    }, new HashMap<String, Map<String, String>>());
-
-    c.addDesiredConfig("user", Collections.singleton(config));
 
     // add a host component
     clusters.addHost(hostName);
-
     Host host = clusters.getHost(hostName);
-
     Map<String, String> hostAttributes = new HashMap<>();
     hostAttributes.put("os_family", "redhat");
     hostAttributes.put("os_release_version", "6");
     host.setHostAttributes(hostAttributes);
 
-    // Creating starting repo
-    m_helper.getOrCreateRepositoryVersion(HDP_220_STACK, HDP_2_2_0_0);
-    c.createClusterVersion(HDP_220_STACK, HDP_2_2_0_0, "admin", RepositoryVersionState.INSTALLING);
-    c.transitionClusterVersion(HDP_220_STACK, HDP_2_2_0_0, RepositoryVersionState.CURRENT);
-
-    String urlInfo = "[{'repositories':["
-        + "{'Repositories/base_url':'http://foo1','Repositories/repo_name':'HDP','Repositories/repo_id':'HDP-2.2.0'}"
-        + "], 'OperatingSystems/os_type':'redhat6'}]";
-    repoVersionDAO.create(stackEntity, HDP_2_2_0_1, String.valueOf(System.currentTimeMillis()), urlInfo);
-
+    clusters.mapHostToCluster(hostName, clusterName);
 
-    c.createClusterVersion(HDP_220_STACK, HDP_2_2_0_1, "admin", RepositoryVersionState.INSTALLING);
-    c.transitionClusterVersion(HDP_220_STACK, HDP_2_2_0_1, RepositoryVersionState.INSTALLED);
-    c.setCurrentStackVersion(HDP_220_STACK);
+    // !!! very important, otherwise the loops that walk the list of installed
+    // service properties will not run!
+    Service zk = installService(c, "ZOOKEEPER", repoVersion2110);
+    addServiceComponent(c, zk, "ZOOKEEPER_SERVER");
+    addServiceComponent(c, zk, "ZOOKEEPER_CLIENT");
+    createNewServiceComponentHost(c, "ZOOKEEPER", "ZOOKEEPER_SERVER", hostName);
+    createNewServiceComponentHost(c, "ZOOKEEPER", "ZOOKEEPER_CLIENT", hostName);
 
-    c.mapHostVersions(Collections.singleton(hostName), c.getCurrentClusterVersion(),
-        RepositoryVersionState.CURRENT);
+    Map<String, String> properties = new HashMap<String, String>() {
+      {
+        put("initLimit", "10");
+      }
+    };
 
+    Config config = createConfig(c, repoVersion2110, "zoo.cfg", "version1", properties);
 
-    HostVersionEntity entity = new HostVersionEntity();
-    entity.setHostEntity(hostDAO.findByName(hostName));
-    entity.setRepositoryVersion(repoVersionDAO.findByStackAndVersion(HDP_220_STACK, HDP_2_2_0_1));
-    entity.setState(RepositoryVersionState.INSTALLED);
-    hostVersionDAO.create(entity);
+    c.addDesiredConfig("user", Collections.singleton(config));
 
     // verify that our configs are there
     String tickTime = m_configHelper.getPropertyValueFromStackDefinitions(c, "zoo.cfg", "tickTime");
@@ -1764,16 +1752,104 @@ public class ConfigureActionTest {
    * @return
    * @throws AmbariException
    */
-  private Service installService(Cluster cluster, String serviceName) throws AmbariException {
+  private Service installService(Cluster cluster, String serviceName,
+      RepositoryVersionEntity repositoryVersion) throws AmbariException {
     Service service = null;
 
     try {
       service = cluster.getService(serviceName);
     } catch (ServiceNotFoundException e) {
-      service = serviceFactory.createNew(cluster, serviceName);
+      service = serviceFactory.createNew(cluster, serviceName, repositoryVersion);
       cluster.addService(service);
     }
 
     return service;
   }
-}
+
+  private ServiceComponent addServiceComponent(Cluster cluster, Service service,
+      String componentName) throws AmbariException {
+    ServiceComponent serviceComponent = null;
+    try {
+      serviceComponent = service.getServiceComponent(componentName);
+    } catch (ServiceComponentNotFoundException e) {
+      serviceComponent = serviceComponentFactory.createNew(service, componentName);
+      service.addServiceComponent(serviceComponent);
+      serviceComponent.setDesiredState(State.INSTALLED);
+    }
+
+    return serviceComponent;
+  }
+
+  private ServiceComponentHost createNewServiceComponentHost(Cluster cluster, String serviceName,
+      String svcComponent, String hostName) throws AmbariException {
+    Assert.assertNotNull(cluster.getConfigGroups());
+    Service s = cluster.getService(serviceName);
+    ServiceComponent sc = addServiceComponent(cluster, s, svcComponent);
+
+    ServiceComponentHost sch = serviceComponentHostFactory.createNew(sc, hostName);
+
+    sc.addServiceComponentHost(sch);
+    sch.setDesiredState(State.INSTALLED);
+    sch.setState(State.INSTALLED);
+    return sch;
+  }
+
+  /**
+   * Creates an upgrade and associates it with the cluster.
+   */
+  private UpgradeEntity createUpgrade(Cluster cluster, RepositoryVersionEntity repositoryVersion)
+      throws Exception {
+
+    // create some entities for the finalize action to work with for patch
+    // history
+    RequestEntity requestEntity = new RequestEntity();
+    requestEntity.setClusterId(cluster.getClusterId());
+    requestEntity.setRequestId(1L);
+    requestEntity.setStartTime(System.currentTimeMillis());
+    requestEntity.setCreateTime(System.currentTimeMillis());
+    requestDAO.create(requestEntity);
+
+    UpgradeEntity upgradeEntity = new UpgradeEntity();
+    upgradeEntity.setId(1L);
+    upgradeEntity.setClusterId(cluster.getClusterId());
+    upgradeEntity.setRequestEntity(requestEntity);
+    upgradeEntity.setUpgradePackage("");
+    upgradeEntity.setRepositoryVersion(repositoryVersion);
+    upgradeEntity.setUpgradeType(UpgradeType.NON_ROLLING);
+
+    Map<String, Service> services = cluster.getServices();
+    for (String serviceName : services.keySet()) {
+      Service service = services.get(serviceName);
+      Map<String, ServiceComponent> components = service.getServiceComponents();
+      for (String componentName : components.keySet()) {
+        UpgradeHistoryEntity history = new UpgradeHistoryEntity();
+        history.setUpgrade(upgradeEntity);
+        history.setServiceName(serviceName);
+        history.setComponentName(componentName);
+        history.setFromRepositoryVersion(service.getDesiredRepositoryVersion());
+        history.setTargetRepositoryVersion(repositoryVersion);
+        upgradeEntity.addHistory(history);
+      }
+    }
+
+    upgradeDAO.create(upgradeEntity);
+    cluster.setUpgradeEntity(upgradeEntity);
+    return upgradeEntity;
+  }
+
+  private ExecutionCommand getExecutionCommand(Map<String, String> commandParams) {
+    ExecutionCommand executionCommand = new ExecutionCommand();
+    executionCommand.setClusterName("c1");
+    executionCommand.setCommandParams(commandParams);
+    executionCommand.setRoleParams(new HashMap<String, String>());
+    executionCommand.getRoleParams().put(ServerAction.ACTION_USER_NAME, "username");
+
+    return executionCommand;
+  }
+
+  private Config createConfig(Cluster cluster, RepositoryVersionEntity repoVersion, String type,
+      String tag, Map<String, String> properties) {
+    return configFactory.createNew(cluster, type, tag, properties,
+        NO_ATTRIBUTES);
+  }
+}
\ No newline at end of file