/*
* 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 java.io.File;
import java.io.IOException;
import java.util.HashSet;
import java.util.Properties;
import java.util.Scanner;
import java.util.Set;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
import com.icegreen.greenmail.user.GreenMailUser;
import com.icegreen.greenmail.util.GreenMail;
import com.icegreen.greenmail.util.ServerSetup;
import eu.openanalytics.rsb.config.Configuration;
import eu.openanalytics.rsb.config.Configuration.CatalogSection;
import eu.openanalytics.rsb.config.ConfigurationFactory;
import eu.openanalytics.rsb.data.CatalogManager;
import eu.openanalytics.rsb.data.CatalogManager.PutCatalogFileResult;
import eu.openanalytics.rsb.data.FileCatalogManager;
/**
* @author "OpenAnalytics <rsb.development@openanalytics.eu>"
*/
@RunWith(Suite.class)
@SuiteClasses({EmailDepositITCase.class, DirectoryDepositITCase.class,
ConfiguredDirectoryDepositITCase.class, RestJobsITCase.class, RestProcessITCase.class,
RestAdminITCase.class, RestMiscITCase.class, SoapMtomITCase.class})
public class SuiteITCase
{
protected static Configuration configuration;
protected static CatalogManager catalogManager;
protected static Properties rawMessages;
protected static GreenMail greenMail;
protected static GreenMailUser userAccount;
protected static GreenMailUser rsbAccountWithDefaultSettings;
protected static GreenMailUser rsbAccountWithJobConfiguration;
protected static GreenMailUser rsbAccountWithResponseFile;
protected static final String TEST_USER_EMAIL_DOMAIN = "host.tld";
private static Set<File> catalogTestFiles = new HashSet<File>();
@BeforeClass
public static void setupTestSuite() throws Exception
{
loadDefaultConfiguration();
setupCatalog();
loadTestConfiguration();
loadRawMessages();
startEmailServer();
}
@AfterClass
public static void teardownTestSuite() throws Exception
{
stopEmailServer();
cleanupCatalog();
}
private static void loadDefaultConfiguration() throws IOException
{
configuration = ConfigurationFactory.loadJsonConfiguration();
final FileCatalogManager fileCatalogManager = new FileCatalogManager();
fileCatalogManager.setConfiguration(configuration);
fileCatalogManager.createCatalogTree();
catalogManager = fileCatalogManager;
}
private static void loadTestConfiguration() throws IOException
{
System.setProperty(Configuration.class.getName(), "rsb-configuration-it.json");
loadDefaultConfiguration();
}
private static void setupCatalog() throws IOException
{
putTestFileInCatalog(CatalogSection.R_SCRIPTS, "test.R");
putTestFileInCatalog(CatalogSection.R_SCRIPTS, "testSweave.R");
putTestFileInCatalog(CatalogSection.SWEAVE_FILES, "testSweave.Rnw");
putTestFileInCatalog(CatalogSection.JOB_CONFIGURATIONS, "test-configuration.txt");
putTestFileInCatalog(CatalogSection.EMAIL_REPLIES, "test-email-response.txt");
}
private static void loadRawMessages() throws IOException
{
rawMessages = new Properties();
rawMessages.load(Thread.currentThread()
.getContextClassLoader()
.getResourceAsStream("messages.properties"));
}
private static void startEmailServer()
{
final ServerSetup pop3ServerSetup = new ServerSetup(9110, "localhost", ServerSetup.PROTOCOL_POP3);
final ServerSetup imapServerSetup = new ServerSetup(9143, "localhost", ServerSetup.PROTOCOL_IMAP);
final ServerSetup smtpServerSetup = new ServerSetup(9025, "localhost", ServerSetup.PROTOCOL_SMTP);
greenMail = new GreenMail(new ServerSetup[]{pop3ServerSetup, smtpServerSetup, imapServerSetup});
userAccount = greenMail.setUser("user@" + TEST_USER_EMAIL_DOMAIN, "user", "test");
rsbAccountWithDefaultSettings = greenMail.setUser("rsb-default@rsb.openalytics.eu", "rsb-default",
"test");
rsbAccountWithJobConfiguration = greenMail.setUser("rsb-conf@rsb.openalytics.eu", "rsb-conf", "test");
rsbAccountWithResponseFile = greenMail.setUser("rsb-resp@rsb.openalytics.eu", "rsb-resp", "test");
greenMail.start();
}
public static void registerCreatedCatalogFile(final CatalogSection catalogSection, final String fileName)
{
if ((configuration == null) || (catalogManager == null))
{
return;
}
final File fileToRegister = catalogManager.getCatalogFile(catalogSection, "ignored", fileName);
catalogTestFiles.add(fileToRegister);
}
private static void stopEmailServer()
{
greenMail.stop();
}
private static void cleanupCatalog()
{
for (final File testFile : catalogTestFiles)
{
FileUtils.deleteQuietly(testFile);
}
}
/**
* To help with any sort of manual testing.
*/
public static void main(final String[] args) throws Exception
{
setupTestSuite();
System.out.println("Type ENTER to stop testing...");
final Scanner scanner = new Scanner(System.in);
scanner.nextLine();
scanner.close();
teardownTestSuite();
}
private static void putTestFileInCatalog(final CatalogSection catalogSection, final String fileName)
throws IOException
{
final Pair<PutCatalogFileResult, File> putResult = catalogManager.putCatalogFile(catalogSection,
"ignored", fileName, AbstractITCase.getTestData(fileName));
catalogTestFiles.add(putResult.getRight());
}
}