AMBARI-22614. Fix unit tests in feature branch to make them 
workable.(vbrodetskyi)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/bcbacf0c
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/bcbacf0c
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/bcbacf0c

Branch: refs/heads/branch-feature-AMBARI-14714-blueprintv2
Commit: bcbacf0c77fb8aa10a4d5e83df8ebb4650982582
Parents: 490808c
Author: Vitaly Brodetskyi <vbrodets...@hortonworks.com>
Authored: Fri Dec 8 19:03:20 2017 +0200
Committer: Vitaly Brodetskyi <vbrodets...@hortonworks.com>
Committed: Fri Dec 8 19:03:20 2017 +0200

----------------------------------------------------------------------
 .../ambari/server/stack/StackManager.java       |   3 +
 .../ambari/server/state/ServiceFactory.java     |   2 +-
 .../ExecutionCommandWrapperTest.java            |   4 +-
 .../TestActionSchedulerThreading.java           |   4 +-
 .../server/agent/HeartbeatProcessorTest.java    |   4 +-
 .../server/agent/TestHeartbeatHandler.java      |   7 +-
 .../server/agent/TestHeartbeatMonitor.java      |  16 +-
 .../ClusterResourceDefinitionTest.java          |  21 +-
 .../ServiceResourceDefinitionTest.java          |   6 +-
 .../checks/ComponentExistsInRepoCheckTest.java  |   4 +-
 .../configuration/RecoveryConfigHelperTest.java |  19 +-
 .../AmbariManagementControllerImplTest.java     | 112 ++++---
 .../AmbariManagementControllerTest.java         |  32 +-
 .../StackDefinedPropertyProviderTest.java       |  10 +-
 .../internal/UpgradeResourceProviderTest.java   |  16 +-
 .../UpgradeSummaryResourceProviderTest.java     |   4 +-
 .../VersionDefinitionResourceProviderTest.java  |   4 +-
 .../GeneralServiceCalculatedStateTest.java      |   4 +-
 .../HostVersionOutOfSyncListenerTest.java       |   4 +-
 .../apache/ambari/server/orm/OrmTestHelper.java |  18 +-
 .../ambari/server/state/ConfigHelperTest.java   |  14 +-
 .../apache/ambari/server/state/ServiceTest.java |  23 +-
 .../ambari/server/state/UpgradeHelperTest.java  |  45 ++-
 .../server/state/cluster/ClusterImplTest.java   |  12 +-
 .../server/state/cluster/ClusterTest.java       |  29 +-
 .../server/state/cluster/ClustersTest.java      |  14 +-
 .../ConcurrentServiceConfigVersionTest.java     |  15 +-
 ...omponentHostConcurrentWriteDeadlockTest.java |  15 +-
 .../src/test/resources/cluster-settings.xml     | 322 +++++++++++++++++++
 29 files changed, 616 insertions(+), 167 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManager.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManager.java 
