Repository: ambari Updated Branches: refs/heads/trunk 7c211e3ee -> 129041f54
AMBARI-15764. Add services element to compatible_repository_versions endpoint (ncole) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/129041f5 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/129041f5 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/129041f5 Branch: refs/heads/trunk Commit: 129041f548923abab41191e63a892d23193a7d52 Parents: 7c211e3 Author: Nate Cole <[email protected]> Authored: Thu Apr 7 12:35:15 2016 -0400 Committer: Nate Cole <[email protected]> Committed: Thu Apr 7 19:36:14 2016 -0400 ---------------------------------------------------------------------- .../ambari/server/api/query/QueryImpl.java | 19 +++--- .../AmbariManagementControllerImpl.java | 2 + .../server/controller/RepositoryRequest.java | 15 +++++ .../server/controller/RepositoryResponse.java | 16 +++++ ...atibleRepositoryVersionResourceProvider.java | 43 ++++++++++++- .../internal/RepositoryResourceProvider.java | 12 +++- .../ambari/server/api/query/QueryImplTest.java | 2 - .../AmbariManagementControllerTest.java | 3 +- ...leRepositoryVersionResourceProviderTest.java | 63 ++++++++++++++++++-- .../RepositoryResourceProviderTest.java | 33 +++++++++- 10 files changed, 191 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/129041f5/ambari-server/src/main/java/org/apache/ambari/server/api/query/QueryImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/query/QueryImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/api/query/QueryImpl.java index ba3a774..18fd94b 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/api/query/QueryImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/api/query/QueryImpl.java @@ -367,11 +367,6 @@ public class QueryImpl implements Query, ResourceInstance { Resource.Type resourceType = getResourceDefinition().getType(); Predicate queryPredicate = createPredicate(getKeyValueMap(), processUserPredicate(userPredicate)); - Predicate updated = clusterController.getAmendedPredicate(resourceType, queryPredicate); - if (null != updated) { - queryPredicate = updated; - } - // must occur after processing user predicate and prior to creating request finalizeProperties(); @@ -900,13 +895,23 @@ public class QueryImpl implements Query, ResourceInstance { } } + Predicate p = null; + if (setPredicates.size() == 1) { - return setPredicates.iterator().next(); + p = setPredicates.iterator().next(); } else if (setPredicates.size() > 1) { - return new AndPredicate(setPredicates.toArray(new Predicate[setPredicates.size()])); + p = new AndPredicate(setPredicates.toArray(new Predicate[setPredicates.size()])); } else { return null; } + + Resource.Type type = getResourceDefinition().getType(); + Predicate override = clusterController.getAmendedPredicate(type, p); + if (null != override) { + p = override; + } + + return p; } private Predicate createPredicate() { http://git-wip-us.apache.org/repos/asf/ambari/blob/129041f5/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java index 1793ef2..9870441 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java @@ -3743,6 +3743,8 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle if (repositoryResponse.getStackVersion() == null) { repositoryResponse.setStackVersion(stackVersion); } + + repositoryResponse.setClusterVersionId(request.getClusterVersionId()); } response.addAll(repositories); } catch (StackAccessException e) { http://git-wip-us.apache.org/repos/asf/ambari/blob/129041f5/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryRequest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryRequest.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryRequest.java index b674e79..84929bf 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryRequest.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryRequest.java @@ -23,6 +23,7 @@ public class RepositoryRequest extends OperatingSystemRequest { private String repoId; private String baseUrl; private boolean verify = true; + private Long clusterVersionId = null; public RepositoryRequest(String stackName, String stackVersion, String osType, String repoId) { super(stackName, stackVersion, osType); @@ -69,6 +70,20 @@ public class RepositoryRequest extends OperatingSystemRequest { verify = verifyUrl; } + /** + * @param id the cluster version id for the request + */ + public void setClusterVersionId(Long id) { + clusterVersionId = id; + } + + /** + * @return the cluster version id for the request + */ + public Long getClusterVersionId() { + return clusterVersionId; + } + @Override public String toString() { return "RepositoryRequest [repoId=" + repoId + ", baseUrl=" + baseUrl http://git-wip-us.apache.org/repos/asf/ambari/blob/129041f5/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryResponse.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryResponse.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryResponse.java index 6221826..30bd0db 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryResponse.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/RepositoryResponse.java @@ -31,6 +31,7 @@ public class RepositoryResponse { private String latestBaseUrl; private Long repositoryVersionId; private String versionDefinitionId; + private Long clusterVersionId; public RepositoryResponse(String baseUrl, String osType, String repoId, String repoName, String mirrorsList, String defaultBaseUrl, String latestBaseUrl) { @@ -142,4 +143,19 @@ public class RepositoryResponse { public String getVersionDefinitionId() { return versionDefinitionId; } + + /** + * @param id the cluster version id for the response + */ + public void setClusterVersionId(Long id) { + clusterVersionId = id; + } + + /** + * @return the cluster version id for the response + */ + public Long getClusterVersionId() { + return clusterVersionId; + } + } http://git-wip-us.apache.org/repos/asf/ambari/blob/129041f5/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java index 87e73c5..9303dcc 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProvider.java @@ -26,6 +26,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.StaticallyInject; import org.apache.ambari.server.api.resources.OperatingSystemResourceDefinition; import org.apache.ambari.server.api.services.AmbariMetaInfo; @@ -44,7 +45,11 @@ import org.apache.ambari.server.controller.spi.UnsupportedPropertyException; import org.apache.ambari.server.controller.utilities.PredicateBuilder; import org.apache.ambari.server.orm.dao.RepositoryVersionDAO; import org.apache.ambari.server.orm.entities.RepositoryVersionEntity; +import org.apache.ambari.server.state.ServiceInfo; import org.apache.ambari.server.state.StackId; +import org.apache.ambari.server.state.StackInfo; +import org.apache.ambari.server.state.repository.ManifestServiceInfo; +import org.apache.ambari.server.state.repository.VersionDefinitionXml; import org.apache.ambari.server.state.stack.UpgradePack; import com.google.common.collect.Sets; @@ -66,6 +71,8 @@ public class CompatibleRepositoryVersionResourceProvider extends ReadOnlyResourc public static final String REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID = "CompatibleRepositoryVersions/repository_version"; public static final String REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID = "CompatibleRepositoryVersions/display_name"; public static final String REPOSITORY_UPGRADES_SUPPORTED_TYPES_ID = "CompatibleRepositoryVersions/upgrade_types"; + public static final String REPOSITORY_VERSION_SERVICES = "CompatibleRepositoryVersions/services"; + public static final String REPOSITORY_VERSION_STACK_SERVICES = "CompatibleRepositoryVersions/stack_services"; public static final String SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID = new OperatingSystemResourceDefinition().getPluralName(); private static final String REPOSITORY_STACK_VALUE = "stack_value"; @@ -79,7 +86,9 @@ public class CompatibleRepositoryVersionResourceProvider extends ReadOnlyResourc REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID, REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID, SUBRESOURCE_OPERATING_SYSTEMS_PROPERTY_ID, - REPOSITORY_UPGRADES_SUPPORTED_TYPES_ID); + REPOSITORY_UPGRADES_SUPPORTED_TYPES_ID, + REPOSITORY_VERSION_SERVICES, + REPOSITORY_VERSION_STACK_SERVICES); static Map<Type, String> keyPropertyIds = new HashMap<Type, String>() { { @@ -192,6 +201,38 @@ public class CompatibleRepositoryVersionResourceProvider extends ReadOnlyResourc setResourceProperty(resource, REPOSITORY_VERSION_DISPLAY_NAME_PROPERTY_ID, repositoryVersionEntity.getDisplayName(), requestedIds); setResourceProperty(resource, REPOSITORY_VERSION_REPOSITORY_VERSION_PROPERTY_ID, repositoryVersionEntity.getVersion(), requestedIds); setResourceProperty(resource, REPOSITORY_UPGRADES_SUPPORTED_TYPES_ID, entity.getSupportedTypes(), requestedIds); + + final VersionDefinitionXml xml; + try { + xml = repositoryVersionEntity.getRepositoryXml(); + } catch (Exception e) { + throw new SystemException(String.format("Could not load xml for Repository %s", repositoryVersionEntity.getId()), e); + } + + final StackInfo stack; + try { + stack = s_ambariMetaInfo.get().getStack(repositoryVersionEntity.getStackName(), repositoryVersionEntity.getStackVersion()); + } catch (AmbariException e) { + throw new SystemException(String.format("Could not load stack %s for Repository %s", + repositoryVersionEntity.getStackId().toString(), repositoryVersionEntity.getId())); + } + + final List<ManifestServiceInfo> stackServices; + + if (null != xml) { + setResourceProperty(resource, REPOSITORY_VERSION_SERVICES, xml.getAvailableServices(stack), requestedIds); + stackServices = xml.getStackServices(stack); + } else { + stackServices = new ArrayList<>(); + + for (ServiceInfo si : stack.getServices()) { + stackServices.add(new ManifestServiceInfo(si.getName(), si.getDisplayName(), si.getComment(), + Collections.singleton(si.getVersion()))); + } + } + + setResourceProperty(resource, REPOSITORY_VERSION_STACK_SERVICES, stackServices, requestedIds); + resources.add(resource); } return resources; http://git-wip-us.apache.org/repos/asf/ambari/blob/129041f5/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryResourceProvider.java index 1622a4d..18d597e 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/RepositoryResourceProvider.java @@ -49,6 +49,7 @@ public class RepositoryResourceProvider extends AbstractControllerResourceProvid public static final String REPOSITORY_REPO_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("Repositories", "repo_name"); public static final String REPOSITORY_STACK_NAME_PROPERTY_ID = PropertyHelper.getPropertyId("Repositories", "stack_name"); public static final String REPOSITORY_STACK_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId("Repositories", "stack_version"); + public static final String REPOSITORY_CLUSTER_STACK_VERSION_PROPERTY_ID = PropertyHelper.getPropertyId("Repositories", "cluster_version_id"); public static final String REPOSITORY_OS_TYPE_PROPERTY_ID = PropertyHelper.getPropertyId("Repositories", "os_type"); public static final String REPOSITORY_BASE_URL_PROPERTY_ID = PropertyHelper.getPropertyId("Repositories", "base_url"); public static final String REPOSITORY_REPO_ID_PROPERTY_ID = PropertyHelper.getPropertyId("Repositories", "repo_id"); @@ -84,6 +85,7 @@ public class RepositoryResourceProvider extends AbstractControllerResourceProvid add(REPOSITORY_LATEST_BASE_URL_PROPERTY_ID); add(REPOSITORY_REPOSITORY_VERSION_ID_PROPERTY_ID); add(REPOSITORY_VERSION_DEFINITION_ID_PROPERTY_ID); + add(REPOSITORY_CLUSTER_STACK_VERSION_PROPERTY_ID); } }; @@ -92,7 +94,7 @@ public class RepositoryResourceProvider extends AbstractControllerResourceProvid { put(Resource.Type.Stack, REPOSITORY_STACK_NAME_PROPERTY_ID); put(Resource.Type.StackVersion, REPOSITORY_STACK_VERSION_PROPERTY_ID); - put(Resource.Type.ClusterStackVersion, REPOSITORY_STACK_VERSION_PROPERTY_ID); + put(Resource.Type.ClusterStackVersion, REPOSITORY_CLUSTER_STACK_VERSION_PROPERTY_ID); put(Resource.Type.OperatingSystem, REPOSITORY_OS_TYPE_PROPERTY_ID); put(Resource.Type.Repository, REPOSITORY_REPO_ID_PROPERTY_ID); put(Resource.Type.RepositoryVersion, REPOSITORY_REPOSITORY_VERSION_ID_PROPERTY_ID); @@ -166,6 +168,10 @@ public class RepositoryResourceProvider extends AbstractControllerResourceProvid setResourceProperty(resource, REPOSITORY_MIRRORS_LIST_PROPERTY_ID, response.getMirrorsList(), requestedIds); setResourceProperty(resource, REPOSITORY_DEFAULT_BASE_URL_PROPERTY_ID, response.getDefaultBaseUrl(), requestedIds); setResourceProperty(resource, REPOSITORY_LATEST_BASE_URL_PROPERTY_ID, response.getLatestBaseUrl(), requestedIds); + if (null != response.getClusterVersionId()) { + setResourceProperty(resource, REPOSITORY_CLUSTER_STACK_VERSION_PROPERTY_ID, response.getClusterVersionId(), requestedIds); + } + if (null != response.getRepositoryVersionId()) { setResourceProperty(resource, REPOSITORY_REPOSITORY_VERSION_ID_PROPERTY_ID, response.getRepositoryVersionId(), requestedIds); } @@ -229,6 +235,10 @@ public class RepositoryResourceProvider extends AbstractControllerResourceProvid request.setVersionDefinitionId(properties.get(REPOSITORY_VERSION_DEFINITION_ID_PROPERTY_ID).toString()); } + if (properties.containsKey(REPOSITORY_CLUSTER_STACK_VERSION_PROPERTY_ID)) { + request.setClusterVersionId(Long.parseLong(properties.get(REPOSITORY_CLUSTER_STACK_VERSION_PROPERTY_ID).toString())); + } + if (properties.containsKey(REPOSITORY_BASE_URL_PROPERTY_ID)) { request.setBaseUrl((String) properties.get(REPOSITORY_BASE_URL_PROPERTY_ID)); http://git-wip-us.apache.org/repos/asf/ambari/blob/129041f5/ambari-server/src/test/java/org/apache/ambari/server/api/query/QueryImplTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/query/QueryImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/query/QueryImplTest.java index 6bbb4bd..068e8d0 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/api/query/QueryImplTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/api/query/QueryImplTest.java @@ -977,7 +977,6 @@ public class QueryImplTest { expect(mockClusterController.getResources(eq(Resource.Type.Configuration), isA(Request.class), (Predicate)eq(null))).andReturn(mockSubQueryResponse).atLeastOnce(); expect(mockClusterController.getIterable(eq(Resource.Type.Host), isA(QueryResponse.class), isA(Request.class),(Predicate)eq(null), (PageRequest)eq(null), (SortRequest)eq(null))).andReturn(Collections.singleton(mockResource)).atLeastOnce(); expect(mockClusterController.getIterable(eq(Resource.Type.Configuration), isA(QueryResponse.class), isA(Request.class),(Predicate)eq(null), (PageRequest)eq(null), (SortRequest)eq(null))).andReturn(Collections.singleton(mockResource)).atLeastOnce(); - expect(mockClusterController.getAmendedPredicate(eq(Resource.Type.Host), (Predicate)eq(null))).andReturn((Predicate)null).atLeastOnce(); expect(mockQueryResponse.getResources()).andReturn(Collections.singleton(mockResource)).atLeastOnce(); expect(mockSubQueryResponse.getResources()).andReturn(Collections.singleton(mockResource)).atLeastOnce(); @@ -1058,7 +1057,6 @@ public class QueryImplTest { expect(mockClusterController.populateResources(eq(Resource.Type.Host), eq(Collections.singleton(mockResource)), isA(Request.class), (Predicate)eq(null))).andReturn(Collections.<Resource>emptySet()).times(1); // expect call to activate property providers for Configuration sub-resource expect(mockClusterController.populateResources(eq(Resource.Type.Configuration), eq(Collections.singleton(mockResource)), isA(Request.class), (Predicate)eq(null))).andReturn(Collections.<Resource>emptySet()).times(1); - expect(mockClusterController.getAmendedPredicate(eq(Resource.Type.Host), (Predicate)eq(null))).andReturn((Predicate)null).atLeastOnce(); expect(mockQueryResponse.getResources()).andReturn(Collections.singleton(mockResource)).atLeastOnce(); expect(mockSubQueryResponse.getResources()).andReturn(Collections.singleton(mockResource)).atLeastOnce(); http://git-wip-us.apache.org/repos/asf/ambari/blob/129041f5/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 c79f9d2..caaf6a9 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 @@ -7232,11 +7232,12 @@ public class AmbariManagementControllerTest { Assert.assertEquals(REPOS_CNT, responses.size()); RepositoryRequest requestWithParams = new RepositoryRequest(STACK_NAME, STACK_VERSION, OS_TYPE, REPO_ID); + requestWithParams.setClusterVersionId(525L); Set<RepositoryResponse> responsesWithParams = controller.getRepositories(Collections.singleton(requestWithParams)); Assert.assertEquals(1, responsesWithParams.size()); for (RepositoryResponse responseWithParams: responsesWithParams) { Assert.assertEquals(responseWithParams.getRepoId(), REPO_ID); - + Assert.assertEquals(525L, responseWithParams.getClusterVersionId().longValue()); } RepositoryRequest invalidRequest = new RepositoryRequest(STACK_NAME, STACK_VERSION, OS_TYPE, NON_EXT_VALUE); http://git-wip-us.apache.org/repos/asf/ambari/blob/129041f5/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java index 40d9b0b..066e0d0 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/CompatibleRepositoryVersionResourceProviderTest.java @@ -19,6 +19,9 @@ package org.apache.ambari.server.controller.internal; import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertNotNull; +import static junit.framework.Assert.assertNull; +import static junit.framework.Assert.assertTrue; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; @@ -50,6 +53,9 @@ import org.apache.ambari.server.orm.entities.StackEntity; import org.apache.ambari.server.security.TestAuthenticationFactory; import org.apache.ambari.server.state.StackId; import org.apache.ambari.server.state.StackInfo; +import org.apache.ambari.server.state.repository.AvailableService; +import org.apache.ambari.server.state.repository.ManifestServiceInfo; +import org.apache.ambari.server.state.repository.VersionDefinitionXml; import org.apache.ambari.server.state.stack.UpgradePack; import org.apache.ambari.server.state.stack.upgrade.UpgradeType; import org.easymock.EasyMock; @@ -70,6 +76,8 @@ public class CompatibleRepositoryVersionResourceProviderTest { private static Injector injector; private static String jsonStringRedhat6 = "[{\"OperatingSystems\":{\"os_type\":\"redhat6\"},\"repositories\":[]}]"; + private static StackId stackId11 = new StackId("HDP", "1.1"); + private static StackId stackId22 = new StackId("HDP", "2.2"); @Before public void before() throws Exception { @@ -91,7 +99,7 @@ public class CompatibleRepositoryVersionResourceProviderTest { hdp22Stack.setStackName("HDP"); hdp22Stack.setStackVersion("2.2"); - RepositoryVersionEntity entity2 = new RepositoryVersionEntity(); + RepositoryVersionEntity entity2 = new ExtendedRepositoryVersionEntity(); entity2.setDisplayName("name2"); entity2.setOperatingSystems(jsonStringRedhat6); entity2.setStack(hdp22Stack); @@ -100,9 +108,6 @@ public class CompatibleRepositoryVersionResourceProviderTest { final RepositoryVersionDAO repoVersionDAO = EasyMock.createMock(RepositoryVersionDAO.class); - StackId stackId11 = new StackId("HDP", "1.1"); - StackId stackId22 = new StackId("HDP", "2.2"); - expect(repoVersionDAO.findByStack(stackId11)).andReturn(Collections.singletonList(entity1)).atLeastOnce(); expect(repoVersionDAO.findByStack(stackId22)).andReturn(Collections.singletonList(entity2)).atLeastOnce(); replay(repoVersionDAO); @@ -277,6 +282,46 @@ public class CompatibleRepositoryVersionResourceProviderTest { versionToUpgradeTypesMap.put("1.1", Arrays.asList(UpgradeType.ROLLING)); versionToUpgradeTypesMap.put("2.2", Arrays.asList(UpgradeType.NON_ROLLING, UpgradeType.ROLLING)); assertEquals(versionToUpgradeTypesMap.size(), checkUpgradeTypes(resources, versionToUpgradeTypesMap)); + + // !!! verify we can get services + RepositoryVersionDAO dao = injector.getInstance(RepositoryVersionDAO.class); + List<RepositoryVersionEntity> entities = dao.findByStack(stackId22); + assertEquals(1, entities.size()); + RepositoryVersionEntity entity = entities.get(0); + assertTrue(ExtendedRepositoryVersionEntity.class.isInstance(entity)); + + VersionDefinitionXml mockXml = EasyMock.createMock(VersionDefinitionXml.class); + AvailableService mockAvailable = EasyMock.createMock(AvailableService.class); + ManifestServiceInfo mockStackService = EasyMock.createMock(ManifestServiceInfo.class); + + expect(mockXml.getAvailableServices((StackInfo)EasyMock.anyObject())).andReturn(Collections.singletonList(mockAvailable)).atLeastOnce(); + expect(mockXml.getStackServices((StackInfo)EasyMock.anyObject())).andReturn(Collections.singletonList(mockStackService)).atLeastOnce(); + + replay(mockXml); + + ((ExtendedRepositoryVersionEntity) entity).m_xml = mockXml; + + getRequest = PropertyHelper.getReadRequest( + CompatibleRepositoryVersionResourceProvider.REPOSITORY_VERSION_ID_PROPERTY_ID, + CompatibleRepositoryVersionResourceProvider.REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID, + CompatibleRepositoryVersionResourceProvider.REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID, + CompatibleRepositoryVersionResourceProvider.REPOSITORY_UPGRADES_SUPPORTED_TYPES_ID, + CompatibleRepositoryVersionResourceProvider.REPOSITORY_VERSION_SERVICES); + predicateStackName = new PredicateBuilder().property(CompatibleRepositoryVersionResourceProvider.REPOSITORY_VERSION_STACK_NAME_PROPERTY_ID).equals("HDP").toPredicate(); + predicateStackVersion = new PredicateBuilder().property(CompatibleRepositoryVersionResourceProvider.REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID).equals("1.1").toPredicate(); + + resources = compatibleProvider.getResources(getRequest, new AndPredicate(predicateStackName, predicateStackVersion)); + assertEquals(2, resources.size()); + + for (Resource r : resources) { + Object stackId = r.getPropertyValue(CompatibleRepositoryVersionResourceProvider.REPOSITORY_VERSION_STACK_VERSION_PROPERTY_ID); + assertNotNull(stackId); + if (stackId.toString().equals("2.2")) { + assertNotNull(r.getPropertyValue(CompatibleRepositoryVersionResourceProvider.REPOSITORY_VERSION_SERVICES)); + } else { + assertNull(r.getPropertyValue(CompatibleRepositoryVersionResourceProvider.REPOSITORY_VERSION_SERVICES)); + } + } } @Test @@ -351,4 +396,14 @@ public class CompatibleRepositoryVersionResourceProviderTest { return count; } + private static class ExtendedRepositoryVersionEntity extends RepositoryVersionEntity { + private VersionDefinitionXml m_xml = null; + + @Override + public VersionDefinitionXml getRepositoryXml() throws Exception { + return m_xml; + } + + } + } http://git-wip-us.apache.org/repos/asf/ambari/blob/129041f5/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryResourceProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryResourceProviderTest.java index 48eeaf8..3a7b19b 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryResourceProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RepositoryResourceProviderTest.java @@ -62,7 +62,7 @@ public class RepositoryResourceProviderTest { allResponse.add(rr); // set expectations - expect(managementController.getRepositories(EasyMock.<Set<RepositoryRequest>>anyObject())).andReturn(allResponse).times(1); + expect(managementController.getRepositories(EasyMock.<Set<RepositoryRequest>>anyObject())).andReturn(allResponse).times(2); // replay replay(managementController); @@ -76,6 +76,7 @@ public class RepositoryResourceProviderTest { propertyIds.add(RepositoryResourceProvider.REPOSITORY_BASE_URL_PROPERTY_ID); propertyIds.add(RepositoryResourceProvider.REPOSITORY_OS_TYPE_PROPERTY_ID); propertyIds.add(RepositoryResourceProvider.REPOSITORY_REPO_ID_PROPERTY_ID); + propertyIds.add(RepositoryResourceProvider.REPOSITORY_CLUSTER_STACK_VERSION_PROPERTY_ID); Predicate predicate = new PredicateBuilder().property(RepositoryResourceProvider.REPOSITORY_STACK_NAME_PROPERTY_ID).equals(VAL_STACK_NAME) @@ -109,6 +110,36 @@ public class RepositoryResourceProviderTest { o = resource.getPropertyValue(RepositoryResourceProvider.REPOSITORY_REPO_ID_PROPERTY_ID); Assert.assertEquals(o, VAL_REPO_ID); + o = resource.getPropertyValue(RepositoryResourceProvider.REPOSITORY_CLUSTER_STACK_VERSION_PROPERTY_ID); + Assert.assertNull(o); + } + + // !!! check that the stack version id is returned + rr.setClusterVersionId(525L); + resources = provider.getResources(request, predicate); + Assert.assertEquals(allResponse.size(), resources.size()); + + for (Resource resource : resources) { + Object o = resource.getPropertyValue(RepositoryResourceProvider.REPOSITORY_STACK_NAME_PROPERTY_ID); + Assert.assertEquals(VAL_STACK_NAME, o); + + o = resource.getPropertyValue(RepositoryResourceProvider.REPOSITORY_STACK_VERSION_PROPERTY_ID); + Assert.assertEquals(VAL_STACK_VERSION, o); + + o = resource.getPropertyValue(RepositoryResourceProvider.REPOSITORY_REPO_NAME_PROPERTY_ID); + Assert.assertEquals(o, VAL_REPO_NAME); + + o = resource.getPropertyValue(RepositoryResourceProvider.REPOSITORY_BASE_URL_PROPERTY_ID); + Assert.assertEquals(o, VAL_BASE_URL); + + o = resource.getPropertyValue(RepositoryResourceProvider.REPOSITORY_OS_TYPE_PROPERTY_ID); + Assert.assertEquals(o, VAL_OS); + + o = resource.getPropertyValue(RepositoryResourceProvider.REPOSITORY_REPO_ID_PROPERTY_ID); + Assert.assertEquals(o, VAL_REPO_ID); + + o = resource.getPropertyValue(RepositoryResourceProvider.REPOSITORY_CLUSTER_STACK_VERSION_PROPERTY_ID); + Assert.assertEquals(525L, o); } // verify
