package org.marketcetera.strategyagent;
import org.marketcetera.util.misc.ClassVersion;
import org.marketcetera.module.*;
import org.marketcetera.modules.remote.receiver.ReceiverFactory;
import org.marketcetera.client.ClientModuleFactory;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
import java.util.Properties;
import java.util.Map;
import java.util.HashMap;
/* $License$ */
/**
* Tests {@link AgentConfigurationProvider}.
*
* @author anshul@marketcetera.com
* @version $Id: AgentConfigurationProviderTest.java 16154 2012-07-14 16:34:05Z colin $
* @since 2.0.0
*/
@ClassVersion("$Id: AgentConfigurationProviderTest.java 16154 2012-07-14 16:34:05Z colin $")
public class AgentConfigurationProviderTest extends PropertiesConfigurationProviderTest {
@Test
public void receiverProperties() throws Exception {
AgentConfigurationProvider provider = (AgentConfigurationProvider) createProvider();
//verify initial value
assertNull(provider.getReceiverProperties());
Properties props = createLoaderProperties(".");
mLoader.addResource(ReceiverFactory.INSTANCE_URN, props);
//Verify various return values before setting the receiver properties
assertAttribs(provider, ReceiverFactory.INSTANCE_URN, "Value1Prop", "Value2Prop", null);
//Set properties to an empty map and make sure it makes no difference
provider.setReceiverProperties(new HashMap<String, String>());
assertEquals(new HashMap<String, String>(), provider.getReceiverProperties());
assertAttribs(provider, ReceiverFactory.INSTANCE_URN, "Value1Prop", "Value2Prop", null);
//Set properties to a non-empty map
Map<String, String> map = createPropertiesAttrib();
provider.setReceiverProperties(map);
//Verify various return values
assertAttribs(provider, ReceiverFactory.INSTANCE_URN, "Value1SA", "Value2Prop", "Value3SA");
//Verify that the returned properties instance is a clone of the supplied one
assertNotSame(map, provider.getReceiverProperties());
assertEquals(map, provider.getReceiverProperties());
//Modifying the map after setting it doesn't change the set map
Map<String, String> setMap = provider.getReceiverProperties();
String propertyX = "PropertyX";
map.put(propertyX, "new Value");
assertEquals(setMap, provider.getReceiverProperties());
assertFalse(provider.getReceiverProperties().containsKey(propertyX));
//Modifying the map after getting it doesn't change the set map
provider.getReceiverProperties().put(propertyX, "new Value");
assertEquals(setMap, provider.getReceiverProperties());
assertFalse(provider.getReceiverProperties().containsKey(propertyX));
//verify that we can set properties to null
provider.setReceiverProperties(null);
assertNull(provider.getReceiverProperties());
}
@Test
public void clientProperties() throws Exception {
AgentConfigurationProvider provider = (AgentConfigurationProvider) createProvider();
//verify initial value
assertNull(provider.getClientProperties());
Properties props = createLoaderProperties("");
ModuleURN clientFactoryURN = ClientModuleFactory.INSTANCE_URN.parent();
mLoader.addResource(clientFactoryURN, props);
//Verify various return values before setting the receiver properties
assertAttribs(provider, clientFactoryURN, "Value1Prop", "Value2Prop", null);
//Set properties to an empty map and make sure it makes no difference
provider.setClientProperties(new HashMap<String, String>());
assertEquals(new HashMap<String, String>(), provider.getClientProperties());
assertAttribs(provider, clientFactoryURN, "Value1Prop", "Value2Prop", null);
//Set properties to a non-empty map
Map<String, String> map = createPropertiesAttrib();
provider.setClientProperties(map);
//Verify various return values
assertAttribs(provider, clientFactoryURN, "Value1SA", "Value2Prop", "Value3SA");
//Verify that the returned properties instance is a clone of the supplied one
assertNotSame(map, provider.getClientProperties());
assertEquals(map, provider.getClientProperties());
//Modifying the map after setting it doesn't change the set map
Map<String, String> setMap = provider.getClientProperties();
String propertyX = "PropertyX";
map.put(propertyX, "new Value");
assertEquals(setMap, provider.getClientProperties());
assertFalse(provider.getClientProperties().containsKey(propertyX));
//Modifying the map after getting it doesn't change the set map
provider.getClientProperties().put(propertyX, "new Value");
assertEquals(setMap, provider.getClientProperties());
assertFalse(provider.getClientProperties().containsKey(propertyX));
//verify that we can set properties to null
provider.setClientProperties(null);
assertNull(provider.getClientProperties());
}
@Override
protected ModuleConfigurationProvider createProvider(ClassLoader inLoader) {
return new AgentConfigurationProvider(inLoader);
}
/**
* Creates the properties map for setting as either client or receiver
* properties.
*
* @return the properties map.
*/
private static Map<String, String> createPropertiesAttrib() {
Map<String, String> map = new HashMap<String, String>();
map.put("Property1", "Value1SA");
map.put("Property3", "Value3SA");
return map;
}
/**
* Cretes the properties for the dynamic classloader to return for
* either client or receiver modules.
*
* @param inPrefix the prefix to prepend to the property key.
*
* @return the properties instance.
*/
private static Properties createLoaderProperties(String inPrefix) {
Properties props = new Properties();
props.setProperty(inPrefix + "Property1", "Value1Prop");
props.setProperty(inPrefix + "Property2", "Value2Prop");
return props;
}
/**
* Verifes the return value of {@link ModuleConfigurationProvider#getDefaultFor(ModuleURN, String)}.
*
* @param provider the provider to query.
* @param inURN the URN to supply
* @param inValue1 expected first value
* @param inValue2 expected second value
* @param inValue3 expected third value
*
* @throws ModuleException if there were unexpected failures
*/
private static void assertAttribs(ModuleConfigurationProvider provider,
ModuleURN inURN,
String inValue1,
String inValue2,
String inValue3) throws ModuleException {
assertEquals(null, provider.getDefaultFor(inURN, "Unknown"));
assertEquals(inValue1, provider.getDefaultFor(inURN, "Property1"));
assertEquals(inValue2, provider.getDefaultFor(inURN, "Property2"));
assertEquals(inValue3, provider.getDefaultFor(inURN, "Property3"));
}
}