You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by tb...@apache.org on 2014/09/08 22:13:24 UTC
git commit: AMBARI-7190 - Views: attempting to access views during
extraction throws exception
Repository: ambari
Updated Branches:
refs/heads/trunk c0f9fdecc -> 32cb4c546
AMBARI-7190 - Views: attempting to access views during extraction throws exception
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/32cb4c54
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/32cb4c54
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/32cb4c54
Branch: refs/heads/trunk
Commit: 32cb4c546488bb28155d101a213747a7764eb0e9
Parents: c0f9fde
Author: tbeerbower <tb...@hortonworks.com>
Authored: Mon Sep 8 12:23:41 2014 -0400
Committer: tbeerbower <tb...@hortonworks.com>
Committed: Mon Sep 8 16:12:31 2014 -0400
----------------------------------------------------------------------
.../internal/PrivilegeResourceProvider.java | 6 +-
.../internal/ViewInstanceResourceProvider.java | 44 ++++--
.../ViewPermissionResourceProvider.java | 8 +-
.../internal/ViewPrivilegeResourceProvider.java | 28 +++-
.../internal/ViewVersionResourceProvider.java | 6 +-
.../ambari/server/orm/entities/ViewEntity.java | 9 ++
.../ViewInstanceResourceProviderTest.java | 123 +++++++++++++++++
.../ViewPermissionResourceProviderTest.java | 133 +++++++++++++++++++
.../ViewPrivilegeResourceProviderTest.java | 8 +-
.../server/orm/entities/ViewEntityTest.java | 17 +++
10 files changed, 355 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/32cb4c54/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PrivilegeResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PrivilegeResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PrivilegeResourceProvider.java
index f0bcaf8..ae9cb52 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PrivilegeResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/PrivilegeResourceProvider.java
@@ -222,7 +222,7 @@ public abstract class PrivilegeResourceProvider<T> extends AbstractResourceProvi
for(PrivilegeEntity privilegeEntity : entitySet){
Resource resource = toResource(privilegeEntity, userEntities, groupEntities, resourceEntities, requestedIds);
- if (predicate == null || predicate.evaluate(resource)) {
+ if (resource != null && (predicate == null || predicate.evaluate(resource))) {
resources.add(resource);
}
}
@@ -441,6 +441,10 @@ public abstract class PrivilegeResourceProvider<T> extends AbstractResourceProvi
if (resource == null) {
// request body is empty, use predicate instead
resource = getResourceEntityId(predicate);
+ // if the predicate does not identify a single resource or the resource is not available for update
+ if (resource == null) {
+ return null;
+ }
}
final List<PrivilegeEntity> currentPrivileges = privilegeDAO.findByResourceId(resource);
http://git-wip-us.apache.org/repos/asf/ambari/blob/32cb4c54/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewInstanceResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewInstanceResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewInstanceResourceProvider.java
index ce23e79..09b63a4 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewInstanceResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewInstanceResourceProvider.java
@@ -145,13 +145,16 @@ public class ViewInstanceResourceProvider extends AbstractResourceProvider {
String instanceName = (String) propertyMap.get(INSTANCE_NAME_PROPERTY_ID);
for (ViewEntity viewDefinition : viewRegistry.getDefinitions()){
- if (viewName == null || viewName.equals(viewDefinition.getCommonName())) {
- for (ViewInstanceEntity viewInstanceDefinition : viewRegistry.getInstanceDefinitions(viewDefinition)) {
- if (instanceName == null || instanceName.equals(viewInstanceDefinition.getName())) {
- if (viewVersion == null || viewVersion.equals(viewDefinition.getVersion())) {
- if (includeInstance(viewInstanceDefinition, true)) {
- Resource resource = toResource(viewInstanceDefinition, requestedIds);
- resources.add(resource);
+ // do not report instances for views that are not loaded.
+ if (viewDefinition.isLoaded()){
+ if (viewName == null || viewName.equals(viewDefinition.getCommonName())) {
+ for (ViewInstanceEntity viewInstanceDefinition : viewRegistry.getInstanceDefinitions(viewDefinition)) {
+ if (instanceName == null || instanceName.equals(viewInstanceDefinition.getName())) {
+ if (viewVersion == null || viewVersion.equals(viewDefinition.getVersion())) {
+ if (includeInstance(viewInstanceDefinition, true)) {
+ Resource resource = toResource(viewInstanceDefinition, requestedIds);
+ resources.add(resource);
+ }
}
}
}
@@ -336,6 +339,20 @@ public class ViewInstanceResourceProvider extends AbstractResourceProvider {
ViewRegistry viewRegistry = ViewRegistry.getInstance();
ViewInstanceEntity instanceEntity = toEntity(properties);
+ ViewEntity viewEntity = instanceEntity.getViewEntity();
+ String viewName = viewEntity.getCommonName();
+ String version = viewEntity.getVersion();
+ ViewEntity view = viewRegistry.getDefinition(viewName, version);
+
+ if ( view == null ) {
+ throw new IllegalStateException("The view " + viewName + " is not registered.");
+ }
+
+ // the view must be in the LOADED state to create an instance
+ if (!view.isLoaded()) {
+ throw new IllegalStateException("The view " + viewName + " is not loaded.");
+ }
+
if (viewRegistry.instanceExists(instanceEntity)) {
throw new DuplicateResourceException("The instance " + instanceEntity.getName() + " already exists.");
}
@@ -376,11 +393,14 @@ public class ViewInstanceResourceProvider extends AbstractResourceProvider {
Set<ViewInstanceEntity> viewInstanceEntities = new HashSet<ViewInstanceEntity>();
for (ViewEntity viewEntity : viewRegistry.getDefinitions()){
- for (ViewInstanceEntity viewInstanceEntity : viewRegistry.getInstanceDefinitions(viewEntity)){
- Resource resource = toResource(viewInstanceEntity, requestedIds);
- if (predicate == null || predicate.evaluate(resource)) {
- if (includeInstance(viewInstanceEntity, false)) {
- viewInstanceEntities.add(viewInstanceEntity);
+ // the view must be in the LOADED state to delete an instance
+ if (viewEntity.isLoaded()) {
+ for (ViewInstanceEntity viewInstanceEntity : viewRegistry.getInstanceDefinitions(viewEntity)){
+ Resource resource = toResource(viewInstanceEntity, requestedIds);
+ if (predicate == null || predicate.evaluate(resource)) {
+ if (includeInstance(viewInstanceEntity, false)) {
+ viewInstanceEntities.add(viewInstanceEntity);
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/32cb4c54/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewPermissionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewPermissionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewPermissionResourceProvider.java
index bcbc856..5f025d9 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewPermissionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewPermissionResourceProvider.java
@@ -125,7 +125,11 @@ public class ViewPermissionResourceProvider extends AbstractResourceProvider {
Object viewVersion = propertyMap.get(VIEW_VERSION_PROPERTY_ID);
if (viewName != null && viewVersion != null) {
ViewEntity viewEntity = viewRegistry.getDefinition(viewName.toString(), viewVersion.toString());
- resources.add(toResource(viewUsePermission, viewEntity.getResourceType(), viewEntity, requestedIds));
+
+ // do not report permissions for views that are not loaded.
+ if (viewEntity.isLoaded()) {
+ resources.add(toResource(viewUsePermission, viewEntity.getResourceType(), viewEntity, requestedIds));
+ }
}
}
@@ -134,7 +138,7 @@ public class ViewPermissionResourceProvider extends AbstractResourceProvider {
ViewEntity viewEntity = viewRegistry.getDefinition(resourceType);
- if (viewEntity != null) {
+ if (viewEntity != null && viewEntity.isLoaded()) {
resources.add(toResource(permissionEntity, resourceType, viewEntity, requestedIds));
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/32cb4c54/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewPrivilegeResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewPrivilegeResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewPrivilegeResourceProvider.java
index ea4acef..f2f488a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewPrivilegeResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewPrivilegeResourceProvider.java
@@ -115,7 +115,12 @@ public class ViewPrivilegeResourceProvider extends PrivilegeResourceProvider<Vie
if (viewInstanceEntity == null) {
throw new AmbariException("View instance " + instanceName + " of " + viewName + viewVersion + " was not found");
}
- return Collections.singletonMap(viewInstanceEntity.getResource().getId(), viewInstanceEntity);
+
+ ViewEntity view = viewInstanceEntity.getViewEntity();
+
+ return view.isLoaded() ?
+ Collections.singletonMap(viewInstanceEntity.getResource().getId(), viewInstanceEntity) :
+ Collections.<Long, ViewInstanceEntity>emptyMap();
}
Set<ViewEntity> viewEntities = new HashSet<ViewEntity>();
@@ -136,8 +141,10 @@ public class ViewPrivilegeResourceProvider extends PrivilegeResourceProvider<Vie
Map<Long, ViewInstanceEntity> resourceEntities = new HashMap<Long, ViewInstanceEntity>();
for (ViewEntity viewEntity : viewEntities) {
- for (ViewInstanceEntity viewInstanceEntity : viewEntity.getInstances()) {
- resourceEntities.put(viewInstanceEntity.getResource().getId(), viewInstanceEntity);
+ if (viewEntity.isLoaded()) {
+ for (ViewInstanceEntity viewInstanceEntity : viewEntity.getInstances()) {
+ resourceEntities.put(viewInstanceEntity.getResource().getId(), viewInstanceEntity);
+ }
}
}
return resourceEntities;
@@ -150,10 +157,19 @@ public class ViewPrivilegeResourceProvider extends PrivilegeResourceProvider<Vie
final String viewName = getQueryParameterValue(PRIVILEGE_VIEW_NAME_PROPERTY_ID, predicate).toString();
final String viewVersion = getQueryParameterValue(PRIVILEGE_VIEW_VERSION_PROPERTY_ID, predicate).toString();
final String instanceName = getQueryParameterValue(PRIVILEGE_INSTANCE_NAME_PROPERTY_ID, predicate).toString();
+
final ViewInstanceEntity viewInstanceEntity = viewRegistry.getInstanceDefinition(viewName, viewVersion, instanceName);
- return viewInstanceEntity.getResource().getId();
+
+ if (viewInstanceEntity != null) {
+
+ ViewEntity view = viewInstanceEntity.getViewEntity();
+
+ return view.isLoaded() ? viewInstanceEntity.getResource().getId() : null;
+ }
+ return null;
}
+
// ----- helper methods ----------------------------------------------------
@Override
@@ -173,6 +189,10 @@ public class ViewPrivilegeResourceProvider extends PrivilegeResourceProvider<Vie
ViewInstanceEntity viewInstanceEntity = resourceEntities.get(privilegeEntity.getResource().getId());
ViewEntity viewEntity = viewInstanceEntity.getViewEntity();
+ if (!viewEntity.isLoaded()) {
+ return null;
+ }
+
setResourceProperty(resource, PRIVILEGE_VIEW_NAME_PROPERTY_ID, viewEntity.getCommonName(), requestedIds);
setResourceProperty(resource, PRIVILEGE_VIEW_VERSION_PROPERTY_ID, viewEntity.getVersion(), requestedIds);
setResourceProperty(resource, PRIVILEGE_INSTANCE_NAME_PROPERTY_ID, viewInstanceEntity.getName(), requestedIds);
http://git-wip-us.apache.org/repos/asf/ambari/blob/32cb4c54/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewVersionResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewVersionResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewVersionResourceProvider.java
index e2138be..ed9f06a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewVersionResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ViewVersionResourceProvider.java
@@ -98,7 +98,7 @@ public class ViewVersionResourceProvider extends AbstractResourceProvider {
public RequestStatus createResources(Request request)
throws SystemException, UnsupportedPropertyException,
ResourceAlreadyExistsException, NoSuchParentResourceException {
- throw new UnsupportedOperationException("Not yet supported.");
+ throw new UnsupportedOperationException("Not supported.");
}
@Override
@@ -147,13 +147,13 @@ public class ViewVersionResourceProvider extends AbstractResourceProvider {
@Override
public RequestStatus updateResources(Request request, Predicate predicate)
throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
- throw new UnsupportedOperationException("Not yet supported.");
+ throw new UnsupportedOperationException("Not supported.");
}
@Override
public RequestStatus deleteResources(Predicate predicate)
throws SystemException, UnsupportedPropertyException, NoSuchResourceException, NoSuchParentResourceException {
- throw new UnsupportedOperationException("Not yet supported.");
+ throw new UnsupportedOperationException("Not supported.");
}
@Override
http://git-wip-us.apache.org/repos/asf/ambari/blob/32cb4c54/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewEntity.java
index 8fb5a33..073451d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ViewEntity.java
@@ -750,6 +750,15 @@ public class ViewEntity implements ViewDefinition {
}
/**
+ * Determine whether or not the entity is loaded.
+ *
+ * @return true if the entity is loaded
+ */
+ public boolean isLoaded() {
+ return status.equals(ViewStatus.LOADED);
+ }
+
+ /**
* Get the internal view name from the given common name and version.
*
* @param name the view common name
http://git-wip-us.apache.org/repos/asf/ambari/blob/32cb4c54/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ViewInstanceResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ViewInstanceResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ViewInstanceResourceProviderTest.java
index f409f07..4a429b6 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ViewInstanceResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ViewInstanceResourceProviderTest.java
@@ -18,8 +18,10 @@
package org.apache.ambari.server.controller.internal;
+import org.apache.ambari.server.controller.spi.Predicate;
import org.apache.ambari.server.controller.spi.Resource;
import org.apache.ambari.server.controller.spi.ResourceAlreadyExistsException;
+import org.apache.ambari.server.controller.utilities.PredicateBuilder;
import org.apache.ambari.server.controller.utilities.PropertyHelper;
import org.apache.ambari.server.orm.entities.ViewEntity;
import org.apache.ambari.server.orm.entities.ViewInstanceDataEntity;
@@ -27,6 +29,7 @@ import org.apache.ambari.server.orm.entities.ViewInstanceEntity;
import org.apache.ambari.server.orm.entities.ViewInstancePropertyEntity;
import org.apache.ambari.server.orm.entities.ViewParameterEntity;
import org.apache.ambari.server.view.ViewRegistry;
+import org.apache.ambari.view.ViewDefinition;
import org.easymock.Capture;
import org.junit.Assert;
import org.junit.Before;
@@ -111,8 +114,15 @@ public class ViewInstanceResourceProviderTest {
viewInstanceEntity.setViewName("V1{1.0.0}");
viewInstanceEntity.setName("I1");
+ ViewEntity viewEntity = new ViewEntity();
+ viewEntity.setStatus(ViewDefinition.ViewStatus.LOADED);
+ viewEntity.setName("V1{1.0.0}");
+
+ viewInstanceEntity.setViewEntity(viewEntity);
+
expect(singleton.instanceExists(viewInstanceEntity)).andReturn(false);
expect(singleton.getInstanceDefinition("V1", "1.0.0", "I1")).andReturn(viewInstanceEntity);
+ expect(singleton.getDefinition("V1", null)).andReturn(viewEntity);
Capture<ViewInstanceEntity> instanceEntityCapture = new Capture<ViewInstanceEntity>();
singleton.installViewInstance(capture(instanceEntityCapture));
@@ -144,8 +154,15 @@ public class ViewInstanceResourceProviderTest {
viewInstanceEntity.setViewName("V1{1.0.0}");
viewInstanceEntity.setName("I1");
+ ViewEntity viewEntity = new ViewEntity();
+ viewEntity.setStatus(ViewDefinition.ViewStatus.LOADED);
+ viewEntity.setName("V1{1.0.0}");
+
+ viewInstanceEntity.setViewEntity(viewEntity);
+
expect(singleton.instanceExists(viewInstanceEntity)).andReturn(true);
expect(singleton.getInstanceDefinition("V1", "1.0.0", "I1")).andReturn(viewInstanceEntity);
+ expect(singleton.getDefinition("V1", null)).andReturn(viewEntity);
replay(singleton);
@@ -158,4 +175,110 @@ public class ViewInstanceResourceProviderTest {
verify(singleton);
}
+
+ @Test
+ public void testCreateResources_viewNotLoaded() throws Exception {
+ ViewInstanceResourceProvider provider = new ViewInstanceResourceProvider();
+
+ Set<Map<String, Object>> properties = new HashSet<Map<String, Object>>();
+
+ Map<String, Object> propertyMap = new HashMap<String, Object>();
+
+ propertyMap.put(ViewInstanceResourceProvider.VIEW_NAME_PROPERTY_ID, "V1");
+ propertyMap.put(ViewInstanceResourceProvider.VIEW_VERSION_PROPERTY_ID, "1.0.0");
+ propertyMap.put(ViewInstanceResourceProvider.INSTANCE_NAME_PROPERTY_ID, "I1");
+
+ properties.add(propertyMap);
+
+ ViewEntity viewEntity = new ViewEntity();
+ viewEntity.setName("V1{1.0.0}");
+ viewEntity.setStatus(ViewDefinition.ViewStatus.LOADING);
+ ViewInstanceEntity viewInstanceEntity = new ViewInstanceEntity();
+ viewInstanceEntity.setViewName("V1{1.0.0}");
+ viewInstanceEntity.setName("I1");
+ viewInstanceEntity.setViewEntity(viewEntity);
+
+ expect(singleton.getInstanceDefinition("V1", "1.0.0", "I1")).andReturn(viewInstanceEntity);
+ expect(singleton.getDefinition("V1", null)).andReturn(viewEntity);
+
+ replay(singleton);
+
+ try {
+ provider.createResources(PropertyHelper.getCreateRequest(properties, null));
+ fail("Expected IllegalStateException.");
+ } catch (IllegalStateException e) {
+ // expected
+ }
+
+ verify(singleton);
+ }
+
+ @Test
+ public void testUpdateResources_viewNotLoaded() throws Exception {
+ ViewInstanceResourceProvider provider = new ViewInstanceResourceProvider();
+
+ Set<Map<String, Object>> properties = new HashSet<Map<String, Object>>();
+
+ Map<String, Object> propertyMap = new HashMap<String, Object>();
+
+ propertyMap.put(ViewInstanceResourceProvider.ICON_PATH_ID, "path");
+
+ properties.add(propertyMap);
+
+ PredicateBuilder predicateBuilder = new PredicateBuilder();
+ Predicate predicate =
+ predicateBuilder.property(ViewInstanceResourceProvider.VIEW_NAME_PROPERTY_ID).equals("V1").toPredicate();
+ ViewEntity viewEntity = new ViewEntity();
+ viewEntity.setName("V1{1.0.0}");
+ viewEntity.setStatus(ViewDefinition.ViewStatus.LOADING);
+ ViewInstanceEntity viewInstanceEntity = new ViewInstanceEntity();
+ viewInstanceEntity.setViewName("V1{1.0.0}");
+ viewInstanceEntity.setName("I1");
+ viewInstanceEntity.setViewEntity(viewEntity);
+
+ expect(singleton.getDefinitions()).andReturn(Collections.singleton(viewEntity));
+
+ replay(singleton);
+
+ provider.updateResources(PropertyHelper.getCreateRequest(properties, null), predicate);
+
+ Assert.assertNull(viewInstanceEntity.getIcon());
+
+ verify(singleton);
+ }
+
+ @Test
+ public void testDeleteResources_viewNotLoaded() throws Exception {
+ ViewInstanceResourceProvider provider = new ViewInstanceResourceProvider();
+
+ Set<Map<String, Object>> properties = new HashSet<Map<String, Object>>();
+
+ Map<String, Object> propertyMap = new HashMap<String, Object>();
+
+ propertyMap.put(ViewInstanceResourceProvider.VIEW_NAME_PROPERTY_ID, "V1");
+ propertyMap.put(ViewInstanceResourceProvider.VIEW_VERSION_PROPERTY_ID, "1.0.0");
+ propertyMap.put(ViewInstanceResourceProvider.INSTANCE_NAME_PROPERTY_ID, "I1");
+
+ properties.add(propertyMap);
+
+ PredicateBuilder predicateBuilder = new PredicateBuilder();
+ Predicate predicate =
+ predicateBuilder.property(ViewInstanceResourceProvider.VIEW_NAME_PROPERTY_ID).equals("V1").toPredicate();
+
+ ViewEntity viewEntity = new ViewEntity();
+ viewEntity.setName("V1{1.0.0}");
+ viewEntity.setStatus(ViewDefinition.ViewStatus.LOADING);
+ ViewInstanceEntity viewInstanceEntity = new ViewInstanceEntity();
+ viewInstanceEntity.setViewName("V1{1.0.0}");
+ viewInstanceEntity.setName("I1");
+ viewInstanceEntity.setViewEntity(viewEntity);
+
+ expect(singleton.getDefinitions()).andReturn(Collections.singleton(viewEntity));
+
+ replay(singleton);
+
+ provider.deleteResources(predicate);
+
+ verify(singleton);
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/32cb4c54/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ViewPermissionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ViewPermissionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ViewPermissionResourceProviderTest.java
new file mode 100644
index 0000000..eebe0d3
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ViewPermissionResourceProviderTest.java
@@ -0,0 +1,133 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.server.controller.internal;
+
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.apache.ambari.server.orm.dao.PermissionDAO;
+import org.apache.ambari.server.orm.entities.PermissionEntity;
+import org.apache.ambari.server.orm.entities.ResourceTypeEntity;
+import org.apache.ambari.server.orm.entities.ViewEntity;
+import org.apache.ambari.server.view.ViewRegistry;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import static org.easymock.EasyMock.createMock;
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.createStrictMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reset;
+import static org.easymock.EasyMock.verify;
+
+/**
+ * ViewPermissionResourceProvider tests.
+ */
+public class ViewPermissionResourceProviderTest {
+ private final static PermissionDAO dao = createStrictMock(PermissionDAO.class);
+ private static final ViewRegistry viewRegistry = createMock(ViewRegistry.class);
+
+ static {
+ ViewRegistry.initInstance(viewRegistry);
+ }
+
+ @BeforeClass
+ public static void initClass() {
+ ViewPermissionResourceProvider.init(dao);
+ }
+
+ @Before
+ public void resetGlobalMocks() {
+ reset(dao, viewRegistry);
+ }
+
+ @Test
+ public void testGetResources() throws Exception {
+ List<PermissionEntity> permissionEntities = new LinkedList<PermissionEntity>();
+
+ PermissionEntity permissionEntity = createNiceMock(PermissionEntity.class);
+ PermissionEntity viewUsePermissionEntity = createNiceMock(PermissionEntity.class);
+ ResourceTypeEntity resourceTypeEntity = createNiceMock(ResourceTypeEntity.class);
+ ViewEntity viewEntity = createMock(ViewEntity.class);
+
+ permissionEntities.add(permissionEntity);
+
+ expect(dao.findViewUsePermission()).andReturn(viewUsePermissionEntity);
+ expect(dao.findAll()).andReturn(Collections.singletonList(permissionEntity));
+
+ expect(permissionEntity.getId()).andReturn(99);
+ expect(permissionEntity.getPermissionName()).andReturn("P1");
+ expect(permissionEntity.getResourceType()).andReturn(resourceTypeEntity);
+ expect(resourceTypeEntity.getName()).andReturn("V1");
+
+ expect(viewEntity.isLoaded()).andReturn(true).anyTimes();
+ expect(viewEntity.getCommonName()).andReturn("V1").anyTimes();
+ expect(viewEntity.getVersion()).andReturn("1.0.0").anyTimes();
+
+ expect(viewRegistry.getDefinition(resourceTypeEntity)).andReturn(viewEntity);
+
+ replay(dao, permissionEntity, viewUsePermissionEntity, resourceTypeEntity, viewEntity, viewRegistry);
+ ViewPermissionResourceProvider provider = new ViewPermissionResourceProvider();
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), null);
+ // built in permissions
+ Assert.assertEquals(1, resources.size());
+ Resource resource = resources.iterator().next();
+
+ Assert.assertEquals(99, resource.getPropertyValue(PermissionResourceProvider.PERMISSION_ID_PROPERTY_ID));
+ Assert.assertEquals("P1", resource.getPropertyValue(PermissionResourceProvider.PERMISSION_NAME_PROPERTY_ID));
+ Assert.assertEquals("V1", resource.getPropertyValue(PermissionResourceProvider.RESOURCE_NAME_PROPERTY_ID));
+ verify(dao, permissionEntity, viewUsePermissionEntity, resourceTypeEntity, viewEntity, viewRegistry);
+ }
+
+ @Test
+ public void testGetResources_viewNotLoaded() throws Exception {
+ List<PermissionEntity> permissionEntities = new LinkedList<PermissionEntity>();
+
+ PermissionEntity permissionEntity = createNiceMock(PermissionEntity.class);
+ PermissionEntity viewUsePermissionEntity = createNiceMock(PermissionEntity.class);
+ ResourceTypeEntity resourceTypeEntity = createNiceMock(ResourceTypeEntity.class);
+ ViewEntity viewEntity = createMock(ViewEntity.class);
+
+ permissionEntities.add(permissionEntity);
+
+ expect(dao.findViewUsePermission()).andReturn(viewUsePermissionEntity);
+ expect(dao.findAll()).andReturn(Collections.singletonList(permissionEntity));
+
+ expect(permissionEntity.getResourceType()).andReturn(resourceTypeEntity);
+
+ expect(viewEntity.isLoaded()).andReturn(false).anyTimes();
+
+ expect(viewRegistry.getDefinition(resourceTypeEntity)).andReturn(viewEntity);
+
+ replay(dao, permissionEntity, viewUsePermissionEntity, resourceTypeEntity, viewEntity, viewRegistry);
+ ViewPermissionResourceProvider provider = new ViewPermissionResourceProvider();
+ Set<Resource> resources = provider.getResources(PropertyHelper.getReadRequest(), null);
+ // built in permissions
+ Assert.assertEquals(0, resources.size());
+
+ verify(dao, permissionEntity, viewUsePermissionEntity, resourceTypeEntity, viewEntity, viewRegistry);
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/32cb4c54/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ViewPrivilegeResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ViewPrivilegeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ViewPrivilegeResourceProviderTest.java
index 80f7751..eb4ef9c 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ViewPrivilegeResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ViewPrivilegeResourceProviderTest.java
@@ -45,6 +45,7 @@ import org.apache.ambari.server.security.SecurityHelper;
import org.apache.ambari.server.view.ViewInstanceHandlerList;
import org.apache.ambari.server.view.ViewRegistry;
import org.apache.ambari.server.view.ViewRegistryTest;
+import org.apache.ambari.view.ViewDefinition;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
@@ -100,6 +101,8 @@ public class ViewPrivilegeResourceProviderTest {
ViewInstanceEntity viewInstanceDefinition = ViewInstanceEntityTest.getViewInstanceEntity();
viewDefinition.addInstanceDefinition(viewInstanceDefinition);
+ viewInstanceDefinition.setViewEntity(viewDefinition);
+ viewDefinition.setStatus(ViewDefinition.ViewStatus.LOADED);
ViewRegistry registry = ViewRegistry.getInstance();
@@ -159,10 +162,5 @@ public class ViewPrivilegeResourceProviderTest {
verify(privilegeDAO, userDAO, groupDAO, principalDAO, permissionDAO, resourceDAO, privilegeEntity, resourceEntity,
userEntity, principalEntity, permissionEntity, principalTypeEntity);
}
-
- @Test
- public void testUpdateResources() throws Exception {
- // see AmbariPrivilegeResourceProvider#testUpdateResources
- }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/32cb4c54/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/ViewEntityTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/ViewEntityTest.java b/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/ViewEntityTest.java
index 115c2bf..977e01d 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/ViewEntityTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/orm/entities/ViewEntityTest.java
@@ -266,4 +266,21 @@ public class ViewEntityTest {
viewDefinition.setStatusDetail("status detail");
Assert.assertEquals("status detail", viewDefinition.getStatusDetail());
}
+
+ @Test
+ public void testIsLoaded() throws Exception {
+ ViewEntity viewDefinition = getViewEntity();
+
+ viewDefinition.setStatus(ViewDefinition.ViewStatus.PENDING);
+ Assert.assertFalse(viewDefinition.isLoaded());
+
+ viewDefinition.setStatus(ViewDefinition.ViewStatus.LOADING);
+ Assert.assertFalse(viewDefinition.isLoaded());
+
+ viewDefinition.setStatus(ViewDefinition.ViewStatus.LOADED);
+ Assert.assertTrue(viewDefinition.isLoaded());
+
+ viewDefinition.setStatus(ViewDefinition.ViewStatus.ERROR);
+ Assert.assertFalse(viewDefinition.isLoaded());
+ }
}