Repository: ambari Updated Branches: refs/heads/trunk ea0f60b60 -> 20e66fbb2
http://git-wip-us.apache.org/repos/asf/ambari/blob/20e66fbb/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperFactoryImplTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperFactoryImplTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperFactoryImplTest.java new file mode 100644 index 0000000..08f945d --- /dev/null +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingRequestHelperFactoryImplTest.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.logging; + +import org.apache.ambari.server.controller.AmbariManagementController; +import org.apache.ambari.server.state.Cluster; +import org.apache.ambari.server.state.Clusters; +import org.apache.ambari.server.state.Config; +import org.apache.ambari.server.state.ServiceComponentHost; +import org.easymock.EasyMockSupport; +import org.junit.Assert; +import org.junit.Test; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import static org.junit.Assert.*; +import static org.easymock.EasyMock.*; + +public class LoggingRequestHelperFactoryImplTest { + + @Test + public void testHelperCreation() throws Exception { + final String expectedClusterName = "testclusterone"; + final String expectedHostName = "c6410.ambari.apache.org"; + final String expectedPortNumber = "61889"; + + EasyMockSupport mockSupport = new EasyMockSupport(); + + AmbariManagementController controllerMock = + mockSupport.createMock(AmbariManagementController.class); + + Clusters clustersMock = + mockSupport.createMock(Clusters.class); + + Cluster clusterMock = + mockSupport.createMock(Cluster.class); + + Config logSearchSiteConfig = + mockSupport.createMock(Config.class); + + ServiceComponentHost serviceComponentHostMock = + mockSupport.createMock(ServiceComponentHost.class); + + Map<String, String> testProperties = + new HashMap<String, String>(); + testProperties.put("logsearch.ui.port", expectedPortNumber); + + expect(controllerMock.getClusters()).andReturn(clustersMock).atLeastOnce(); + expect(clustersMock.getCluster(expectedClusterName)).andReturn(clusterMock).atLeastOnce(); + expect(clusterMock.getDesiredConfigByType("logsearch-site")).andReturn(logSearchSiteConfig).atLeastOnce(); + expect(clusterMock.getServiceComponentHosts("LOGSEARCH", "LOGSEARCH_SERVER")).andReturn(Collections.singletonList(serviceComponentHostMock)).atLeastOnce(); + expect(logSearchSiteConfig.getProperties()).andReturn(testProperties).atLeastOnce(); + expect(serviceComponentHostMock.getHostName()).andReturn(expectedHostName).atLeastOnce(); + + mockSupport.replayAll(); + + LoggingRequestHelperFactory helperFactory = + new LoggingRequestHelperFactoryImpl(); + + LoggingRequestHelper helper = + helperFactory.getHelper(controllerMock, expectedClusterName); + + assertNotNull("LoggingRequestHelper object returned by the factory was null", + helper); + + assertTrue("Helper created was not of the expected type", + helper instanceof LoggingRequestHelperImpl); + + mockSupport.verifyAll(); + } + + @Test + public void testHelperCreationWithNoLogSearchServersAvailable() throws Exception { + final String expectedClusterName = "testclusterone"; + final String expectedPortNumber = "61889"; + + EasyMockSupport mockSupport = new EasyMockSupport(); + + AmbariManagementController controllerMock = + mockSupport.createMock(AmbariManagementController.class); + + Clusters clustersMock = + mockSupport.createMock(Clusters.class); + + Cluster clusterMock = + mockSupport.createMock(Cluster.class); + + Config logSearchSiteConfig = + mockSupport.createMock(Config.class); + + Map<String, String> testProperties = + new HashMap<String, String>(); + testProperties.put("logsearch.ui.port", expectedPortNumber); + + expect(controllerMock.getClusters()).andReturn(clustersMock).atLeastOnce(); + expect(clustersMock.getCluster(expectedClusterName)).andReturn(clusterMock).atLeastOnce(); + expect(clusterMock.getDesiredConfigByType("logsearch-site")).andReturn(logSearchSiteConfig).atLeastOnce(); + expect(clusterMock.getServiceComponentHosts("LOGSEARCH", "LOGSEARCH_SERVER")).andReturn(Collections.<ServiceComponentHost>emptyList()).atLeastOnce(); + + mockSupport.replayAll(); + + LoggingRequestHelperFactory helperFactory = + new LoggingRequestHelperFactoryImpl(); + + LoggingRequestHelper helper = + helperFactory.getHelper(controllerMock, expectedClusterName); + + assertNull("LoggingRequestHelper object returned by the factory should have been null", + helper); + + mockSupport.verifyAll(); + } + +} http://git-wip-us.apache.org/repos/asf/ambari/blob/20e66fbb/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java new file mode 100644 index 0000000..19c0756 --- /dev/null +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/logging/LoggingSearchPropertyProviderTest.java @@ -0,0 +1,170 @@ +/** + * 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.logging; + +import org.apache.ambari.server.api.services.AmbariMetaInfo; +import org.apache.ambari.server.controller.AmbariManagementController; +import org.apache.ambari.server.controller.spi.Predicate; +import org.apache.ambari.server.controller.spi.PropertyProvider; +import org.apache.ambari.server.controller.spi.Request; +import org.apache.ambari.server.controller.spi.Resource; +import org.apache.ambari.server.controller.utilities.PropertyHelper; +import org.apache.ambari.server.state.Cluster; +import org.apache.ambari.server.state.Clusters; +import org.apache.ambari.server.state.ComponentInfo; +import org.apache.ambari.server.state.LogDefinition; +import org.apache.ambari.server.state.StackId; +import org.easymock.Capture; +import org.easymock.EasyMockSupport; +import org.junit.Test; + +import java.util.Collections; +import java.util.Set; + +import static org.junit.Assert.*; +import static org.easymock.EasyMock.*; + +public class LoggingSearchPropertyProviderTest { + + @Test + public void testBasicCall() throws Exception { + final String expectedLogFilePath = + "/var/log/hdfs/hdfs_namenode.log"; + + final String expectedSearchEnginePath = "/api/v1/clusters/clusterone/logging/searchEngine"; + + final String expectedAmbariURL = "http://c6401.ambari.apache.org:8080"; + + final String expectedTailFileQueryString = "?components_name=hdfs_namenode&host=c6401.ambari.apache.org&pageSize=50"; + + final String expectedStackName = "HDP"; + final String expectedStackVersion = "2.4"; + final String expectedComponentName = "NAMENODE"; + final String expectedServiceName = "HDFS"; + final String expectedLogSearchComponentName = "hdfs_namenode"; + + EasyMockSupport mockSupport = new EasyMockSupport(); + + Resource resourceMock = + mockSupport.createMock(Resource.class); + expect(resourceMock.getPropertyValue(PropertyHelper.getPropertyId("HostRoles", "component_name"))).andReturn(expectedComponentName).atLeastOnce(); + expect(resourceMock.getPropertyValue(PropertyHelper.getPropertyId("HostRoles", "host_name"))).andReturn("c6401.ambari.apache.org").atLeastOnce(); + expect(resourceMock.getPropertyValue(PropertyHelper.getPropertyId("HostRoles", "cluster_name"))).andReturn("clusterone").atLeastOnce(); + + Capture<HostComponentLoggingInfo> captureLogInfo = new Capture<HostComponentLoggingInfo>(); + // expect set method to be called + resourceMock.setProperty(eq("logging"), capture(captureLogInfo)); + + LoggingRequestHelperFactory helperFactoryMock = + mockSupport.createMock(LoggingRequestHelperFactory.class); + + LoggingRequestHelper helperMock = + mockSupport.createMock(LoggingRequestHelper.class); + + expect(helperMock.sendGetLogFileNamesRequest(expectedLogSearchComponentName, "c6401.ambari.apache.org")).andReturn(Collections.singleton(expectedLogFilePath)); + + Request requestMock = + mockSupport.createMock(Request.class); + + Predicate predicateMock = + mockSupport.createMock(Predicate.class); + + LoggingSearchPropertyProvider.ControllerFactory factoryMock = + mockSupport.createMock(LoggingSearchPropertyProvider.ControllerFactory.class); + + AmbariManagementController controllerMock = + mockSupport.createMock(AmbariManagementController.class); + + AmbariMetaInfo metaInfoMock = + mockSupport.createMock(AmbariMetaInfo.class); + + Clusters clustersMock = + mockSupport.createMock(Clusters.class); + + Cluster clusterMock = + mockSupport.createMock(Cluster.class); + + StackId stackIdMock = + mockSupport.createMock(StackId.class); + + ComponentInfo componentInfoMock = + mockSupport.createMock(ComponentInfo.class); + + LogDefinition logDefinitionMock = + mockSupport.createMock(LogDefinition.class); + + expect(factoryMock.getAmbariManagementController()).andReturn(controllerMock); + expect(controllerMock.getAmbariServerURI(expectedSearchEnginePath)). + andReturn(expectedAmbariURL + expectedSearchEnginePath).atLeastOnce(); + expect(controllerMock.getAmbariMetaInfo()).andReturn(metaInfoMock).atLeastOnce(); + expect(controllerMock.getClusters()).andReturn(clustersMock).atLeastOnce(); + expect(clustersMock.getCluster("clusterone")).andReturn(clusterMock).atLeastOnce(); + expect(stackIdMock.getStackName()).andReturn(expectedStackName).atLeastOnce(); + expect(stackIdMock.getStackVersion()).andReturn(expectedStackVersion).atLeastOnce(); + expect(clusterMock.getCurrentStackVersion()).andReturn(stackIdMock).atLeastOnce(); + + expect(metaInfoMock.getComponentToService(expectedStackName, expectedStackVersion, expectedComponentName)).andReturn(expectedServiceName).atLeastOnce(); + expect(metaInfoMock.getComponent(expectedStackName, expectedStackVersion, expectedServiceName, expectedComponentName)).andReturn(componentInfoMock).atLeastOnce(); + + expect(componentInfoMock.getLogs()).andReturn(Collections.singletonList(logDefinitionMock)).atLeastOnce(); + expect(logDefinitionMock.getLogId()).andReturn(expectedLogSearchComponentName).atLeastOnce(); + + expect(helperFactoryMock.getHelper(controllerMock, "clusterone")).andReturn(helperMock).atLeastOnce(); + + mockSupport.replayAll(); + + PropertyProvider propertyProvider = + new LoggingSearchPropertyProvider(helperFactoryMock, factoryMock); + + + Set<Resource> returnedResources = + propertyProvider.populateResources(Collections.singleton(resourceMock), requestMock, predicateMock); + + assertEquals("Returned resource set was of an incorrect size", + 1, returnedResources.size()); + + HostComponentLoggingInfo returnedLogInfo = + captureLogInfo.getValue(); + + assertNotNull("Returned log info should not be null", + returnedLogInfo); + + assertEquals("Returned component was not the correct name", + "hdfs_namenode", returnedLogInfo.getComponentName()); + + assertEquals("Returned list of log file names for this component was incorrect", + 1, returnedLogInfo.getListOfLogFileDefinitions().size()); + + LogFileDefinitionInfo definitionInfo = + returnedLogInfo.getListOfLogFileDefinitions().get(0); + + assertEquals("Incorrect log file type was found", + LogFileType.SERVICE, definitionInfo.getLogFileType()); + assertEquals("Incorrect log file path found", + expectedLogFilePath, definitionInfo.getLogFileName()); + assertEquals("Incorrect URL path to searchEngine", + expectedAmbariURL + expectedSearchEnginePath, definitionInfo.getSearchEngineURL()); + assertEquals("Incorrect URL path to log file tail", + expectedAmbariURL + expectedSearchEnginePath + expectedTailFileQueryString, definitionInfo.getLogFileTailURL()); + + + + mockSupport.verifyAll(); + } + +}