/**
* Copyright 2014 Comcast Cable Communications Management, LLC
*
* 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 com.comcast.viper.flume2storm.location;
import static com.comcast.viper.flume2storm.connection.parameters.SimpleConnectionParameters.HOSTNAME;
import static com.comcast.viper.flume2storm.connection.parameters.SimpleConnectionParameters.PORT;
import static com.comcast.viper.flume2storm.location.StaticLocationServiceConfiguration.SERVICE_PROVIDER_BASE;
import static com.comcast.viper.flume2storm.location.StaticLocationServiceConfiguration.SERVICE_PROVIDER_BASE_DEFAULT;
import static com.comcast.viper.flume2storm.location.StaticLocationServiceConfiguration.SERVICE_PROVIDER_LIST;
import static org.assertj.core.api.Assertions.assertThat;
import java.util.Collection;
import org.apache.commons.configuration.BaseConfiguration;
import org.apache.commons.configuration.Configuration;
import org.apache.commons.lang3.StringUtils;
import org.junit.Before;
import org.junit.Test;
import com.comcast.viper.flume2storm.F2SConfigurationException;
import com.comcast.viper.flume2storm.connection.parameters.SimpleConnectionParameters;
/**
* Test the {@link StaticLocationService}
*/
public class SimpleStaticLocationServiceTest {
private static final String SP1 = "quick";
private static final SimpleConnectionParameters CP1 = new SimpleConnectionParameters("machine1.mydomain.com", 1000);
private static final String SP2 = "brown";
private static final SimpleConnectionParameters CP2 = new SimpleConnectionParameters("localhost", 1000);
private static final String SP3 = "fox";
private static final SimpleConnectionParameters CP3 = new SimpleConnectionParameters("machine2.mydomain.com", 1001);
private static final String SIMPLE_SERVICE_PROVIDER_BASE = "simple.service.providers";
private Configuration configuration;
private static String buildPName(String... elements) {
return StringUtils.join(elements, ".");
}
/**
* Loads the {@link StaticLocationService} configuration file
*/
@Before
public void init() {
configuration = new BaseConfiguration();
// List of service providers to load
configuration.addProperty(SERVICE_PROVIDER_LIST, StringUtils.join(new String[] { SP1, SP2 }, " "));
// First service provider
configuration.addProperty(buildPName(SERVICE_PROVIDER_BASE_DEFAULT, SP1, HOSTNAME), CP1.getHostname());
configuration.addProperty(buildPName(SERVICE_PROVIDER_BASE_DEFAULT, SP1, PORT), CP1.getPort());
// Second service provider
configuration.addProperty(buildPName(SERVICE_PROVIDER_BASE_DEFAULT, SP2, HOSTNAME), CP2.getHostname());
configuration.addProperty(buildPName(SERVICE_PROVIDER_BASE_DEFAULT, SP2, PORT), CP2.getPort());
// Third service provider
configuration.addProperty(buildPName(SIMPLE_SERVICE_PROVIDER_BASE, SP3, HOSTNAME), CP3.getHostname());
configuration.addProperty(buildPName(SIMPLE_SERVICE_PROVIDER_BASE, SP3, PORT), CP3.getPort());
configuration.addProperty("some.other.variable", "whatever");
}
/**
* Test a configuration missing the {@link ServiceProviderConfigurationLoader}
* attribute
*
* @throws F2SConfigurationException
* If the configuration is invalid
*/
@Test(expected = F2SConfigurationException.class)
@SuppressWarnings("unused")
public void testInvalidConfiguration() throws F2SConfigurationException {
new SimpleStaticLocationService(configuration);
}
/**
* Test a configuration using the default
* {@link StaticLocationServiceConfiguration#SERVICE_PROVIDER_BASE}
*
* @throws F2SConfigurationException
* If the configuration is invalid
*/
@Test
public void testBaseConfiguration() throws F2SConfigurationException {
// Adding Service provider loader
configuration.addProperty(StaticLocationServiceConfiguration.CONFIGURATION_LOADER_CLASS,
SimpleServiceProviderConfigurationLoader.class.getName());
// Loading static location service
SimpleStaticLocationService ssLocationService = new SimpleStaticLocationService(configuration);
Collection<SimpleServiceProvider> serviceProviders = ssLocationService.getServiceProviders();
assertThat(serviceProviders).hasSize(2);
assertThat(serviceProviders).contains(new SimpleServiceProvider(CP1), new SimpleServiceProvider(CP2));
}
/**
* Test a configuration using a specific
* {@link StaticLocationServiceConfiguration#SERVICE_PROVIDER_BASE}
*
* @throws F2SConfigurationException
* If the configuration is invalid
*/
@Test
public void testWithSimpleBase() throws F2SConfigurationException {
// Adding Service provider loader
configuration.addProperty(StaticLocationServiceConfiguration.CONFIGURATION_LOADER_CLASS,
SimpleServiceProviderConfigurationLoader.class.getName());
// Changing service provider base
configuration.addProperty(SERVICE_PROVIDER_BASE, SIMPLE_SERVICE_PROVIDER_BASE);
// Changing list of service providers
configuration.clearProperty(SERVICE_PROVIDER_LIST);
configuration.addProperty(SERVICE_PROVIDER_LIST, SP3);
// Loading static location service
SimpleStaticLocationService ssLocationService = new SimpleStaticLocationService(configuration);
Collection<SimpleServiceProvider> serviceProviders = ssLocationService.getServiceProviders();
assertThat(serviceProviders).hasSize(1);
assertThat(serviceProviders).contains(new SimpleServiceProvider(CP3));
}
}