http://git-wip-us.apache.org/repos/asf/ambari/blob/56362fd6/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ScaleClusterRequestTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ScaleClusterRequestTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ScaleClusterRequestTest.java
index 5fbaed9..7e042a4 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ScaleClusterRequestTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ScaleClusterRequestTest.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
@@ -18,26 +18,6 @@
 
 package org.apache.ambari.server.controller.internal;
 
-import org.apache.ambari.server.controller.spi.ResourceProvider;
-import org.apache.ambari.server.topology.Blueprint;
-import org.apache.ambari.server.topology.BlueprintFactory;
-import org.apache.ambari.server.topology.Configuration;
-import org.apache.ambari.server.topology.HostGroup;
-import org.apache.ambari.server.topology.HostGroupInfo;
-import org.apache.ambari.server.topology.InvalidTopologyTemplateException;
-import org.apache.ambari.server.topology.TopologyRequest;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.lang.reflect.Field;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
-
 import static org.easymock.EasyMock.createMock;
 import static org.easymock.EasyMock.createNiceMock;
 import static org.easymock.EasyMock.expect;
@@ -50,6 +30,26 @@ import static 
org.powermock.api.easymock.PowerMock.createStrictMock;
 import static org.powermock.api.easymock.PowerMock.replay;
 import static org.powermock.api.easymock.PowerMock.reset;
 
+import java.lang.reflect.Field;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.ambari.server.controller.spi.ResourceProvider;
+import org.apache.ambari.server.topology.Blueprint;
+import org.apache.ambari.server.topology.BlueprintFactory;
+import org.apache.ambari.server.topology.Configuration;
+import org.apache.ambari.server.topology.HostGroup;
+import org.apache.ambari.server.topology.HostGroupInfo;
+import org.apache.ambari.server.topology.InvalidTopologyTemplateException;
+import org.apache.ambari.server.topology.TopologyRequest;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
 /**
  * Unit tests for ScaleClusterRequest.
  */