b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManager.java
index fc49a24..dc77f19 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManager.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/stack/StackManager.java
@@ -307,6 +307,9 @@ public class StackManager {
         stackEntity.setStackName(stackName);
         stackEntity.setStackVersion(stackVersion);
 
+        //TODO this is hack which should be removed during merge with BP branch
+        stackEntity.setRepoVersion("");
+
         stackDao.create(stackEntity);
       }
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceFactory.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceFactory.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceFactory.java
index 69eb21d..e6673a3 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceFactory.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceFactory.java
@@ -44,7 +44,7 @@ public interface ServiceFactory {
    * @return
    */
   Service createNew(Cluster cluster, ServiceGroup serviceGroup,
-                    @Assisted List<ServiceKey> serviceDependencies,
+                    List<ServiceKey> serviceDependencies,
                     @Assisted("serviceName") String serviceName,
                     @Assisted("serviceType") String serviceType,
                     RepositoryVersionEntity desiredRepositoryVersion);

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapperTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapperTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapperTest.java
index 19f940f..b674234 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapperTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapperTest.java
@@ -43,6 +43,7 @@ import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.ConfigFactory;
 import org.apache.ambari.server.state.ConfigHelper;
 import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.ServiceGroup;
 import org.apache.ambari.server.state.StackId;
 import 
org.apache.ambari.server.state.svccomphost.ServiceComponentHostStartEvent;
 import org.apache.ambari.server.utils.StageUtils;
@@ -115,7 +116,8 @@ public class ExecutionCommandWrapperTest {
 
     OrmTestHelper helper = injector.getInstance(OrmTestHelper.class);
     RepositoryVersionEntity repositoryVersion = 
helper.getOrCreateRepositoryVersion(cluster1);
-    cluster1.addService(null, "HDFS", "", repositoryVersion);
+    ServiceGroup serviceGroup = cluster1.addServiceGroup("CORE");
+    cluster1.addService(serviceGroup, "HDFS", "HDFS", repositoryVersion);
 
     SERVICE_SITE_CLUSTER = new HashMap<>();
     SERVICE_SITE_CLUSTER.put(SERVICE_SITE_NAME1, SERVICE_SITE_VAL1);

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionSchedulerThreading.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionSchedulerThreading.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionSchedulerThreading.java
index 22f23c8..6688510 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionSchedulerThreading.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/actionmanager/TestActionSchedulerThreading.java
@@ -42,6 +42,7 @@ 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.Service;
+import org.apache.ambari.server.state.ServiceGroup;
 import org.apache.ambari.server.state.StackId;
 import org.junit.After;
 import org.junit.Before;
@@ -108,7 +109,8 @@ public class TestActionSchedulerThreading {
     // add a service
     String serviceName = "ZOOKEEPER";
     RepositoryVersionEntity repositoryVersion = 
ormTestHelper.getOrCreateRepositoryVersion(cluster);
-    Service service = cluster.addService(null, serviceName, "", 
repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service service = cluster.addService(serviceGroup, serviceName, 
serviceName, repositoryVersion);
     String configType = "zoo.cfg";
 
     Map<String, String> properties = new HashMap<>();

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
index 8a6025f..b7b3e46 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/agent/HeartbeatProcessorTest.java
@@ -75,6 +75,7 @@ import org.apache.ambari.server.state.Host;
 import org.apache.ambari.server.state.HostState;
 import org.apache.ambari.server.state.Service;
 import org.apache.ambari.server.state.ServiceComponentHost;
+import org.apache.ambari.server.state.ServiceGroup;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.State;
 import org.apache.ambari.server.state.fsm.InvalidStateTransitionException;
@@ -1310,6 +1311,7 @@ public class HeartbeatProcessorTest {
    */
   private Service addService(Cluster cluster, String serviceName) throws 
AmbariException {
     RepositoryVersionEntity repositoryVersion = 
helper.getOrCreateRepositoryVersion(cluster);
-    return cluster.addService(null, serviceName, "", repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    return cluster.addService(serviceGroup, serviceName, serviceName, 
repositoryVersion);
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
index 50d4733..ba57449 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatHandler.java
@@ -91,6 +91,7 @@ import org.apache.ambari.server.state.MaintenanceState;
 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.ServiceGroup;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.State;
 import org.apache.ambari.server.state.fsm.InvalidStateTransitionException;
@@ -1339,6 +1340,9 @@ public class TestHeartbeatHandler {
     componentMap.put("NAMENODE", nnComponent);
 
     expect(service.getServiceComponents()).andReturn(componentMap);
+    expect(service.getServiceId()).andReturn(1L).atLeastOnce();
+    expect(service.getServiceType()).andReturn("HDFS").atLeastOnce();
+    expect(service.getDesiredStackId()).andReturn(dummyStackId).atLeastOnce();
 
     replay(service, nnComponent);
 
@@ -1575,7 +1579,8 @@ public class TestHeartbeatHandler {
    */
   private Service addService(Cluster cluster, String serviceName) throws 
AmbariException {
     RepositoryVersionEntity repositoryVersion = 
helper.getOrCreateRepositoryVersion(cluster);
-    return cluster.addService(null, serviceName, "", repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    return cluster.addService(serviceGroup, serviceName, serviceName, 
repositoryVersion);
   }
 
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
index 4f8c423..69546bf 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/agent/TestHeartbeatMonitor.java
@@ -54,6 +54,7 @@ import org.apache.ambari.server.state.HostState;
 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.ServiceGroup;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.State;
 import org.apache.ambari.server.state.fsm.InvalidStateTransitionException;
@@ -173,7 +174,8 @@ public class TestHeartbeatMonitor {
 
 
     clusters.mapAndPublishHostsToCluster(hostNames, clusterName);
-    Service hdfs = cluster.addService(null, serviceName, "", 
repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service hdfs = cluster.addService(serviceGroup, serviceName, serviceName, 
repositoryVersion);
     hdfs.addServiceComponent(Role.DATANODE.name());
     
hdfs.getServiceComponent(Role.DATANODE.name()).addServiceComponentHost(hostname1);
     hdfs.addServiceComponent(Role.NAMENODE.name());
@@ -275,7 +277,8 @@ public class TestHeartbeatMonitor {
 
 
     clusters.mapAndPublishHostsToCluster(hostNames, clusterName);
-    Service hdfs = cluster.addService(null, serviceName, "", 
repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service hdfs = cluster.addService(serviceGroup, serviceName, serviceName, 
repositoryVersion);
     hdfs.addServiceComponent(Role.DATANODE.name());
     hdfs.getServiceComponent(Role.DATANODE.name()).addServiceComponentHost
     (hostname1);
@@ -382,7 +385,8 @@ public class TestHeartbeatMonitor {
 
     clusters.mapAndPublishHostsToCluster(hostNames, clusterName);
 
-    Service hdfs = cluster.addService(null, serviceName, "", 
repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service hdfs = cluster.addService(serviceGroup, serviceName, serviceName, 
repositoryVersion);
     hdfs.addServiceComponent(Role.DATANODE.name());
     
hdfs.getServiceComponent(Role.DATANODE.name()).addServiceComponentHost(hostname1);
     hdfs.addServiceComponent(Role.NAMENODE.name());
@@ -463,7 +467,8 @@ public class TestHeartbeatMonitor {
 
     clusters.mapAndPublishHostsToCluster(hostNames, clusterName);
 
-    Service hdfs = cluster.addService(null, serviceName, "", 
repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service hdfs = cluster.addService(serviceGroup, serviceName, serviceName, 
repositoryVersion);
     hdfs.addServiceComponent(Role.DATANODE.name());
     
hdfs.getServiceComponent(Role.DATANODE.name()).addServiceComponentHost(hostname1);
     hdfs.addServiceComponent(Role.NAMENODE.name());
@@ -581,7 +586,8 @@ public class TestHeartbeatMonitor {
 
     clusters.mapAndPublishHostsToCluster(hostNames, clusterName);
 
-    Service hdfs = cluster.addService(null, serviceName, "", 
repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service hdfs = cluster.addService(serviceGroup, serviceName, serviceName, 
repositoryVersion);
 
     hdfs.addServiceComponent(Role.DATANODE.name());
     
hdfs.getServiceComponent(Role.DATANODE.name()).addServiceComponentHost(hostname1);

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/ambari-server/src/test/java/org/apache/ambari/server/api/resources/ClusterResourceDefinitionTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/api/resources/ClusterResourceDefinitionTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/api/resources/ClusterResourceDefinitionTest.java
index fc24d2c..16ce5b4 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/api/resources/ClusterResourceDefinitionTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/api/resources/ClusterResourceDefinitionTest.java
@@ -51,20 +51,19 @@ public class ClusterResourceDefinitionTest {
     Set<SubResourceDefinition> subResources = 
resource.getSubResourceDefinitions();
 
     assertEquals(14, subResources.size());
-    assertTrue(includesType(subResources, Resource.Type.Service));
-    assertTrue(includesType(subResources, Resource.Type.ServiceGroup));
-    assertTrue(includesType(subResources, Resource.Type.Host));
-    assertTrue(includesType(subResources, Resource.Type.Configuration));
-    assertTrue(includesType(subResources, Resource.Type.Request));
-    assertTrue(includesType(subResources, Resource.Type.Workflow));
-    assertTrue(includesType(subResources, Resource.Type.ConfigGroup));
-    assertTrue(includesType(subResources, Resource.Type.AlertDefinition));
-    assertTrue(includesType(subResources, Resource.Type.ServiceConfigVersion));
-    assertTrue(includesType(subResources, Resource.Type.ClusterPrivilege));
     assertTrue(includesType(subResources, Resource.Type.Alert));
-    assertTrue(includesType(subResources, Resource.Type.ClusterStackVersion));
+    assertTrue(includesType(subResources, Resource.Type.AlertDefinition));
     assertTrue(includesType(subResources, Resource.Type.Artifact));
     assertTrue(includesType(subResources, 
Resource.Type.ClusterKerberosDescriptor));
+    assertTrue(includesType(subResources, Resource.Type.ClusterPrivilege));
+    assertTrue(includesType(subResources, Resource.Type.ClusterStackVersion));
+    assertTrue(includesType(subResources, Resource.Type.ConfigGroup));
+    assertTrue(includesType(subResources, Resource.Type.Configuration));
+    assertTrue(includesType(subResources, Resource.Type.Host));
+    assertTrue(includesType(subResources, Resource.Type.Request));
+    assertTrue(includesType(subResources, Resource.Type.ServiceConfigVersion));
+    assertTrue(includesType(subResources, Resource.Type.ServiceGroup));
+    assertTrue(includesType(subResources, Resource.Type.Workflow));
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/ambari-server/src/test/java/org/apache/ambari/server/api/resources/ServiceResourceDefinitionTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/api/resources/ServiceResourceDefinitionTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/api/resources/ServiceResourceDefinitionTest.java
index 75319ea..46c17ff 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/api/resources/ServiceResourceDefinitionTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/api/resources/ServiceResourceDefinitionTest.java
@@ -46,10 +46,12 @@ public class ServiceResourceDefinitionTest {
     ResourceDefinition resource = new ServiceResourceDefinition();
     Set<SubResourceDefinition> subResources = 
resource.getSubResourceDefinitions();
 
-    assertEquals(3, subResources.size());
-    assertTrue(includesType(subResources, Resource.Type.Component));
+    assertEquals(5, subResources.size());
     assertTrue(includesType(subResources, Resource.Type.Alert));
     assertTrue(includesType(subResources, Resource.Type.Artifact));
+    assertTrue(includesType(subResources, Resource.Type.Component));
+    assertTrue(includesType(subResources, Resource.Type.Configuration));
+    assertTrue(includesType(subResources, Resource.Type.ServiceDependency));
   }
 
   private boolean includesType(Set<SubResourceDefinition> resources, 
Resource.Type type) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/ambari-server/src/test/java/org/apache/ambari/server/checks/ComponentExistsInRepoCheckTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/checks/ComponentExistsInRepoCheckTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/checks/ComponentExistsInRepoCheckTest.java
index 2fe8ee0..8987b47 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/checks/ComponentExistsInRepoCheckTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/checks/ComponentExistsInRepoCheckTest.java
@@ -133,6 +133,8 @@ public class ComponentExistsInRepoCheckTest extends 
EasyMockSupport {
     ZK_SERVICE_COMPONENTS.put("ZOOKEEPER_SERVER", m_zookeeperServer);
     FOO_SERVICE_COMPONENTS.put("FOO_COMPONENT", m_fooComponent);
 
+    
expect(m_zookeeperService.getServiceType()).andReturn("ZOOKEEPER").anyTimes();
+    expect(m_fooService.getServiceType()).andReturn("FOO_SERVICE").anyTimes();
     
expect(m_zookeeperService.getServiceComponents()).andReturn(ZK_SERVICE_COMPONENTS).anyTimes();
     
expect(m_fooService.getServiceComponents()).andReturn(FOO_SERVICE_COMPONENTS).anyTimes();
 
@@ -351,4 +353,4 @@ public class ComponentExistsInRepoCheckTest extends 
EasyMockSupport {
     Assert.assertTrue(check.getFailedOn().contains("FOO_COMPONENT"));
   }
 
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/ambari-server/src/test/java/org/apache/ambari/server/configuration/RecoveryConfigHelperTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/configuration/RecoveryConfigHelperTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/configuration/RecoveryConfigHelperTest.java
index 040b571..06d773e 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/configuration/RecoveryConfigHelperTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/configuration/RecoveryConfigHelperTest.java
@@ -45,6 +45,7 @@ import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Config;
 import org.apache.ambari.server.state.MaintenanceState;
 import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.ServiceGroup;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.State;
 import org.apache.ambari.server.utils.EventBusSynchronizer;
@@ -147,7 +148,8 @@ public class RecoveryConfigHelperTest {
     Cluster cluster = heartbeatTestHelper.getDummyCluster();
 
     RepositoryVersionEntity repositoryVersion = 
helper.getOrCreateRepositoryVersion(cluster);
-    Service hdfs = cluster.addService(null, HDFS, "", repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service hdfs = cluster.addService(serviceGroup, HDFS, HDFS, 
repositoryVersion);
 
     hdfs.addServiceComponent(DATANODE).setRecoveryEnabled(true);
     hdfs.getServiceComponent(DATANODE).addServiceComponentHost(DummyHostname1);
@@ -181,7 +183,8 @@ public class RecoveryConfigHelperTest {
       throws Exception {
     Cluster cluster = heartbeatTestHelper.getDummyCluster();
     RepositoryVersionEntity repositoryVersion = 
helper.getOrCreateRepositoryVersion(cluster);
-    Service hdfs = cluster.addService(null, HDFS, "", repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service hdfs = cluster.addService(serviceGroup, HDFS, HDFS, 
repositoryVersion);
 
     hdfs.addServiceComponent(DATANODE).setRecoveryEnabled(true);
     hdfs.getServiceComponent(DATANODE).addServiceComponentHost(DummyHostname1);
@@ -217,7 +220,8 @@ public class RecoveryConfigHelperTest {
       throws Exception {
     Cluster cluster = heartbeatTestHelper.getDummyCluster();
     RepositoryVersionEntity repositoryVersion = 
helper.getOrCreateRepositoryVersion(cluster);
-    Service hdfs = cluster.addService(null, HDFS, "", repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service hdfs = cluster.addService(serviceGroup, HDFS, HDFS, 
repositoryVersion);
 
     hdfs.addServiceComponent(DATANODE).setRecoveryEnabled(true);
     hdfs.getServiceComponent(DATANODE).addServiceComponentHost(DummyHostname1);
@@ -257,7 +261,8 @@ public class RecoveryConfigHelperTest {
       throws Exception {
     Cluster cluster = heartbeatTestHelper.getDummyCluster();
     RepositoryVersionEntity repositoryVersion = 
helper.getOrCreateRepositoryVersion(cluster);
-    Service hdfs = cluster.addService(null, HDFS, "", repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service hdfs = cluster.addService(serviceGroup, HDFS, HDFS, 
repositoryVersion);
 
     hdfs.addServiceComponent(DATANODE).setRecoveryEnabled(true);
     hdfs.getServiceComponent(DATANODE).addServiceComponentHost(DummyHostname1);
@@ -292,7 +297,8 @@ public class RecoveryConfigHelperTest {
       throws Exception {
     Cluster cluster = heartbeatTestHelper.getDummyCluster();
     RepositoryVersionEntity repositoryVersion = 
helper.getOrCreateRepositoryVersion(cluster);
-    Service hdfs = cluster.addService(null, HDFS, "", repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service hdfs = cluster.addService(serviceGroup, HDFS, HDFS, 
repositoryVersion);
 
     hdfs.addServiceComponent(DATANODE).setRecoveryEnabled(true);
     hdfs.getServiceComponent(DATANODE).addServiceComponentHost(DummyHostname1);
@@ -335,7 +341,8 @@ public class RecoveryConfigHelperTest {
     RepositoryVersionEntity repositoryVersion = 
helper.getOrCreateRepositoryVersion(cluster);
 
     // Add HDFS service with DATANODE component to the cluster
-    Service hdfs = cluster.addService(null, HDFS, "", repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service hdfs = cluster.addService(serviceGroup, HDFS, HDFS, 
repositoryVersion);
 
     hdfs.addServiceComponent(DATANODE).setRecoveryEnabled(true);
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
index 21cf518..db5df10 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerImplTest.java
@@ -350,8 +350,9 @@ public class AmbariManagementControllerImplTest {
     StackId stackId = createNiceMock(StackId.class);
     ServiceComponent component = createNiceMock(ServiceComponent.class);
 
-    expect(service.getName()).andReturn("service");
+    expect(service.getServiceType()).andReturn("service");
     expect(service.getServiceComponent("component")).andReturn(component);
+    
expect(service.getServiceComponents()).andReturn(Collections.singletonMap("component",
 component)).anyTimes();
     expect(service.getDesiredStackId()).andReturn(stackId);
     expect(stackId.getStackName()).andReturn("stack");
     expect(stackId.getStackVersion()).andReturn("1.0");
@@ -360,7 +361,7 @@ public class AmbariManagementControllerImplTest {
     ComponentInfo compInfo = createNiceMock(ComponentInfo.class);
     expect(serviceInfo.getClientComponent()).andReturn(compInfo);
     expect(compInfo.getName()).andReturn("component");
-    expect(component.getServiceComponentHosts()).andReturn(new HashMap<String, 
ServiceComponentHost>());
+    
expect(component.getServiceComponentHosts()).andReturn(Collections.singletonMap("host",
 null)).anyTimes();
     expect(ambariMetaInfo.getService("stack", "1.0", 
"service")).andReturn(serviceInfo);
 
     replay(injector, cluster, service, component, serviceInfo, compInfo, 
ambariMetaInfo, stackId);
@@ -383,7 +384,7 @@ public class AmbariManagementControllerImplTest {
     ServiceComponent component1 = createNiceMock(ServiceComponent.class);
     ServiceComponent component2 = createNiceMock(ServiceComponent.class);
 
-    expect(service.getName()).andReturn("service");
+    expect(service.getServiceType()).andReturn("service");
     expect(service.getServiceComponent("component")).andThrow(
       new ServiceComponentNotFoundException("cluster", "service", "component", 
"", ""));
     expect(service.getDesiredStackId()).andReturn(stackId);
@@ -394,8 +395,7 @@ public class AmbariManagementControllerImplTest {
     componentsMap.put("component2", component2);
     expect(service.getServiceComponents()).andReturn(componentsMap);
     
expect(component1.getServiceComponentHosts()).andReturn(Collections.emptyMap());
-    expect(component2.getServiceComponentHosts()).andReturn(
-      new HashMap<String, ServiceComponentHost>());
+    
expect(component2.getServiceComponentHosts()).andReturn(Collections.singletonMap("host",
 null)).anyTimes();
 
     ServiceInfo serviceInfo = createNiceMock(ServiceInfo.class);
     ComponentInfo compInfo = createNiceMock(ComponentInfo.class);
@@ -423,7 +423,7 @@ public class AmbariManagementControllerImplTest {
     ServiceComponent component1 = createNiceMock(ServiceComponent.class);
     ServiceComponent component2 = createNiceMock(ServiceComponent.class);
 
-    expect(service.getName()).andReturn("service");
+    expect(service.getServiceType()).andReturn("service");
     expect(service.getDesiredStackId()).andReturn(stackId);
     expect(stackId.getStackName()).andReturn("stack");
     expect(stackId.getStackVersion()).andReturn("1.0");
@@ -432,8 +432,7 @@ public class AmbariManagementControllerImplTest {
     componentsMap.put("component2", component2);
     expect(service.getServiceComponents()).andReturn(componentsMap);
     
expect(component1.getServiceComponentHosts()).andReturn(Collections.emptyMap());
-    expect(component2.getServiceComponentHosts()).andReturn(
-      new HashMap<String, ServiceComponentHost>());
+    
expect(component2.getServiceComponentHosts()).andReturn(Collections.singletonMap("host",
 null)).anyTimes();
 
     ServiceInfo serviceInfo = createNiceMock(ServiceInfo.class);
     expect(serviceInfo.getClientComponent()).andReturn(null);
@@ -1044,7 +1043,7 @@ public class AmbariManagementControllerImplTest {
 
     // requests
     ServiceComponentHostRequest request1 = new ServiceComponentHostRequest(
-        "cluster1", null, "component1", "host1", null, null);
+        "cluster1", "CORE", "service1", "component1", "host1", null);
 
     Set<ServiceComponentHostRequest> setRequests = new HashSet<>();
     setRequests.add(request1);
@@ -1066,9 +1065,9 @@ public class AmbariManagementControllerImplTest {
         }}).anyTimes();
 
     expect(cluster.getService("service1")).andReturn(service);
-    expect(cluster.getServiceByComponentName("component1")).andReturn(service);
+    
expect(cluster.getServiceByComponentName("component1")).andReturn(service).anyTimes();
+    expect(service.getName()).andReturn("service1").anyTimes();
     expect(service.getServiceComponent("component1")).andReturn(component);
-    expect(service.getName()).andReturn("service1");
     expect(component.getName()).andReturn("component1");
     expect(component.getServiceComponentHosts()).andReturn(
         new HashMap<String, ServiceComponentHost>() {{
@@ -1111,7 +1110,7 @@ public class AmbariManagementControllerImplTest {
 
     // requests
     ServiceComponentHostRequest request1 = new ServiceComponentHostRequest(
-        "cluster1", null, "component1", "host1", null, null);
+        "cluster1", "CORE", "service1", "component1", "host1", null);
 
 
     Set<ServiceComponentHostRequest> setRequests = new HashSet<>();
@@ -1133,10 +1132,9 @@ public class AmbariManagementControllerImplTest {
 //    expect(stack.getStackVersion()).andReturn("stackVersion");
 //
 //    expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", 
"component1")).andReturn("service1");
-    expect(cluster.getService("service1")).andReturn(service);
-    expect(cluster.getServiceByComponentName("component1")).andReturn(service);
-    expect(service.getServiceComponent("component1")).andReturn(component);
-    expect(service.getName()).andReturn("service1");
+//    expect(cluster.getService("service1")).andReturn(service);
+    
expect(cluster.getServiceByComponentName("component1")).andReturn(service).anyTimes();
+//    expect(service.getServiceComponent("component1")).andReturn(component);
     expect(component.getName()).andReturn("component1").anyTimes();
     expect(component.getServiceComponentHosts()).andReturn(null);
 
@@ -1177,7 +1175,7 @@ public class AmbariManagementControllerImplTest {
 
     // requests
     ServiceComponentHostRequest request1 = new ServiceComponentHostRequest(
-        "cluster1", null, "component1", "host1", null, null);
+        "cluster1", "CORE", "service1", "component1", "host1", null);
     request1.setState("INSTALLED");
 
 
@@ -1209,9 +1207,9 @@ public class AmbariManagementControllerImplTest {
 //    expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", 
"component1")).andReturn("service1");
     expect(cluster.getClusterName()).andReturn("cl1");
     expect(cluster.getService("service1")).andReturn(service);
-    expect(cluster.getServiceByComponentName("component1")).andReturn(service);
+    
expect(cluster.getServiceByComponentName("component1")).andReturn(service).anyTimes();
     expect(service.getServiceComponent("component1")).andReturn(component);
-    expect(service.getName()).andReturn("service1");
+    expect(service.getName()).andReturn("service1").anyTimes();
     expect(component.getName()).andReturn("component1").anyTimes();
     expect(component.getServiceComponentHosts()).andReturn(new HashMap<String, 
ServiceComponentHost>() {{
       put("host1", componentHost1);
@@ -1254,7 +1252,7 @@ public class AmbariManagementControllerImplTest {
 
     // requests
     ServiceComponentHostRequest request1 = new ServiceComponentHostRequest(
-        "cluster1", null, "component1", "host1", null, null);
+        "cluster1", "CORE", "service1", "component1", "host1", null);
     request1.setMaintenanceState("ON");
 
 
@@ -1281,9 +1279,9 @@ public class AmbariManagementControllerImplTest {
 
     expect(cluster.getClusterName()).andReturn("cl1");
     expect(cluster.getService("service1")).andReturn(service);
-    expect(cluster.getServiceByComponentName("component1")).andReturn(service);
+    
expect(cluster.getServiceByComponentName("component1")).andReturn(service).anyTimes();
     expect(service.getServiceComponent("component1")).andReturn(component);
-    expect(service.getName()).andReturn("service1");
+    expect(service.getName()).andReturn("service1").anyTimes();
     expect(component.getName()).andReturn("component1").anyTimes();
     expect(component.getServiceComponentHosts()).andReturn(new HashMap<String, 
ServiceComponentHost>() {{
       put("host1", componentHost1);
@@ -1338,13 +1336,13 @@ public class AmbariManagementControllerImplTest {
 
     // requests
     ServiceComponentHostRequest request1 = new ServiceComponentHostRequest(
-        "cluster1", null, "component1", "host1", null, null);
+        "cluster1", "CORE", "service1", "component1", "host1", null);
 
     ServiceComponentHostRequest request2 = new ServiceComponentHostRequest(
-        "cluster1", null, "component2", "host1", null, null);
+        "cluster1", "CORE", "service1", "component2", "host1", null);
 
     ServiceComponentHostRequest request3 = new ServiceComponentHostRequest(
-        "cluster1", null, "component3", "host1", null, null);
+        "cluster1", "CORE", "service1", "component3", "host1", null);
 
 
     Set<ServiceComponentHostRequest> setRequests = new HashSet<>();
@@ -1365,7 +1363,7 @@ public class AmbariManagementControllerImplTest {
     
expect(clusters.getClustersForHost("host1")).andReturn(Collections.singleton(cluster)).anyTimes();
     expect(cluster.getService("service1")).andReturn(service).times(3);
 
-    expect(cluster.getServiceByComponentName("component1")).andReturn(service);
+    
expect(cluster.getServiceByComponentName("component1")).andReturn(service).anyTimes();
     expect(service.getServiceComponent("component1")).andReturn(component1);
     expect(service.getName()).andReturn("service1").anyTimes();
     expect(component1.getName()).andReturn("component1");
@@ -1376,13 +1374,13 @@ public class AmbariManagementControllerImplTest {
     expect(componentHost1.convertToResponse(null)).andReturn(response1);
     expect(componentHost1.getHostName()).andReturn("host1");
 
-    expect(cluster.getServiceByComponentName("component2")).andReturn(service);
+    
expect(cluster.getServiceByComponentName("component2")).andReturn(service).anyTimes();
     expect(service.getServiceComponent("component2")).andReturn(component2);
     expect(component2.getName()).andReturn("component2");
     expect(component2.getServiceComponentHosts()).andReturn(null);
     expect(componentHost2.getHostName()).andReturn("host1");
 
-    expect(cluster.getServiceByComponentName("component3")).andReturn(service);
+    
expect(cluster.getServiceByComponentName("component3")).andReturn(service).anyTimes();
     expect(service.getServiceComponent("component3")).andReturn(component3);
     expect(component3.getName()).andReturn("component3");
     expect(component3.getServiceComponentHosts()).andReturn(
@@ -1437,13 +1435,13 @@ public class AmbariManagementControllerImplTest {
 
     // requests
     ServiceComponentHostRequest request1 = new ServiceComponentHostRequest(
-        "cluster1", null, "component1", "host1", null, null);
+        "cluster1", "CORE", "service1", "component1", "host1", null);
 
     ServiceComponentHostRequest request2 = new ServiceComponentHostRequest(
-        "cluster1", null, "component2", "host1", null, null);
+        "cluster1", "CORE", "service2", "component2", "host1", null);
 
     ServiceComponentHostRequest request3 = new ServiceComponentHostRequest(
-        "cluster1", null, "component3", "host1", null, null);
+        "cluster1", "CORE", "service1", "component3", "host1", null);
 
 
     Set<ServiceComponentHostRequest> setRequests = new HashSet<>();
@@ -1471,8 +1469,7 @@ public class AmbariManagementControllerImplTest {
 
 //    expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", 
"component1")).andReturn("service1");
     expect(cluster.getService("service1")).andReturn(service);
-    expect(cluster.getServiceByComponentName("component1")).andReturn(service);
-    expect(service.getName()).andReturn("service1").atLeastOnce();
+    
expect(cluster.getServiceByComponentName("component1")).andReturn(service).anyTimes();
     expect(service.getServiceComponent("component1")).andReturn(component1);
     expect(component1.getName()).andReturn("component1");
     expect(component1.getServiceComponentHosts()).andReturn(new
@@ -1482,10 +1479,11 @@ public class AmbariManagementControllerImplTest {
     expect(componentHost1.convertToResponse(null)).andReturn(response1);
     expect(componentHost1.getHostName()).andReturn("host1");
 
-    expect(cluster.getServiceByComponentName("component2")).andThrow(new 
ServiceNotFoundException("cluster1", "service2"));
+    expect(cluster.getService("service2")).andThrow(new 
ServiceNotFoundException("cluster1", "service2"));
 
     expect(cluster.getService("service1")).andReturn(service);
-    expect(cluster.getServiceByComponentName("component3")).andReturn(service);
+    expect(service.getName()).andReturn("service1").anyTimes();
+    
expect(cluster.getServiceByComponentName("component3")).andReturn(service).anyTimes();
     expect(service.getServiceComponent("component3")).andReturn(component3);
     expect(component3.getName()).andReturn("component3");
     expect(component3.getServiceComponentHosts()).andReturn(new
@@ -1543,13 +1541,13 @@ public class AmbariManagementControllerImplTest {
 
     // requests
     ServiceComponentHostRequest request1 = new ServiceComponentHostRequest(
-        "cluster1", null, "component1", "host1", null, null);
+        "cluster1", "CORE", "service1", "component1", "host1", null);
 
     ServiceComponentHostRequest request2 = new ServiceComponentHostRequest(
-        "cluster1", null, "component2", "host1", null, null);
+        "cluster1", "CORE", "service2", "component2", "host1", null);
 
     ServiceComponentHostRequest request3 = new ServiceComponentHostRequest(
-        "cluster1", null, "component3", "host1", null, null);
+        "cluster1", "CORE", "service1", "component3", "host1", null);
 
 
     Set<ServiceComponentHostRequest> setRequests = new HashSet<>();
@@ -1577,9 +1575,8 @@ public class AmbariManagementControllerImplTest {
 
 //    expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", 
"component1")).andReturn("service1");
     expect(cluster.getService("service1")).andReturn(service);
-    expect(cluster.getServiceByComponentName("component1")).andReturn(service);
+    
expect(cluster.getServiceByComponentName("component1")).andReturn(service).anyTimes();
     expect(service.getServiceComponent("component1")).andReturn(component);
-    expect(service.getName()).andReturn("service1").anyTimes();
     expect(component.getName()).andReturn("component1");
     
expect(component.getServiceComponentHosts()).andReturn(ImmutableMap.<String, 
ServiceComponentHost>builder()
         .put("host1", componentHost1)
@@ -1589,14 +1586,13 @@ public class AmbariManagementControllerImplTest {
 
 //    expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", 
"component2")).andReturn("service2");
     expect(cluster.getService("service2")).andReturn(service2);
-    
expect(cluster.getServiceByComponentName("component2")).andReturn(service2);
-    expect(service2.getName()).andReturn("service2");
+    
expect(cluster.getServiceByComponentName("component2")).andReturn(service2).anyTimes();
     expect(service2.getServiceComponent("component2")).
         andThrow(new ServiceComponentNotFoundException("cluster1", "service2", 
"component2", "", ""));
 
 //    expect(ambariMetaInfo.getComponentToService("stackName", "stackVersion", 
"component3")).andReturn("service1");
     expect(cluster.getService("service1")).andReturn(service);
-    expect(cluster.getServiceByComponentName("component3")).andReturn(service);
+    
expect(cluster.getServiceByComponentName("component3")).andReturn(service).anyTimes();
     expect(service.getServiceComponent("component3")).andReturn(component3);
 
     expect(component3.getName()).andReturn("component3");
@@ -1653,13 +1649,13 @@ public class AmbariManagementControllerImplTest {
 
     // requests
     ServiceComponentHostRequest request1 = new ServiceComponentHostRequest(
-        "cluster1", null, "component1", null, null, null);
+        "cluster1", "CORE", "service1", "component1", null, null);
 
     ServiceComponentHostRequest request2 = new ServiceComponentHostRequest(
-        "cluster1", null, "component2", "host2", null, null);
+        "cluster1", "CORE", "service1", "component2", "host2", null);
 
     ServiceComponentHostRequest request3 = new ServiceComponentHostRequest(
-        "cluster1", null, "component3", null, null, null);
+        "cluster1", "CORE", "service1", "component3", null, null);
 
 
     Set<ServiceComponentHostRequest> setRequests = new HashSet<>();
@@ -1686,7 +1682,7 @@ public class AmbariManagementControllerImplTest {
     expect(stack.getStackVersion()).andReturn("stackVersion").anyTimes();
 
     expect(cluster.getService("service1")).andReturn(service);
-    expect(cluster.getServiceByComponentName("component1")).andReturn(service);
+    
expect(cluster.getServiceByComponentName("component1")).andReturn(service).anyTimes();
     expect(service.getServiceComponent("component1")).andReturn(component);
     expect(service.getName()).andReturn("service1").anyTimes();
     expect(component.getName()).andReturn("component1");
@@ -1697,7 +1693,7 @@ public class AmbariManagementControllerImplTest {
     expect(clusters.getClustersForHost("host2")).andThrow(new 
HostNotFoundException("host2"));
 
     expect(cluster.getService("service1")).andReturn(service);
-    expect(cluster.getServiceByComponentName("component3")).andReturn(service);
+    
expect(cluster.getServiceByComponentName("component3")).andReturn(service).anyTimes();
     expect(service.getServiceComponent("component3")).andReturn(component3);
     expect(component3.getName()).andReturn("component3");
     
expect(component3.getServiceComponentHosts()).andReturn(Collections.singletonMap("foo",
 componentHost2));
@@ -1738,13 +1734,13 @@ public class AmbariManagementControllerImplTest {
 
     // requests
     ServiceComponentHostRequest request1 = new ServiceComponentHostRequest(
-        "cluster1", null, "component1", "host1", null, null);
+        "cluster1", "CORE", "service1", "component1", "host1", null);
 
     ServiceComponentHostRequest request2 = new ServiceComponentHostRequest(
-        "cluster1", null, "component2", "host1", null, null);
+        "cluster1", "CORE", "service1", "component2", "host1", null);
 
     ServiceComponentHostRequest request3 = new ServiceComponentHostRequest(
-        "cluster1", null, "component3", "host1", null, null);
+        "cluster1", "CORE", "service1", "component3", "host1", null);
 
 
     Set<ServiceComponentHostRequest> setRequests = new HashSet<>();
@@ -1793,13 +1789,13 @@ public class AmbariManagementControllerImplTest {
 
     // requests
     ServiceComponentHostRequest request1 = new ServiceComponentHostRequest(
-        "cluster1", null, "component1", "host1", null, null);
+        "cluster1", "CORE", "service1", "component1", "host1", null);
 
     ServiceComponentHostRequest request2 = new ServiceComponentHostRequest(
-        "cluster1", null, "component2", "host2", null, null);
+        "cluster1", "CORE", "service1", "component2", "host2", null);
 
     ServiceComponentHostRequest request3 = new ServiceComponentHostRequest(
-        "cluster1", null, "component3", "host1", null, null);
+        "cluster1", "CORE", "service1", "component3", "host1", null);
 
 
     Set<ServiceComponentHostRequest> setRequests = new HashSet<>();
@@ -1858,7 +1854,7 @@ public class AmbariManagementControllerImplTest {
 
     // requests
     ServiceComponentHostRequest request1 = new ServiceComponentHostRequest(
-        "cluster1", null, "component1", null, null, null);
+        "cluster1", "CORE", "service1", "component1", null, null);
 
 
     Set<ServiceComponentHostRequest> setRequests = new HashSet<>();
@@ -1884,10 +1880,10 @@ public class AmbariManagementControllerImplTest {
         }}).anyTimes();
 
     expect(cluster.getService("service1")).andReturn(service);
+    expect(service.getName()).andReturn("service1").anyTimes();
     expect(component.getName()).andReturn("component1").anyTimes();
-    expect(cluster.getServiceByComponentName("component1")).andReturn(service);
+    
expect(cluster.getServiceByComponentName("component1")).andReturn(service).anyTimes();
     expect(service.getServiceComponent("component1")).andReturn(component);
-    expect(service.getName()).andReturn("service1");
     expect(component.getServiceComponentHosts()).andReturn(mapHostComponents);
     expect(componentHost1.convertToResponse(null)).andReturn(response1);
     expect(componentHost2.convertToResponse(null)).andReturn(response2);
@@ -1938,7 +1934,7 @@ public class AmbariManagementControllerImplTest {
 
     // requests
     ServiceComponentHostRequest request1 = new ServiceComponentHostRequest(
-        "cluster1", null, null, null, null, null);
+        "cluster1", "CORE", null, null, null, null);
 
 
     Set<ServiceComponentHostRequest> setRequests = new HashSet<>();

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
index 5c6f374..e584322 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
@@ -136,6 +136,7 @@ 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.ServiceGroup;
 import org.apache.ambari.server.state.ServiceInfo;
 import org.apache.ambari.server.state.ServiceOsSpecific;
 import org.apache.ambari.server.state.StackId;
@@ -3925,8 +3926,9 @@ public class AmbariManagementControllerTest {
 
     RepositoryVersionEntity repositoryVersion = repositoryVersion206;
 
-    Service hdfs = cluster.addService(null, "HDFS", "", repositoryVersion);
-    Service mapred = cluster.addService(null, "YARN", "", repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service hdfs = cluster.addService(serviceGroup, "HDFS", "HDFS", 
repositoryVersion);
+    Service mapred = cluster.addService(serviceGroup, "YARN", "YARN", 
repositoryVersion);
 
     hdfs.addServiceComponent(Role.HDFS_CLIENT.name());
     hdfs.addServiceComponent(Role.NAMENODE.name());
@@ -4088,7 +4090,8 @@ public class AmbariManagementControllerTest {
 
     RepositoryVersionEntity repositoryVersion = repositoryVersion207;
 
-    Service hdfs = cluster.addService(null, "HDFS", "", repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service hdfs = cluster.addService(serviceGroup, "HDFS", "HDFS", 
repositoryVersion);
 
     hdfs.addServiceComponent(Role.HDFS_CLIENT.name());
     hdfs.addServiceComponent(Role.NAMENODE.name());
@@ -4195,8 +4198,9 @@ public class AmbariManagementControllerTest {
     cluster.addDesiredConfig("_test", Collections.singleton(config1));
     cluster.addDesiredConfig("_test", Collections.singleton(config2));
 
-    Service hdfs = cluster.addService(null, "HDFS", "", repositoryVersion);
-    Service hive = cluster.addService(null, "HIVE", "", repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service hdfs = cluster.addService(serviceGroup, "HDFS", "HDFS", 
repositoryVersion);
+    Service hive = cluster.addService(serviceGroup, "HIVE", "HIVE", 
repositoryVersion);
 
     hdfs.addServiceComponent(Role.HDFS_CLIENT.name());
     hdfs.addServiceComponent(Role.NAMENODE.name());
@@ -4467,8 +4471,9 @@ public class AmbariManagementControllerTest {
     cluster.addDesiredConfig("_test", Collections.singleton(config1));
     cluster.addDesiredConfig("_test", Collections.singleton(config2));
 
-    Service hdfs = cluster.addService(null, "HDFS", "", repositoryVersion);
-    Service mapReduce = cluster.addService(null, "MAPREDUCE", "", 
repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service hdfs = cluster.addService(serviceGroup, "HDFS", "HDFS", 
repositoryVersion);
+    Service mapReduce = cluster.addService(serviceGroup, "MAPREDUCE", 
"MAPREDUCE", repositoryVersion);
 
     hdfs.addServiceComponent(Role.HDFS_CLIENT.name());
     mapReduce.addServiceComponent(Role.MAPREDUCE_CLIENT.name());
@@ -6131,8 +6136,9 @@ public class AmbariManagementControllerTest {
         put("key1", "value1");
       }}, new HashMap<>());
 
-    Service hdfs = cluster.addService(null, "HDFS", "", repositoryVersion);
-    Service mapred = cluster.addService(null, "YARN", "",  repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service hdfs = cluster.addService(serviceGroup, "HDFS", "HDFS", 
repositoryVersion);
+    Service mapred = cluster.addService(serviceGroup, "YARN", "YARN",  
repositoryVersion);
 
     hdfs.addServiceComponent(Role.HDFS_CLIENT.name());
     hdfs.addServiceComponent(Role.NAMENODE.name());
@@ -6234,8 +6240,9 @@ public class AmbariManagementControllerTest {
         put("key1", "value1");
       }}, new HashMap<>());
 
-    Service hdfs = cluster.addService(null, "HDFS", "", repositoryVersion);
-    Service mapred = cluster.addService(null, "YARN", "", repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service hdfs = cluster.addService(serviceGroup, "HDFS", "HDFS", 
repositoryVersion);
+    Service mapred = cluster.addService(serviceGroup, "YARN", "YARN", 
repositoryVersion);
 
     hdfs.addServiceComponent(Role.HDFS_CLIENT.name());
     hdfs.addServiceComponent(Role.NAMENODE.name());
@@ -9163,7 +9170,8 @@ public class AmbariManagementControllerTest {
 
     RepositoryVersionEntity repositoryVersion = repositoryVersion120;
 
-    Service hdfs = c1.addService(null, "HDFS", "", repositoryVersion);
+    ServiceGroup serviceGroup = c1.addServiceGroup("CORE");
+    Service hdfs = c1.addService(serviceGroup, "HDFS", "HDFS", 
repositoryVersion);
     createServiceComponent(cluster1, "HDFS", "NAMENODE", State.INIT);
     createServiceComponent(cluster1, "HDFS", "DATANODE", State.INIT);
     createServiceComponent(cluster1, "HDFS", "HDFS_CLIENT", State.INIT);

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/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 aee1952..d94810c 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
@@ -64,6 +64,7 @@ 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.Service;
+import org.apache.ambari.server.state.ServiceGroup;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.services.MetricsRetrievalService;
 import org.apache.ambari.server.state.stack.Metric;
@@ -139,22 +140,23 @@ public class StackDefinedPropertyProviderTest {
 
     cluster.setDesiredStackVersion(stackId);
     RepositoryVersionEntity repositoryVersion = 
helper.getOrCreateRepositoryVersion(stackId, stackId.getStackVersion());
-    Service service = cluster.addService(null, "HDFS", "", repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service service = cluster.addService(serviceGroup, "HDFS", "HDFS", 
repositoryVersion);
     service.addServiceComponent("NAMENODE");
     service.addServiceComponent("DATANODE");
     service.addServiceComponent("JOURNALNODE");
 
-    service = cluster.addService(null, "YARN", "", repositoryVersion);
+    service = cluster.addService(serviceGroup, "YARN", "YARN", 
repositoryVersion);
     service.addServiceComponent("RESOURCEMANAGER");
 
-    service = cluster.addService(null, "HBASE", "", repositoryVersion);
+    service = cluster.addService(serviceGroup, "HBASE", "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(null, "STORM", "", repositoryVersion);
+    service = cluster.addService(serviceGroup, "STORM", "STORM", 
repositoryVersion);
     service.addServiceComponent("STORM_REST_API");
 
     clusters.addHost("h1");

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/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 9e6b98b..dcd7ccd 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
@@ -99,6 +99,7 @@ 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.ServiceComponentHost;
+import org.apache.ambari.server.state.ServiceGroup;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.UpgradeContext;
 import org.apache.ambari.server.state.UpgradeHelper;
@@ -262,7 +263,8 @@ public class UpgradeResourceProviderTest extends 
EasyMockSupport {
     clusters.mapHostToCluster("h1", "c1");
 
     // add a single ZK server and client on 2.1.1.0
-    Service service = cluster.addService(null, "ZOOKEEPER", "", 
repoVersionEntity2110);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service service = cluster.addService(serviceGroup, "ZOOKEEPER", 
"ZOOKEEPER", repoVersionEntity2110);
     ServiceComponent component = 
service.addServiceComponent("ZOOKEEPER_SERVER");
     ServiceComponentHost sch = component.addServiceComponentHost("h1");
     sch.setVersion("2.1.1.0");
@@ -782,7 +784,8 @@ public class UpgradeResourceProviderTest extends 
EasyMockSupport {
     Cluster cluster = clusters.getCluster("c1");
 
     // add additional service for the test
-    Service service = cluster.addService(null, "HIVE", "", 
repoVersionEntity2110);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service service = cluster.addService(serviceGroup, "HIVE", "HIVE", 
repoVersionEntity2110);
 
     ServiceComponent component = service.addServiceComponent("HIVE_SERVER");
     ServiceComponentHost sch = component.addServiceComponentHost("h1");
@@ -1465,7 +1468,8 @@ public class UpgradeResourceProviderTest extends 
EasyMockSupport {
   @Test
   public void testCreateUpgradeDowngradeCycleAdvertisingVersion() throws 
Exception {
     Cluster cluster = clusters.getCluster("c1");
-    Service service = cluster.addService(null, "STORM", "", 
repoVersionEntity2110);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service service = cluster.addService(serviceGroup, "STORM", "STORM", 
repoVersionEntity2110);
 
     ServiceComponent component = service.addServiceComponent("DRPC_SERVER");
     ServiceComponentHost sch = component.addServiceComponentHost("h1");
@@ -1648,7 +1652,8 @@ public class UpgradeResourceProviderTest extends 
EasyMockSupport {
     Cluster cluster = clusters.getCluster("c1");
 
     // add a single ZK server and client on 2.1.1.0
-    Service service = cluster.addService(null, "HBASE", "", 
repoVersionEntity2110);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service service = cluster.addService(serviceGroup, "HBASE", "HBASE", 
repoVersionEntity2110);
     ServiceComponent component = service.addServiceComponent("HBASE_MASTER");
     ServiceComponentHost sch = component.addServiceComponentHost("h1");
     sch.setVersion("2.1.1.0");
@@ -1735,7 +1740,8 @@ public class UpgradeResourceProviderTest extends 
EasyMockSupport {
     Cluster cluster = clusters.getCluster("c1");
 
     // add a single ZK server and client on 2.1.1.0
-    Service service = cluster.addService(null, "HBASE", "", 
repoVersionEntity2110);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service service = cluster.addService(serviceGroup, "HBASE", "HBASE", 
repoVersionEntity2110);
     ServiceComponent component = service.addServiceComponent("HBASE_MASTER");
     ServiceComponentHost sch = component.addServiceComponentHost("h1");
     sch.setVersion("2.1.1.0");

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/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 387fa45..a0272cf 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
@@ -71,6 +71,7 @@ import org.apache.ambari.server.state.HostState;
 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.ServiceGroup;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.UpgradeHelper;
 import org.apache.ambari.server.state.stack.upgrade.Direction;
@@ -173,7 +174,8 @@ public class UpgradeSummaryResourceProviderTest {
     clusters.mapHostToCluster("h1", "c1");
 
     // add a single ZOOKEEPER server
-    Service service = cluster.addService(null, "ZOOKEEPER", "", 
repoVersionEntity);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service service = cluster.addService(serviceGroup, "ZOOKEEPER", 
"ZOOKEEPER", repoVersionEntity);
 
     ServiceComponent component = 
service.addServiceComponent("ZOOKEEPER_SERVER");
     ServiceComponentHost sch = component.addServiceComponentHost("h1");

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProviderTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProviderTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProviderTest.java
index 8e968cc..5bf586f 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProviderTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/VersionDefinitionResourceProviderTest.java
@@ -50,6 +50,7 @@ import 
org.apache.ambari.server.security.TestAuthenticationFactory;
 import org.apache.ambari.server.stack.StackManager;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.ServiceGroup;
 import org.apache.ambari.server.state.repository.VersionDefinitionXml;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.io.IOUtils;
@@ -695,7 +696,8 @@ public class VersionDefinitionResourceProviderTest {
       cluster = clusters.getCluster("c1");
     }
 
-    cluster.addService(null, serviceName, "", serviceRepo);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    cluster.addService(serviceGroup, serviceName, serviceName, serviceRepo);
   }
 
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/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 0b6c3f3..720a1f8 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
@@ -33,6 +33,7 @@ import org.apache.ambari.server.state.Clusters;
 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.ServiceGroup;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.state.State;
 import org.apache.ambari.server.topology.TopologyManager;
@@ -86,7 +87,8 @@ public abstract class GeneralServiceCalculatedStateTest {
     clusters.addCluster(clusterName, stack211);
     cluster = clusters.getCluster(clusterName);
 
-    service = cluster.addService(null, getServiceName(), "", 
repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    service = cluster.addService(serviceGroup, getServiceName(), 
getServiceName(), repositoryVersion);
 
     createComponentsAndHosts();
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
index a86d125..970b7cc 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/events/listeners/upgrade/HostVersionOutOfSyncListenerTest.java
@@ -53,6 +53,7 @@ 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.ServiceComponentHostFactory;
+import org.apache.ambari.server.state.ServiceGroup;
 import org.apache.ambari.server.state.StackId;
 import org.apache.ambari.server.utils.EventBusSynchronizer;
 import org.junit.After;
@@ -548,7 +549,8 @@ public class HostVersionOutOfSyncListenerTest {
       String serviceName, RepositoryVersionEntity repositoryVersionEntity) 
throws AmbariException {
     StackId stackIdObj = new StackId(stackId);
     cl.setDesiredStackVersion(stackIdObj);
-    cl.addService(null, serviceName, "", repositoryVersionEntity);
+    ServiceGroup serviceGroup = cl.addServiceGroup("CORE");
+    cl.addService(serviceGroup, serviceName, serviceName, 
repositoryVersionEntity);
 
     for (Map.Entry<String, List<Integer>> component : topology.entrySet()) {
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/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 a03d7cc..dafc5e8 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
@@ -328,6 +328,22 @@ public class OrmTestHelper {
     return stackEntity;
   }
 
+  //TODO this is hack which should be removed during merge with BP branch
+  @Transactional
+  public StackEntity createStackWithRepoVersion(StackId stackId, String 
repoVersion) throws AmbariException {
+    StackEntity stackEntity = stackDAO.find(stackId.getStackName(), 
stackId.getStackVersion());
+
+    if (null == stackEntity) {
+      stackEntity = new StackEntity();
+      stackEntity.setStackName(stackId.getStackName());
+      stackEntity.setStackVersion(stackId.getStackVersion());
+      stackEntity.setRepoVersion(repoVersion);
+      stackDAO.create(stackEntity);
+    }
+
+    return stackEntity;
+  }
+
   /**
    * Creates an empty cluster with an ID.
    *
@@ -659,7 +675,7 @@ public class OrmTestHelper {
       String version) {
     StackEntity stackEntity = null;
     try {
-      stackEntity = createStack(stackId);
+      stackEntity = createStackWithRepoVersion(stackId, version);
     } catch (Exception e) {
       LOG.error("Expected successful repository", e);
     }

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
index 158c47d..faba98f 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/state/ConfigHelperTest.java
@@ -55,6 +55,7 @@ import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
 import org.apache.ambari.server.orm.OrmTestHelper;
 import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
 import org.apache.ambari.server.orm.entities.RepositoryVersionEntity;
+import org.apache.ambari.server.resources.RootLevelSettingsManagerFactory;
 import org.apache.ambari.server.security.SecurityHelper;
 import org.apache.ambari.server.security.TestAuthenticationFactory;
 import org.apache.ambari.server.stack.StackManagerFactory;
@@ -158,9 +159,10 @@ public class ConfigHelperTest {
       cr2.setType("flume-conf");
       cr2.setVersionTag("version1");
 
-      cluster.addService(null, "", "FLUME", repositoryVersion);
-      cluster.addService(null, "", "OOZIE", repositoryVersion);
-      cluster.addService(null, "", "HDFS", repositoryVersion);
+      ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+      cluster.addService(serviceGroup, "FLUME", "FLUME", repositoryVersion);
+      cluster.addService(serviceGroup, "OOZIE", "OOZIE", repositoryVersion);
+      cluster.addService(serviceGroup, "HDFS", "HDFS", repositoryVersion);
 
       final ClusterRequest clusterRequest2 =
           new ClusterRequest(cluster.getClusterId(), clusterName,
@@ -984,8 +986,9 @@ public class ConfigHelperTest {
       expect(sch.getHostName()).andReturn("h1").anyTimes();
       expect(sch.getClusterId()).andReturn(cluster.getClusterId()).anyTimes();
       expect(sch.getServiceName()).andReturn("FLUME").anyTimes();
+      expect(sch.getServiceType()).andReturn("FLUME").anyTimes();
       
expect(sch.getServiceComponentName()).andReturn("FLUME_HANDLER").anyTimes();
-      expect(sch.getServiceComponent()).andReturn(sc).anyTimes();
+      expect(sch.getServiceComponent()).andReturn(sc).anyTimes(); //
 
       replay(sc, sch);
       // Cluster level config changes
@@ -1059,6 +1062,7 @@ public class ConfigHelperTest {
     expect(sch.getHostName()).andReturn("h1").anyTimes();
     expect(sch.getClusterId()).andReturn(cluster.getClusterId()).anyTimes();
     expect(sch.getServiceName()).andReturn("HDFS").anyTimes();
+    expect(sch.getServiceType()).andReturn("HDFS").anyTimes();
     expect(sch.getServiceComponentName()).andReturn("NAMENODE").anyTimes();
     expect(sch.getServiceComponent()).andReturn(sc).anyTimes();
 
@@ -1102,6 +1106,7 @@ public class ConfigHelperTest {
           
bind(HostRoleCommandFactory.class).toInstance(createNiceMock(HostRoleCommandFactory.class));
           
bind(HostRoleCommandDAO.class).toInstance(createNiceMock(HostRoleCommandDAO.class));
           
bind(MpackManagerFactory.class).toInstance(createNiceMock(MpackManagerFactory.class));
+          
bind(RootLevelSettingsManagerFactory.class).toInstance(createNiceMock(RootLevelSettingsManagerFactory.class));
         }
       });
 
@@ -1131,6 +1136,7 @@ public class ConfigHelperTest {
 
       expect(mockCluster.getService("SERVICE")).andReturn(mockService).once();
       
expect(mockService.getDesiredStackId()).andReturn(mockStackVersion).once();
+      expect(mockService.getServiceType()).andReturn("SERVICE").once();
       expect(mockStackVersion.getStackName()).andReturn("HDP").once();
       expect(mockStackVersion.getStackVersion()).andReturn("2.2").once();
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java 
b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
index 4e1c139..6c66c5a 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/state/ServiceTest.java
@@ -24,10 +24,12 @@ import static org.junit.Assert.fail;
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
 
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.H2DatabaseCleaner;
+import org.apache.ambari.server.api.services.ServiceGroupKey;
 import org.apache.ambari.server.api.services.ServiceKey;
 import org.apache.ambari.server.controller.ServiceResponse;
 import org.apache.ambari.server.orm.GuiceJpaInitializer;
@@ -52,6 +54,7 @@ public class ServiceTest {
   private String clusterName;
   private Injector injector;
   private ServiceFactory serviceFactory;
+  private ServiceGroupFactory serviceGroupFactory;
   private ServiceComponentFactory serviceComponentFactory;
   private ServiceComponentHostFactory serviceComponentHostFactory;
   private OrmTestHelper ormTestHelper;
@@ -66,6 +69,7 @@ public class ServiceTest {
     injector = Guice.createInjector(new InMemoryDefaultTestModule());
     injector.getInstance(GuiceJpaInitializer.class);
     clusters = injector.getInstance(Clusters.class);
+    serviceGroupFactory = injector.getInstance(ServiceGroupFactory.class);
     serviceFactory = injector.getInstance(ServiceFactory.class);
     serviceComponentFactory = 
injector.getInstance(ServiceComponentFactory.class);
     serviceComponentHostFactory = 
injector.getInstance(ServiceComponentHostFactory.class);
@@ -86,7 +90,8 @@ public class ServiceTest {
 
   @Test
   public void testCanBeRemoved() throws Exception{
-    Service service = cluster.addService(null, "HDFS", "", repositoryVersion);
+    ServiceGroup serviceGroup = cluster.addServiceGroup("CORE");
+    Service service = cluster.addService(serviceGroup, "HDFS", "HDFS", 
repositoryVersion);
 
     for (State state : State.values()) {
       service.setDesiredState(state);
@@ -128,7 +133,8 @@ public class ServiceTest {
   @Test
   public void testGetAndSetServiceInfo() throws AmbariException {
     String serviceName = "HDFS";
-    Service s = serviceFactory.createNew(cluster, null, new 
ArrayList<ServiceKey>(), serviceName, "", repositoryVersion);
+    ServiceGroup serviceGroup = serviceGroupFactory.createNew(cluster, 
"service_group", new HashSet<ServiceGroupKey>());
+    Service s = serviceFactory.createNew(cluster, serviceGroup, new 
ArrayList<ServiceKey>(), serviceName, serviceName, repositoryVersion);
     cluster.addService(s);
 
     Service service = cluster.getService(serviceName);
@@ -154,7 +160,8 @@ public class ServiceTest {
   @Test
   public void testAddGetDeleteServiceComponents() throws AmbariException {
     String serviceName = "HDFS";
-    Service s = serviceFactory.createNew(cluster, null, new 
ArrayList<ServiceKey>(), serviceName, "", repositoryVersion);
+    ServiceGroup serviceGroup = serviceGroupFactory.createNew(cluster, 
"service_group", new HashSet<ServiceGroupKey>());
+    Service s = serviceFactory.createNew(cluster, serviceGroup, new 
ArrayList<ServiceKey>(), serviceName, serviceName, repositoryVersion);
     cluster.addService(s);
 
     Service service = cluster.getService(serviceName);
@@ -236,7 +243,8 @@ public class ServiceTest {
   @Test
   public void testConvertToResponse() throws AmbariException {
     String serviceName = "HDFS";
-    Service s = serviceFactory.createNew(cluster, null, new 
ArrayList<ServiceKey>(), serviceName, "", repositoryVersion);
+    ServiceGroup serviceGroup = serviceGroupFactory.createNew(cluster, 
"service_group", new HashSet<ServiceGroupKey>());
+    Service s = serviceFactory.createNew(cluster, serviceGroup, new 
ArrayList<ServiceKey>(), serviceName, serviceName, repositoryVersion);
     cluster.addService(s);
     Service service = cluster.getService(serviceName);
     Assert.assertNotNull(service);
@@ -272,14 +280,15 @@ public class ServiceTest {
   @Test
   public void testServiceMaintenance() throws Exception {
     String serviceName = "HDFS";
-    Service s = serviceFactory.createNew(cluster, null, new 
ArrayList<ServiceKey>(), serviceName, "", repositoryVersion);
+    ServiceGroup serviceGroup = serviceGroupFactory.createNew(cluster, 
"service_group", new HashSet<ServiceGroupKey>());
+    Service s = serviceFactory.createNew(cluster, serviceGroup, new 
ArrayList<ServiceKey>(), serviceName, serviceName, repositoryVersion);
     cluster.addService(s);
 
     Service service = cluster.getService(serviceName);
     Assert.assertNotNull(service);
 
     ClusterServiceDAO dao = injector.getInstance(ClusterServiceDAO.class);
-    ClusterServiceEntity entity = 
null;//dao.findByClusterAndServiceNames(clusterName, serviceName);
+    ClusterServiceEntity entity = dao.findByName(clusterName, "service_group", 
serviceName);
     Assert.assertNotNull(entity);
     Assert.assertEquals(MaintenanceState.OFF, 
entity.getServiceDesiredStateEntity().getMaintenanceState());
     Assert.assertEquals(MaintenanceState.OFF, service.getMaintenanceState());
@@ -287,7 +296,7 @@ public class ServiceTest {
     service.setMaintenanceState(MaintenanceState.ON);
     Assert.assertEquals(MaintenanceState.ON, service.getMaintenanceState());
 
-    entity = null;//dao.findByClusterAndServiceNames(clusterName, serviceName);
+    entity = dao.findByName(clusterName, "service_group", serviceName);
     Assert.assertNotNull(entity);
     Assert.assertEquals(MaintenanceState.ON, 
entity.getServiceDesiredStateEntity().getMaintenanceState());
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/bcbacf0c/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
index 5e5395a..3bb7c1b 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/state/UpgradeHelperTest.java
@@ -46,6 +46,7 @@ import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.H2DatabaseCleaner;
 import org.apache.ambari.server.actionmanager.HostRoleCommandFactory;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.api.services.ServiceGroupKey;
 import org.apache.ambari.server.api.services.ServiceKey;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.ClusterRequest;
@@ -1227,6 +1228,7 @@ public class UpgradeHelperTest extends EasyMockSupport {
   private Cluster makeCluster(boolean clean, Set<String> additionalServices) 
throws AmbariException, AuthorizationException {
     Clusters clusters = injector.getInstance(Clusters.class);
     ServiceFactory serviceFactory = injector.getInstance(ServiceFactory.class);
+    ServiceGroupFactory serviceGroupFactory = 
injector.getInstance(ServiceGroupFactory.class);
 
     String clusterName = "c1";
 
@@ -1258,11 +1260,12 @@ public class UpgradeHelperTest extends EasyMockSupport {
     }
 
     // !!! add services
-    c.addService(serviceFactory.createNew(c, null, new 
ArrayList<ServiceKey>(), "HDFS", "", repositoryVersion));
-    c.addService(serviceFactory.createNew(c, null, new 
ArrayList<ServiceKey>(), "YARN", "", repositoryVersion));
-    c.addService(serviceFactory.createNew(c, null, new 
ArrayList<ServiceKey>(), "ZOOKEEPER", "", repositoryVersion));
-    c.addService(serviceFactory.createNew(c, null, new 
ArrayList<ServiceKey>(), "HIVE", "", repositoryVersion));
-    c.addService(serviceFactory.createNew(c, null, new 
ArrayList<ServiceKey>(), "OOZIE", "", repositoryVersion));
+    ServiceGroup serviceGroup = serviceGroupFactory.createNew(c, 
"service_group", new HashSet<ServiceGroupKey>());
+    c.addService(serviceFactory.createNew(c, serviceGroup, new 
ArrayList<ServiceKey>(), "HDFS", "HDFS", repositoryVersion));
+    c.addService(serviceFactory.createNew(c, serviceGroup, new 
ArrayList<ServiceKey>(), "YARN", "YARN", repositoryVersion));
+    c.addService(serviceFactory.createNew(c, serviceGroup, new 
ArrayList<ServiceKey>(), "ZOOKEEPER", "ZOOKEEPER", repositoryVersion));
+    c.addService(serviceFactory.createNew(c, serviceGroup, new 
ArrayList<ServiceKey>(), "HIVE", "HIVE", repositoryVersion));
+    c.addService(serviceFactory.createNew(c, serviceGroup, new 
ArrayList<ServiceKey>(), "OOZIE", "OOZIE", repositoryVersion));
 
     Service s = c.getService("HDFS");
     ServiceComponent sc = s.addServiceComponent("NAMENODE");
@@ -1366,7 +1369,7 @@ public class UpgradeHelperTest extends EasyMockSupport {
     expect(m_masterHostResolver.getCluster()).andReturn(c).anyTimes();
 
     for(String service : additionalServices) {
-      c.addService(null, service, "", repositoryVersion);
+      c.addService(serviceGroup, service, service, repositoryVersion);
       if (service.equals("HBASE")) {
         type = new HostsType();
         type.hosts.addAll(Arrays.asList("h1", "h2"));
@@ -1453,6 +1456,7 @@ public class UpgradeHelperTest extends EasyMockSupport {
 
     Clusters clusters = injector.getInstance(Clusters.class);
     ServiceFactory serviceFactory = injector.getInstance(ServiceFactory.class);
+    ServiceGroupFactory serviceGroupFactory = 
injector.getInstance(ServiceGroupFactory.class);
 
     String clusterName = "c1";
 
@@ -1478,7 +1482,8 @@ public class UpgradeHelperTest extends EasyMockSupport {
     }
 
     // !!! add services
-    c.addService(serviceFactory.createNew(c, null, new 
ArrayList<ServiceKey>(), "HDFS", "", repositoryVersion));
+    ServiceGroup serviceGroup = serviceGroupFactory.createNew(c, 
"service_group", new HashSet<ServiceGroupKey>());
+    c.addService(serviceFactory.createNew(c, serviceGroup, new 
ArrayList<ServiceKey>(), "HDFS", "HDFS", repositoryVersion));
 
     Service s = c.getService("HDFS");
     ServiceComponent sc = s.addServiceComponent("NAMENODE");
@@ -1528,6 +1533,7 @@ public class UpgradeHelperTest extends EasyMockSupport {
   public void testResolverWithFailedUpgrade() throws Exception {
     Clusters clusters = injector.getInstance(Clusters.class);
     ServiceFactory serviceFactory = injector.getInstance(ServiceFactory.class);
+    ServiceGroupFactory serviceGroupFactory = 
injector.getInstance(ServiceGroupFactory.class);
 
     String clusterName = "c1";
 
@@ -1550,7 +1556,8 @@ public class UpgradeHelperTest extends EasyMockSupport {
     }
 
     // !!! add services
-    c.addService(serviceFactory.createNew(c, null, new 
ArrayList<ServiceKey>(), "ZOOKEEPER", "", repositoryVersion2110));
+    ServiceGroup serviceGroup = serviceGroupFactory.createNew(c, 
"service_group", new HashSet<ServiceGroupKey>());
+    c.addService(serviceFactory.createNew(c, serviceGroup, new 
ArrayList<ServiceKey>(), "ZOOKEEPER", "ZOOKEEPER", repositoryVersion2110));
 
     Service s = c.getService("ZOOKEEPER");
     ServiceComponent sc = s.addServiceComponent("ZOOKEEPER_SERVER");
@@ -1591,6 +1598,7 @@ public class UpgradeHelperTest extends EasyMockSupport {
   public void testResolverCaseInsensitive() throws Exception {
     Clusters clusters = injector.getInstance(Clusters.class);
     ServiceFactory serviceFactory = injector.getInstance(ServiceFactory.class);
+    ServiceGroupFactory serviceGroupFactory = 
injector.getInstance(ServiceGroupFactory.class);
 
     String clusterName = "c1";
     String version = "2.1.1.0-1234";
@@ -1617,7 +1625,8 @@ public class UpgradeHelperTest extends EasyMockSupport {
     }
 
     // Add services
-    c.addService(serviceFactory.createNew(c, null, new 
ArrayList<ServiceKey>(), "HDFS", "", repositoryVersion211));
+    ServiceGroup serviceGroup = serviceGroupFactory.createNew(c, 
"service_group", new HashSet<ServiceGroupKey>());
+    c.addService(serviceFactory.createNew(c, serviceGroup, new 
ArrayList<ServiceKey>(), "HDFS", "HDFS", repositoryVersion211));
 
     Service s = c.getService("HDFS");
     ServiceComponent sc = s.addServiceComponent("NAMENODE");
@@ -1661,6 +1670,7 @@ public class UpgradeHelperTest extends EasyMockSupport {
   public void testResolverBadJmx() throws Exception {
     Clusters clusters = injector.getInstance(Clusters.class);
     ServiceFactory serviceFactory = injector.getInstance(ServiceFactory.class);
+    ServiceGroupFactory serviceGroupFactory = 
injector.getInstance(ServiceGroupFactory.class);
 
     String clusterName = "c1";
     String version = "2.1.1.0-1234";
@@ -1686,7 +1696,8 @@ public class UpgradeHelperTest extends EasyMockSupport {
     }
 
     // Add services
-    c.addService(serviceFactory.createNew(c, null, new 
ArrayList<ServiceKey>(), "HDFS", "", repositoryVersion211));
+    ServiceGroup serviceGroup = serviceGroupFactory.createNew(c, 
"service_group", new HashSet<ServiceGroupKey>());
+    c.addService(serviceFactory.createNew(c, serviceGroup, new 
ArrayList<ServiceKey>(), "HDFS", "HDFS", repositoryVersion211));
 
     Service s = c.getService("HDFS");
     ServiceComponent sc = s.addServiceComponent("NAMENODE");
@@ -1777,6 +1788,7 @@ public class UpgradeHelperTest extends EasyMockSupport {
   public void testOrchestrationNoServerSideOnDowngrade() throws Exception {
     Clusters clusters = injector.getInstance(Clusters.class);
     ServiceFactory serviceFactory = injector.getInstance(ServiceFactory.class);
+    ServiceGroupFactory serviceGroupFactory = 
injector.getInstance(ServiceGroupFactory.class);
 
     String clusterName = "c1";
 
@@ -1806,7 +1818,8 @@ public class UpgradeHelperTest extends EasyMockSupport {
     }
 
     // !!! add storm
-    c.addService(serviceFactory.createNew(c, null, new 
ArrayList<ServiceKey>(), "STORM", "", repoVersion211));
+    ServiceGroup serviceGroup = serviceGroupFactory.createNew(c, 
"service_group", new HashSet<ServiceGroupKey>());
+    c.addService(serviceFactory.createNew(c, serviceGroup, new 
ArrayList<ServiceKey>(), "STORM", "STORM", repoVersion211));
 
     Service s = c.getService("STORM");
     ServiceComponent sc = s.addServiceComponent("NIMBUS");
@@ -1880,6 +1893,7 @@ public class UpgradeHelperTest extends EasyMockSupport {
     // !!! make a two node cluster with just ZK
     Clusters clusters = injector.getInstance(Clusters.class);
     ServiceFactory serviceFactory = injector.getInstance(ServiceFactory.class);
+    ServiceGroupFactory serviceGroupFactory = 
injector.getInstance(ServiceGroupFactory.class);
 
     String clusterName = "c1";
 
@@ -1911,7 +1925,8 @@ public class UpgradeHelperTest extends EasyMockSupport {
     }
 
     // !!! add services
-    c.addService(serviceFactory.createNew(c, null, new 
ArrayList<ServiceKey>(), "ZOOKEEPER", "", repositoryVersion));
+    ServiceGroup serviceGroup = serviceGroupFactory.createNew(c, 
"service_group", new HashSet<ServiceGroupKey>());
+    c.addService(serviceFactory.createNew(c, serviceGroup, new 
ArrayList<ServiceKey>(), "ZOOKEEPER", "ZOOKEEPER", repositoryVersion));
 
     Service s = c.getService("ZOOKEEPER");
     ServiceComponent sc = s.addServiceComponent("ZOOKEEPER_SERVER");
@@ -2066,6 +2081,7 @@ public class UpgradeHelperTest extends EasyMockSupport {
   public void testHostGroupingOrchestration() throws Exception {
     Clusters clusters = injector.getInstance(Clusters.class);
     ServiceFactory serviceFactory = injector.getInstance(ServiceFactory.class);
+    ServiceGroupFactory serviceGroupFactory = 
injector.getInstance(ServiceGroupFactory.class);
 
     String clusterName = "c1";
 
@@ -2096,8 +2112,9 @@ public class UpgradeHelperTest extends EasyMockSupport {
 
     // add ZK Server to both hosts, and then Nimbus to only 1 - this will test
     // how the HOU breaks out dependencies into stages
-    c.addService(serviceFactory.createNew(c, null, new 
ArrayList<ServiceKey>(), "ZOOKEEPER", "", repoVersion211));
-    c.addService(serviceFactory.createNew(c, null, new 
ArrayList<ServiceKey>(), "HBASE", "", repoVersion211));
+    ServiceGroup serviceGroup = serviceGroupFactory.createNew(c, 
"service_group", new HashSet<ServiceGroupKey>());
+    c.addService(serviceFactory.createNew(c, serviceGroup, new 
ArrayList<ServiceKey>(), "ZOOKEEPER", "ZOOKEEPER", repoVersion211));
+    c.addService(serviceFactory.createNew(c, serviceGroup, new 
ArrayList<ServiceKey>(), "HBASE", "HBASE", repoVersion211));
     Service zookeeper = c.getService("ZOOKEEPER");
     Service hbase = c.getService("HBASE");
     ServiceComponent zookeeperServer = 
zookeeper.addServiceComponent("ZOOKEEPER_SERVER");

Reply via email to