/*
* Copyright 2002-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.integration.samples.ftp;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.ftpserver.FtpServer;
import org.apache.ftpserver.FtpServerFactory;
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.listener.Listener;
import org.apache.ftpserver.listener.ListenerFactory;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.integration.samples.ftp.support.TestUserManager;
/**
* Test Suite that will bootstrap an embedded Apache FTP Server. Additionally some
* test files will be send to the FTP Server.
*
*
* @author Gunnar Hillert
*
*/
@RunWith(Suite.class)
@Suite.SuiteClasses({
FtpOutboundChannelAdapterSample.class,
FtpInboundChannelAdapterSample.class,
FtpOutboundGatewaySample.class
})
public class TestSuite {
private static final Logger LOGGER = LoggerFactory.getLogger(TestSuite.class);
public static final String FTP_ROOT_DIR = "target" + File.separator + "ftproot";
public static final String LOCAL_FTP_TEMP_DIR = "target" + File.separator + "local-ftp-temp";
public static final String SERVER_PORT_SYSTEM_PROPERTY = "availableServerPort";
@ClassRule
public static final TemporaryFolder temporaryFolder = new TemporaryFolder();
public static FtpServer server;
@BeforeClass
public static void setupFtpServer() throws FtpException, IOException {
Integer availableServerSocket;
if (System.getProperty(SERVER_PORT_SYSTEM_PROPERTY) == null) {
availableServerSocket = 0;
}
else {
availableServerSocket = Integer.valueOf(System.getProperty(SERVER_PORT_SYSTEM_PROPERTY));
}
File ftpRoot = new File(FTP_ROOT_DIR);
ftpRoot.mkdirs();
TestUserManager userManager = new TestUserManager(ftpRoot.getAbsolutePath());
FtpServerFactory serverFactory = new FtpServerFactory();
serverFactory.setUserManager(userManager);
ListenerFactory factory = new ListenerFactory();
factory.setPort(availableServerSocket);
factory.setIdleTimeout(600);
serverFactory.addListener("default", factory.createListener());
server = serverFactory.createServer();
server.start();
Listener listener = serverFactory.getListeners().values().iterator().next();
availableServerSocket = listener.getPort();
LOGGER.info("Using open server port..." + availableServerSocket);
System.setProperty(SERVER_PORT_SYSTEM_PROPERTY, availableServerSocket.toString());
}
@AfterClass
public static void shutDown() {
server.stop();
FileUtils.deleteQuietly(new File(FTP_ROOT_DIR));
FileUtils.deleteQuietly(new File(LOCAL_FTP_TEMP_DIR));
}
}