/** * 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 static org.easymock.EasyMock.expect; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.Collections; import java.util.HashMap; import java.util.Map; import org.apache.ambari.server.configuration.Configuration; import org.apache.ambari.server.controller.AmbariManagementController; 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.state.Config; import org.apache.ambari.server.state.Service; import org.apache.ambari.server.state.ServiceComponentHost; import org.apache.ambari.server.state.State; import org.easymock.EasyMockSupport; import org.junit.Test; public class LoggingRequestHelperFactoryImplTest { @Test public void testHelperCreation() throws Exception { final String expectedClusterName = "testclusterone"; final String expectedHostName = "c6410.ambari.apache.org"; final String expectedPortNumber = "61889"; final int expectedConnectTimeout = 3000; final int expectedReadTimeout = 3000; EasyMockSupport mockSupport = new EasyMockSupport(); AmbariManagementController controllerMock = mockSupport.createMock(AmbariManagementController.class); Clusters clustersMock = mockSupport.createMock(Clusters.class); Cluster clusterMock = mockSupport.createMock(Cluster.class); Config logSearchEnvConfig = mockSupport.createMock(Config.class); ServiceComponentHost serviceComponentHostMock = mockSupport.createMock(ServiceComponentHost.class); CredentialStoreService credentialStoreServiceMock = mockSupport.createMock(CredentialStoreService.class); Configuration serverConfigMock = mockSupport.createMock(Configuration.class); Map<String, String> testProperties = new HashMap<>(); testProperties.put("logsearch_ui_port", expectedPortNumber); expect(controllerMock.getClusters()).andReturn(clustersMock).atLeastOnce(); expect(controllerMock.getCredentialStoreService()).andReturn(credentialStoreServiceMock).atLeastOnce(); expect(clustersMock.getCluster(expectedClusterName)).andReturn(clusterMock).atLeastOnce(); expect(clusterMock.getDesiredConfigByType("logsearch-env")).andReturn(logSearchEnvConfig).atLeastOnce(); expect(clusterMock.getServiceComponentHosts("LOGSEARCH", "LOGSEARCH_SERVER")).andReturn(Collections.singletonList(serviceComponentHostMock)).atLeastOnce(); expect(clusterMock.getServices()).andReturn(Collections.singletonMap("LOGSEARCH", (Service) null)).atLeastOnce(); expect(logSearchEnvConfig.getProperties()).andReturn(testProperties).atLeastOnce(); expect(serviceComponentHostMock.getHostName()).andReturn(expectedHostName).atLeastOnce(); expect(serviceComponentHostMock.getState()).andReturn(State.STARTED).atLeastOnce(); expect(serverConfigMock.getLogSearchPortalConnectTimeout()).andReturn(expectedConnectTimeout); expect(serverConfigMock.getLogSearchPortalReadTimeout()).andReturn(expectedReadTimeout); mockSupport.replayAll(); LoggingRequestHelperFactory helperFactory = new LoggingRequestHelperFactoryImpl(); // set the configuration mock using the concrete type ((LoggingRequestHelperFactoryImpl)helperFactory).setAmbariServerConfiguration(serverConfigMock); 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); assertEquals("Helper factory did not set the expected connect timeout on the helper instance", expectedConnectTimeout, ((LoggingRequestHelperImpl)helper).getLogSearchConnectTimeoutInMilliseconds()); assertEquals("Helper factory did not set the expected read timeout on the helper instance", expectedReadTimeout, ((LoggingRequestHelperImpl)helper).getLogSearchReadTimeoutInMilliseconds()); mockSupport.verifyAll(); } @Test public void testHelperCreationLogSearchServerNotStarted() 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 logSearchEnvConfig = mockSupport.createMock(Config.class); ServiceComponentHost serviceComponentHostMock = mockSupport.createMock(ServiceComponentHost.class); Configuration serverConfigMock = mockSupport.createMock(Configuration.class); Map<String, String> testProperties = new HashMap<>(); testProperties.put("logsearch_ui_port", expectedPortNumber); expect(controllerMock.getClusters()).andReturn(clustersMock).atLeastOnce(); expect(clustersMock.getCluster(expectedClusterName)).andReturn(clusterMock).atLeastOnce(); expect(clusterMock.getDesiredConfigByType("logsearch-env")).andReturn(logSearchEnvConfig).atLeastOnce(); expect(clusterMock.getServiceComponentHosts("LOGSEARCH", "LOGSEARCH_SERVER")).andReturn(Collections.singletonList(serviceComponentHostMock)).atLeastOnce(); expect(clusterMock.getServices()).andReturn(Collections.singletonMap("LOGSEARCH", (Service) null)).atLeastOnce(); // set the LOGSEARCH_SERVER's state to INSTALLED, to simulate the case where // the server is installed, but not started expect(serviceComponentHostMock.getState()).andReturn(State.INSTALLED).atLeastOnce(); mockSupport.replayAll(); LoggingRequestHelperFactory helperFactory = new LoggingRequestHelperFactoryImpl(); // set the configuration mock using the concrete type ((LoggingRequestHelperFactoryImpl)helperFactory).setAmbariServerConfiguration(serverConfigMock); LoggingRequestHelper helper = helperFactory.getHelper(controllerMock, expectedClusterName); assertNull("LoggingRequestHelper object returned by the factory should have been null", helper); mockSupport.verifyAll(); } @Test public void testHelperCreationWithNoLogSearchServersAvailable() throws Exception { final String expectedClusterName = "testclusterone"; EasyMockSupport mockSupport = new EasyMockSupport(); AmbariManagementController controllerMock = mockSupport.createMock(AmbariManagementController.class); Clusters clustersMock = mockSupport.createMock(Clusters.class); Cluster clusterMock = mockSupport.createMock(Cluster.class); Config logSearchEnvConfig = mockSupport.createMock(Config.class); Configuration serverConfigMock = mockSupport.createMock(Configuration.class); expect(controllerMock.getClusters()).andReturn(clustersMock).atLeastOnce(); expect(clustersMock.getCluster(expectedClusterName)).andReturn(clusterMock).atLeastOnce(); expect(clusterMock.getDesiredConfigByType("logsearch-env")).andReturn(logSearchEnvConfig).atLeastOnce(); expect(clusterMock.getServiceComponentHosts("LOGSEARCH", "LOGSEARCH_SERVER")).andReturn(Collections.<ServiceComponentHost>emptyList()).atLeastOnce(); expect(clusterMock.getServices()).andReturn(Collections.singletonMap("LOGSEARCH", (Service)null)).atLeastOnce(); mockSupport.replayAll(); LoggingRequestHelperFactory helperFactory = new LoggingRequestHelperFactoryImpl(); // set the configuration mock using the concrete type ((LoggingRequestHelperFactoryImpl)helperFactory).setAmbariServerConfiguration(serverConfigMock); LoggingRequestHelper helper = helperFactory.getHelper(controllerMock, expectedClusterName); assertNull("LoggingRequestHelper object returned by the factory should have been null", helper); mockSupport.verifyAll(); } @Test public void testHelperCreationWithNoLogSearchServiceDeployed() throws Exception { final String expectedClusterName = "testclusterone"; EasyMockSupport mockSupport = new EasyMockSupport(); AmbariManagementController controllerMock = mockSupport.createMock(AmbariManagementController.class); Clusters clustersMock = mockSupport.createMock(Clusters.class); Cluster clusterMock = mockSupport.createMock(Cluster.class); Configuration serverConfigMock = mockSupport.createMock(Configuration.class); expect(controllerMock.getClusters()).andReturn(clustersMock).atLeastOnce(); expect(clustersMock.getCluster(expectedClusterName)).andReturn(clusterMock).atLeastOnce(); // do not include LOGSEARCH in this map, to simulate the case when LogSearch is not deployed expect(clusterMock.getServices()).andReturn(Collections.singletonMap("HDFS", (Service)null)).atLeastOnce(); mockSupport.replayAll(); LoggingRequestHelperFactory helperFactory = new LoggingRequestHelperFactoryImpl(); // set the configuration mock using the concrete type ((LoggingRequestHelperFactoryImpl)helperFactory).setAmbariServerConfiguration(serverConfigMock); LoggingRequestHelper helper = helperFactory.getHelper(controllerMock, expectedClusterName); assertNull("LoggingRequestHelper object returned by the factory should have been null", helper); mockSupport.verifyAll(); } @Test public void testHelperCreationWithNoAmbariServerConfiguration() throws Exception { final String expectedClusterName = "testclusterone"; EasyMockSupport mockSupport = new EasyMockSupport(); AmbariManagementController controllerMock = mockSupport.createMock(AmbariManagementController.class); mockSupport.replayAll(); LoggingRequestHelperFactory helperFactory = new LoggingRequestHelperFactoryImpl(); // set the configuration mock using the concrete type // set the configuration object to null, to simulate an error in dependency injection ((LoggingRequestHelperFactoryImpl)helperFactory).setAmbariServerConfiguration(null); LoggingRequestHelper helper = helperFactory.getHelper(controllerMock, expectedClusterName); assertNull("LoggingRequestHelper object returned by the factory should have been null", helper); mockSupport.verifyAll(); } }