@@ -133,7 +133,7 @@ public class ScaleClusterRequestTest {
     reset(hostResourceProvider);
     replay(hostResourceProvider);
 
-    Set<Map<String, Object>> propertySet = new HashSet<Map<String, Object>>();
+    Set<Map<String, Object>> propertySet = new HashSet<>();
     propertySet.add(createScaleClusterPropertiesGroup1_HostName(CLUSTER_NAME, 
BLUEPRINT_NAME));
     propertySet.add(createScaleClusterPropertiesGroup1_HostName2(CLUSTER_NAME, 
BLUEPRINT_NAME));
 
@@ -234,7 +234,7 @@ public class ScaleClusterRequestTest {
 
   @Test
   public void testMultipleHostGroups() throws Exception {
-    Set<Map<String, Object>> propertySet = new HashSet<Map<String, Object>>();
+    Set<Map<String, Object>> propertySet = new HashSet<>();
     
propertySet.add(createScaleClusterPropertiesGroup1_HostCountAndPredicate(CLUSTER_NAME,
 BLUEPRINT_NAME));
     propertySet.add(createScaleClusterPropertiesGroup1_HostCount(CLUSTER_NAME, 
BLUEPRINT_NAME));
     propertySet.add(createScaleClusterPropertiesGroup1_HostName(CLUSTER_NAME, 
BLUEPRINT_NAME));
@@ -322,7 +322,7 @@ public class ScaleClusterRequestTest {
     reset(hostResourceProvider);
     replay(hostResourceProvider);
 
-    Set<Map<String, Object>> propertySet = new LinkedHashSet<Map<String, 
Object>>();
+    Set<Map<String, Object>> propertySet = new LinkedHashSet<>();
     propertySet.add(createScaleClusterPropertiesGroup1_HostName(CLUSTER_NAME, 
BLUEPRINT_NAME));
     propertySet.add(createScaleClusterPropertiesGroup1_HostName2(CLUSTER_NAME, 
"OTHER_BLUEPRINT"));
 
@@ -331,33 +331,33 @@ public class ScaleClusterRequestTest {
   }
 
   public static Map<String, Object> 
createScaleClusterPropertiesGroup1_HostName(String clusterName, String 
blueprintName) {
-    Map<String, Object> properties = new LinkedHashMap<String, Object>();
+    Map<String, Object> properties = new LinkedHashMap<>();
 
     properties.put(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID, 
clusterName);
     properties.put(HostResourceProvider.BLUEPRINT_PROPERTY_ID, blueprintName);
-    properties.put(HostResourceProvider.HOSTGROUP_PROPERTY_ID, GROUP1_NAME);
-    properties.put(HostResourceProvider.HOST_NAME_NO_CATEGORY_PROPERTY_ID, 
HOST1_NAME);
+    properties.put(HostResourceProvider.HOST_GROUP_PROPERTY_ID, GROUP1_NAME);
+    properties.put(HostResourceProvider.HOST_NAME_PROPERTY_ID, HOST1_NAME);
 
     return properties;
   }
 
   public static Map<String, Object> 
createScaleClusterPropertiesGroup1_HostCount(String clusterName, String 
blueprintName) {
-    Map<String, Object> properties = new LinkedHashMap<String, Object>();
+    Map<String, Object> properties = new LinkedHashMap<>();
 
     properties.put(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID, 
clusterName);
     properties.put(HostResourceProvider.BLUEPRINT_PROPERTY_ID, blueprintName);
-    properties.put(HostResourceProvider.HOSTGROUP_PROPERTY_ID, GROUP2_NAME);
+    properties.put(HostResourceProvider.HOST_GROUP_PROPERTY_ID, GROUP2_NAME);
     properties.put(HostResourceProvider.HOST_COUNT_PROPERTY_ID, 1);
 
     return properties;
   }
 
   public static Map<String, Object> 
createScaleClusterPropertiesGroup1_HostCountAndPredicate(String clusterName, 
String blueprintName) {
-    Map<String, Object> properties = new LinkedHashMap<String, Object>();
+    Map<String, Object> properties = new LinkedHashMap<>();
 
     properties.put(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID, 
clusterName);
     properties.put(HostResourceProvider.BLUEPRINT_PROPERTY_ID, blueprintName);
-    properties.put(HostResourceProvider.HOSTGROUP_PROPERTY_ID, GROUP3_NAME);
+    properties.put(HostResourceProvider.HOST_GROUP_PROPERTY_ID, GROUP3_NAME);
     properties.put(HostResourceProvider.HOST_COUNT_PROPERTY_ID, 1);
     properties.put(HostResourceProvider.HOST_PREDICATE_PROPERTY_ID, PREDICATE);
 
@@ -365,24 +365,24 @@ public class ScaleClusterRequestTest {
   }
 
   public static Map<String, Object> 
createScaleClusterPropertiesGroup1_HostCount2(String clusterName, String 
blueprintName) {
-    Map<String, Object> properties = new LinkedHashMap<String, Object>();
+    Map<String, Object> properties = new LinkedHashMap<>();
 
     properties.put(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID, 
clusterName);
     properties.put(HostResourceProvider.BLUEPRINT_PROPERTY_ID, blueprintName);
-    properties.put(HostResourceProvider.HOSTGROUP_PROPERTY_ID, GROUP3_NAME);
+    properties.put(HostResourceProvider.HOST_GROUP_PROPERTY_ID, GROUP3_NAME);
     properties.put(HostResourceProvider.HOST_COUNT_PROPERTY_ID, 2);
 
     return properties;
   }
 
   public static Map<String, Object> 
createScaleClusterPropertiesGroup1_HostName2(String clusterName, String 
blueprintName) {
-    Map<String, Object> properties = new LinkedHashMap<String, Object>();
+    Map<String, Object> properties = new LinkedHashMap<>();
 
     properties.put(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID, 
clusterName);
     properties.put(HostResourceProvider.BLUEPRINT_PROPERTY_ID, blueprintName);
-    properties.put(HostResourceProvider.HOSTGROUP_PROPERTY_ID, GROUP1_NAME);
-    properties.put(HostResourceProvider.HOST_NAME_NO_CATEGORY_PROPERTY_ID, 
HOST2_NAME);
+    properties.put(HostResourceProvider.HOST_GROUP_PROPERTY_ID, GROUP1_NAME);
+    properties.put(HostResourceProvider.HOST_NAME_PROPERTY_ID, HOST2_NAME);
 
     return properties;
   }
-}
+}
\ 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/controller/internal/ServiceResourceProviderTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
index a0c58ea..7fe888d 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java
@@ -153,7 +153,7 @@ public class ServiceResourceProviderTest {
     properties.put(ServiceResourceProvider.SERVICE_SERVICE_NAME_PROPERTY_ID, 
"Service100");
     properties.put(ServiceResourceProvider.SERVICE_SERVICE_STATE_PROPERTY_ID, 
"INIT");
     properties.put(ServiceResourceProvider.SERVICE_DESIRED_STACK_PROPERTY_ID, 
"HDP-1.1");
-    
properties.put(ServiceResourceProvider.SERVICE_DESIRED_REPO_VERSION_ID_PROPERTY_ID,
 "1");
+    
properties.put(ServiceResourceProvider.SERVICE_DESIRED_REPO_VERSION_PROPERTY_ID,
 "1");
 
     propertySet.add(properties);
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/56362fd6/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
index dc97f9b..7beaa43 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackDefinedPropertyProviderTest.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
@@ -57,12 +57,13 @@ import 
org.apache.ambari.server.events.publishers.AmbariEventPublisher;
 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.entities.RepositoryVersionEntity;
 import org.apache.ambari.server.security.TestAuthenticationFactory;
 import org.apache.ambari.server.security.authorization.AuthorizationException;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 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.StackId;
 import org.apache.ambari.server.state.services.MetricsRetrievalService;
 import org.apache.ambari.server.state.stack.Metric;
@@ -137,13 +138,28 @@ public class StackDefinedPropertyProviderTest {
     Cluster cluster = clusters.getCluster("c2");
 
     cluster.setDesiredStackVersion(stackId);
-    helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
-    cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
-      RepositoryVersionState.INSTALLING);
+    RepositoryVersionEntity repositoryVersion = 
helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
+    Service service = cluster.addService("HDFS", repositoryVersion);
+    service.addServiceComponent("NAMENODE");
+    service.addServiceComponent("DATANODE");
+    service.addServiceComponent("JOURNALNODE");
+
+    service = cluster.addService("YARN", repositoryVersion);
+    service.addServiceComponent("RESOURCEMANAGER");
+
+    service = cluster.addService("HBASE", repositoryVersion);
+    service.addServiceComponent("HBASE_MASTER");
+    service.addServiceComponent("HBASE_REGIONSERVER");
+
+    stackId = new StackId("HDP-2.1.1");
+    repositoryVersion = helper.getOrCreateRepositoryVersion(stackId, 
stackId.getStackVersion());
+
+    service = cluster.addService("STORM", repositoryVersion);
+    service.addServiceComponent("STORM_REST_API");
 
     clusters.addHost("h1");
     Host host = clusters.getHost("h1");
-    Map<String, String> hostAttributes = new HashMap<String, String>();
+    Map<String, String> hostAttributes = new HashMap<>();
     hostAttributes.put("os_family", "redhat");
     hostAttributes.put("os_release_version", "6.3");
     host.setHostAttributes(hostAttributes);
@@ -429,7 +445,7 @@ public class StackDefinedPropertyProviderTest {
    */
   public static class CustomMetricProvider3 implements PropertyProvider {
     private static CustomMetricProvider3 instance = null;
-    private Map<String, String> providerProperties = new HashMap<String, 
String>();
+    private Map<String, String> providerProperties = new HashMap<>();
 
     public static CustomMetricProvider3 getInstance(Map<String, String> 
properties, Map<String, Metric> metrics) {
       if (null == instance) {
@@ -595,7 +611,7 @@ public class StackDefinedPropertyProviderTest {
     resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED");
 
     // only ask for one property
-    Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, 
TemporalInfo>();
+    Map<String, TemporalInfo> temporalInfoMap = new HashMap<>();
     Request request = 
PropertyHelper.getReadRequest(Collections.singleton("metrics/yarn/Queue/root/AvailableMB"),
 temporalInfoMap);
 
     Assert.assertEquals(1, 
propertyProvider.populateResources(Collections.singleton(resource), request, 
null).size());
@@ -632,7 +648,7 @@ public class StackDefinedPropertyProviderTest {
     resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED");
 
     // only ask for one property
-    Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, 
TemporalInfo>();
+    Map<String, TemporalInfo> temporalInfoMap = new HashMap<>();
     Request request = 
PropertyHelper.getReadRequest(Collections.singleton("metrics/yarn/Queue"), 
temporalInfoMap);
 
     Assert.assertEquals(1, 
propertyProvider.populateResources(Collections.singleton(resource), request, 
null).size());
@@ -684,7 +700,7 @@ public class StackDefinedPropertyProviderTest {
     resource.setProperty(HOST_COMPONENT_STATE_PROPERTY_ID, "STARTED");
 
     // only ask for one property
-    Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, 
TemporalInfo>();
+    Map<String, TemporalInfo> temporalInfoMap = new HashMap<>();
     Request request = 
PropertyHelper.getReadRequest(Collections.singleton("metrics/yarn/Queue/root/default"),
 temporalInfoMap);
 
     Assert.assertEquals(1, 
propertyProvider.populateResources(Collections.singleton(resource), request, 
null).size());
@@ -989,7 +1005,7 @@ public class StackDefinedPropertyProviderTest {
     String RM_AVAILABLE_MEMORY_PROPERTY = 
PropertyHelper.getPropertyId(RM_CATEGORY_1, "AvailableMB");
 
     // only ask for one property
-    Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, 
TemporalInfo>();
+    Map<String, TemporalInfo> temporalInfoMap = new HashMap<>();
     temporalInfoMap.put(RM_CATEGORY_1, new TemporalInfoImpl(10L, 20L, 1L));
 
     Request request = 
PropertyHelper.getReadRequest(Collections.singleton(RM_CATEGORY_1), 
temporalInfoMap);
@@ -1086,8 +1102,8 @@ public class StackDefinedPropertyProviderTest {
       {"metrics/dfs/journalNode", "txnsWritten", 0.0}
     };
 
-    Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, 
TemporalInfo>();
-    Set<String> properties = new LinkedHashSet<String>();
+    Map<String, TemporalInfo> temporalInfoMap = new HashMap<>();
+    Set<String> properties = new LinkedHashSet<>();
 
     for (Object[] row : testData) {
       properties.add(PropertyHelper.getPropertyId(row[0].toString(), 
row[1].toString()));
@@ -1152,7 +1168,7 @@ public class StackDefinedPropertyProviderTest {
       resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, 
"RESOURCEMANAGER");
 
       // only ask for one property
-      Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, 
TemporalInfo>();
+      Map<String, TemporalInfo> temporalInfoMap = new HashMap<>();
       temporalInfoMap.put(metric, new TemporalInfoImpl(10L, 20L, 1L));
       Request request = 
PropertyHelper.getReadRequest(Collections.singleton(metric), temporalInfoMap);
 
@@ -1202,7 +1218,7 @@ public class StackDefinedPropertyProviderTest {
     resource.setProperty(HOST_COMPONENT_COMPONENT_NAME_PROPERTY_ID, 
"HBASE_REGIONSERVER");
 
     // only ask for one property
-    Map<String, TemporalInfo> temporalInfoMap = new HashMap<String, 
TemporalInfo>();
+    Map<String, TemporalInfo> temporalInfoMap = new HashMap<>();
     temporalInfoMap.put(metric, new TemporalInfoImpl(1429824611300L, 
1429825241400L, 1L));
     Request request = 
PropertyHelper.getReadRequest(Collections.singleton(metric), temporalInfoMap);
 
@@ -1232,4 +1248,4 @@ public class StackDefinedPropertyProviderTest {
       return "8020".equals(port) ? "client" : null;
     }
   }
-}
+}
\ 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/controller/internal/StackUpgradeConfigurationMergeTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
index c2d9414..474eb50 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/StackUpgradeConfigurationMergeTest.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
@@ -17,10 +17,13 @@
  */
 package org.apache.ambari.server.controller.internal;
 
+import static org.easymock.EasyMock.eq;
 import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.junit.Assert.assertEquals;
 
-import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import javax.persistence.EntityManager;
@@ -30,7 +33,6 @@ import 
org.apache.ambari.server.actionmanager.HostRoleCommandFactory;
 import org.apache.ambari.server.actionmanager.HostRoleCommandFactoryImpl;
 import org.apache.ambari.server.actionmanager.RequestFactory;
 import org.apache.ambari.server.actionmanager.StageFactory;
-import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.controller.AbstractRootServiceResponseFactory;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.KerberosHelper;
@@ -40,8 +42,10 @@ import org.apache.ambari.server.hooks.HookService;
 import org.apache.ambari.server.orm.DBAccessor;
 import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
 import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
+import org.apache.ambari.server.orm.dao.ServiceConfigDAO;
+import org.apache.ambari.server.orm.entities.ClusterConfigEntity;
 import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
-import org.apache.ambari.server.orm.entities.StackEntity;
+import org.apache.ambari.server.orm.entities.ServiceConfigEntity;
 import org.apache.ambari.server.scheduler.ExecutionScheduler;
 import org.apache.ambari.server.security.authorization.Users;
 import org.apache.ambari.server.stack.StackManagerFactory;
@@ -52,19 +56,20 @@ 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.DesiredConfig;
+import org.apache.ambari.server.state.RepositoryType;
+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.ServiceComponentHostFactory;
 import org.apache.ambari.server.state.ServiceFactory;
-import org.apache.ambari.server.state.ServiceInfo;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.UpgradeContext;
 import org.apache.ambari.server.state.UpgradeContextFactory;
+import org.apache.ambari.server.state.UpgradeHelper;
 import org.apache.ambari.server.state.configgroup.ConfigGroupFactory;
 import org.apache.ambari.server.state.scheduler.RequestExecutionFactory;
 import org.apache.ambari.server.state.stack.OsFamily;
-import org.apache.ambari.server.state.stack.UpgradePack;
 import org.apache.ambari.server.state.stack.upgrade.Direction;
-import org.apache.ambari.server.state.stack.upgrade.Grouping;
 import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
 import org.easymock.Capture;
 import org.easymock.EasyMock;
@@ -75,34 +80,28 @@ import org.junit.Before;
 import org.junit.Test;
 import org.springframework.security.crypto.password.PasswordEncoder;
 
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
 import com.google.inject.Binder;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Module;
 import com.google.inject.assistedinject.FactoryModuleBuilder;
 
-import junit.framework.Assert;
-
 /**
  * Tests that
- * {@link 
UpgradeResourceProvider#applyStackAndProcessConfigurations(UpgradeContext)}
+ * {@link UpgradeHelper#updateDesiredRepositoriesAndConfigs}
  * works correctly.
  */
 public class StackUpgradeConfigurationMergeTest extends EasyMockSupport {
 
-  private static final StackId s_currentStackId = new StackId("HDP-2.4");
-  private static final StackId s_targetStackId = new StackId("HDP-2.5");
-
   private Injector m_injector;
-  private AmbariMetaInfo m_ambariMetaInfoMock;
 
   /**
    * @throws Exception
    */
   @Before
   public void before() throws Exception {
-    m_ambariMetaInfoMock = createNiceMock(AmbariMetaInfo.class);
-
     MockModule mockModule = new MockModule();
 
     // create an injector which will inject the mocks
@@ -122,14 +121,14 @@ public class StackUpgradeConfigurationMergeTest extends 
EasyMockSupport {
    * accidentally.
    * <p/>
    *
-   * HDP 2.4 defaults
+   * HDP 2.1 defaults
    * <ul>
    * <li>foo-site/foo-property-1</li>
    * <li>foo-site/foo-property-2</li>
    * <li>bar-site/bar-property-1</li>
    * </ul>
    *
-   * HDP 2.5 defaults
+   * HDP 2.2 defaults
    * <ul>
    * <li>foo-site/foo-property-1</li>
    * <li>foo-site/foo-property-2</li>
@@ -137,7 +136,7 @@ public class StackUpgradeConfigurationMergeTest extends 
EasyMockSupport {
    * <li>bar-site/bar-property-2</li>
    * </ul>
    *
-   * CURRENT 2.4 configs
+   * CURRENT 2.1 configs
    * <ul>
    * <li>foo-site/foo-property-1</li>
    * <li>foo-site/foo-property-99</li>
@@ -148,136 +147,144 @@ public class StackUpgradeConfigurationMergeTest extends 
EasyMockSupport {
    *
    * The final merged configurations should detect that {{foo-property-2}}
    * exists in both stacks but is not in the current configs and was therefore
-   * purposefully removed. It shoudl also detect that {{bar-property-20}} was
+   * purposefully removed. It shoudl also detect that {{bar-property-2}} was
    * added in the new stack and should be added in.
    *
    * @throws Exception
    */
   @Test
   public void testMergedConfigurationsDoNotAddExplicitelyRemovedProperties() 
throws Exception {
+    RepositoryVersionEntity repoVersion211 = 
createNiceMock(RepositoryVersionEntity.class);
+    RepositoryVersionEntity repoVersion220 = 
createNiceMock(RepositoryVersionEntity.class);
+
+    StackId stack211 = new StackId("HDP-2.1.1");
+    StackId stack220 = new StackId("HDP-2.2.0");
+
+    String version211 = "2.1.1.0-1234";
+    String version220 = "2.2.0.0-1234";
+
+    expect(repoVersion211.getStackId()).andReturn(stack211).atLeastOnce();
+    expect(repoVersion211.getVersion()).andReturn(version211).atLeastOnce();
+
+    expect(repoVersion220.getStackId()).andReturn(stack220).atLeastOnce();
+    expect(repoVersion220.getVersion()).andReturn(version220).atLeastOnce();
+
+    Map<String, Map<String, String>> stack211Configs = new HashMap<>();
+    Map<String, String> stack211FooType = new HashMap<>();
+    Map<String, String> stack211BarType = new HashMap<>();
+    stack211Configs.put("foo-site", stack211FooType);
+    stack211Configs.put("bar-site", stack211BarType);
+    stack211FooType.put("foo-property-1", "stack-211-original");
+    stack211FooType.put("foo-property-2", "stack-211-original");
+    stack211BarType.put("bar-property-1", "stack-211-original");
+
+    Map<String, Map<String, String>> stack220Configs = new HashMap<>();
+    Map<String, String> stack220FooType = new HashMap<>();
+    Map<String, String> stack220BarType = new HashMap<>();
+    stack220Configs.put("foo-site", stack220FooType);
+    stack220Configs.put("bar-site", stack220BarType);
+    stack220FooType.put("foo-property-1", "stack-220-original");
+    stack220FooType.put("foo-property-2", "stack-220-original");
+    stack220BarType.put("bar-property-1", "stack-220-original");
+    stack220BarType.put("bar-property-2", "stack-220-original");
+
+    Map<String, String> existingFooType = new HashMap<>();
+    Map<String, String> existingBarType = new HashMap<>();
+
+    ClusterConfigEntity fooConfigEntity = 
createNiceMock(ClusterConfigEntity.class);
+    ClusterConfigEntity barConfigEntity = 
createNiceMock(ClusterConfigEntity.class);
+
+    expect(fooConfigEntity.getType()).andReturn("foo-site");
+    expect(barConfigEntity.getType()).andReturn("bar-site");
+
+    Config fooConfig = createNiceMock(Config.class);
+    Config barConfig = createNiceMock(Config.class);
+
+    existingFooType.put("foo-property-1", "my-foo-property-1");
+    existingBarType.put("bar-property-1", "stack-211-original");
+
+    expect(fooConfig.getType()).andReturn("foo-site").atLeastOnce();
+    expect(barConfig.getType()).andReturn("bar-site").atLeastOnce();
+    expect(fooConfig.getProperties()).andReturn(existingFooType);
+    expect(barConfig.getProperties()).andReturn(existingBarType);
+
+    Map<String, DesiredConfig> desiredConfigurations = new HashMap<>();
+    desiredConfigurations.put("foo-site", null);
+    desiredConfigurations.put("bar-site", null);
+
+    Service zookeeper = createNiceMock(Service.class);
+    expect(zookeeper.getName()).andReturn("ZOOKEEPER").atLeastOnce();
+    expect(zookeeper.getServiceComponents()).andReturn(
+        new HashMap<String, ServiceComponent>()).once();
+    zookeeper.setDesiredRepositoryVersion(repoVersion220);
+    expectLastCall().once();
+
     Cluster cluster = createNiceMock(Cluster.class);
-    RepositoryVersionEntity repositoryVersionEntity240 = 
createNiceMock(RepositoryVersionEntity.class);
-    RepositoryVersionEntity repositoryVersionEntity250 = createNiceMock(
-        RepositoryVersionEntity.class);
-    UpgradePack upgradePack = createNiceMock(UpgradePack.class);
-    StackEntity sourceStack = createNiceMock(StackEntity.class);
-    StackEntity targetStack = createNiceMock(StackEntity.class);
-
-    // mocks which were bound previously
-    AmbariManagementController amc = 
m_injector.getInstance(AmbariManagementController.class);
-    AmbariMetaInfo ambariMetaInfo = 
m_injector.getInstance(AmbariMetaInfo.class);
+    expect(cluster.getCurrentStackVersion()).andReturn(stack211).atLeastOnce();
+    expect(cluster.getDesiredStackVersion()).andReturn(stack220);
+    expect(cluster.getDesiredConfigs()).andReturn(desiredConfigurations);
+    expect(cluster.getDesiredConfigByType("foo-site")).andReturn(fooConfig);
+    expect(cluster.getDesiredConfigByType("bar-site")).andReturn(barConfig);
+    expect(cluster.getService("ZOOKEEPER")).andReturn(zookeeper);
+    expect(cluster.getDesiredConfigByType("foo-type")).andReturn(fooConfig);
+    expect(cluster.getDesiredConfigByType("bar-type")).andReturn(barConfig);
+
     ConfigHelper configHelper = m_injector.getInstance(ConfigHelper.class);
-    RepositoryVersionDAO repositoryVersionDAO = 
m_injector.getInstance(RepositoryVersionDAO.class);
-
-    EasyMock.expect(amc.getConfigHelper()).andReturn(configHelper);
-
-    
EasyMock.expect(cluster.getCurrentStackVersion()).andReturn(s_currentStackId);
-    
EasyMock.expect(cluster.getDesiredStackVersion()).andReturn(s_targetStackId);
-
-    EasyMock.expect(sourceStack.getStackName()).andReturn("HDP").anyTimes();
-    EasyMock.expect(sourceStack.getStackVersion()).andReturn("2.4").anyTimes();
-
-    EasyMock.expect(targetStack.getStackName()).andReturn("HDP").anyTimes();
-    EasyMock.expect(targetStack.getStackVersion()).andReturn("2.5").anyTimes();
-
-    
EasyMock.expect(repositoryVersionEntity240.getStack()).andReturn(sourceStack);
-    
EasyMock.expect(repositoryVersionEntity250.getStack()).andReturn(targetStack);
-    EasyMock.expect(repositoryVersionDAO.findByStackNameAndVersion("HDP", 
"2.4.0.0-1234")).andReturn(repositoryVersionEntity240);
-    EasyMock.expect(repositoryVersionDAO.findByStackNameAndVersion("HDP", 
"2.5.0.0-1234")).andReturn(repositoryVersionEntity250);
-
-    EasyMock.expect(upgradePack.getGroups(Direction.UPGRADE)).andReturn(new 
ArrayList<Grouping>());
-
-    EasyMock.expect(ambariMetaInfo.getServices("HDP", "2.5")).andReturn(
-        new HashMap<String, ServiceInfo>());
-
-    // config helper mocks (the heart of this test)
-    Map<String, Map<String, String>> oldStackDefaultConfigurationsByType = new 
HashMap<>();
-    oldStackDefaultConfigurationsByType.put("foo-type", new HashMap<String, 
String>());
-    oldStackDefaultConfigurationsByType.get("foo-type").put("foo-property-1", 
"foo-value-1");
-    oldStackDefaultConfigurationsByType.get("foo-type").put("foo-property-2", 
"foo-value-2");
-    oldStackDefaultConfigurationsByType.put("bar-type", new HashMap<String, 
String>());
-    oldStackDefaultConfigurationsByType.get("bar-type").put("bar-property-1", 
"bar-value-1");
-
-    Map<String, Map<String, String>> newConfigurationsByType = new HashMap<>();
-    newConfigurationsByType.put("foo-type", new HashMap<String, String>());
-    newConfigurationsByType.get("foo-type").put("foo-property-1", 
"foo-value-1");
-    newConfigurationsByType.get("foo-type").put("foo-property-2", 
"foo-value-2");
-    newConfigurationsByType.put("bar-type", new HashMap<String, String>());
-    newConfigurationsByType.get("bar-type").put("bar-property-1", 
"bar-value-1");
-    newConfigurationsByType.get("bar-type").put("bar-property-20", 
"bar-value-20");
-
-    // HDP 2.4 configs
-    
EasyMock.expect(configHelper.getDefaultProperties(EasyMock.eq(s_currentStackId),
-        
EasyMock.anyObject(Cluster.class))).andReturn(oldStackDefaultConfigurationsByType);
-
-    // HDP 2.5 configs
-    
EasyMock.expect(configHelper.getDefaultProperties(EasyMock.eq(s_targetStackId),
-        EasyMock.anyObject(Cluster.class))).andReturn(newConfigurationsByType);
-
-    // CURRENT HDP 2.4 configs
-    Config currentClusterConfigFoo = createNiceMock(Config.class);
-    Config currentClusterConfigBar = createNiceMock(Config.class);
-
-    Map<String, String> existingPropertiesFoo = new HashMap<>();
-    existingPropertiesFoo.put("foo-property-1", "foo-value-1");
-    existingPropertiesFoo.put("foo-property-99", "foo-value-99");
-    
EasyMock.expect(currentClusterConfigFoo.getProperties()).andReturn(existingPropertiesFoo);
-
-    Map<String, String> existingPropertiesBar = new HashMap<>();
-    existingPropertiesBar.put("bar-property-1", "bar-value-1");
-    existingPropertiesBar.put("bar-property-99", "bar-value-99");
-    
EasyMock.expect(currentClusterConfigBar.getProperties()).andReturn(existingPropertiesBar);
-
-    
EasyMock.expect(cluster.getDesiredConfigByType("foo-type")).andReturn(currentClusterConfigFoo);
-    
EasyMock.expect(cluster.getDesiredConfigByType("bar-type")).andReturn(currentClusterConfigBar);
-
-    // desired configs
-    Map<String, DesiredConfig> existingDesiredConfigurationsByType = new 
HashMap<>();
-    existingDesiredConfigurationsByType.put("foo-type", null);
-    existingDesiredConfigurationsByType.put("bar-type", null);
-    
EasyMock.expect(cluster.getDesiredConfigs()).andReturn(existingDesiredConfigurationsByType);
-
-    // we need to know what configs are being created, so capture them
-    Capture<Map<String, Map<String, String>>> capturedArgument = 
EasyMock.newCapture();
+
+    expect(configHelper.getDefaultProperties(stack211, "ZOOKEEPER")).andReturn(
+        stack211Configs).anyTimes();
+
+    expect(configHelper.getDefaultProperties(stack220, "ZOOKEEPER")).andReturn(
+        stack220Configs).anyTimes();
+
+    Capture<Map<String, Map<String, String>>> expectedConfigurationsCapture = 
EasyMock.newCapture();
+
     configHelper.createConfigTypes(EasyMock.anyObject(Cluster.class),
-        EasyMock.anyObject(AmbariManagementController.class),
-        EasyMock.capture(capturedArgument),
-        EasyMock.anyString(), EasyMock.anyString());
+        EasyMock.anyObject(StackId.class), 
EasyMock.anyObject(AmbariManagementController.class),
+        EasyMock.capture(expectedConfigurationsCapture), 
EasyMock.anyObject(String.class),
+        EasyMock.anyObject(String.class));
 
-    EasyMock.expectLastCall();
+    expectLastCall().once();
+
+    // mock the service config DAO and replay it
+    ServiceConfigEntity zookeeperServiceConfig = 
createNiceMock(ServiceConfigEntity.class);
+    expect(zookeeperServiceConfig.getClusterConfigEntities()).andReturn(
+        Lists.newArrayList(fooConfigEntity, barConfigEntity));
+
+    ServiceConfigDAO serviceConfigDAOMock = 
m_injector.getInstance(ServiceConfigDAO.class);
+    List<ServiceConfigEntity> latestServiceConfigs = 
Lists.newArrayList(zookeeperServiceConfig);
+    
expect(serviceConfigDAOMock.getLastServiceConfigsForService(EasyMock.anyLong(),
+        eq("ZOOKEEPER"))).andReturn(latestServiceConfigs).once();
 
     UpgradeContext context = createNiceMock(UpgradeContext.class);
     expect(context.getCluster()).andReturn(cluster).atLeastOnce();
     expect(context.getType()).andReturn(UpgradeType.ROLLING).atLeastOnce();
     expect(context.getDirection()).andReturn(Direction.UPGRADE).atLeastOnce();
-    
expect(context.getSourceRepositoryVersion()).andReturn(repositoryVersionEntity240).atLeastOnce();
-    
expect(context.getTargetRepositoryVersion()).andReturn(repositoryVersionEntity250).atLeastOnce();
-    expect(context.getUpgradePack()).andReturn(upgradePack).atLeastOnce();
+    
expect(context.getRepositoryVersion()).andReturn(repoVersion220).anyTimes();
+    
expect(context.getSupportedServices()).andReturn(Sets.newHashSet("ZOOKEEPER")).atLeastOnce();
+    
expect(context.getSourceRepositoryVersion(EasyMock.anyString())).andReturn(repoVersion211).atLeastOnce();
+    
expect(context.getTargetRepositoryVersion(EasyMock.anyString())).andReturn(repoVersion220).atLeastOnce();
+    
expect(context.getOrchestrationType()).andReturn(RepositoryType.STANDARD).anyTimes();
     
expect(context.getHostRoleCommandFactory()).andStubReturn(m_injector.getInstance(HostRoleCommandFactory.class));
     
expect(context.getRoleGraphFactory()).andStubReturn(m_injector.getInstance(RoleGraphFactory.class));
 
     replayAll();
 
-    UpgradeResourceProvider upgradeResourceProvider = new 
UpgradeResourceProvider(amc);
-    m_injector.injectMembers(upgradeResourceProvider);
-
-    upgradeResourceProvider.applyStackAndProcessConfigurations(context);
+    UpgradeHelper upgradeHelper = m_injector.getInstance(UpgradeHelper.class);
+    upgradeHelper.updateDesiredRepositoriesAndConfigs(context);
 
-    // assertion time!
-    Map<String, Map<String, String>> mergedConfigurations = 
capturedArgument.getValue();
-    Map<String, String> mergedFooSite = mergedConfigurations.get("foo-type");
-    Map<String, String> mergedBarSite = mergedConfigurations.get("bar-type");
+    Map<String, Map<String, String>> expectedConfigurations = 
expectedConfigurationsCapture.getValue();
+    Map<String, String> expectedFooType = 
expectedConfigurations.get("foo-site");
+    Map<String, String> expectedBarType = 
expectedConfigurations.get("bar-site");
 
-    // foo-site validation
-    Assert.assertEquals("foo-value-1", mergedFooSite.get("foo-property-1"));
-    Assert.assertEquals("foo-value-99", mergedFooSite.get("foo-property-99"));
-    Assert.assertFalse(mergedFooSite.containsKey("foo-property-2"));
+    // As the upgrade pack did not have any Flume updates, its configs should
+    // not be updated.
+    assertEquals(2, expectedConfigurations.size());
 
-    // bar-site validation
-    Assert.assertEquals("bar-value-1", mergedBarSite.get("bar-property-1"));
-    Assert.assertEquals("bar-value-20", mergedBarSite.get("bar-property-20"));
-    Assert.assertEquals("bar-value-99", mergedBarSite.get("bar-property-99"));
-    Assert.assertEquals(3, mergedBarSite.size());
+    assertEquals("my-foo-property-1", expectedFooType.get("foo-property-1"));
+    assertEquals(null, expectedFooType.get("foo-property-2"));
+    assertEquals("stack-220-original", expectedBarType.get("bar-property-1"));
+    assertEquals("stack-220-original", expectedBarType.get("bar-property-2"));
   }
 
 
@@ -288,7 +295,6 @@ public class StackUpgradeConfigurationMergeTest extends 
EasyMockSupport {
      */
     @Override
     public void configure(Binder binder) {
-      binder.bind(AmbariMetaInfo.class).toInstance(m_ambariMetaInfoMock);
       binder.bind(Clusters.class).toInstance(createNiceMock(Clusters.class));
       binder.bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class));
       
binder.bind(DBAccessor.class).toInstance(createNiceMock(DBAccessor.class));
@@ -317,10 +323,11 @@ public class StackUpgradeConfigurationMergeTest extends 
EasyMockSupport {
       
binder.bind(RepositoryVersionDAO.class).toInstance(createNiceMock(RepositoryVersionDAO.class));
       
binder.bind(HookContextFactory.class).toInstance(createMock(HookContextFactory.class));
       binder.bind(HookService.class).toInstance(createMock(HookService.class));
+      
binder.bind(ServiceConfigDAO.class).toInstance(createNiceMock(ServiceConfigDAO.class));
       binder.install(new 
FactoryModuleBuilder().build(UpgradeContextFactory.class));
       
binder.bind(HostRoleCommandFactory.class).to(HostRoleCommandFactoryImpl.class);
 
       binder.requestStaticInjection(UpgradeResourceProvider.class);
     }
   }
-}
+}
\ 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/controller/internal/UpgradeResourceProviderHDP22Test.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
deleted file mode 100644
index 221cc20..0000000
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
+++ /dev/null
@@ -1,324 +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.controller.internal;
-
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.replay;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.lang.reflect.Field;
-import java.sql.SQLException;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.ambari.server.AmbariException;
-import org.apache.ambari.server.H2DatabaseCleaner;
-import org.apache.ambari.server.actionmanager.ActionManager;
-import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
-import org.apache.ambari.server.actionmanager.ExecutionCommandWrapperFactory;
-import org.apache.ambari.server.agent.ExecutionCommand;
-import org.apache.ambari.server.agent.ExecutionCommand.KeyNames;
-import org.apache.ambari.server.configuration.Configuration;
-import org.apache.ambari.server.controller.AmbariManagementController;
-import org.apache.ambari.server.controller.AmbariServer;
-import org.apache.ambari.server.controller.spi.Request;
-import org.apache.ambari.server.controller.spi.ResourceProvider;
-import org.apache.ambari.server.controller.utilities.PropertyHelper;
-import org.apache.ambari.server.events.publishers.AmbariEventPublisher;
-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.ExecutionCommandDAO;
-import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
-import org.apache.ambari.server.orm.dao.StackDAO;
-import org.apache.ambari.server.orm.dao.UpgradeDAO;
-import org.apache.ambari.server.orm.entities.ExecutionCommandEntity;
-import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
-import org.apache.ambari.server.orm.entities.StackEntity;
-import org.apache.ambari.server.orm.entities.UpgradeEntity;
-import org.apache.ambari.server.orm.entities.UpgradeGroupEntity;
-import org.apache.ambari.server.orm.entities.UpgradeItemEntity;
-import org.apache.ambari.server.security.TestAuthenticationFactory;
-import org.apache.ambari.server.state.Cluster;
-import org.apache.ambari.server.state.Clusters;
-import org.apache.ambari.server.state.Config;
-import org.apache.ambari.server.state.ConfigFactory;
-import org.apache.ambari.server.state.Host;
-import org.apache.ambari.server.state.HostState;
-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.ServiceComponentHost;
-import org.apache.ambari.server.state.StackId;
-import org.apache.ambari.server.state.stack.upgrade.Direction;
-import org.apache.ambari.server.topology.TopologyManager;
-import org.apache.ambari.server.utils.StageUtils;
-import org.apache.ambari.server.view.ViewRegistry;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.springframework.security.core.context.SecurityContextHolder;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.gson.Gson;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-
-/**
- * UpgradeResourceDefinition tests.
- */
-public class UpgradeResourceProviderHDP22Test {
-
-  private UpgradeDAO upgradeDao = null;
-  private RepositoryVersionDAO repoVersionDao = null;
-  private Injector injector;
-  private Clusters clusters;
-  private OrmTestHelper helper;
-  private AmbariManagementController amc;
-  private StackDAO stackDAO;
-  private TopologyManager topologyManager;
-  private ConfigFactory configFactory;
-
-  private static final String configTagVersion1 = "version1";
-  private static final String configTagVersion2 = "version2";
-
-  private static final Map<String, String> configTagVersion1Properties = new 
ImmutableMap.Builder<String, String>().put(
-      "hive.server2.thrift.port", "10000").build();
-
-  private static final Map<String, String> configTagVersion2Properties = new 
ImmutableMap.Builder<String, String>().put(
-      "hive.server2.thrift.port", "10010").build();
-
-  @Before
-  public void before() throws Exception {
-    SecurityContextHolder.getContext().setAuthentication(
-        TestAuthenticationFactory.createAdministrator());
-
-    // create an injector which will inject the mocks
-    injector = Guice.createInjector(new InMemoryDefaultTestModule());
-
-    injector.getInstance(GuiceJpaInitializer.class);
-
-    helper = injector.getInstance(OrmTestHelper.class);
-
-    amc = injector.getInstance(AmbariManagementController.class);
-
-    Field field = AmbariServer.class.getDeclaredField("clusterController");
-    field.setAccessible(true);
-    field.set(null, amc);
-
-    stackDAO = injector.getInstance(StackDAO.class);
-    upgradeDao = injector.getInstance(UpgradeDAO.class);
-    repoVersionDao = injector.getInstance(RepositoryVersionDAO.class);
-    configFactory = injector.getInstance(ConfigFactory.class);
-
-    AmbariEventPublisher publisher = 
createNiceMock(AmbariEventPublisher.class);
-    replay(publisher);
-    ViewRegistry.initInstance(new ViewRegistry(publisher));
-
-    StackEntity stackEntity = stackDAO.find("HDP", "2.2.0");
-
-    clusters = injector.getInstance(Clusters.class);
-    StackId stackId = new StackId("HDP-2.2.0");
-    clusters.addCluster("c1", stackId);
-    Cluster cluster = clusters.getCluster("c1");
-
-    RepositoryVersionEntity repoVersionEntity = new RepositoryVersionEntity();
-    repoVersionEntity.setDisplayName("For Stack Version 2.2.0");
-    repoVersionEntity.setOperatingSystems("");
-    repoVersionEntity.setStack(stackEntity);
-    repoVersionEntity.setVersion("2.2.0.0");
-    repoVersionDao.create(repoVersionEntity);
-
-    repoVersionEntity = new RepositoryVersionEntity();
-    repoVersionEntity.setDisplayName("For Stack Version 2.2.4.2");
-    repoVersionEntity.setOperatingSystems("");
-    repoVersionEntity.setStack(stackEntity);
-    repoVersionEntity.setVersion("2.2.4.2");
-    repoVersionDao.create(repoVersionEntity);
-
-    // create the cluster version for
-    cluster.createClusterVersion(repoVersionEntity.getStackId(), 
repoVersionEntity.getVersion(),
-        "admin", RepositoryVersionState.INSTALLED);
-
-    helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
-    cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin", 
RepositoryVersionState.INSTALLING);
-    cluster.transitionClusterVersion(stackId, stackId.getStackVersion(), 
RepositoryVersionState.CURRENT);
-
-    clusters.addHost("h1");
-    Host host = clusters.getHost("h1");
-    Map<String, String> hostAttributes = new HashMap<>();
-    hostAttributes.put("os_family", "redhat");
-    hostAttributes.put("os_release_version", "6.3");
-    host.setHostAttributes(hostAttributes);
-    host.setState(HostState.HEALTHY);
-
-    clusters.mapHostToCluster("h1", "c1");
-
-    // add a single HIVE server
-    Service service = cluster.addService("HIVE");
-    service.setDesiredStackVersion(cluster.getDesiredStackVersion());
-
-    ServiceComponent component = service.addServiceComponent("HIVE_SERVER");
-    ServiceComponentHost sch = component.addServiceComponentHost("h1");
-    sch.setVersion("2.2.0.0");
-
-    component = service.addServiceComponent("HIVE_CLIENT");
-    sch = component.addServiceComponentHost("h1");
-    sch.setVersion("2.2.0.0");
-    topologyManager = injector.getInstance(TopologyManager.class);
-    StageUtils.setTopologyManager(topologyManager);
-    StageUtils.setConfiguration(injector.getInstance(Configuration.class));
-    ActionManager.setTopologyManager(topologyManager);
-  }
-
-  @After
-  public void after() throws AmbariException, SQLException {
-    H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
-    injector = null;
-  }
-
-  /**
-   * Tests upgrades from HDP-2.2.x to HDP-2.2.y
-   *
-   * @throws Exception
-   */
-  @SuppressWarnings("serial")
-  @Test
-  public void testCreateIntraStackUpgrade() throws Exception {
-    // We want to use the HDP-2.2 'upgrade_test' catalog
-    // Create HDP-2.2 stack
-
-    Cluster cluster = clusters.getCluster("c1");
-    StackId oldStack = cluster.getDesiredStackVersion();
-
-    for (Service s : cluster.getServices().values()) {
-      assertEquals(oldStack, s.getDesiredStackVersion());
-
-      for (ServiceComponent sc : s.getServiceComponents().values()) {
-        assertEquals(oldStack, sc.getDesiredStackVersion());
-
-        for (ServiceComponentHost sch : 
sc.getServiceComponentHosts().values()) {
-          assertEquals(oldStack, sch.getDesiredStackVersion());
-        }
-      }
-    }
-
-    Config config = configFactory.createNew(cluster, "hive-site", 
configTagVersion1, configTagVersion1Properties, null);
-    cluster.addDesiredConfig("admin", Collections.singleton(config));
-
-    Map<String, Object> requestProps = new HashMap<>();
-    requestProps.put(UpgradeResourceProvider.UPGRADE_CLUSTER_NAME, "c1");
-    requestProps.put(UpgradeResourceProvider.UPGRADE_REPO_VERSION, "2.2.4.2");
-    requestProps.put(UpgradeResourceProvider.UPGRADE_SKIP_PREREQUISITE_CHECKS, 
"true");
-    requestProps.put(UpgradeResourceProvider.UPGRADE_DIRECTION, 
Direction.UPGRADE.name());
-
-    ResourceProvider upgradeResourceProvider = createProvider(amc);
-
-    Request request = 
PropertyHelper.getCreateRequest(Collections.singleton(requestProps), null);
-    upgradeResourceProvider.createResources(request);
-
-    List<UpgradeEntity> upgrades = 
upgradeDao.findUpgrades(cluster.getClusterId());
-    assertEquals(1, upgrades.size());
-
-    UpgradeEntity upgrade = upgrades.get(0);
-    assertEquals("upgrade_test", upgrade.getUpgradePackage());
-    assertEquals(3, upgrade.getUpgradeGroups().size());
-
-    UpgradeGroupEntity group = upgrade.getUpgradeGroups().get(2);
-    assertEquals(3, group.getItems().size());
-
-    group = upgrade.getUpgradeGroups().get(0);
-    assertEquals(2, group.getItems().size());
-    UpgradeItemEntity item = group.getItems().get(1);
-    assertEquals("Value is set for the source stack upgrade pack", 
"[{\"message\":\"Goo\"}]", item.getText());
-
-    assertTrue(cluster.getDesiredConfigs().containsKey("hive-site"));
-
-    StackId newStack = cluster.getDesiredStackVersion();
-
-    assertTrue(oldStack.equals(newStack));
-
-    for (Service s : cluster.getServices().values()) {
-      assertEquals(newStack, s.getDesiredStackVersion());
-
-      for (ServiceComponent sc : s.getServiceComponents().values()) {
-        assertEquals(newStack, sc.getDesiredStackVersion());
-
-        for (ServiceComponentHost sch : 
sc.getServiceComponentHosts().values()) {
-          assertEquals(newStack, sch.getDesiredStackVersion());
-        }
-      }
-    }
-
-    // Hive service checks have generated the ExecutionCommands by now.
-    // Change the new desired config tag and verify execution command picks up 
new tag
-    assertEquals(configTagVersion1, 
cluster.getDesiredConfigByType("hive-site").getTag());
-    final Config newConfig = configFactory.createNew(cluster, "hive-site", 
configTagVersion2, configTagVersion2Properties, null);
-    Set<Config> desiredConfigs = new HashSet<Config>() {
-      {
-        add(newConfig);
-      }
-    };
-
-    cluster.addConfig(newConfig);
-    cluster.addDesiredConfig("admin", desiredConfigs);
-    assertEquals(configTagVersion2, 
cluster.getDesiredConfigByType("hive-site").getTag());
-    Gson gson = new Gson();
-
-    List<ExecutionCommandEntity> currentExecutionCommands = 
injector.getInstance(ExecutionCommandDAO.class).findAll();
-    for (ExecutionCommandEntity ece : currentExecutionCommands) {
-      String executionCommandJson = new String(ece.getCommand());
-      Map<String, Object> commandMap = gson.<Map<String, Object>> 
fromJson(executionCommandJson, Map.class);
-
-      // ensure that the latest tag is being used - this is absolutely required
-      // for upgrades
-      Set<String> roleCommandsThatMustHaveRefresh = new HashSet<>();
-      roleCommandsThatMustHaveRefresh.add("SERVICE_CHECK");
-      roleCommandsThatMustHaveRefresh.add("RESTART");
-      roleCommandsThatMustHaveRefresh.add("ACTIONEXECUTE");
-
-      String roleCommand = (String) commandMap.get("roleCommand");
-      if (roleCommandsThatMustHaveRefresh.contains(roleCommand)) {
-        
assertTrue(commandMap.containsKey(KeyNames.REFRESH_CONFIG_TAGS_BEFORE_EXECUTION));
-        Object object = 
commandMap.get(KeyNames.REFRESH_CONFIG_TAGS_BEFORE_EXECUTION);
-        assertTrue(Boolean.valueOf(object.toString()));
-
-        ExecutionCommandWrapperFactory ecwFactory = 
injector.getInstance(ExecutionCommandWrapperFactory.class);
-        ExecutionCommandWrapper executionCommandWrapper = 
ecwFactory.createFromJson(executionCommandJson);
-        ExecutionCommand executionCommand = 
executionCommandWrapper.getExecutionCommand();
-        Map<String, Map<String, String>> configurationTags = 
executionCommand.getConfigurationTags();
-        assertEquals(configTagVersion2, 
configurationTags.get("hive-site").get("tag"));
-        Map<String, Map<String, String>> configurations = 
executionCommand.getConfigurations();
-        assertEquals("10010", 
configurations.get("hive-site").get("hive.server2.thrift.port"));
-      }
-    }
-  }
-
-  /**
-   * @param amc
-   * @return the provider
-   */
-  private UpgradeResourceProvider createProvider(AmbariManagementController 
amc) {
-    return new UpgradeResourceProvider(amc);
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/56362fd6/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
index 8c209ae..c5fc039 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
@@ -106,7 +106,7 @@ import org.apache.ambari.server.utils.StageUtils;
 import org.apache.ambari.server.view.ViewRegistry;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang.StringUtils;
 import org.easymock.EasyMock;
 import org.easymock.EasyMockSupport;
 import org.junit.After;

http://git-wip-us.apache.org/repos/asf/ambari/blob/56362fd6/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
index 2c6f61f..4f57c6a 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeSummaryResourceProviderTest.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
@@ -38,7 +38,6 @@ import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.Role;
 import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.actionmanager.HostRoleStatus;
-import org.apache.ambari.server.actionmanager.ServiceComponentHostEventWrapper;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.AmbariServer;
 import org.apache.ambari.server.controller.predicate.AndPredicate;
@@ -69,16 +68,13 @@ import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Host;
 import org.apache.ambari.server.state.HostState;
-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.ServiceComponentHost;
-import org.apache.ambari.server.state.ServiceComponentHostEvent;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.UpgradeHelper;
 import org.apache.ambari.server.state.stack.upgrade.Direction;
 import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
-import 
org.apache.ambari.server.state.svccomphost.ServiceComponentHostOpInProgressEvent;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -155,7 +151,7 @@ public class UpgradeSummaryResourceProviderTest {
     repoVersionEntity.setDisplayName("For Stack Version 2.2.0");
     repoVersionEntity.setOperatingSystems("");
     repoVersionEntity.setStack(stackEntity);
-    repoVersionEntity.setVersion("2.2.0.0-1234");
+    repoVersionEntity.setVersion("2.2.0.0");
     repoVersionDAO.create(repoVersionEntity);
 
     clusters = injector.getInstance(Clusters.class);
@@ -165,7 +161,6 @@ public class UpgradeSummaryResourceProviderTest {
     Cluster cluster = clusters.getCluster("c1");
 
     helper.getOrCreateRepositoryVersion(stackId, "2.2.0.1-1234");
-    cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin", 
RepositoryVersionState.INSTALLING);
 
     clusters.addHost("h1");
     Host host = clusters.getHost("h1");
@@ -178,16 +173,15 @@ public class UpgradeSummaryResourceProviderTest {
     clusters.mapHostToCluster("h1", "c1");
 
     // add a single ZOOKEEPER server
-    Service service = cluster.addService("ZOOKEEPER");
-    service.setDesiredStackVersion(cluster.getDesiredStackVersion());
+    Service service = cluster.addService("ZOOKEEPER", repoVersionEntity);
 
     ServiceComponent component = 
service.addServiceComponent("ZOOKEEPER_SERVER");
     ServiceComponentHost sch = component.addServiceComponentHost("h1");
-    sch.setVersion("2.2.0.0-1234");
+    sch.setVersion("2.2.0.0");
 
     component = service.addServiceComponent("ZOOKEEPER_CLIENT");
     sch = component.addServiceComponentHost("h1");
-    sch.setVersion("2.2.0.0-1234");
+    sch.setVersion("2.2.0.0");
   }
 
   /**
@@ -197,10 +191,8 @@ public class UpgradeSummaryResourceProviderTest {
    * @param stageId
    */
   @Transactional
-  private void createCommands(Cluster cluster, Long upgradeRequestId, Long 
stageId) {
+  void createCommands(Cluster cluster, Long upgradeRequestId, Long stageId) {
     HostEntity h1 = hostDAO.findByName("h1");
-    ServiceComponentHostEvent event = new 
ServiceComponentHostOpInProgressEvent("ZOOKEEPER_SERVER", "h1", 1L);
-    ServiceComponentHostEventWrapper eventWrapper = new 
ServiceComponentHostEventWrapper(event);
 
     RequestEntity requestEntity = requestDAO.findByPK(upgradeRequestId);
 
@@ -281,15 +273,10 @@ public class UpgradeSummaryResourceProviderTest {
     upgrade.setUpgradeType(UpgradeType.ROLLING);
     upgrade.setDirection(Direction.UPGRADE);
 
-    RepositoryVersionEntity repositoryVersion2200 = injector.getInstance(
-        RepositoryVersionDAO.class).findByStackNameAndVersion("HDP", 
"2.2.0.0-1234");
-
     RepositoryVersionEntity repositoryVersion2201 = injector.getInstance(
         RepositoryVersionDAO.class).findByStackNameAndVersion("HDP", 
"2.2.0.1-1234");
 
-    upgrade.setFromRepositoryVersion(repositoryVersion2200);
-    upgrade.setToRepositoryVersion(repositoryVersion2201);
-
+    upgrade.setRepositoryVersion(repositoryVersion2201);
     upgradeDAO.create(upgrade);
 
     // Resource used to make assertions.
@@ -370,4 +357,4 @@ public class UpgradeSummaryResourceProviderTest {
       binder.bind(UpgradeHelper.class).toInstance(m_upgradeHelper);
     }
   }
-}
+}
\ 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/controller/utilities/state/GeneralServiceCalculatedStateTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/state/GeneralServiceCalculatedStateTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/state/GeneralServiceCalculatedStateTest.java
index 09d5569..86e73d6 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/state/GeneralServiceCalculatedStateTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/state/GeneralServiceCalculatedStateTest.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
@@ -26,6 +26,8 @@ import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.actionmanager.ActionManager;
 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.entities.RepositoryVersionEntity;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Service;
@@ -59,10 +61,13 @@ public abstract class GeneralServiceCalculatedStateTest {
   @Inject
   protected Clusters clusters;
 
+  @Inject
+  private OrmTestHelper ormTestHelper;
 
   @Before
   public void setup() throws Exception {
     final StackId stack211 = new StackId("HDP-2.1.1");
+    final String version = "2.1.1-1234";
 
     injector = Guice.createInjector(Modules.override(
       new InMemoryDefaultTestModule()).with(new Module() {
@@ -75,11 +80,13 @@ public abstract class GeneralServiceCalculatedStateTest {
     injector.getInstance(GuiceJpaInitializer.class);
     injector.injectMembers(this);
 
+    RepositoryVersionEntity repositoryVersion = 
ormTestHelper.getOrCreateRepositoryVersion(stack211,
+        version);
+
     clusters.addCluster(clusterName, stack211);
     cluster = clusters.getCluster(clusterName);
 
-    service = cluster.addService(getServiceName());
-    service.setDesiredStackVersion(cluster.getDesiredStackVersion());
+    service = cluster.addService(getServiceName(), repositoryVersion);
 
     createComponentsAndHosts();
 
@@ -144,4 +151,4 @@ public abstract class GeneralServiceCalculatedStateTest {
   @Test
   public abstract void testServiceState_STOPPED() throws Exception;
 
-}
+}
\ 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/events/EventsTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java 
b/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java
index 90ac29f..5834bd8 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/events/EventsTest.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
@@ -33,12 +33,12 @@ import org.apache.ambari.server.orm.dao.AlertDefinitionDAO;
 import org.apache.ambari.server.orm.dao.AlertDispatchDAO;
 import org.apache.ambari.server.orm.entities.AlertDefinitionEntity;
 import org.apache.ambari.server.orm.entities.AlertGroupEntity;
+import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Host;
 import org.apache.ambari.server.state.HostState;
 import org.apache.ambari.server.state.MaintenanceState;
-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;
@@ -78,6 +78,10 @@ public class EventsTest {
   private AlertDefinitionDAO m_definitionDao;
   private AlertDispatchDAO m_alertDispatchDao;
 
+  private final String STACK_VERSION = "2.0.6";
+  private final String REPO_VERSION = "2.0.6-1234";
+  private RepositoryVersionEntity m_repositoryVersion;
+
   /**
    *
    */
@@ -101,13 +105,14 @@ public class EventsTest {
     m_alertDispatchDao = m_injector.getInstance(AlertDispatchDAO.class);
 
     m_clusterName = "foo";
-    StackId stackId = new StackId("HDP", "2.0.6");
+    StackId stackId = new StackId("HDP", STACK_VERSION);
+    m_helper.createStack(stackId);
 
     m_clusters.addCluster(m_clusterName, stackId);
     m_clusters.addHost(HOSTNAME);
 
     Host host = m_clusters.getHost(HOSTNAME);
-    Map<String, String> hostAttributes = new HashMap<String, String>();
+    Map<String, String> hostAttributes = new HashMap<>();
     hostAttributes.put("os_family", "redhat");
     hostAttributes.put("os_release_version", "6.4");
     host.setHostAttributes(hostAttributes);
@@ -117,9 +122,7 @@ public class EventsTest {
     Assert.assertNotNull(m_cluster);
 
     m_cluster.setDesiredStackVersion(stackId);
-    m_helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
-    m_cluster.createClusterVersion(stackId, stackId.getStackVersion(), "admin",
-        RepositoryVersionState.INSTALLING);
+    m_repositoryVersion = m_helper.getOrCreateRepositoryVersion(stackId, 
REPO_VERSION);
 
     m_clusters.mapHostToCluster(HOSTNAME, m_clusterName);
   }
@@ -282,8 +285,6 @@ public class EventsTest {
     // make sure there are at least 1
     Assert.assertTrue(hdfsDefinitions.size() > 0);
 
-    AlertDefinitionEntity definition = hdfsDefinitions.get(0);
-
     // delete the default alert group
     m_alertDispatchDao.remove(group);
 
@@ -376,13 +377,9 @@ public class EventsTest {
     Assert.assertEquals(AmbariEventType.CLUSTER_RENAME, 
ambariEvents.get(0).getType());
   }
 
-  /**
-   * Calls {@link Service#persist()} to mock a service install along with
-   * creating a single {@link Host} and {@link ServiceComponentHost}.
-   */
   private void installHdfsService() throws Exception {
     String serviceName = "HDFS";
-    Service service = m_serviceFactory.createNew(m_cluster, serviceName);
+    Service service = m_serviceFactory.createNew(m_cluster, serviceName, 
m_repositoryVersion);
     service = m_cluster.getService(serviceName);
     Assert.assertNotNull(service);
 
@@ -395,7 +392,5 @@ public class EventsTest {
     component.addServiceComponentHost(sch);
     sch.setDesiredState(State.INSTALLED);
     sch.setState(State.INSTALLED);
-    sch.setDesiredStackVersion(new StackId("HDP-2.0.6"));
-    sch.setStackVersion(new StackId("HDP-2.0.6"));
   }
-}
+}
\ 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/orm/OrmTestHelper.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java 
b/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java
index 527f031..ad95803 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/orm/OrmTestHelper.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
@@ -92,6 +92,7 @@ import org.apache.ambari.server.state.State;
 import org.apache.ambari.server.state.alert.Scope;
 import org.apache.ambari.server.state.alert.SourceType;
 import org.apache.ambari.server.state.cluster.ClustersImpl;
+import org.junit.Assert;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.security.crypto.password.PasswordEncoder;
@@ -102,12 +103,10 @@ import com.google.inject.Provider;
 import com.google.inject.Singleton;
 import com.google.inject.persist.Transactional;
 
-import junit.framework.Assert;
-
 @Singleton
 public class OrmTestHelper {
 
-  private static Logger LOG = LoggerFactory.getLogger(OrmTestHelper.class);
+  private static final Logger LOG = 
LoggerFactory.getLogger(OrmTestHelper.class);
 
   private AtomicInteger uniqueCounter = new AtomicInteger();
 
@@ -178,7 +177,7 @@ public class OrmTestHelper {
     host2.setIpv4("192.168.0.2");
     host3.setIpv4("192.168.0.3");
 
-    List<HostEntity> hostEntities = new ArrayList<HostEntity>();
+    List<HostEntity> hostEntities = new ArrayList<>();
     hostEntities.add(host1);
     hostEntities.add(host2);
 
@@ -200,7 +199,7 @@ public class OrmTestHelper {
     ClusterServiceEntity clusterServiceEntity = new ClusterServiceEntity();
     clusterServiceEntity.setServiceName("HDFS");
     clusterServiceEntity.setClusterEntity(clusterEntity);
-    List<ClusterServiceEntity> clusterServiceEntities = new 
ArrayList<ClusterServiceEntity>();
+    List<ClusterServiceEntity> clusterServiceEntities = new ArrayList<>();
     clusterServiceEntities.add(clusterServiceEntity);
     clusterEntity.setClusterServiceEntities(clusterServiceEntities);
 
@@ -232,7 +231,7 @@ public class OrmTestHelper {
     admin.setUserPassword(encoder.encode("admin"));
     admin.setPrincipal(principalEntity);
 
-    Set<UserEntity> users = new HashSet<UserEntity>();
+    Set<UserEntity> users = new HashSet<>();
 
     users.add(admin);
 
@@ -314,6 +313,20 @@ public class OrmTestHelper {
     hostDAO.merge(host2);
   }
 
+  @Transactional
+  public StackEntity createStack(StackId stackId) throws AmbariException {
+    StackEntity stackEntity = stackDAO.find(stackId.getStackName(), 
stackId.getStackVersion());
+
+    if (null == stackEntity) {
+      stackEntity = new StackEntity();
+      stackEntity.setStackName(stackId.getStackName());
+      stackEntity.setStackVersion(stackId.getStackVersion());
+      stackDAO.create(stackEntity);
+    }
+
+    return stackEntity;
+  }
+
   /**
    * Creates an empty cluster with an ID.
    *
@@ -387,6 +400,8 @@ public class OrmTestHelper {
     String clusterName = "cluster-" + System.currentTimeMillis();
     StackId stackId = new StackId("HDP", "2.0.6");
 
+    createStack(stackId);
+
     clusters.addCluster(clusterName, stackId);
     Cluster cluster = clusters.getCluster(clusterName);
     cluster = initializeClusterWithStack(cluster);
@@ -403,8 +418,6 @@ public class OrmTestHelper {
     StackId stackId = new StackId("HDP", "2.0.6");
     cluster.setDesiredStackVersion(stackId);
     getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
-    cluster.createClusterVersion(stackId,
-        stackId.getStackVersion(), "admin", RepositoryVersionState.INSTALLING);
     return cluster;
   }
 
@@ -416,7 +429,7 @@ public class OrmTestHelper {
     clusters.addHost(hostName);
 
     Host host = clusters.getHost(hostName);
-    Map<String, String> hostAttributes = new HashMap<String, String>();
+    Map<String, String> hostAttributes = new HashMap<>();
     hostAttributes.put("os_family", "redhat");
     hostAttributes.put("os_release_version", "6.4");
     host.setHostAttributes(hostAttributes);
@@ -432,15 +445,15 @@ public class OrmTestHelper {
     serviceComponentHost.setDesiredState(State.INSTALLED);
   }
 
-  /**
-   * Calls {@link Service#persist()} to mock a service install along with
-   * creating a single {@link Host} and {@link ServiceComponentHost}.
-   */
   public void installHdfsService(Cluster cluster,
       ServiceFactory serviceFactory, ServiceComponentFactory componentFactory,
       ServiceComponentHostFactory schFactory, String hostName) throws 
Exception {
+
+    RepositoryVersionEntity repositoryVersion = 
repositoryVersionDAO.findByStackAndVersion(
+        cluster.getDesiredStackVersion(), 
cluster.getDesiredStackVersion().getStackVersion());
+
     String serviceName = "HDFS";
-    Service service = serviceFactory.createNew(cluster, serviceName);
+    Service service = serviceFactory.createNew(cluster, serviceName, 
repositoryVersion);
     service = cluster.getService(serviceName);
     assertNotNull(service);
 
@@ -454,8 +467,6 @@ public class OrmTestHelper {
     datanode.addServiceComponentHost(sch);
     sch.setDesiredState(State.INSTALLED);
     sch.setState(State.INSTALLED);
-    sch.setDesiredStackVersion(new StackId("HDP-2.0.6"));
-    sch.setStackVersion(new StackId("HDP-2.0.6"));
 
     ServiceComponent namenode = componentFactory.createNew(service, 
"NAMENODE");
 
@@ -466,19 +477,17 @@ public class OrmTestHelper {
     namenode.addServiceComponentHost(sch);
     sch.setDesiredState(State.INSTALLED);
     sch.setState(State.INSTALLED);
-    sch.setDesiredStackVersion(new StackId("HDP-2.0.6"));
-    sch.setStackVersion(new StackId("HDP-2.0.6"));
   }
 
-  /**
-   * Calls {@link Service#persist()} to mock a service install along with
-   * creating a single {@link Host} and {@link ServiceComponentHost}.
-   */
   public void installYarnService(Cluster cluster,
       ServiceFactory serviceFactory, ServiceComponentFactory componentFactory,
       ServiceComponentHostFactory schFactory, String hostName) throws 
Exception {
+
+    RepositoryVersionEntity repositoryVersion = 
repositoryVersionDAO.findByStackAndVersion(
+        cluster.getDesiredStackVersion(), 
cluster.getDesiredStackVersion().getStackVersion());
+
     String serviceName = "YARN";
-    Service service = serviceFactory.createNew(cluster, serviceName);
+    Service service = serviceFactory.createNew(cluster, serviceName, 
repositoryVersion);
     service = cluster.getService(serviceName);
     assertNotNull(service);
 
@@ -493,8 +502,6 @@ public class OrmTestHelper {
     resourceManager.addServiceComponentHost(sch);
     sch.setDesiredState(State.INSTALLED);
     sch.setState(State.INSTALLED);
-    sch.setDesiredStackVersion(new StackId("HDP-2.0.6"));
-    sch.setStackVersion(new StackId("HDP-2.0.6"));
   }
 
   /**
@@ -608,6 +615,39 @@ public class OrmTestHelper {
   }
 
   /**
+   * Convenient method to create or to get repository version for given 
cluster.  The repository
+   * version string is based on the cluster's stack version.
+   *
+   * @return repository version
+   */
+  public RepositoryVersionEntity getOrCreateRepositoryVersion(Cluster cluster) 
{
+    StackId stackId = cluster.getCurrentStackVersion();
+    String version = stackId.getStackVersion() + ".1";
+
+    StackDAO stackDAO = injector.getInstance(StackDAO.class);
+    StackEntity stackEntity = stackDAO.find(stackId.getStackName(),
+        stackId.getStackVersion());
+
+    assertNotNull(stackEntity);
+
+    RepositoryVersionEntity repositoryVersion = 
repositoryVersionDAO.findByStackAndVersion(
+        stackId, version);
+
+    if (repositoryVersion == null) {
+      try {
+        repositoryVersion = repositoryVersionDAO.create(stackEntity, version,
+            String.valueOf(System.currentTimeMillis()) + 
uniqueCounter.incrementAndGet(), "");
+      } catch (Exception ex) {
+        LOG.error("Caught exception", ex);
+        ex.printStackTrace();
+        Assert.fail(MessageFormat.format("Unable to create Repo Version for 
Stack {0} and version {1}",
+            stackEntity.getStackName() + "-" + stackEntity.getStackVersion(), 
version));
+      }
+    }
+    return repositoryVersion;
+  }
+
+  /**
    * Convenient method to create or to get repository version for given stack.
    *
    * @param stackId stack object
@@ -616,9 +656,12 @@ public class OrmTestHelper {
    */
   public RepositoryVersionEntity getOrCreateRepositoryVersion(StackId stackId,
       String version) {
-    StackDAO stackDAO = injector.getInstance(StackDAO.class);
-    StackEntity stackEntity = stackDAO.find(stackId.getStackName(),
-        stackId.getStackVersion());
+    StackEntity stackEntity = null;
+    try {
+      stackEntity = createStack(stackId);
+    } catch (Exception e) {
+      LOG.error("Expected successful repository", e);
+    }
 
     assertNotNull(stackEntity);
 
@@ -631,6 +674,7 @@ public class OrmTestHelper {
             String.valueOf(System.currentTimeMillis()) + 
uniqueCounter.incrementAndGet(), "");
       } catch (Exception ex) {
         LOG.error("Caught exception", ex);
+        ex.printStackTrace();
         Assert.fail(MessageFormat.format("Unable to create Repo Version for 
Stack {0} and version {1}",
             stackEntity.getStackName() + "-" + stackEntity.getStackVersion(), 
version));
       }
@@ -653,4 +697,4 @@ public class OrmTestHelper {
 
     return hostVersionEntity;
   }
-}
+}
\ 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/orm/dao/RepositoryVersionDAOTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java
index c7414bc..d41b0ba 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/RepositoryVersionDAOTest.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
@@ -26,12 +26,8 @@ import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 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.entities.ClusterEntity;
-import org.apache.ambari.server.orm.entities.ClusterVersionEntity;
 import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
 import org.apache.ambari.server.orm.entities.StackEntity;
-import org.apache.ambari.server.state.RepositoryVersionState;
 import org.apache.ambari.server.state.StackId;
 import org.junit.After;
 import org.junit.Assert;
@@ -53,20 +49,14 @@ public class RepositoryVersionDAOTest {
   private static final StackId BAD_STACK = new StackId("BADSTACK", "1.0");
 
   private RepositoryVersionDAO repositoryVersionDAO;
-  private ClusterVersionDAO clusterVersionDAO;
 
-  private ClusterDAO clusterDAO;
   private StackDAO stackDAO;
-  private OrmTestHelper helper;
 
   @Before
   public void before() {
     injector = Guice.createInjector(new InMemoryDefaultTestModule());
     repositoryVersionDAO = injector.getInstance(RepositoryVersionDAO.class);
-    clusterVersionDAO = injector.getInstance(ClusterVersionDAO.class);
-    clusterDAO = injector.getInstance(ClusterDAO.class);
     stackDAO = injector.getInstance(StackDAO.class);
-    helper = injector.getInstance(OrmTestHelper.class);
     injector.getInstance(GuiceJpaInitializer.class);
 
     // required to populate stacks into the database
@@ -101,7 +91,7 @@ public class RepositoryVersionDAOTest {
 
     // Assert the version must be unique
     RepositoryVersionEntity dupVersion = new RepositoryVersionEntity();
-    dupVersion.setDisplayName("display name " + uuid.toString());
+    dupVersion.setDisplayName("display name " + uuid);
     dupVersion.setOperatingSystems("repositories");
     dupVersion.setStack(stackEntity);
     dupVersion.setVersion(first.getVersion());
@@ -176,31 +166,6 @@ public class RepositoryVersionDAOTest {
   }
 
   @Test
-  public void testDeleteCascade() throws Exception {
-    long clusterId = helper.createCluster();
-    ClusterEntity cluster = clusterDAO.findById(clusterId);
-    createSingleRecord();
-    final RepositoryVersionEntity entity = 
repositoryVersionDAO.findByStackAndVersion(
-        HDP_206, "version");
-
-    ClusterVersionEntity cvA = new ClusterVersionEntity(cluster, entity, 
RepositoryVersionState.INSTALLED, System.currentTimeMillis(), 
System.currentTimeMillis(), "admin");
-    clusterVersionDAO.create(cvA);
-    long cvAId = cvA.getId();
-    cvA = clusterVersionDAO.findByPK(cvAId);
-    Assert.assertNotNull(cvA.getRepositoryVersion());
-    final RepositoryVersionEntity newEntity = 
repositoryVersionDAO.findByStackAndVersion(
-        HDP_206, "version");
-    try {
-      repositoryVersionDAO.remove(newEntity);
-    } catch (Exception e) {
-      //Cascade deletion will fail because absent integrity in in-memory DB
-      Assert.assertNotNull(clusterVersionDAO.findByPK(cvAId));
-    }
-    //
-
-  }
-
-  @Test
   public void testRemovePrefixFromVersion() {
 
     StackEntity hdp206StackEntity = stackDAO.find(HDP_206.getStackName(),
@@ -239,4 +204,4 @@ public class RepositoryVersionDAOTest {
     H2DatabaseCleaner.clearDatabaseAndStopPersistenceService(injector);
     injector = null;
   }
-}
+}
\ 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/orm/dao/UpgradeDAOTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
index d712b03..a626e07 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/orm/dao/UpgradeDAOTest.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
@@ -93,12 +93,12 @@ public class UpgradeDAOTest {
     repositoryVersion2500 = helper.getOrCreateRepositoryVersion(new 
StackId("HDP", "2.5.0"), "2.5.0.0-4567");
     repositoryVersion2511 = helper.getOrCreateRepositoryVersion(new 
StackId("HDP", "2.5.0"), "2.5.1.1-4567");
 
+
     // create upgrade entities
     UpgradeEntity entity = new UpgradeEntity();
     entity.setClusterId(clusterId.longValue());
     entity.setRequestEntity(requestEntity);
-    entity.setToRepositoryVersion(repositoryVersion2200);
-    entity.setFromRepositoryVersion(repositoryVersion2500);
+    entity.setRepositoryVersion(repositoryVersion2200);
     entity.setUpgradeType(UpgradeType.ROLLING);
     entity.setUpgradePackage("test-upgrade");
     entity.setDowngradeAllowed(true);
@@ -175,8 +175,7 @@ public class UpgradeDAOTest {
     entity1.setClusterId(clusterId.longValue());
     entity1.setDirection(Direction.UPGRADE);
     entity1.setRequestEntity(requestEntity);
-    entity1.setToRepositoryVersion(repositoryVersion2200);
-    entity1.setFromRepositoryVersion(repositoryVersion2500);
+    entity1.setRepositoryVersion(repositoryVersion2500);
     entity1.setUpgradeType(UpgradeType.ROLLING);
     entity1.setUpgradePackage("test-upgrade");
     entity1.setDowngradeAllowed(true);
@@ -186,8 +185,7 @@ public class UpgradeDAOTest {
     entity2.setClusterId(clusterId.longValue());
     entity2.setDirection(Direction.DOWNGRADE);
     entity2.setRequestEntity(requestEntity);
-    entity2.setToRepositoryVersion(repositoryVersion2500);
-    entity2.setFromRepositoryVersion(repositoryVersion2200);
+    entity2.setRepositoryVersion(repositoryVersion2200);
     entity2.setUpgradeType(UpgradeType.ROLLING);
     entity2.setUpgradePackage("test-upgrade");
     entity2.setDowngradeAllowed(true);
@@ -197,8 +195,7 @@ public class UpgradeDAOTest {
     entity3.setClusterId(clusterId.longValue());
     entity3.setDirection(Direction.UPGRADE);
     entity3.setRequestEntity(requestEntity);
-    entity3.setToRepositoryVersion(repositoryVersion2200);
-    entity3.setFromRepositoryVersion(repositoryVersion2500);
+    entity3.setRepositoryVersion(repositoryVersion2511);
     entity3.setUpgradeType(UpgradeType.ROLLING);
     entity3.setUpgradePackage("test-upgrade");
     entity3.setDowngradeAllowed(true);
@@ -227,8 +224,7 @@ public class UpgradeDAOTest {
     upgradeEntity.setClusterId(clusterId.longValue());
     upgradeEntity.setDirection(Direction.UPGRADE);
     upgradeEntity.setRequestEntity(requestEntity);
-    upgradeEntity.setToRepositoryVersion(repositoryVersion2200);
-    upgradeEntity.setFromRepositoryVersion(repositoryVersion2500);
+    upgradeEntity.setRepositoryVersion(repositoryVersion2500);
     upgradeEntity.setUpgradeType(UpgradeType.ROLLING);
     upgradeEntity.setUpgradePackage("test-upgrade");
     dao.create(upgradeEntity);
@@ -245,4 +241,4 @@ public class UpgradeDAOTest {
     Assert.assertTrue(lastUpgradeForCluster.isComponentFailureAutoSkipped());
     
Assert.assertTrue(lastUpgradeForCluster.isServiceCheckFailureAutoSkipped());
   }
-}
+}
\ No newline at end of file

Reply via email to