Repository: ambari Updated Branches: refs/heads/trunk 4a4b0e693 -> 5b6065876
AMBARI-7664 - Views : View API request for non-existent view should return 404 Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/5b606587 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/5b606587 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/5b606587 Branch: refs/heads/trunk Commit: 5b60658766856232b1198a21866db2aefe655662 Parents: 4a4b0e6 Author: tbeerbower <tbeerbo...@hortonworks.com> Authored: Mon Oct 6 19:11:42 2014 -0400 Committer: tbeerbower <tbeerbo...@hortonworks.com> Committed: Mon Oct 6 19:12:23 2014 -0400 ---------------------------------------------------------------------- .../internal/ClusterControllerImpl.java | 6 +++ .../internal/ClusterControllerImplTest.java | 42 ++++++++++++++++++++ 2 files changed, 48 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/5b606587/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterControllerImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterControllerImpl.java index 48767d5..5d1024a 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterControllerImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterControllerImpl.java @@ -132,6 +132,12 @@ public class ClusterControllerImpl implements ClusterController { // get the resources resources = provider.getResources(request, predicate); + + // if a specific resource was asked for and not found then throw exception + if (predicate != null && (resources == null || resources.isEmpty())) { + throw new NoSuchResourceException( + "The requested resource doesn't exist: " + type.toString() + " not found, " + predicate); + } } return resources; } http://git-wip-us.apache.org/repos/asf/ambari/blob/5b606587/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterControllerImplTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterControllerImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterControllerImplTest.java index 1d0eef4..261c95d 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterControllerImplTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterControllerImplTest.java @@ -31,12 +31,19 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; +import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.createNiceMock; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.verify; + /** * Cluster controller tests */ @@ -129,6 +136,41 @@ public class ClusterControllerImplTest { } @Test + public void testGetResources_NoSuchResourceException() throws Exception{ + + ProviderModule providerModule = createNiceMock(ProviderModule.class); + ResourceProvider resourceProvider = createNiceMock(ResourceProvider.class); + + expect(providerModule.getResourceProvider(Resource.Type.View)).andReturn(resourceProvider).anyTimes(); + expect(resourceProvider.checkPropertyIds(Collections.singleton("ViewInfo/view_name"))).andReturn(Collections.<String>emptySet()).anyTimes(); + expect(resourceProvider.getResources(anyObject(Request.class), anyObject(Predicate.class))).andReturn(Collections.<Resource>emptySet()).anyTimes(); + + replay(providerModule, resourceProvider); + + ClusterControllerImpl controller = new ClusterControllerImpl(providerModule); + + Set<String> propertyIds = new HashSet<String>(); + + propertyIds.add("ViewInfo/view_name"); + + Request request = PropertyHelper.getReadRequest(propertyIds); + + // No predicate + Iterator<Resource> iter = controller.getResourceIterable(Resource.Type.View, request, null).iterator(); + Assert.assertFalse(iter.hasNext()); + + // Ask for a specific resource. + Predicate predicate = new PredicateBuilder().property("ViewInfo/view_name").equals("BadView").toPredicate(); + try { + controller.getResourceIterable(Resource.Type.View, request, predicate); + Assert.fail("Expected NoSuchResourceException."); + } catch (NoSuchResourceException e) { + // expected + } + verify(providerModule, resourceProvider); + } + + @Test public void testGetResourcesPageFromStart() throws Exception{ ClusterControllerImpl controller = new ClusterControllerImpl(new TestProviderModule());