You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by js...@apache.org on 2014/01/14 20:27:25 UTC

git commit: AMBARI-4277. Update the /stacks api endpoint to use the api framework for consistency.

Updated Branches:
  refs/heads/trunk 88ddc9222 -> 589e92d5c


AMBARI-4277.  Update the /stacks api endpoint to use the api framework for consistency.


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

Branch: refs/heads/trunk
Commit: 589e92d5c7023d6afecb84943eae14e18f03959f
Parents: 88ddc92
Author: John Speidel <js...@hortonworks.com>
Authored: Mon Jan 13 11:20:55 2014 -0500
Committer: John Speidel <js...@hortonworks.com>
Committed: Tue Jan 14 14:26:37 2014 -0500

----------------------------------------------------------------------
 .../server/api/services/AmbariMetaService.java  | 115 --------
 .../server/api/services/Stacks2Service.java     | 295 +++++++++++++++++++
 .../server/api/services/StacksService.java      | 127 ++++----
 .../ambari/server/controller/AmbariServer.java  |   2 -
 .../api/services/AmbariMetaServiceTest.java     |  93 ------
 .../server/api/services/Stacks2ServiceTest.java | 216 ++++++++++++++
 .../server/api/services/StacksServiceTest.java  |  82 +++++-
 7 files changed, 653 insertions(+), 277 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/589e92d5/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaService.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaService.java
