/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.gl.batch; import java.io.*; import org.apache.commons.io.IOUtils; import org.kuali.kfs.sys.ConfigureContext; import org.kuali.kfs.sys.batch.BatchDirectoryHelper; import org.kuali.kfs.sys.batch.BatchSpringContext; import org.kuali.kfs.sys.batch.Step; import org.kuali.kfs.sys.context.KualiTestBase; import org.kuali.kfs.sys.context.ProxyUtils; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.rice.core.api.datetime.DateTimeService; /** * Tests the CollecterStep. DEPENDENCIES: Collector card xml file transaction1.xml must be in /opt/kuali/dev/staging/collector/ this * file can be obtained by running the project's ant dist-local, or copying from * build/externalConfigDirectory/static/staging/collector/ */ @ConfigureContext public class CollectorStepTest extends KualiTestBase { private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(CollectorStepTest.class); private BatchDirectoryHelper originEntryBatchDirectoryHelper; private BatchDirectoryHelper collectorXmlBatchDirectoryHelper; private boolean copiedCollector1; private boolean copiedCollector2; private boolean copiedCollector3; /** * Constructs a CollectorStepTest instance */ public CollectorStepTest() { super(); } /** * Creates originEntry directory if needed and .done file for test input file. * * @see junit.framework.TestCase#setUp() */ @Override protected void setUp() throws Exception { super.setUp(); originEntryBatchDirectoryHelper = new BatchDirectoryHelper("gl","originEntry"); originEntryBatchDirectoryHelper.createBatchDirectory(); collectorXmlBatchDirectoryHelper = new BatchDirectoryHelper("gl","collectorXml"); collectorXmlBatchDirectoryHelper.createBatchDirectory(); // copy fixture files to directory copiedCollector1 = copyFixtureToCollectorXml("gl_collector1.xml", collectorXmlBatchDirectoryHelper.getBatchFileDirectoryName()); copiedCollector2 = copyFixtureToCollectorXml("gl_collector2.xml", collectorXmlBatchDirectoryHelper.getBatchFileDirectoryName()); copiedCollector3 = copyFixtureToCollectorXml("gl_collector3.xml", collectorXmlBatchDirectoryHelper.getBatchFileDirectoryName()); String doneFileName = generateDoneFileName(); File doneFile = new File(doneFileName); if (!doneFile.exists()) { doneFile.createNewFile(); } } protected boolean copyFixtureToCollectorXml(String fixtureName, String directory) { File f = new File(directory + File.separator + fixtureName); if (!f.exists()) { InputStream input = null; OutputStream output = null; try { input = CollectorStepTest.class.getClassLoader().getResourceAsStream("org/kuali/kfs/gl/batch/fixture/" + fixtureName); if (input != null) { output = new FileOutputStream(f); IOUtils.copy(input, output); input.close(); output.close(); return true; } } catch (IOException ioe) { LOG.error("Could not copy file", ioe); throw new RuntimeException(ioe); } finally { input = null; output = null; } } return false; } protected void deleteCollectorFile(String fileName, String directory) { File f = new File(directory + File.separator + fileName); if (f.exists()) { f.delete(); } } @Override protected void tearDown() throws Exception { if (copiedCollector1) { deleteCollectorFile("gl_collector1.xml", collectorXmlBatchDirectoryHelper.getBatchFileDirectoryName()); } if (copiedCollector2) { deleteCollectorFile("gl_collector2.xml", collectorXmlBatchDirectoryHelper.getBatchFileDirectoryName()); } if (copiedCollector3) { deleteCollectorFile("gl_collector3.xml", collectorXmlBatchDirectoryHelper.getBatchFileDirectoryName()); } originEntryBatchDirectoryHelper.removeBatchDirectory(); collectorXmlBatchDirectoryHelper.removeBatchDirectory(); } /** * Deletes the file created in setUp() */ protected void deleteDoneFile() { File doneFile = new File(generateDoneFileName()); if (doneFile.exists()) { doneFile.delete(); } } /** * Determines if the .done file with the expected file name exists * * @return true if the done file exists, false otherwise */ protected boolean isDoneFileExists() { File doneFile = new File(generateDoneFileName()); return doneFile.exists(); } /** * Generates the standard name of the .done file to check * * @return the full path and name of the done file to check */ protected String generateDoneFileName() { return SpringContext.getBean(CollectorXmlInputFileType.class).getDirectoryPath() + "/gl_collector1.done"; } /** * Tests the whole step completes successfully. */ // @RelatesTo(RelatesTo.JiraIssue.KULUT29) public void testAll() throws Exception { try { Step step = BatchSpringContext.getStep("collectorStep"); CollectorStep collectorStep = (CollectorStep) ProxyUtils.getTargetIfProxied(step); DateTimeService dateTimeService = SpringContext.getBean(DateTimeService.class); boolean goodExit = collectorStep.execute(getClass().getName(), dateTimeService.getCurrentDate()); assertTrue("collector step did not exit with pass", goodExit); assertFalse("done file was not removed", isDoneFileExists()); } finally { deleteDoneFile(); } } }