/***************************************************************************
* Copyright 2011 Global Biodiversity Information Facility Secretariat
* Licensed 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.gbif.ipt.service.admin.impl;
import org.gbif.ipt.config.AppConfig;
import org.gbif.ipt.config.ConfigManagerImpl;
import org.gbif.ipt.config.ConfigWarnings;
import org.gbif.ipt.config.DataDir;
import org.gbif.ipt.config.PublishingMonitor;
import org.gbif.ipt.mock.MockDataDir;
import org.gbif.ipt.mock.MockRegistrationManager;
import org.gbif.ipt.mock.MockResourceManager;
import org.gbif.ipt.mock.MockUserAccountManager;
import org.gbif.ipt.mock.MockVocabulariesManager;
import org.gbif.ipt.service.InvalidConfigException;
import org.gbif.ipt.service.admin.ConfigManager;
import org.gbif.ipt.service.admin.ExtensionManager;
import org.gbif.ipt.service.admin.RegistrationManager;
import org.gbif.ipt.service.admin.UserAccountManager;
import org.gbif.ipt.service.admin.VocabulariesManager;
import org.gbif.ipt.service.manage.ResourceManager;
import org.gbif.ipt.utils.InputStreamUtils;
import org.gbif.utils.HttpUtil;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.impl.client.DefaultHttpClient;
import org.junit.Ignore;
import org.junit.Test;
import org.xml.sax.SAXException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.mock;
/**
* This class tests the relevant methods of the ConfigManagerImpl class.
*/
public class ConfigManagerImplTest {
private DefaultHttpClient client;
private AppConfig appConfig;
/**
* @return a new ConfigManager instance.
*/
private ConfigManagerImpl getConfigManager() throws ParserConfigurationException, SAXException {
DataDir mockedDataDir = MockDataDir.buildMock();
InputStreamUtils streamUtils = new InputStreamUtils();
ResourceManager mockedResourceManager = MockResourceManager.buildMock();
ExtensionManager mockedExtensionManager = mock(ExtensionManager.class);
VocabulariesManager mockedVocabularies = mock(VocabulariesManager.class);
RegistrationManager mockedRegistrationManager = MockRegistrationManager.buildMock();
UserAccountManager mockedUserManager = MockUserAccountManager.buildMock();
ConfigWarnings warnings = new ConfigWarnings();
PublishingMonitor mockPublishingMonitor = mock(PublishingMonitor.class);
client = HttpUtil.newMultithreadedClient(1000, 1, 1);
appConfig = new AppConfig(mockedDataDir);
return new ConfigManagerImpl(mockedDataDir, appConfig, streamUtils, mockedUserManager, mockedResourceManager,
mockedExtensionManager, mockedVocabularies, mockedRegistrationManager, warnings, client, mockPublishingMonitor);
}
/**
* Test that the method setProxy of the ConfigManager throws an InvalidConfigException if the proxy given by the user
* don't exists or the client can't connect with it.
*/
@Test(expected = InvalidConfigException.class)
public void testBadProxy() throws ParserConfigurationException, SAXException {
// Creating configManager
ConfigManager configManager = getConfigManager();
// Saving a bad proxy
String newProxy = "proxy.example:8080";
configManager.setProxy(newProxy);
assertEquals(newProxy, client.getParams().getParameter(ConnRoutePNames.DEFAULT_PROXY).toString());
// Saving a bad proxy
newProxy = "http://proxy.example:8080";
configManager.setProxy(newProxy);
assertEquals(newProxy, client.getParams().getParameter(ConnRoutePNames.DEFAULT_PROXY).toString());
}
/**
* Test that the method setBaseUrl of the ConfigManager throws an InvalidConfigException if the baseURL given by the
* user doesn't exist or the client can't connect with it.
*
* @throws MalformedURLException if the baseURL is malformed.
*/
@Ignore
@Test
public void testSetBaseURL() throws ParserConfigurationException, SAXException, MalformedURLException {
// Create configManager.
ConfigManager configManager = getConfigManager();
// try to save a nonexistent baseURL.
try {
URL baseURL2 = new URL("http://1.1.1.1/ipt");
configManager.setBaseUrl(baseURL2);
// the validation should never get here.
fail();
} catch (InvalidConfigException e) {
}
// try to save an existent baseURL without an IPT installed.
try {
URL baseURL2 = new URL("http://www.gbif.org");
configManager.setBaseUrl(baseURL2);
// the validation should never get here.
fail();
} catch (InvalidConfigException e) {
}
// Save good baseURL
URL baseURL = new URL("http://ipt.gbif.org");
configManager.setBaseUrl(baseURL);
assertEquals(baseURL.toString(), appConfig.getProperty(AppConfig.BASEURL));
// TODO figure out how to test a proxy
// // With proxy
// String proxy = "http://proxy4.ciat.cgiar.org:8080";
// configManager.setProxy(proxy);
//
// baseURL = new URL("http://127.0.0.1:7001/ipt");
// configManager.setBaseUrl(baseURL);
//
// assertEquals(baseURL.toString(), appConfig.getProperty(AppConfig.BASEURL));
}
/**
* Test that the method setProxy of the ConfigManager saves the proxy in the application properties if the client can
* connect with it.
*/
@Test
public void testSetProxy() throws ParserConfigurationException, SAXException {
// Creating configManager
ConfigManager configManager = getConfigManager();
// TODO figure out how to test a proxy
// // Saving proxy first time
// String newProxy = "http://proxy.ciat.cgiar.org:8080";
// configManager.setProxy(newProxy);
// assertEquals(newProxy, appConfig.getProperty(AppConfig.PROXY));
//
// // Saving proxy second time
// newProxy = "http://proxy.ciat.cgiar.org:8080";
// configManager.setProxy(newProxy);
// assertEquals(newProxy, appConfig.getProperty(AppConfig.PROXY));
// Saving null proxy
String newProxy = null;
configManager.setProxy(newProxy);
assertEquals("", appConfig.getProperty(AppConfig.PROXY));
// Saving an empty proxy String
newProxy = "";
configManager.setProxy(newProxy);
assertEquals(newProxy, appConfig.getProperty(AppConfig.PROXY));
}
@Test
public void testValidateBaseURLBadHostName()
throws ParserConfigurationException, SAXException, MalformedURLException {
// Creating configManager
ConfigManagerImpl configManager = getConfigManager();
// Base URL invalid, since host name has underscore "_", which violoates RFC 1123 and RFC 952
URL testURL = new URL("http://testipt1_vh.gbif.org:8080/ipt");
assertFalse(configManager.validateBaseURL(testURL));
}
}