package org.marketcetera.util.quickfix; import java.io.File; import java.util.Iterator; import org.junit.Test; import org.marketcetera.util.except.I18NRuntimeException; import org.marketcetera.util.log.I18NBoundMessage1P; import org.marketcetera.util.test.TestCaseBase; import org.springframework.context.support.FileSystemXmlApplicationContext; import quickfix.ConfigError; import quickfix.FileStoreFactory; import quickfix.JdbcLogFactory; import quickfix.JdbcStoreFactory; import quickfix.SLF4JLogFactory; import quickfix.SessionID; import quickfix.SessionSettings; import static org.junit.Assert.*; /** * @author tlerios@marketcetera.com * @since 1.0.0 * @version $Id: SpringSessionSettingsTest.java 16154 2012-07-14 16:34:05Z colin $ */ /* $License$ */ public class SpringSessionSettingsTest extends TestCaseBase { private static final String TEST_ROOT= DIR_ROOT+File.separator+"quickfix"+File.separator; private static final String TEST_BEAN_GOOD_SETTINGS= "goodSettings"; private static final String TEST_BEAN_EMPTY_SETTINGS= "emptySettings"; private static final String TEST_BEAN_GOOD_CUSTOM_FACTORIES= "goodCustomFactories"; private static final String TEST_BEAN_BAD_CUSTOM_LOG_FACTORY= "badCustomLogFactory"; private static final String TEST_BEAN_BAD_CUSTOM_STORE_FACTORY= "badCustomStoreFactory"; private static final String TEST_BAD_LOG_FACTORY= "BadLogFactory"; private static final String TEST_BAD_STORE_FACTORY= "BadStoreFactory"; private static final String TEST_KEY= "testKey"; private static final String TEST_VALUE_SUFFIX= "Value"; private static final String TEST_VALUE1_SUFFIX= TEST_VALUE_SUFFIX+"1"; private static final String TEST_VALUE2_SUFFIX= TEST_VALUE_SUFFIX+"2"; private static final String TEST_FILE= TEST_ROOT+"settings.xml"; @Test public void all() throws Exception { FileSystemXmlApplicationContext context= new FileSystemXmlApplicationContext(TEST_FILE); assertNotNull(SpringSessionSettings.LOG_FACTORY_CLASS_PARAM); assertNotNull(SpringSessionSettings.MESSAGE_STORE_FACTORY_CLASS_PARAM); // GOOD SETTINGS. SpringSessionSettings settings=(SpringSessionSettings) (context.getBean(TEST_BEAN_GOOD_SETTINGS)); SessionSettings qSettings=settings.getQSettings(); assertNotNull(qSettings); assertEquals(SLF4JLogFactory.class, settings.getQLogFactory().getClass()); assertEquals(FileStoreFactory.class, settings.getQMessageStoreFactory().getClass()); // Lazy bean failures. try { settings.setDefaults(settings.getDefaults()); fail(); } catch (I18NRuntimeException ex) { // Desired. } assertNotNull(settings.getDefaults()); try { settings.setDescriptors(settings.getDescriptors()); fail(); } catch (I18NRuntimeException ex) { // Desired. } assertNotNull(settings.getDescriptors()); // Settings. assertEquals(SessionSettings.SENDERCOMPID+TEST_VALUE_SUFFIX, qSettings.getString(SessionSettings.SENDERCOMPID)); assertEquals(TEST_KEY+TEST_VALUE_SUFFIX, qSettings.getString(TEST_KEY)); // Descriptors. Iterator<SpringSessionDescriptor> descriptors= settings.getDescriptors().iterator(); SessionID qID=descriptors.next().getQSessionID(); assertEquals(SessionSettings.BEGINSTRING+TEST_VALUE1_SUFFIX, qSettings.getString(qID,SessionSettings.BEGINSTRING)); assertEquals(SessionSettings.SENDERCOMPID+TEST_VALUE1_SUFFIX, qSettings.getString(qID,SessionSettings.SENDERCOMPID)); assertEquals(SessionSettings.TARGETCOMPID+TEST_VALUE1_SUFFIX, qSettings.getString(qID,SessionSettings.TARGETCOMPID)); assertEquals(TEST_KEY+TEST_VALUE_SUFFIX, qSettings.getString(qID,TEST_KEY)); qID=descriptors.next().getQSessionID(); assertEquals(SessionSettings.BEGINSTRING+TEST_VALUE2_SUFFIX, qSettings.getString(qID,SessionSettings.BEGINSTRING)); assertEquals(SessionSettings.SENDERCOMPID+TEST_VALUE_SUFFIX, qSettings.getString(qID,SessionSettings.SENDERCOMPID)); assertEquals(SessionSettings.TARGETCOMPID+TEST_VALUE2_SUFFIX, qSettings.getString(qID,SessionSettings.TARGETCOMPID)); assertEquals(TEST_KEY+TEST_VALUE_SUFFIX, qSettings.getString(qID,TEST_KEY)); // EMPTY SETTINGS. settings=(SpringSessionSettings) (context.getBean(TEST_BEAN_EMPTY_SETTINGS)); assertNotNull(settings.getQSettings()); assertEquals(SLF4JLogFactory.class, settings.getQLogFactory().getClass()); assertEquals(FileStoreFactory.class, settings.getQMessageStoreFactory().getClass()); assertNull(settings.getDefaults()); assertNull(settings.getDescriptors()); // GOOD CUSTOM FACTORIES. settings=(SpringSessionSettings) (context.getBean(TEST_BEAN_GOOD_CUSTOM_FACTORIES)); qSettings=settings.getQSettings(); assertNotNull(qSettings); assertEquals(JdbcLogFactory.class, settings.getQLogFactory().getClass()); assertEquals(JdbcStoreFactory.class, settings.getQMessageStoreFactory().getClass()); assertNotNull(settings.getDefaults()); assertEquals(JdbcLogFactory.class.getName(), settings.getDefaults().get (SpringSessionSettings. LOG_FACTORY_CLASS_PARAM)); assertEquals(JdbcStoreFactory.class.getName(), settings.getDefaults().get (SpringSessionSettings. MESSAGE_STORE_FACTORY_CLASS_PARAM)); assertNull(settings.getDescriptors()); try { qSettings.getString (SpringSessionSettings.LOG_FACTORY_CLASS_PARAM); fail(); } catch (ConfigError ex) { // Desired. } try { qSettings.getString (SpringSessionSettings.MESSAGE_STORE_FACTORY_CLASS_PARAM); fail(); } catch (ConfigError ex) { // Desired. } // BAD CUSTOM LOG FACTORY. settings=(SpringSessionSettings) (context.getBean(TEST_BEAN_BAD_CUSTOM_LOG_FACTORY)); try { settings.getQSettings(); fail(); } catch (I18NRuntimeException ex) { assertEquals(I18NRuntimeException.class,ex.getClass()); assertEquals (new I18NBoundMessage1P(Messages.BAD_LOG_FACTORY, TEST_BAD_LOG_FACTORY), ex.getI18NBoundMessage()); assertEquals(ClassNotFoundException.class,ex.getCause().getClass()); } assertNotNull(settings.getDefaults()); assertNull(settings.getDescriptors()); // BAD CUSTOM STORE FACTORY. settings=(SpringSessionSettings) (context.getBean(TEST_BEAN_BAD_CUSTOM_STORE_FACTORY)); try { settings.getQSettings(); fail(); } catch (I18NRuntimeException ex) { assertEquals(I18NRuntimeException.class,ex.getClass()); assertEquals (new I18NBoundMessage1P(Messages.BAD_MESSAGE_STORE_FACTORY, TEST_BAD_STORE_FACTORY), ex.getI18NBoundMessage()); assertEquals(ClassNotFoundException.class,ex.getCause().getClass()); } assertNotNull(settings.getDefaults()); assertNull(settings.getDescriptors()); // As of QuickFIX/J 1.3.3, it is impossible for a ConfigError // to occur during processing of SpringSessionSettings: the // signature of a method used during processing includes a // ConfigError in its throws clause, but the method body can // never throw it. Hence it is impossible to test it. } }