package org.marketcetera.saclient; import org.marketcetera.util.misc.ClassVersion; import org.marketcetera.util.file.CopyCharsUtils; import org.marketcetera.util.log.SLF4JLoggerProxy; import org.marketcetera.module.ExpectedFailure; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.apache.commons.io.IOUtils; import java.io.File; import java.io.InputStream; import java.io.FileNotFoundException; /* $License$ */ /** * Tests {@link CreateStrategyParameters}. * * @author anshul@marketcetera.com * @version $Id: CreateStrategyParametersTest.java 16154 2012-07-14 16:34:05Z colin $ * @since 2.0.0 */ @ClassVersion("$Id: CreateStrategyParametersTest.java 16154 2012-07-14 16:34:05Z colin $") public class CreateStrategyParametersTest { /** * Verifies all constructor parameter checks. * * @throws Exception if there were unexpected test failures. */ @Test public void constructorChecks() throws Exception { //strategy name new ExpectedFailure<NullPointerException>(){ @Override protected void run() throws Exception { new CreateStrategyParameters("blah", null, "JAVA", new File("dontmatter"), null, false); } }; //language new ExpectedFailure<NullPointerException>(){ @Override protected void run() throws Exception { new CreateStrategyParameters("blah", "naah", null, new File("dontmatter"), null, false); } }; //strategy script new ExpectedFailure<NullPointerException>(){ @Override protected void run() throws Exception { new CreateStrategyParameters("blah", "naah", "JAVA", null, null, false); } }; //non existent strategy script final File source = new File("doesnotexist"); new ExpectedFailure<FileNotFoundException>(source.getAbsolutePath()){ @Override protected void run() throws Exception { new CreateStrategyParameters("blah", "naah", "JAVA", source, null, false); } }; //non readable strategy script final File unreadable = File.createTempFile("strat","txt"); unreadable.deleteOnExit(); unreadable.setReadable(false); unreadable.setReadable(false, false); //test unreadability failure only if we can make the file unreadable. if(!unreadable.canRead()) { new ExpectedFailure<FileNotFoundException>(unreadable.getAbsolutePath()){ @Override protected void run() throws Exception { new CreateStrategyParameters("blah", "naah", "JAVA", unreadable, null, false); } }; } else { SLF4JLoggerProxy.info(this, "Cannot make a test file unreadable."); } } /** * Tests the constructor and getters. * * @throws Exception if there were unexpected failures. */ @Test public void constructAndGet() throws Exception { String instanceName = "myname"; String strategyName = "name"; String language = "JAVA"; String parameters = "game=lame"; File tmp = File.createTempFile("strat", ".tmp"); tmp.deleteOnExit(); CreateStrategyParameters csp = new CreateStrategyParameters( instanceName, strategyName, language, tmp, parameters, false); assertCSP(csp, instanceName, strategyName, language, parameters, false); //test with only the required parameters specified. csp = new CreateStrategyParameters(null, strategyName, language, tmp, null, true); assertCSP(csp, null, strategyName, language, null, true); //test with mininmal parameter values csp = new CreateStrategyParameters("", "", "", tmp, "", true); assertCSP(csp, "", "", "", "", true); } /** * Tests file handling. * * @throws Exception if there were unexpected failures. */ @Test public void fileHandling() throws Exception { //Create a temp file with text. File tmp = File.createTempFile("strat", ".tmp"); tmp.deleteOnExit(); String strategyContents = "Test strategy script"; CopyCharsUtils.copy(strategyContents.toCharArray(), tmp.getAbsolutePath()); CreateStrategyParameters csp = new CreateStrategyParameters(null, "mname", "JAVA", tmp, null, false); //verify that the input stream yields the correct contents. InputStream is = csp.getStrategySource(); assertEquals(strategyContents, IOUtils.toString(is)); is.close(); //verify failure when a non existent file is supplied final CreateStrategyParameters csp2 = new CreateStrategyParameters( null, "mname", "JAVA", tmp, null, true); assertTrue(tmp.delete()); assertFalse(tmp.exists()); new ExpectedFailure<FileNotFoundException>(){ @Override protected void run() throws Exception { csp2.getStrategySource(); } }; } /** * Verifies the contents of a create strategy parameters instance. * * @param inParms the instance whose contents need to be verified. * @param inInstanceName the instance name * @param inStrategyName the strategy name * @param inLanguage the language * @param inParameters the parameters * @param inRouteToServer if the orders should be routed to the server. */ private static void assertCSP(CreateStrategyParameters inParms, String inInstanceName, String inStrategyName, String inLanguage, String inParameters, boolean inRouteToServer) { assertEquals(inInstanceName, inParms.getInstanceName()); assertEquals(inStrategyName, inParms.getStrategyName()); assertEquals(inLanguage, inParms.getLanguage()); assertEquals(inParameters, inParms.getParameters()); assertEquals(inRouteToServer, inParms.isRouteOrdersToServer()); } }