package org.marketcetera.util.quickfix;
import java.io.File;
import java.util.Locale;
import org.apache.log4j.Level;
import org.junit.Test;
import org.marketcetera.util.except.I18NRuntimeException;
import org.marketcetera.util.log.ActiveLocale;
import org.marketcetera.util.log.I18NBoundMessage1P;
import org.marketcetera.util.test.TestCaseBase;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import quickfix.Dictionary;
import quickfix.Session;
import quickfix.SessionID;
import quickfix.SessionSettings;
import static org.junit.Assert.*;
/**
* @author tlerios@marketcetera.com
* @since 1.0.0
* @version $Id: SpringSessionDescriptorTest.java 16154 2012-07-14 16:34:05Z colin $
*/
/* $License$ */
public class SpringSessionDescriptorTest
extends TestCaseBase
{
private static final String TEST_ROOT=
DIR_ROOT+File.separator+"quickfix"+File.separator;
private static final String TEST_BEAN_GOOD_DESCRIPTOR=
"goodDescriptor";
private static final String TEST_BEAN_MISSING_BEGIN_STRING=
"missingBeginString";
private static final String TEST_BEAN_MISSING_SENDER_COMP_ID=
"missingSenderCompId";
private static final String TEST_BEAN_MISSING_TARGET_COMP_ID=
"missingTargetCompId";
private static final String TEST_BEAN_GOOD_DEFAULT_DICTIONARY=
"goodDefaultDictionary";
private static final String TEST_BEAN_BAD_DEFAULT_DICTIONARY=
"badDefaultDictionary";
private static final String TEST_BEAN_INHERITS_DEFAULTS=
"inheritsDefaults";
private static final String TEST_DEFAULT_DICTIONARY_BEGIN_STRING=
"FIX.4.1";
private static final String TEST_DEFAULT_DICTIONARY=
"FIX41.xml";
private static final String TEST_BAD_BEGIN_STRING=
"FIX.3.0";
private static final String TEST_KEY=
"testKey";
private static final String TEST_VALUE_SUFFIX=
"Value";
private static final String TEST_VALUE_OVERRIDE_SUFFIX=
TEST_VALUE_SUFFIX+"Override";
private static final String TEST_FILE=
TEST_ROOT+"descriptor.xml";
private static final String TEST_CATEGORY=
SpringSessionDescriptor.class.getName();
private static final String TEST_MESSAGE=
"The descriptor has no settings assigned to it";
@Test
public void all()
throws Exception
{
ActiveLocale.setProcessLocale(Locale.ROOT);
setLevel(TEST_CATEGORY,Level.WARN);
FileSystemXmlApplicationContext context=
new FileSystemXmlApplicationContext(TEST_FILE);
assertNotNull(SpringSessionDescriptor.DEFAULT_DATA_DICTIONARY);
// GOOD DESCRIPTOR.
SpringSessionDescriptor descriptor=(SpringSessionDescriptor)
(context.getBean(TEST_BEAN_GOOD_DESCRIPTOR));
getAppender().clear();
SessionID qID=descriptor.getQSessionID();
assertNotNull(qID);
Dictionary qDictionary=descriptor.getQDictionary();
assertNotNull(qDictionary);
// Lazy bean failures.
try {
descriptor.setDictionary(descriptor.getDictionary());
fail();
} catch (I18NRuntimeException ex) {
// Desired.
}
assertNotNull(descriptor.getDictionary());
try {
descriptor.setSettings(descriptor.getSettings());
fail();
} catch (I18NRuntimeException ex) {
// Desired.
}
assertNull(descriptor.getSettings());
assertSingleEvent(Level.WARN,TEST_CATEGORY,TEST_MESSAGE,TEST_CATEGORY);
// Dictionary check.
assertEquals(SessionSettings.BEGINSTRING+TEST_VALUE_SUFFIX,
qDictionary.getString(SessionSettings.BEGINSTRING));
assertEquals(SessionSettings.SENDERCOMPID+TEST_VALUE_SUFFIX,
qDictionary.getString(SessionSettings.SENDERCOMPID));
assertEquals(SessionSettings.SENDERSUBID+TEST_VALUE_SUFFIX,
qDictionary.getString(SessionSettings.SENDERSUBID));
assertEquals(SessionSettings.SENDERLOCID+TEST_VALUE_SUFFIX,
qDictionary.getString(SessionSettings.SENDERLOCID));
assertEquals(SessionSettings.TARGETCOMPID+TEST_VALUE_SUFFIX,
qDictionary.getString(SessionSettings.TARGETCOMPID));
assertEquals(SessionSettings.TARGETSUBID+TEST_VALUE_SUFFIX,
qDictionary.getString(SessionSettings.TARGETSUBID));
assertEquals(SessionSettings.TARGETLOCID+TEST_VALUE_SUFFIX,
qDictionary.getString(SessionSettings.TARGETLOCID));
assertEquals(SessionSettings.SESSION_QUALIFIER+TEST_VALUE_SUFFIX,
qDictionary.getString(SessionSettings.SESSION_QUALIFIER));
assertEquals(Session.SETTING_DATA_DICTIONARY+TEST_VALUE_SUFFIX,
qDictionary.getString(Session.SETTING_DATA_DICTIONARY));
assertEquals(TEST_KEY+TEST_VALUE_SUFFIX,
qDictionary.getString(TEST_KEY));
// Session ID check.
assertEquals(SessionSettings.BEGINSTRING+TEST_VALUE_SUFFIX,
qID.getBeginString());
assertEquals(SessionSettings.SENDERCOMPID+TEST_VALUE_SUFFIX,
qID.getSenderCompID());
assertEquals(SessionSettings.SENDERSUBID+TEST_VALUE_SUFFIX,
qID.getSenderSubID());
assertEquals(SessionSettings.SENDERLOCID+TEST_VALUE_SUFFIX,
qID.getSenderLocationID());
assertEquals(SessionSettings.TARGETCOMPID+TEST_VALUE_SUFFIX,
qID.getTargetCompID());
assertEquals(SessionSettings.TARGETSUBID+TEST_VALUE_SUFFIX,
qID.getTargetSubID());
assertEquals(SessionSettings.TARGETLOCID+TEST_VALUE_SUFFIX,
qID.getTargetLocationID());
assertEquals(SessionSettings.SESSION_QUALIFIER+TEST_VALUE_SUFFIX,
qID.getSessionQualifier());
// DESCRIPTOR WITH MISSING BEGINSTRING.
descriptor=(SpringSessionDescriptor)
(context.getBean(TEST_BEAN_MISSING_BEGIN_STRING));
getAppender().clear();
try {
descriptor.getQDictionary();
fail();
} catch (I18NRuntimeException ex) {
assertEquals
(new I18NRuntimeException
(new I18NBoundMessage1P(Messages.FIELD_REQUIRED,
SessionSettings.BEGINSTRING)),ex);
}
assertNull(descriptor.getDictionary());
assertNull(descriptor.getSettings());
assertSingleEvent(Level.WARN,TEST_CATEGORY,TEST_MESSAGE,TEST_CATEGORY);
// DESCRIPTOR WITH MISSING SENDERCOMPID.
descriptor=(SpringSessionDescriptor)
(context.getBean(TEST_BEAN_MISSING_SENDER_COMP_ID));
getAppender().clear();
try {
descriptor.getQDictionary();
fail();
} catch (I18NRuntimeException ex) {
assertEquals
(new I18NRuntimeException
(new I18NBoundMessage1P(Messages.FIELD_REQUIRED,
SessionSettings.SENDERCOMPID)),ex);
}
assertNotNull(descriptor.getDictionary());
assertNotNull(descriptor.getSettings());
assertNoEvents();
// DESCRIPTOR WITH MISSING TARGETCOMPID.
descriptor=(SpringSessionDescriptor)
(context.getBean(TEST_BEAN_MISSING_TARGET_COMP_ID));
getAppender().clear();
try {
descriptor.getQDictionary();
fail();
} catch (I18NRuntimeException ex) {
assertEquals
(new I18NRuntimeException
(new I18NBoundMessage1P(Messages.FIELD_REQUIRED,
SessionSettings.TARGETCOMPID)),ex);
}
assertNotNull(descriptor.getDictionary());
assertNotNull(descriptor.getSettings());
assertNoEvents();
// DESCRIPTOR WITH GOOD DEFAULT DICTIONARY.
descriptor=(SpringSessionDescriptor)
(context.getBean(TEST_BEAN_GOOD_DEFAULT_DICTIONARY));
getAppender().clear();
qID=descriptor.getQSessionID();
assertNotNull(qID);
qDictionary=descriptor.getQDictionary();
assertNotNull(qDictionary);
assertNull(descriptor.getDictionary());
assertNotNull(descriptor.getSettings());
assertNoEvents();
assertEquals(TEST_DEFAULT_DICTIONARY_BEGIN_STRING,
qID.getBeginString());
assertEquals(TEST_DEFAULT_DICTIONARY,
qDictionary.getString(Session.SETTING_DATA_DICTIONARY));
// DESCRIPTOR WITH BAD DEFAULT DICTIONARY.
descriptor=(SpringSessionDescriptor)
(context.getBean(TEST_BEAN_BAD_DEFAULT_DICTIONARY));
getAppender().clear();
try {
descriptor.getQDictionary();
fail();
} catch (I18NRuntimeException ex) {
assertEquals
(new I18NRuntimeException
(new I18NBoundMessage1P(Messages.NO_DEFAULT_DATA_DICTIONARY,
TEST_BAD_BEGIN_STRING)),ex);
}
assertNotNull(descriptor.getDictionary());
assertNull(descriptor.getSettings());
assertSingleEvent(Level.WARN,TEST_CATEGORY,TEST_MESSAGE,TEST_CATEGORY);
// DESCRIPTOR WHICH INHERITS DEFAULTS.
descriptor=(SpringSessionDescriptor)
(context.getBean(TEST_BEAN_INHERITS_DEFAULTS));
getAppender().clear();
qID=descriptor.getQSessionID();
assertNotNull(qID);
qDictionary=descriptor.getQDictionary();
assertNotNull(qDictionary);
assertNotNull(descriptor.getDictionary());
assertNotNull(descriptor.getSettings());
assertNoEvents();
assertEquals(TEST_DEFAULT_DICTIONARY_BEGIN_STRING,
qID.getBeginString());
assertEquals(SessionSettings.SENDERCOMPID+TEST_VALUE_SUFFIX,
qID.getSenderCompID());
assertEquals(SessionSettings.TARGETCOMPID+TEST_VALUE_OVERRIDE_SUFFIX,
qID.getTargetCompID());
assertEquals(TEST_DEFAULT_DICTIONARY,
qDictionary.getString(Session.SETTING_DATA_DICTIONARY));
}
}