deleted file mode 100644
index 7a2d2e5..0000000
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/AmbariMetaService.java
+++ /dev/null
@@ -1,115 +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.api.services;
-
-import java.io.IOException;
-import java.util.List;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Response;
-import javax.xml.bind.JAXBException;
-
-import org.apache.ambari.server.state.ServiceInfo;
-import org.apache.ambari.server.state.StackInfo;
-import org.codehaus.jackson.JsonGenerationException;
-import org.codehaus.jackson.map.JsonMappingException;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.map.SerializationConfig;
-import org.codehaus.jackson.map.ser.FilterProvider;
-import org.codehaus.jackson.map.ser.impl.SimpleBeanPropertyFilter;
-import org.codehaus.jackson.map.ser.impl.SimpleFilterProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.inject.Inject;
-
-@Path("/stacks/")
-public class AmbariMetaService {
-  private static AmbariMetaInfo ambariMetainfo;
-  private static Logger LOG = LoggerFactory.getLogger(AmbariMetaService.class);
-
-  @Inject
-  public static void init(AmbariMetaInfo instance) {
-    ambariMetainfo = instance;
-  }
-
-  /**
-   * Filter properties from the service info and others
-   * @param object
-   * @return
-   * @throws IOException
-   * @throws JsonMappingException
-   * @throws JsonGenerationException
-   */
-  public String filterProperties(Object object, boolean ignoreConfigs) throws
-  JsonGenerationException, JsonMappingException, IOException {
-    ObjectMapper mapper = new ObjectMapper();
-    mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
-    mapper.configure(SerializationConfig.Feature.USE_ANNOTATIONS, true);
-    if (ignoreConfigs) {
-    FilterProvider filters = new SimpleFilterProvider().addFilter(
-          "propertiesfilter",
-          SimpleBeanPropertyFilter.serializeAllExcept("properties"));
-      mapper.setFilters(filters);
-    } else {
-      FilterProvider filters = new SimpleFilterProvider().addFilter(
-          "propertiesfilter", SimpleBeanPropertyFilter.serializeAllExcept());
-      mapper.setFilters(filters);
-    }
-    String json = mapper.writeValueAsString(object);
-    return json;
-  }
-
-  @GET
-  @Produces("text/plain")
-  public Response getStacks() throws JsonGenerationException,
-  JsonMappingException, JAXBException, IOException {
-    List<StackInfo> stackInfos = ambariMetainfo.getSupportedStacks();
-    String output = filterProperties(stackInfos, true);
-    return Response.status(Response.Status.OK).entity(output).build();
-  }
-
-  @GET
-  @Path("{stackName}/version/{versionNumber}")
-  @Produces("text/plain")
-  public Response getStack(@PathParam("stackName") String stackName,
-      @PathParam("versionNumber") String versionNumber) throws
-      JsonGenerationException, JsonMappingException, JAXBException, IOException  {
-    StackInfo stackInfo = ambariMetainfo.getStackInfo(stackName, versionNumber);
-    String output = filterProperties(stackInfo, true);
-    return Response.status(Response.Status.OK).entity(output).build();
-  }
-
-  @GET
-  @Path("{stackName}/version/{versionNumber}/services/{serviceName}")
-  @Produces("text/plain")
-  public Response getServiceInfo(@PathParam("stackName") String stackName,
-      @PathParam("versionNumber") String versionNumber,
-      @PathParam("serviceName") String serviceName) throws
-      JsonGenerationException, JsonMappingException, JAXBException, IOException  {
-    ServiceInfo serviceInfo = ambariMetainfo.getServiceInfo(stackName,
-        versionNumber, serviceName);
-    String output = filterProperties(serviceInfo, false);
-    return Response.status(Response.Status.OK).entity(output).build();
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/589e92d5/ambari-server/src/main/java/org/apache/ambari/server/api/services/Stacks2Service.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/Stacks2Service.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/Stacks2Service.java
new file mode 100644
index 0000000..7e1204a
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/Stacks2Service.java
@@ -0,0 +1,295 @@
+/**
+ * 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.api.services;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+
+import org.apache.ambari.server.api.resources.ResourceInstance;
+import org.apache.ambari.server.controller.spi.Resource;
+
+/**
+ * Service for stacks management.
+ */
+@Path("/stacks2/")
+public class Stacks2Service extends BaseService {
+
+  @GET
+  @Produces("text/plain")
+  public Response getStacks(@Context HttpHeaders headers, @Context UriInfo ui) {
+
+    return handleRequest(headers, null, ui, Request.Type.GET,
+      createStackResource(null));
+  }
+
+  @GET
+  @Path("{stackName}")
+  @Produces("text/plain")
+  public Response getStack(@Context HttpHeaders headers, @Context UriInfo ui,
+      @PathParam("stackName") String stackName) {
+
+    return handleRequest(headers, null, ui, Request.Type.GET,
+        createStackResource(stackName));
+  }
+
+  @GET
+  @Path("{stackName}/versions")
+  @Produces("text/plain")
+  public Response getStackVersions(@Context HttpHeaders headers,
+      @Context UriInfo ui, @PathParam("stackName") String stackName) {
+
+    return handleRequest(headers, null, ui, Request.Type.GET,
+        createStackVersionResource(stackName, null));
+  }
+
+  @GET
+  @Path("{stackName}/versions/{stackVersion}")
+  @Produces("text/plain")
+  public Response getStackVersion(@Context HttpHeaders headers,
+      @Context UriInfo ui, @PathParam("stackName") String stackName,
+      @PathParam("stackVersion") String stackVersion) {
+
+    return handleRequest(headers, null, ui, Request.Type.GET,
+        createStackVersionResource(stackName, stackVersion));
+  }
+
+  
+  @GET
+  @Path("{stackName}/versions/{stackVersion}/operatingSystems/{osType}/repositories")
+  @Produces("text/plain")
+  public Response getRepositories(@Context HttpHeaders headers,
+      @Context UriInfo ui, @PathParam("stackName") String stackName,
+      @PathParam("stackVersion") String stackVersion,
+      @PathParam("osType") String osType) {
+
+    return handleRequest(headers, null, ui, Request.Type.GET,
+        createRepositoryResource(stackName, stackVersion, osType, null));
+  }
+
+  @GET
+  @Path("{stackName}/versions/{stackVersion}/operatingSystems/{osType}/repositories/{repoId}")
+  @Produces("text/plain")
+  public Response getRepository(@Context HttpHeaders headers,
+      @Context UriInfo ui, @PathParam("stackName") String stackName,
+      @PathParam("stackVersion") String stackVersion,
+      @PathParam("osType") String osType,
+      @PathParam("repoId") String repoId) {
+
+    return handleRequest(headers, null, ui, Request.Type.GET,
+        createRepositoryResource(stackName, stackVersion, osType, repoId));
+  }
+  
+  @PUT
+  @Path("{stackName}/versions/{stackVersion}/operatingSystems/{osType}/repositories/{repoId}")
+  @Produces("text/plain")
+  public Response updateRepository(String body, @Context HttpHeaders headers,
+      @Context UriInfo ui, @PathParam("stackName") String stackName,
+      @PathParam("stackVersion") String stackVersion,
+      @PathParam("osType") String osType,
+      @PathParam("repoId") String repoId) {
+
+    return handleRequest(headers, body, ui, Request.Type.PUT,
+        createRepositoryResource(stackName, stackVersion, osType, repoId));
+  }
+  
+
+  @GET
+  @Path("{stackName}/versions/{stackVersion}/stackServices")
+  @Produces("text/plain")
+  public Response getStackServices(@Context HttpHeaders headers,
+      @Context UriInfo ui, @PathParam("stackName") String stackName,
+      @PathParam("stackVersion") String stackVersion) {
+
+    return handleRequest(headers, null, ui, Request.Type.GET,
+        createStackServiceResource(stackName, stackVersion, null));
+  }
+  
+  @GET
+  @Path("{stackName}/versions/{stackVersion}/stackServices/{serviceName}")
+  @Produces("text/plain")
+  public Response getStackService(@Context HttpHeaders headers,
+      @Context UriInfo ui, @PathParam("stackName") String stackName,
+      @PathParam("stackVersion") String stackVersion,
+      @PathParam("serviceName") String serviceName) {
+
+    return handleRequest(headers, null, ui, Request.Type.GET,
+        createStackServiceResource(stackName, stackVersion, serviceName));
+  }
+  
+  
+  @GET
+  @Path("{stackName}/versions/{stackVersion}/stackServices/{serviceName}/configurations")
+  @Produces("text/plain")
+  public Response getStackConfigurations(@Context HttpHeaders headers,
+      @Context UriInfo ui, @PathParam("stackName") String stackName,
+      @PathParam("stackVersion") String stackVersion,
+      @PathParam("serviceName") String serviceName) {
+
+    return handleRequest(headers, null, ui, Request.Type.GET,
+        createStackConfigurationResource(stackName, stackVersion, serviceName, null));
+  }
+  
+  
+  @GET
+  @Path("{stackName}/versions/{stackVersion}/stackServices/{serviceName}/configurations/{propertyName}")
+  @Produces("text/plain")
+  public Response getStackConfiguration(@Context HttpHeaders headers,
+      @Context UriInfo ui, @PathParam("stackName") String stackName,
+      @PathParam("stackVersion") String stackVersion,
+      @PathParam("serviceName") String serviceName,
+      @PathParam("propertyName") String propertyName) {
+
+    return handleRequest(headers, null, ui, Request.Type.GET,
+        createStackConfigurationResource(stackName, stackVersion, serviceName, propertyName));
+  }
+  
+  @GET
+  @Path("{stackName}/versions/{stackVersion}/stackServices/{serviceName}/serviceComponents")
+  @Produces("text/plain")
+  public Response getServiceComponents(@Context HttpHeaders headers,
+      @Context UriInfo ui, @PathParam("stackName") String stackName,
+      @PathParam("stackVersion") String stackVersion,
+      @PathParam("serviceName") String serviceName) {
+
+    return handleRequest(headers, null, ui, Request.Type.GET,
+        createStackServiceComponentResource(stackName, stackVersion, serviceName, null));
+  }
+  
+  @GET
+  @Path("{stackName}/versions/{stackVersion}/stackServices/{serviceName}/serviceComponents/{componentName}")
+  @Produces("text/plain")
+  public Response getServiceComponent(@Context HttpHeaders headers,
+      @Context UriInfo ui, @PathParam("stackName") String stackName,
+      @PathParam("stackVersion") String stackVersion,
+      @PathParam("serviceName") String serviceName,
+      @PathParam("componentName") String componentName) {
+
+    return handleRequest(headers, null, ui, Request.Type.GET,
+        createStackServiceComponentResource(stackName, stackVersion, serviceName, componentName));
+  }
+  
+  
+  @GET
+  @Path("{stackName}/versions/{stackVersion}/operatingSystems")
+  @Produces("text/plain")
+  public Response getOperatingSystems(@Context HttpHeaders headers,
+      @Context UriInfo ui, @PathParam("stackName") String stackName,
+      @PathParam("stackVersion") String stackVersion) {
+
+    return handleRequest(headers, null, ui, Request.Type.GET,
+        createOperatingSystemResource(stackName, stackVersion, null));
+  }
+  
+  @GET
+  @Path("{stackName}/versions/{stackVersion}/operatingSystems/{osType}")
+  @Produces("text/plain")
+  public Response getOperatingSystem(@Context HttpHeaders headers,
+      @Context UriInfo ui, @PathParam("stackName") String stackName,
+      @PathParam("stackVersion") String stackVersion,
+      @PathParam("osType") String osType) {
+
+    return handleRequest(headers, null, ui, Request.Type.GET,
+        createOperatingSystemResource(stackName, stackVersion, osType));
+  }
+  
+  
+  ResourceInstance createOperatingSystemResource(String stackName,
+      String stackVersion, String osType) {
+    
+    Map<Resource.Type, String> mapIds = new HashMap<Resource.Type, String>();
+    mapIds.put(Resource.Type.Stack, stackName);
+    mapIds.put(Resource.Type.StackVersion, stackVersion);
+    mapIds.put(Resource.Type.OperatingSystem, osType);
+
+    return createResource(Resource.Type.OperatingSystem, mapIds);
+  }
+
+  ResourceInstance createStackServiceComponentResource(
+      String stackName, String stackVersion, String serviceName, String componentName) {
+
+    Map<Resource.Type, String> mapIds = new HashMap<Resource.Type, String>();
+    mapIds.put(Resource.Type.Stack, stackName);
+    mapIds.put(Resource.Type.StackVersion, stackVersion);
+    mapIds.put(Resource.Type.StackService, serviceName);
+    mapIds.put(Resource.Type.StackServiceComponent, componentName);
+
+    return createResource(Resource.Type.StackServiceComponent, mapIds);
+  }
+
+  ResourceInstance createStackConfigurationResource(String stackName,
+      String stackVersion, String serviceName, String propertyName) {
+    
+    Map<Resource.Type, String> mapIds = new HashMap<Resource.Type, String>();
+    mapIds.put(Resource.Type.Stack, stackName);
+    mapIds.put(Resource.Type.StackVersion, stackVersion);
+    mapIds.put(Resource.Type.StackService, serviceName);
+    mapIds.put(Resource.Type.StackConfiguration, propertyName);
+
+    return createResource(Resource.Type.StackConfiguration, mapIds);
+  }
+
+  ResourceInstance createStackServiceResource(String stackName,
+      String stackVersion, String serviceName) {
+    Map<Resource.Type, String> mapIds = new HashMap<Resource.Type, String>();
+    mapIds.put(Resource.Type.Stack, stackName);
+    mapIds.put(Resource.Type.StackVersion, stackVersion);
+    mapIds.put(Resource.Type.StackService, serviceName);
+
+    return createResource(Resource.Type.StackService, mapIds);
+  }
+
+  ResourceInstance createRepositoryResource(String stackName,
+      String stackVersion, String osType, String repoId) {
+
+    Map<Resource.Type, String> mapIds = new HashMap<Resource.Type, String>();
+    mapIds.put(Resource.Type.Stack, stackName);
+    mapIds.put(Resource.Type.StackVersion, stackVersion);
+    mapIds.put(Resource.Type.OperatingSystem, osType);
+    mapIds.put(Resource.Type.Repository, repoId);
+
+    return createResource(Resource.Type.Repository, mapIds);
+  }
+
+  ResourceInstance createStackVersionResource(String stackName,
+      String stackVersion) {
+    Map<Resource.Type, String> mapIds = new HashMap<Resource.Type, String>();
+    mapIds.put(Resource.Type.Stack, stackName);
+    mapIds.put(Resource.Type.StackVersion, stackVersion);
+
+    return createResource(Resource.Type.StackVersion, mapIds);
+  }
+
+  ResourceInstance createStackResource(String stackName) {
+
+    return createResource(Resource.Type.Stack,
+        Collections.singletonMap(Resource.Type.Stack, stackName));
+
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/589e92d5/ambari-server/src/main/java/org/apache/ambari/server/api/services/StacksService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/StacksService.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/StacksService.java
index 31c4c31..104d2bc 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/StacksService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/StacksService.java
@@ -38,7 +38,7 @@ import org.apache.ambari.server.controller.spi.Resource;
 /**
  * Service for stacks management.
  */
-@Path("/stacks2/")
+@Path("/stacks/")
 public class StacksService extends BaseService {
 
   @GET
@@ -46,14 +46,14 @@ public class StacksService extends BaseService {
   public Response getStacks(@Context HttpHeaders headers, @Context UriInfo ui) {
 
     return handleRequest(headers, null, ui, Request.Type.GET,
-      createStackResource(null));
+        createStackResource(null));
   }
 
   @GET
   @Path("{stackName}")
   @Produces("text/plain")
   public Response getStack(@Context HttpHeaders headers, @Context UriInfo ui,
-      @PathParam("stackName") String stackName) {
+                           @PathParam("stackName") String stackName) {
 
     return handleRequest(headers, null, ui, Request.Type.GET,
         createStackResource(stackName));
@@ -63,7 +63,7 @@ public class StacksService extends BaseService {
   @Path("{stackName}/versions")
   @Produces("text/plain")
   public Response getStackVersions(@Context HttpHeaders headers,
-      @Context UriInfo ui, @PathParam("stackName") String stackName) {
+                                   @Context UriInfo ui, @PathParam("stackName") String stackName) {
 
     return handleRequest(headers, null, ui, Request.Type.GET,
         createStackVersionResource(stackName, null));
@@ -73,21 +73,21 @@ public class StacksService extends BaseService {
   @Path("{stackName}/versions/{stackVersion}")
   @Produces("text/plain")
   public Response getStackVersion(@Context HttpHeaders headers,
-      @Context UriInfo ui, @PathParam("stackName") String stackName,
-      @PathParam("stackVersion") String stackVersion) {
+                                  @Context UriInfo ui, @PathParam("stackName") String stackName,
+                                  @PathParam("stackVersion") String stackVersion) {
 
     return handleRequest(headers, null, ui, Request.Type.GET,
         createStackVersionResource(stackName, stackVersion));
   }
 
-  
+
   @GET
   @Path("{stackName}/versions/{stackVersion}/operatingSystems/{osType}/repositories")
   @Produces("text/plain")
   public Response getRepositories(@Context HttpHeaders headers,
-      @Context UriInfo ui, @PathParam("stackName") String stackName,
-      @PathParam("stackVersion") String stackVersion,
-      @PathParam("osType") String osType) {
+                                  @Context UriInfo ui, @PathParam("stackName") String stackName,
+                                  @PathParam("stackVersion") String stackVersion,
+                                  @PathParam("osType") String osType) {
 
     return handleRequest(headers, null, ui, Request.Type.GET,
         createRepositoryResource(stackName, stackVersion, osType, null));
@@ -97,132 +97,132 @@ public class StacksService extends BaseService {
   @Path("{stackName}/versions/{stackVersion}/operatingSystems/{osType}/repositories/{repoId}")
   @Produces("text/plain")
   public Response getRepository(@Context HttpHeaders headers,
-      @Context UriInfo ui, @PathParam("stackName") String stackName,
-      @PathParam("stackVersion") String stackVersion,
-      @PathParam("osType") String osType,
-      @PathParam("repoId") String repoId) {
+                                @Context UriInfo ui, @PathParam("stackName") String stackName,
+                                @PathParam("stackVersion") String stackVersion,
+                                @PathParam("osType") String osType,
+                                @PathParam("repoId") String repoId) {
 
     return handleRequest(headers, null, ui, Request.Type.GET,
         createRepositoryResource(stackName, stackVersion, osType, repoId));
   }
-  
+
   @PUT
   @Path("{stackName}/versions/{stackVersion}/operatingSystems/{osType}/repositories/{repoId}")
   @Produces("text/plain")
   public Response updateRepository(String body, @Context HttpHeaders headers,
-      @Context UriInfo ui, @PathParam("stackName") String stackName,
-      @PathParam("stackVersion") String stackVersion,
-      @PathParam("osType") String osType,
-      @PathParam("repoId") String repoId) {
+                                   @Context UriInfo ui, @PathParam("stackName") String stackName,
+                                   @PathParam("stackVersion") String stackVersion,
+                                   @PathParam("osType") String osType,
+                                   @PathParam("repoId") String repoId) {
 
     return handleRequest(headers, body, ui, Request.Type.PUT,
         createRepositoryResource(stackName, stackVersion, osType, repoId));
   }
-  
+
 
   @GET
   @Path("{stackName}/versions/{stackVersion}/stackServices")
   @Produces("text/plain")
   public Response getStackServices(@Context HttpHeaders headers,
-      @Context UriInfo ui, @PathParam("stackName") String stackName,
-      @PathParam("stackVersion") String stackVersion) {
+                                   @Context UriInfo ui, @PathParam("stackName") String stackName,
+                                   @PathParam("stackVersion") String stackVersion) {
 
     return handleRequest(headers, null, ui, Request.Type.GET,
         createStackServiceResource(stackName, stackVersion, null));
   }
-  
+
   @GET
   @Path("{stackName}/versions/{stackVersion}/stackServices/{serviceName}")
   @Produces("text/plain")
   public Response getStackService(@Context HttpHeaders headers,
-      @Context UriInfo ui, @PathParam("stackName") String stackName,
-      @PathParam("stackVersion") String stackVersion,
-      @PathParam("serviceName") String serviceName) {
+                                  @Context UriInfo ui, @PathParam("stackName") String stackName,
+                                  @PathParam("stackVersion") String stackVersion,
+                                  @PathParam("serviceName") String serviceName) {
 
     return handleRequest(headers, null, ui, Request.Type.GET,
         createStackServiceResource(stackName, stackVersion, serviceName));
   }
-  
-  
+
+
   @GET
   @Path("{stackName}/versions/{stackVersion}/stackServices/{serviceName}/configurations")
   @Produces("text/plain")
   public Response getStackConfigurations(@Context HttpHeaders headers,
-      @Context UriInfo ui, @PathParam("stackName") String stackName,
-      @PathParam("stackVersion") String stackVersion,
-      @PathParam("serviceName") String serviceName) {
+                                         @Context UriInfo ui, @PathParam("stackName") String stackName,
+                                         @PathParam("stackVersion") String stackVersion,
+                                         @PathParam("serviceName") String serviceName) {
 
     return handleRequest(headers, null, ui, Request.Type.GET,
         createStackConfigurationResource(stackName, stackVersion, serviceName, null));
   }
-  
-  
+
+
   @GET
   @Path("{stackName}/versions/{stackVersion}/stackServices/{serviceName}/configurations/{propertyName}")
   @Produces("text/plain")
   public Response getStackConfiguration(@Context HttpHeaders headers,
-      @Context UriInfo ui, @PathParam("stackName") String stackName,
-      @PathParam("stackVersion") String stackVersion,
-      @PathParam("serviceName") String serviceName,
-      @PathParam("propertyName") String propertyName) {
+                                        @Context UriInfo ui, @PathParam("stackName") String stackName,
+                                        @PathParam("stackVersion") String stackVersion,
+                                        @PathParam("serviceName") String serviceName,
+                                        @PathParam("propertyName") String propertyName) {
 
     return handleRequest(headers, null, ui, Request.Type.GET,
         createStackConfigurationResource(stackName, stackVersion, serviceName, propertyName));
   }
-  
+
   @GET
   @Path("{stackName}/versions/{stackVersion}/stackServices/{serviceName}/serviceComponents")
   @Produces("text/plain")
   public Response getServiceComponents(@Context HttpHeaders headers,
-      @Context UriInfo ui, @PathParam("stackName") String stackName,
-      @PathParam("stackVersion") String stackVersion,
-      @PathParam("serviceName") String serviceName) {
+                                       @Context UriInfo ui, @PathParam("stackName") String stackName,
+                                       @PathParam("stackVersion") String stackVersion,
+                                       @PathParam("serviceName") String serviceName) {
 
     return handleRequest(headers, null, ui, Request.Type.GET,
         createStackServiceComponentResource(stackName, stackVersion, serviceName, null));
   }
-  
+
   @GET
   @Path("{stackName}/versions/{stackVersion}/stackServices/{serviceName}/serviceComponents/{componentName}")
   @Produces("text/plain")
   public Response getServiceComponent(@Context HttpHeaders headers,
-      @Context UriInfo ui, @PathParam("stackName") String stackName,
-      @PathParam("stackVersion") String stackVersion,
-      @PathParam("serviceName") String serviceName,
-      @PathParam("componentName") String componentName) {
+                                      @Context UriInfo ui, @PathParam("stackName") String stackName,
+                                      @PathParam("stackVersion") String stackVersion,
+                                      @PathParam("serviceName") String serviceName,
+                                      @PathParam("componentName") String componentName) {
 
     return handleRequest(headers, null, ui, Request.Type.GET,
         createStackServiceComponentResource(stackName, stackVersion, serviceName, componentName));
   }
-  
-  
+
+
   @GET
   @Path("{stackName}/versions/{stackVersion}/operatingSystems")
   @Produces("text/plain")
   public Response getOperatingSystems(@Context HttpHeaders headers,
-      @Context UriInfo ui, @PathParam("stackName") String stackName,
-      @PathParam("stackVersion") String stackVersion) {
+                                      @Context UriInfo ui, @PathParam("stackName") String stackName,
+                                      @PathParam("stackVersion") String stackVersion) {
 
     return handleRequest(headers, null, ui, Request.Type.GET,
         createOperatingSystemResource(stackName, stackVersion, null));
   }
-  
+
   @GET
   @Path("{stackName}/versions/{stackVersion}/operatingSystems/{osType}")
   @Produces("text/plain")
   public Response getOperatingSystem(@Context HttpHeaders headers,
-      @Context UriInfo ui, @PathParam("stackName") String stackName,
-      @PathParam("stackVersion") String stackVersion,
-      @PathParam("osType") String osType) {
+                                     @Context UriInfo ui, @PathParam("stackName") String stackName,
+                                     @PathParam("stackVersion") String stackVersion,
+                                     @PathParam("osType") String osType) {
 
     return handleRequest(headers, null, ui, Request.Type.GET,
         createOperatingSystemResource(stackName, stackVersion, osType));
   }
-  
-  
+
+
   ResourceInstance createOperatingSystemResource(String stackName,
-      String stackVersion, String osType) {
-    
+                                                 String stackVersion, String osType) {
+
     Map<Resource.Type, String> mapIds = new HashMap<Resource.Type, String>();
     mapIds.put(Resource.Type.Stack, stackName);
     mapIds.put(Resource.Type.StackVersion, stackVersion);
@@ -244,8 +244,8 @@ public class StacksService extends BaseService {
   }
 
   ResourceInstance createStackConfigurationResource(String stackName,
-      String stackVersion, String serviceName, String propertyName) {
-    
+                                                    String stackVersion, String serviceName, String propertyName) {
+
     Map<Resource.Type, String> mapIds = new HashMap<Resource.Type, String>();
     mapIds.put(Resource.Type.Stack, stackName);
     mapIds.put(Resource.Type.StackVersion, stackVersion);
@@ -256,7 +256,7 @@ public class StacksService extends BaseService {
   }
 
   ResourceInstance createStackServiceResource(String stackName,
-      String stackVersion, String serviceName) {
+                                              String stackVersion, String serviceName) {
     Map<Resource.Type, String> mapIds = new HashMap<Resource.Type, String>();
     mapIds.put(Resource.Type.Stack, stackName);
     mapIds.put(Resource.Type.StackVersion, stackVersion);
@@ -266,7 +266,7 @@ public class StacksService extends BaseService {
   }
 
   ResourceInstance createRepositoryResource(String stackName,
-      String stackVersion, String osType, String repoId) {
+                                            String stackVersion, String osType, String repoId) {
 
     Map<Resource.Type, String> mapIds = new HashMap<Resource.Type, String>();
     mapIds.put(Resource.Type.Stack, stackName);
@@ -278,7 +278,7 @@ public class StacksService extends BaseService {
   }
 
   ResourceInstance createStackVersionResource(String stackName,
-      String stackVersion) {
+                                              String stackVersion) {
     Map<Resource.Type, String> mapIds = new HashMap<Resource.Type, String>();
     mapIds.put(Resource.Type.Stack, stackName);
     mapIds.put(Resource.Type.StackVersion, stackVersion);
@@ -293,3 +293,4 @@ public class StacksService extends BaseService {
 
   }
 }
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/589e92d5/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
index 8cefa74..e745994 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
@@ -34,7 +34,6 @@ import org.apache.ambari.server.agent.rest.AgentResource;
 import org.apache.ambari.server.api.AmbariPersistFilter;
 import org.apache.ambari.server.api.rest.BootStrapResource;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
-import org.apache.ambari.server.api.services.AmbariMetaService;
 import org.apache.ambari.server.api.services.KeyService;
 import org.apache.ambari.server.api.services.PersistKeyValueImpl;
 import org.apache.ambari.server.api.services.PersistKeyValueService;
@@ -466,7 +465,6 @@ public class AmbariServer {
     GetResource.init(injector.getInstance(ResourceManager.class));
     PersistKeyValueService.init(injector.getInstance(PersistKeyValueImpl.class));
     KeyService.init(injector.getInstance(PersistKeyValueImpl.class));
-    AmbariMetaService.init(injector.getInstance(AmbariMetaInfo.class));
     BootStrapResource.init(injector.getInstance(BootStrapImpl.class));
     StageUtils.setGson(injector.getInstance(Gson.class));
     WorkflowJsonService.setDBProperties(

http://git-wip-us.apache.org/repos/asf/ambari/blob/589e92d5/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaServiceTest.java
deleted file mode 100644
index f60c08e..0000000
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaServiceTest.java
+++ /dev/null
@@ -1,93 +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.api.services;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-
-import junit.framework.Assert;
-
-import org.apache.ambari.server.state.ServiceInfo;
-import org.apache.ambari.server.state.StackInfo;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codehaus.jackson.map.DeserializationConfig;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.type.TypeReference;
-import org.codehaus.jettison.json.JSONException;
-import org.junit.Test;
-
-import com.google.inject.Injector;
-import com.sun.jersey.api.client.Client;
-import com.sun.jersey.api.client.UniformInterfaceException;
-import com.sun.jersey.api.client.WebResource;
-import com.sun.jersey.api.client.config.ClientConfig;
-import com.sun.jersey.api.client.config.DefaultClientConfig;
-import com.sun.jersey.api.json.JSONConfiguration;
-import com.sun.jersey.spi.container.servlet.ServletContainer;
-import com.sun.jersey.test.framework.JerseyTest;
-import com.sun.jersey.test.framework.WebAppDescriptor;
-
-public class AmbariMetaServiceTest extends JerseyTest {
-  static String PACKAGE_NAME = "org.apache.ambari.server.api.services";
-  private static Log LOG = LogFactory.getLog(AmbariMetaService.class);
-  Injector injector;
-  protected Client client;
-  
-  public  AmbariMetaServiceTest() {
-    super(new WebAppDescriptor.Builder(PACKAGE_NAME).servletClass(ServletContainer.class)
-        .initParam("com.sun.jersey.api.json.POJOMappingFeature", "true")
-        .build());
-  }
-
-  @Override
-  public void setUp() throws Exception {
-    super.setUp();
-    
-    AmbariMetaInfo metainfo = new AmbariMetaInfo(new File("src/test/resources/stacks"), new File("target/version"));
-    metainfo.init();
-    
-    AmbariMetaService.init(metainfo);
-  }
-
-  @Test
-  public void testStacks() throws UniformInterfaceException, JSONException,
-    IOException {
-    ClientConfig clientConfig = new DefaultClientConfig();
-    clientConfig.getFeatures().put(JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE);
-    client = Client.create(clientConfig);
-    WebResource webResource = client.resource("http://localhost:9998/stacks");
-    
-    String output = webResource.get(String.class);
-    LOG.info("All Stack Info \n" + output);
-    ObjectMapper mapper = new ObjectMapper();
-    mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, 
-        false);
-    List<StackInfo> stackInfos = mapper.readValue(output,
-        new TypeReference<List<StackInfo>>(){});
-    StackInfo stackInfo = stackInfos.get(0);
-    Assert.assertEquals("HDP", stackInfo.getName());
-    webResource = client.resource("http://localhost:9998/stacks/" +
-    		"HDP/version/0.1/services/HDFS");
-    output = webResource.get(String.class);
-    ServiceInfo info = mapper.readValue(output, ServiceInfo.class);
-    Assert.assertEquals("HDFS", info.getName());
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/589e92d5/ambari-server/src/test/java/org/apache/ambari/server/api/services/Stacks2ServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/Stacks2ServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/Stacks2ServiceTest.java
new file mode 100644
index 0000000..be08abd
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/Stacks2ServiceTest.java
@@ -0,0 +1,216 @@
+/**
+ * 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.api.services;
+
+import org.apache.ambari.server.api.resources.ResourceInstance;
+import org.apache.ambari.server.api.services.parsers.RequestBodyParser;
+import org.apache.ambari.server.api.services.serializers.ResultSerializer;
+
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.UriInfo;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Unit tests for StacksService.
+ */
+public class Stacks2ServiceTest extends BaseServiceTest {
+
+  @Override
+  public List<ServiceTestInvocation> getTestInvocations() throws Exception {
+    List<ServiceTestInvocation> listInvocations = new ArrayList<ServiceTestInvocation>();
+
+    //getStack
+    Stacks2Service service = new TestStacksService("stackName", null);
+    Method m = service.getClass().getMethod("getStack", HttpHeaders.class, UriInfo.class, String.class);
+    Object[] args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    //getStacks
+    service = new TestStacksService(null, null);
+    m = service.getClass().getMethod("getStacks", HttpHeaders.class, UriInfo.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo()};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    //getStackVersion
+    service = new TestStacksService("stackName", "stackVersion");
+    m = service.getClass().getMethod("getStackVersion", HttpHeaders.class, UriInfo.class, String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    //getStackVersions
+    service = new TestStacksService("stackName", null);
+    m = service.getClass().getMethod("getStackVersions", HttpHeaders.class, UriInfo.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // getRepository
+    service = new TestStacksService("stackName", "stackVersion");
+    m = service.getClass().getMethod("getRepository", HttpHeaders.class, UriInfo.class, String.class,
+        String.class, String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion", "os", "repo-id"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // getRepositories
+    service = new TestStacksService("stackName", "stackVersion");
+    m = service.getClass().getMethod("getRepositories", HttpHeaders.class, UriInfo.class, String.class,
+        String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion", "os"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // updateRepository
+    service = new TestStacksService("stackName", "stackVersion");
+    m = service.getClass().getMethod("updateRepository", String.class, HttpHeaders.class, UriInfo.class, String.class,
+        String.class, String.class, String.class);
+    args = new Object[] {"body", getHttpHeaders(), getUriInfo(), "stackName", "stackVersion", "os", "repo-id"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.PUT, service, m, args, "body"));
+
+    // getStackService
+    service = new TestStacksService("stackName", null);
+    m = service.getClass().getMethod("getStackService", HttpHeaders.class, UriInfo.class, String.class,
+        String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion", "service-name"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // getStackServices
+    service = new TestStacksService("stackName", null);
+    m = service.getClass().getMethod("getStackServices", HttpHeaders.class, UriInfo.class, String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // getStackConfiguration
+    service = new TestStacksService("stackName", "stackVersion");
+    m = service.getClass().getMethod("getStackConfiguration", HttpHeaders.class, UriInfo.class,
+        String.class, String.class, String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion", "service-name", "property-name"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // getStackConfigurations
+    service = new TestStacksService("stackName", null);
+    m = service.getClass().getMethod("getStackConfigurations", HttpHeaders.class, UriInfo.class,
+        String.class, String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion", "service-name"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // getServiceComponent
+    service = new TestStacksService("stackName", "stackVersion");
+    m = service.getClass().getMethod("getServiceComponent", HttpHeaders.class, UriInfo.class,
+        String.class, String.class, String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion", "service-name", "component-name"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // getServiceComponents
+    service = new TestStacksService("stackName", "stackVersion");
+    m = service.getClass().getMethod("getServiceComponents", HttpHeaders.class, UriInfo.class,
+        String.class, String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion", "service-name"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // getOperationSystem
+    service = new TestStacksService("stackName", "stackVersion");
+    m = service.getClass().getMethod("getOperatingSystem", HttpHeaders.class, UriInfo.class,
+        String.class, String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion", "os-type"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // getOperationSystems
+    service = new TestStacksService("stackName", "stackVersion");
+    m = service.getClass().getMethod("getOperatingSystems", HttpHeaders.class, UriInfo.class,
+        String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    return listInvocations;
+  }
+
+  private class TestStacksService extends Stacks2Service {
+
+    private String m_stackId;
+    private String m_stackVersion;
+
+    private TestStacksService(String stackName, String stackVersion) {
+      m_stackId = stackName;
+      m_stackVersion = stackVersion;
+    }
+
+    @Override
+    ResourceInstance createStackResource(String stackName) {
+      assertEquals(m_stackId, stackName);
+      return getTestResource();
+    }
+
+    @Override
+    ResourceInstance createStackVersionResource(String stackName, String stackVersion) {
+      assertEquals(m_stackId, stackName);
+      assertEquals(m_stackVersion, stackVersion);
+      return getTestResource();
+    }
+
+    @Override
+    ResourceInstance createRepositoryResource(String stackName,
+        String stackVersion, String osType, String repoId) {
+
+      return getTestResource();
+    }
+
+    @Override
+    ResourceInstance createStackServiceResource(String stackName,
+        String stackVersion, String serviceName) {
+
+      return getTestResource();
+    }
+
+    ResourceInstance createStackConfigurationResource(String stackName,
+        String stackVersion, String serviceName, String propertyName) {
+
+      return getTestResource();
+    }
+
+    ResourceInstance createStackServiceComponentResource(String stackName,
+        String stackVersion, String serviceName, String componentName) {
+
+      return getTestResource();
+    }
+
+    ResourceInstance createOperatingSystemResource(String stackName, String stackVersion, String osType) {
+      return getTestResource();
+    }
+
+
+    @Override
+    RequestFactory getRequestFactory() {
+      return getTestRequestFactory();
+    }
+
+    @Override
+    protected RequestBodyParser getBodyParser() {
+      return getTestBodyParser();
+    }
+
+    @Override
+    protected ResultSerializer getResultSerializer() {
+      return getTestResultSerializer();
+    }
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/589e92d5/ambari-server/src/test/java/org/apache/ambari/server/api/services/StacksServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/StacksServiceTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/StacksServiceTest.java
index 9454993..f8c385f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/StacksServiceTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/StacksServiceTest.java
@@ -40,7 +40,7 @@ public class StacksServiceTest extends BaseServiceTest {
   public List<ServiceTestInvocation> getTestInvocations() throws Exception {
     List<ServiceTestInvocation> listInvocations = new ArrayList<ServiceTestInvocation>();
 
-    //getStack
+    // getStack
     StacksService service = new TestStacksService("stackName", null);
     Method m = service.getClass().getMethod("getStack", HttpHeaders.class, UriInfo.class, String.class);
     Object[] args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName"};
@@ -52,19 +52,93 @@ public class StacksServiceTest extends BaseServiceTest {
     args = new Object[] {getHttpHeaders(), getUriInfo()};
     listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
 
-    //getStackVersion
+    // getStackVersion
     service = new TestStacksService("stackName", "stackVersion");
     m = service.getClass().getMethod("getStackVersion", HttpHeaders.class, UriInfo.class, String.class, String.class);
     args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion"};
     listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
 
-    //getStackVersions
+    // getStackVersions
     service = new TestStacksService("stackName", null);
     m = service.getClass().getMethod("getStackVersions", HttpHeaders.class, UriInfo.class, String.class);
     args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName"};
     listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
 
-    //todo: other methods
+    // getRepository
+    service = new TestStacksService("stackName", "stackVersion");
+    m = service.getClass().getMethod("getRepository", HttpHeaders.class, UriInfo.class, String.class,
+        String.class, String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion", "os", "repo-id"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // getRepositories
+    service = new TestStacksService("stackName", "stackVersion");
+    m = service.getClass().getMethod("getRepositories", HttpHeaders.class, UriInfo.class, String.class,
+        String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion", "os"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // updateRepository
+    service = new TestStacksService("stackName", "stackVersion");
+    m = service.getClass().getMethod("updateRepository", String.class, HttpHeaders.class, UriInfo.class, String.class,
+        String.class, String.class, String.class);
+    args = new Object[] {"body", getHttpHeaders(), getUriInfo(), "stackName", "stackVersion", "os", "repo-id"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.PUT, service, m, args, "body"));
+
+    // getStackService
+    service = new TestStacksService("stackName", null);
+    m = service.getClass().getMethod("getStackService", HttpHeaders.class, UriInfo.class, String.class,
+        String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion", "service-name"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // getStackServices
+    service = new TestStacksService("stackName", null);
+    m = service.getClass().getMethod("getStackServices", HttpHeaders.class, UriInfo.class, String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // getStackConfiguration
+    service = new TestStacksService("stackName", "stackVersion");
+    m = service.getClass().getMethod("getStackConfiguration", HttpHeaders.class, UriInfo.class,
+        String.class, String.class, String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion", "service-name", "property-name"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // getStackConfigurations
+    service = new TestStacksService("stackName", null);
+    m = service.getClass().getMethod("getStackConfigurations", HttpHeaders.class, UriInfo.class,
+        String.class, String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion", "service-name"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // getServiceComponent
+    service = new TestStacksService("stackName", "stackVersion");
+    m = service.getClass().getMethod("getServiceComponent", HttpHeaders.class, UriInfo.class,
+        String.class, String.class, String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion", "service-name", "component-name"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // getServiceComponents
+    service = new TestStacksService("stackName", "stackVersion");
+    m = service.getClass().getMethod("getServiceComponents", HttpHeaders.class, UriInfo.class,
+        String.class, String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion", "service-name"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // getOperationSystem
+    service = new TestStacksService("stackName", "stackVersion");
+    m = service.getClass().getMethod("getOperatingSystem", HttpHeaders.class, UriInfo.class,
+        String.class, String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion", "os-type"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
+
+    // getOperationSystems
+    service = new TestStacksService("stackName", "stackVersion");
+    m = service.getClass().getMethod("getOperatingSystems", HttpHeaders.class, UriInfo.class,
+        String.class, String.class);
+    args = new Object[] {getHttpHeaders(), getUriInfo(), "stackName", "stackVersion"};
+    listInvocations.add(new ServiceTestInvocation(Request.Type.GET, service, m, args, null));
 
     return listInvocations;
   }