Java tutorial
/* * R Service Bus * * Copyright (c) Copyright of Open Analytics NV, 2010-2015 * * =========================================================================== * * 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 eu.openanalytics.rsb; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.junit.Before; import org.junit.Test; import eu.openanalytics.rsb.config.Configuration; import eu.openanalytics.rsb.config.Configuration.DepositDirectoryConfiguration; /** * @author "OpenAnalytics <rsb.development@openanalytics.eu>" */ public class DirectoryDepositITCase extends AbstractITCase { protected File jobsDirectory; protected File acceptedDirectory; protected File resultsDirectory; @Before public void prepareTests() throws IOException { final File depositRootDirectory = findDepositDirectoryConfiguration(getApplicationName()) .getRootDirectory(); jobsDirectory = new File(depositRootDirectory, Configuration.DEPOSIT_JOBS_SUBDIR); acceptedDirectory = new File(depositRootDirectory, Configuration.DEPOSIT_ACCEPTED_SUBDIR); resultsDirectory = new File(depositRootDirectory, Configuration.DEPOSIT_RESULTS_SUBDIR); FileUtils.cleanDirectory(jobsDirectory); FileUtils.cleanDirectory(acceptedDirectory); FileUtils.cleanDirectory(resultsDirectory); } protected String getApplicationName() { return "lab1"; } private DepositDirectoryConfiguration findDepositDirectoryConfiguration(final String applicationName) { for (final DepositDirectoryConfiguration depositDirectoryConfiguration : getConfiguration() .getDepositRootDirectories()) { if (depositDirectoryConfiguration.getApplicationName().equals(applicationName)) { return depositDirectoryConfiguration; } } throw new IllegalArgumentException(applicationName + " not found!"); } @Test public void validZipDeposit() throws IOException, InterruptedException { doTestValidZipDeposit("r-job-sample.zip"); } @Test public void invalidZipDeposit() throws IOException, InterruptedException { doInvalidZipDeposit("invalid-job-subdir.zip"); } @Test public void dataOnlyZipDeposit() throws IOException, InterruptedException { doInvalidZipDeposit("r-job-data-only.zip"); } protected void doTestValidZipDeposit(final String jobFileName) throws IOException, InterruptedException, FileNotFoundException { FileUtils.copyFileToDirectory(getTestFile(jobFileName), jobsDirectory); final File acceptedFile = ponderUntilJobAccepted(jobFileName); assertThat("file was not created: " + acceptedFile, acceptedFile.isFile(), is(true)); final File resultFile = ponderUntilJobResult(jobFileName); assertThat("file was not created: " + resultFile, resultFile.isFile(), is(true)); validateZipResult(new FileInputStream(resultFile)); } protected void doInvalidZipDeposit(final String jobFileName) throws IOException, InterruptedException, FileNotFoundException { FileUtils.copyFileToDirectory(getTestFile(jobFileName), jobsDirectory); final File acceptedFile = ponderUntilJobAccepted(jobFileName); assertThat("file was not created: " + acceptedFile, acceptedFile.isFile(), is(true)); final File resultFile = ponderUntilJobError(jobFileName); assertThat("file was not created: " + resultFile, resultFile.isFile(), is(true)); validateErrorResult(new FileInputStream(resultFile)); } protected File ponderUntilJobAccepted(final String jobFileName) throws InterruptedException { final File expectedAcceptedFile = new File(acceptedDirectory, jobFileName); ponderForFile(expectedAcceptedFile); return expectedAcceptedFile; } protected File ponderUntilJobResult(final String jobFileName) throws InterruptedException { final File expectedAcceptedFile = new File(resultsDirectory, "result-" + jobFileName); ponderForFile(expectedAcceptedFile); return expectedAcceptedFile; } protected File ponderUntilJobError(final String jobFileName) throws InterruptedException { final File expectedAcceptedFile = new File(resultsDirectory, "result-" + FilenameUtils.getBaseName(jobFileName) + ".txt"); ponderForFile(expectedAcceptedFile); return expectedAcceptedFile; } private void ponderForFile(final File expectedFile) throws InterruptedException { int attempts = 0; while (attempts++ < 120) { Thread.sleep(500L); if (expectedFile.isFile()) { break; } } } }