| /** |
| * 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 com.google.inject.Binder; |
| import com.google.inject.Guice; |
| import com.google.inject.Injector; |
| import com.google.inject.Module; |
| import com.google.inject.util.Modules; |
| import org.apache.ambari.server.controller.AmbariManagementController; |
| import org.apache.ambari.server.controller.spi.Predicate; |
| import org.apache.ambari.server.controller.spi.Request; |
| import org.apache.ambari.server.controller.spi.RequestStatus; |
| import org.apache.ambari.server.controller.spi.Resource; |
| import org.apache.ambari.server.controller.utilities.PredicateBuilder; |
| import org.apache.ambari.server.controller.utilities.PropertyHelper; |
| import org.apache.ambari.server.orm.InMemoryDefaultTestModule; |
| import org.apache.ambari.server.orm.dao.WidgetDAO; |
| import org.apache.ambari.server.orm.entities.WidgetEntity; |
| import org.apache.ambari.server.security.encryption.CredentialStoreService; |
| import org.apache.ambari.server.state.Cluster; |
| import org.apache.ambari.server.state.Clusters; |
| import org.apache.ambari.server.utils.CollectionPresentationUtils; |
| import org.easymock.Capture; |
| import org.easymock.EasyMock; |
| import org.junit.Assert; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.junit.runner.RunWith; |
| import org.powermock.api.easymock.PowerMock; |
| import org.powermock.core.classloader.annotations.PowerMockIgnore; |
| import org.powermock.core.classloader.annotations.PrepareForTest; |
| import org.powermock.modules.junit4.PowerMockRunner; |
| import org.springframework.security.access.AccessDeniedException; |
| import org.springframework.security.core.context.SecurityContextHolder; |
| |
| import java.util.Arrays; |
| import java.util.Collections; |
| import java.util.HashMap; |
| import java.util.LinkedHashSet; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.Set; |
| |
| import static org.easymock.EasyMock.anyObject; |
| import static org.easymock.EasyMock.capture; |
| import static org.easymock.EasyMock.createMock; |
| import static org.easymock.EasyMock.createStrictMock; |
| import static org.easymock.EasyMock.expect; |
| import static org.easymock.EasyMock.expectLastCall; |
| import static org.easymock.EasyMock.replay; |
| import static org.easymock.EasyMock.resetToStrict; |
| import static org.easymock.EasyMock.verify; |
| import static org.junit.Assert.assertEquals; |
| |
| /** |
| * Widget tests |
| */ |
| @RunWith(PowerMockRunner.class) |
| @PrepareForTest( {WidgetResourceProvider.class, SecurityContextHolder.class} ) |
| @PowerMockIgnore( {"javax.management.*"} ) |
| public class WidgetResourceProviderTest { |
| |
| private WidgetDAO dao = null; |
| private Injector m_injector; |
| |
| @Before |
| public void before() { |
| dao = createStrictMock(WidgetDAO.class); |
| |
| m_injector = Guice.createInjector(Modules.override( |
| new InMemoryDefaultTestModule()).with(new MockModule())); |
| } |
| |
| /** |
| * @throws Exception |
| */ |
| @Test |
| public void testGetResourcesNoPredicate() throws Exception { |
| WidgetResourceProvider provider = createProvider(null); |
| |
| Request request = PropertyHelper.getReadRequest("Widgets/id"); |
| |
| Set<Resource> results = provider.getResources(request, null); |
| |
| assertEquals(0, results.size()); |
| } |
| |
| /** |
| * @throws Exception |
| */ |
| @Test |
| public void testGetSingleResource() throws Exception { |
| Request request = PropertyHelper.getReadRequest( |
| WidgetResourceProvider.WIDGET_ID_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_WIDGET_NAME_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_WIDGET_TYPE_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_TIME_CREATED_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_CLUSTER_NAME_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_AUTHOR_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_DESCRIPTION_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_SCOPE_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_METRICS_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_VALUES_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_PROPERTIES_PROPERTY_ID); |
| |
| AmbariManagementController amc = createMock(AmbariManagementController.class); |
| Clusters clusters = createMock(Clusters.class); |
| Cluster cluster = createMock(Cluster.class); |
| expect(amc.getClusters()).andReturn(clusters).atLeastOnce(); |
| expect(clusters.getClusterById(1L)).andReturn(cluster).atLeastOnce(); |
| expect(cluster.getClusterName()).andReturn("c1").anyTimes(); |
| |
| Predicate predicate = new PredicateBuilder().property( |
| WidgetResourceProvider.WIDGET_CLUSTER_NAME_PROPERTY_ID).equals("c1") |
| .and().property(WidgetResourceProvider.WIDGET_ID_PROPERTY_ID).equals("1") |
| .and().property(WidgetResourceProvider.WIDGET_AUTHOR_PROPERTY_ID).equals("username").toPredicate(); |
| |
| expect(dao.findById(1L)).andReturn(getMockEntities("CLUSTER").get(0)); |
| |
| replay(amc, clusters, cluster, dao); |
| |
| WidgetResourceProvider provider = createProvider(amc); |
| Set<Resource> results = provider.getResources(request, predicate); |
| |
| assertEquals(1, results.size()); |
| |
| Resource r = results.iterator().next(); |
| Assert.assertEquals("GAUGE", r.getPropertyValue(WidgetResourceProvider.WIDGET_WIDGET_TYPE_PROPERTY_ID)); |
| Assert.assertEquals("CLUSTER", r.getPropertyValue(WidgetResourceProvider.WIDGET_SCOPE_PROPERTY_ID)); |
| Assert.assertEquals("username", r.getPropertyValue(WidgetResourceProvider.WIDGET_AUTHOR_PROPERTY_ID)); |
| Assert.assertEquals("widget name", r.getPropertyValue(WidgetResourceProvider.WIDGET_WIDGET_NAME_PROPERTY_ID)); |
| Object metrics = r.getPropertyValue(WidgetResourceProvider.WIDGET_METRICS_PROPERTY_ID); |
| Assert.assertEquals("[{\"widget_id\":\"metrics/jvm/HeapMemoryUsed\"," + |
| "\"host_component_criteria\":\"host_components/metrics/dfs/FSNamesystem/HAState\\u003dactive\"," + |
| "\"service_name\":\"HDFS\",\"component_name\":\"NAMENODE\"," + |
| "\"name\":\"java.lang:type\\u003dMemory.HeapMemoryUsage[used]\",\"category\":\"\"}," + |
| "{\"widget_id\":\"metrics/jvm/HeapMemoryMax\"," + |
| "\"host_component_criteria\":\"host_components/metrics/dfs/FSNamesystem/HAState\\u003dactive\"," + |
| "\"service_name\":\"HDFS\",\"component_name\":\"NAMENODE\"," + |
| "\"name\":\"java.lang:type\\u003dMemory.HeapMemoryUsage[max]\"," + |
| "\"category\":\"\"}]", r.getPropertyValue(WidgetResourceProvider.WIDGET_METRICS_PROPERTY_ID)); |
| Assert.assertEquals("[{\"name\":\"NameNode Heap\"," + |
| "\"value\":\"${java.lang:type\\u003dMemory.HeapMemoryUsage[used] / " + |
| "java.lang:type\\u003dMemory.HeapMemoryUsage[max]}\"}]", |
| r.getPropertyValue(WidgetResourceProvider.WIDGET_VALUES_PROPERTY_ID)); |
| Assert.assertEquals("{\"name\":\"value\"}", r.getPropertyValue(WidgetResourceProvider.WIDGET_PROPERTIES_PROPERTY_ID)); |
| } |
| |
| /** |
| * @throws Exception |
| */ |
| @Test |
| public void testGetResourceOfOtherUser() throws Exception { |
| Request request = PropertyHelper.getReadRequest( |
| WidgetResourceProvider.WIDGET_ID_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_WIDGET_NAME_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_WIDGET_TYPE_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_TIME_CREATED_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_CLUSTER_NAME_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_AUTHOR_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_DESCRIPTION_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_SCOPE_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_METRICS_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_VALUES_PROPERTY_ID, |
| WidgetResourceProvider.WIDGET_PROPERTIES_PROPERTY_ID); |
| |
| AmbariManagementController amc = createMock(AmbariManagementController.class); |
| Clusters clusters = createMock(Clusters.class); |
| Cluster cluster = createMock(Cluster.class); |
| expect(amc.getClusters()).andReturn(clusters).atLeastOnce(); |
| expect(clusters.getClusterById(1L)).andReturn(cluster).atLeastOnce(); |
| expect(cluster.getClusterName()).andReturn("c1").anyTimes(); |
| |
| Predicate predicate = new PredicateBuilder().property( |
| WidgetResourceProvider.WIDGET_CLUSTER_NAME_PROPERTY_ID).equals("c1") |
| .and().property(WidgetResourceProvider.WIDGET_ID_PROPERTY_ID).equals("1") |
| .and().property(WidgetResourceProvider.WIDGET_AUTHOR_PROPERTY_ID).equals("username").toPredicate(); |
| |
| expect(dao.findById(1L)).andReturn(getMockEntities("USER").get(0)); |
| |
| replay(amc, clusters, cluster, dao); |
| |
| WidgetResourceProvider provider = createProvider(amc); |
| |
| try { |
| Set<Resource> results = provider.getResources(request, predicate); |
| } catch (AccessDeniedException ex) { |
| //Expected exception |
| Assert.assertEquals("User must be author of the widget or widget must have cluster scope", ex.getMessage()); |
| } |
| |
| } |
| |
| |
| /** |
| * @throws Exception |
| */ |
| |
| @Test |
| public void testCreateResources() throws Exception { |
| AmbariManagementController amc = createMock(AmbariManagementController.class); |
| Clusters clusters = createMock(Clusters.class); |
| Cluster cluster = createMock(Cluster.class); |
| expect(amc.getClusters()).andReturn(clusters).atLeastOnce(); |
| expect(clusters.getCluster((String) anyObject())).andReturn(cluster).atLeastOnce(); |
| expect(cluster.getClusterId()).andReturn(Long.valueOf(1)).anyTimes(); |
| |
| Capture<WidgetEntity> entityCapture = new Capture<WidgetEntity>(); |
| dao.create(capture(entityCapture)); |
| expectLastCall(); |
| |
| replay(amc, clusters, cluster, dao); |
| |
| WidgetResourceProvider provider = createProvider(amc); |
| |
| Map<String, Object> requestProps = new HashMap<String, Object>(); |
| requestProps.put(WidgetResourceProvider.WIDGET_CLUSTER_NAME_PROPERTY_ID, "c1"); |
| requestProps.put(WidgetResourceProvider.WIDGET_WIDGET_NAME_PROPERTY_ID, "widget name"); |
| requestProps.put(WidgetResourceProvider.WIDGET_WIDGET_TYPE_PROPERTY_ID, "GAUGE"); |
| requestProps.put(WidgetResourceProvider.WIDGET_AUTHOR_PROPERTY_ID, "admin"); |
| requestProps.put(WidgetResourceProvider.WIDGET_SCOPE_PROPERTY_ID, "USER"); |
| Set testSet = new LinkedHashSet(); |
| HashMap testMap = new HashMap(); |
| testMap.put("name","value"); |
| testMap.put("name2","value2"); |
| testSet.add(testMap); |
| requestProps.put(WidgetResourceProvider.WIDGET_METRICS_PROPERTY_ID, testSet); |
| requestProps.put(WidgetResourceProvider.WIDGET_VALUES_PROPERTY_ID, testSet); |
| requestProps.put(WidgetResourceProvider.WIDGET_PROPERTIES_PROPERTY_ID+"/property1", "value1"); |
| requestProps.put(WidgetResourceProvider.WIDGET_PROPERTIES_PROPERTY_ID+"/property2", "value2"); |
| |
| Request request = PropertyHelper.getCreateRequest(Collections.singleton(requestProps), null); |
| RequestStatus requestStatus = provider.createResources(request); |
| |
| Assert.assertTrue(entityCapture.hasCaptured()); |
| WidgetEntity entity = entityCapture.getValue(); |
| Assert.assertNotNull(entity); |
| |
| Assert.assertEquals(1, requestStatus.getAssociatedResources().size()); |
| Assert.assertEquals(Long.valueOf(1), entity.getClusterId()); |
| Assert.assertEquals("USER", entity.getScope()); |
| Assert.assertEquals("widget name", entity.getWidgetName()); |
| Assert.assertEquals(null, entity.getDefaultSectionName()); |
| Assert.assertEquals("GAUGE", entity.getWidgetType()); |
| Assert.assertEquals("admin", entity.getAuthor()); |
| Assert.assertEquals("[{\"name\":\"value\",\"name2\":\"value2\"}]", entity.getMetrics()); |
| Assert.assertEquals("[{\"name\":\"value\",\"name2\":\"value2\"}]", entity.getWidgetValues()); |
| Assert.assertEquals("{\"property2\":\"value2\",\"property1\":\"value1\"}", entity.getProperties()); |
| |
| verify(amc, clusters, cluster, dao); |
| } |
| |
| /** |
| * @throws Exception |
| */ |
| @Test |
| public void testUpdateResources() throws Exception { |
| AmbariManagementController amc = createMock(AmbariManagementController.class); |
| Clusters clusters = createMock(Clusters.class); |
| Cluster cluster = createMock(Cluster.class); |
| expect(amc.getClusters()).andReturn(clusters).atLeastOnce(); |
| expect(clusters.getCluster((String) anyObject())).andReturn(cluster).atLeastOnce(); |
| expect(cluster.getClusterId()).andReturn(Long.valueOf(1)).atLeastOnce(); |
| |
| Capture<WidgetEntity> entityCapture = new Capture<WidgetEntity>(); |
| dao.create(capture(entityCapture)); |
| expectLastCall(); |
| |
| replay(amc, clusters, cluster, dao); |
| |
| Map<String, Object> requestProps = new HashMap<String, Object>(); |
| requestProps.put(WidgetResourceProvider.WIDGET_CLUSTER_NAME_PROPERTY_ID, "c1"); |
| requestProps.put(WidgetResourceProvider.WIDGET_WIDGET_NAME_PROPERTY_ID, "widget name"); |
| requestProps.put(WidgetResourceProvider.WIDGET_WIDGET_TYPE_PROPERTY_ID, "GAUGE"); |
| requestProps.put(WidgetResourceProvider.WIDGET_AUTHOR_PROPERTY_ID, "admin"); |
| requestProps.put(WidgetResourceProvider.WIDGET_SCOPE_PROPERTY_ID, "USER"); |
| Set testSet = new LinkedHashSet(); |
| HashMap testMap = new HashMap(); |
| testMap.put("name","value"); |
| testMap.put("name2","value2"); |
| testSet.add(testMap); |
| requestProps.put(WidgetResourceProvider.WIDGET_METRICS_PROPERTY_ID, testSet); |
| requestProps.put(WidgetResourceProvider.WIDGET_VALUES_PROPERTY_ID, testSet); |
| requestProps.put(WidgetResourceProvider.WIDGET_PROPERTIES_PROPERTY_ID+"/property1", "value1"); |
| requestProps.put(WidgetResourceProvider.WIDGET_PROPERTIES_PROPERTY_ID+"/property2", "value2"); |
| |
| Request request = PropertyHelper.getCreateRequest( |
| Collections.singleton(requestProps), null); |
| |
| WidgetResourceProvider provider = createProvider(amc); |
| |
| provider.createResources(request); |
| |
| Assert.assertTrue(entityCapture.hasCaptured()); |
| WidgetEntity entity = entityCapture.getValue(); |
| Assert.assertNotNull(entity); |
| |
| Predicate predicate = new PredicateBuilder().property( |
| WidgetResourceProvider.WIDGET_CLUSTER_NAME_PROPERTY_ID).equals("c1") |
| .and().property(WidgetResourceProvider.WIDGET_ID_PROPERTY_ID).equals("1") |
| .and().property(WidgetResourceProvider.WIDGET_AUTHOR_PROPERTY_ID).equals("username").toPredicate(); |
| |
| // everything is mocked, there is no DB |
| entity.setId(Long.valueOf(1)); |
| |
| String oldMetrics = entity.getMetrics(); |
| String oldProperties = entity.getProperties(); |
| String oldName = entity.getWidgetName(); |
| |
| resetToStrict(dao); |
| expect(dao.findById(1L)).andReturn(entity).anyTimes(); |
| expect(dao.merge((WidgetEntity) anyObject())).andReturn(entity).anyTimes(); |
| replay(dao); |
| |
| requestProps = new HashMap<String, Object>(); |
| requestProps.put(WidgetResourceProvider.WIDGET_ID_PROPERTY_ID, "1"); |
| requestProps.put(WidgetResourceProvider.WIDGET_CLUSTER_NAME_PROPERTY_ID, "c1"); |
| requestProps.put(WidgetResourceProvider.WIDGET_WIDGET_NAME_PROPERTY_ID, "widget name2"); |
| requestProps.put(WidgetResourceProvider.WIDGET_WIDGET_TYPE_PROPERTY_ID, "GAUGE"); |
| requestProps.put(WidgetResourceProvider.WIDGET_AUTHOR_PROPERTY_ID, "admin"); |
| requestProps.put(WidgetResourceProvider.WIDGET_SCOPE_PROPERTY_ID, "USER"); |
| testSet = new LinkedHashSet(); |
| testMap = new HashMap(); |
| testMap.put("name","new_value"); |
| testMap.put("new_name","new_value2"); |
| testSet.add(testMap); |
| requestProps.put(WidgetResourceProvider.WIDGET_METRICS_PROPERTY_ID, testSet); |
| requestProps.put(WidgetResourceProvider.WIDGET_VALUES_PROPERTY_ID, testSet); |
| requestProps.put(WidgetResourceProvider.WIDGET_PROPERTIES_PROPERTY_ID+"/property1", "new_value1"); |
| requestProps.put(WidgetResourceProvider.WIDGET_PROPERTIES_PROPERTY_ID+"/new_property", "new_value2"); |
| |
| request = PropertyHelper.getUpdateRequest(requestProps, null); |
| |
| provider.updateResources(request, predicate); |
| |
| Assert.assertFalse(oldName.equals(entity.getWidgetName())); |
| Assert.assertFalse(oldMetrics.equals(entity.getMetrics())); |
| Assert.assertFalse(oldProperties.equals(entity.getProperties())); |
| Assert.assertEquals("[{\"name\":\"new_value\",\"new_name\":\"new_value2\"}]",entity.getMetrics()); |
| // Depends on hashing, string representation can be different |
| Assert.assertTrue(CollectionPresentationUtils.isJsonsEquals("{\"new_property\":\"new_value2\",\"property1\":\"new_value1\"}", entity.getProperties())); |
| Assert.assertEquals("widget name2",entity.getWidgetName()); |
| Assert.assertEquals(null,entity.getDefaultSectionName()); |
| |
| verify(amc, clusters, cluster, dao); |
| } |
| |
| /** |
| * @throws Exception |
| */ |
| @Test |
| public void testDeleteResources() throws Exception { |
| AmbariManagementController amc = createMock(AmbariManagementController.class); |
| Clusters clusters = createMock(Clusters.class); |
| Cluster cluster = createMock(Cluster.class); |
| expect(amc.getClusters()).andReturn(clusters).atLeastOnce(); |
| expect(clusters.getCluster((String) anyObject())).andReturn(cluster).atLeastOnce(); |
| expect(cluster.getClusterId()).andReturn(Long.valueOf(1)).anyTimes(); |
| |
| Capture<WidgetEntity> entityCapture = new Capture<WidgetEntity>(); |
| dao.create(capture(entityCapture)); |
| expectLastCall(); |
| |
| replay(amc, clusters, cluster, dao); |
| |
| WidgetResourceProvider provider = createProvider(amc); |
| |
| Map<String, Object> requestProps = new HashMap<String, Object>(); |
| requestProps.put(WidgetResourceProvider.WIDGET_CLUSTER_NAME_PROPERTY_ID, "c1"); |
| requestProps.put(WidgetResourceProvider.WIDGET_WIDGET_NAME_PROPERTY_ID, "widget name"); |
| requestProps.put(WidgetResourceProvider.WIDGET_WIDGET_TYPE_PROPERTY_ID, "GAUGE"); |
| requestProps.put(WidgetResourceProvider.WIDGET_AUTHOR_PROPERTY_ID, "admin"); |
| requestProps.put(WidgetResourceProvider.WIDGET_SCOPE_PROPERTY_ID, "USER"); |
| Set testSet = new LinkedHashSet(); |
| HashMap testMap = new HashMap(); |
| testMap.put("name","value"); |
| testMap.put("name2","value2"); |
| testSet.add(testMap); |
| requestProps.put(WidgetResourceProvider.WIDGET_METRICS_PROPERTY_ID, testSet); |
| requestProps.put(WidgetResourceProvider.WIDGET_VALUES_PROPERTY_ID, testSet); |
| requestProps.put(WidgetResourceProvider.WIDGET_PROPERTIES_PROPERTY_ID+"/property1", "value1"); |
| requestProps.put(WidgetResourceProvider.WIDGET_PROPERTIES_PROPERTY_ID+"/property2", "value2"); |
| |
| Request request = PropertyHelper.getCreateRequest(Collections.singleton(requestProps), null); |
| |
| provider.createResources(request); |
| |
| Assert.assertTrue(entityCapture.hasCaptured()); |
| WidgetEntity entity = entityCapture.getValue(); |
| Assert.assertNotNull(entity); |
| |
| Predicate predicate = new PredicateBuilder().property( |
| WidgetResourceProvider.WIDGET_CLUSTER_NAME_PROPERTY_ID).equals("c1") |
| .and().property(WidgetResourceProvider.WIDGET_ID_PROPERTY_ID).equals("1") |
| .and().property(WidgetResourceProvider.WIDGET_AUTHOR_PROPERTY_ID).equals("username").toPredicate(); |
| |
| // everything is mocked, there is no DB |
| entity.setId(Long.valueOf(1)); |
| |
| resetToStrict(dao); |
| expect(dao.findById(1L)).andReturn(entity).anyTimes(); |
| dao.remove(capture(entityCapture)); |
| expectLastCall(); |
| replay(dao); |
| |
| provider.deleteResources(request, predicate); |
| |
| WidgetEntity entity1 = entityCapture.getValue(); |
| Assert.assertEquals(Long.valueOf(1), entity1.getId()); |
| |
| verify(amc, clusters, cluster, dao); |
| } |
| |
| @Test |
| public void testScopePrivilegeCheck() throws Exception { |
| AmbariManagementController amc = createMock(AmbariManagementController.class); |
| Clusters clusters = createMock(Clusters.class); |
| Cluster cluster = createMock(Cluster.class); |
| expect(amc.getClusters()).andReturn(clusters).atLeastOnce(); |
| expect(clusters.getCluster((String) anyObject())).andReturn(cluster).atLeastOnce(); |
| expect(cluster.getClusterId()).andReturn(Long.valueOf(1)).atLeastOnce(); |
| WidgetResourceProvider widgetResourceProvider = PowerMock.createPartialMock(WidgetResourceProvider.class, "isScopeAllowedForUser"); |
| PowerMock.expectPrivate(widgetResourceProvider, "isScopeAllowedForUser", "CLUSTER").andReturn(false); |
| |
| Capture<WidgetEntity> entityCapture = new Capture<WidgetEntity>(); |
| dao.create(capture(entityCapture)); |
| expectLastCall(); |
| |
| replay(amc, clusters, cluster, dao); |
| PowerMock.replayAll(); |
| |
| Map<String, Object> requestProps = new HashMap<String, Object>(); |
| requestProps.put(WidgetResourceProvider.WIDGET_CLUSTER_NAME_PROPERTY_ID, "c1"); |
| requestProps.put(WidgetResourceProvider.WIDGET_WIDGET_NAME_PROPERTY_ID, "widget name"); |
| requestProps.put(WidgetResourceProvider.WIDGET_WIDGET_TYPE_PROPERTY_ID, "GAUGE"); |
| requestProps.put(WidgetResourceProvider.WIDGET_AUTHOR_PROPERTY_ID, "admin"); |
| requestProps.put(WidgetResourceProvider.WIDGET_SCOPE_PROPERTY_ID, "CLUSTER"); |
| Request request = PropertyHelper.getCreateRequest( |
| Collections.singleton(requestProps), null); |
| |
| try { |
| widgetResourceProvider.createResources(request); |
| } catch (AccessDeniedException ex) { |
| //Expected exception |
| } |
| |
| } |
| |
| /** |
| * @param amc |
| * @return |
| */ |
| private WidgetResourceProvider createProvider(AmbariManagementController amc) { |
| return new WidgetResourceProvider(amc); |
| } |
| |
| /** |
| * @return |
| */ |
| private List<WidgetEntity> getMockEntities(String scope) throws Exception { |
| |
| WidgetEntity widgetEntity = new WidgetEntity(); |
| widgetEntity.setClusterId(Long.valueOf(1L)); |
| widgetEntity.setWidgetName("widget name"); |
| widgetEntity.setWidgetType("GAUGE"); |
| widgetEntity.setAuthor("username"); |
| widgetEntity.setScope(scope); |
| widgetEntity.setDefaultSectionName("default_section_name"); |
| widgetEntity.setDescription("Description"); |
| widgetEntity.setMetrics("[{\"widget_id\":\"metrics/jvm/HeapMemoryUsed\"," + |
| "\"host_component_criteria\":\"host_components/metrics/dfs/FSNamesystem/HAState\\u003dactive\"," + |
| "\"service_name\":\"HDFS\",\"component_name\":\"NAMENODE\"," + |
| "\"name\":\"java.lang:type\\u003dMemory.HeapMemoryUsage[used]\",\"category\":\"\"}," + |
| "{\"widget_id\":\"metrics/jvm/HeapMemoryMax\"," + |
| "\"host_component_criteria\":\"host_components/metrics/dfs/FSNamesystem/HAState\\u003dactive\"," + |
| "\"service_name\":\"HDFS\",\"component_name\":\"NAMENODE\"," + |
| "\"name\":\"java.lang:type\\u003dMemory.HeapMemoryUsage[max]\"," + |
| "\"category\":\"\"}]"); |
| widgetEntity.setWidgetValues("[{\"name\":\"NameNode Heap\"," + |
| "\"value\":\"${java.lang:type\\u003dMemory.HeapMemoryUsage[used] / " + |
| "java.lang:type\\u003dMemory.HeapMemoryUsage[max]}\"}]"); |
| widgetEntity.setProperties("{\"name\":\"value\"}"); |
| return Arrays.asList(widgetEntity); |
| } |
| |
| /** |
| * |
| */ |
| private class MockModule implements Module { |
| /** |
| * |
| */ |
| @Override |
| public void configure(Binder binder) { |
| binder.bind(WidgetDAO.class).toInstance(dao); |
| binder.bind(Clusters.class).toInstance( |
| EasyMock.createNiceMock(Clusters.class)); |
| binder.bind(Cluster.class).toInstance( |
| EasyMock.createNiceMock(Cluster.class)); |
| binder.bind(CredentialStoreService.class).toInstance( |
| EasyMock.createNiceMock(CredentialStoreService.class) |
| ); |
| } |
| } |
| } |