All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.mule.tck.util.ftp.FtpServer Maven / Gradle / Ivy

/*
 * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
 * The software in this package is published under the terms of the CPAL v1.0
 * license, a copy of which has been included with this distribution in the
 * LICENSE.txt file.
 */
package org.mule.tck.util.ftp;

import org.mule.util.FileUtils;

import java.io.File;
import java.io.IOException;

import org.apache.ftpserver.ftplet.Ftplet;

public class FtpServer
{
    public static final String FTP_SERVER_BASE_DIR = "target/ftpserver";
    
    private String ftpHost;
    private int ftpPort;
    private String ftpUser;
    private String ftpPassword;
    private Server server;
    private FtpClient ftpClient;
    
    private Ftplet ftplet = new MuleFtplet(new MuleFtplet.Callback()
    {
        @Override
        public void fileUploadCompleted()
        {
        }
        @Override
        public void fileMoveCompleted()
        {
        }
    });

    public FtpServer(String ftpHost, int ftpPort, String ftpUser, String ftpPassword)
    {
        this.ftpHost = ftpHost;
        this.ftpPort = ftpPort;
        this.ftpUser = ftpUser;
        this.ftpPassword = ftpPassword;
    }

    public void start() throws Exception
    {
        ftpClient = new FtpClient(this.ftpHost, this.ftpPort, this.ftpUser, this.ftpPassword);
        // make sure we start out with a clean ftp server base
        createFtpServerBaseDir();

        startServer();
        if (!ftpClient.testConnection())
        {
            throw new IOException("could not connect to ftp server");
        }
    }

    public void stop() throws Exception
    {
        Thread.sleep(500);

        ftpClient.disconnect(); // we dont need the connection anymore for this test
        stopServer();

        deleteFtpServerBaseDir();
    }

    public FtpClient getFtpClient()
    {
        return ftpClient;
    }

    private void createFtpServerBaseDir()
    {
        deleteFtpServerBaseDir();
        File ftpBaseDir = new File(FTP_SERVER_BASE_DIR);
        ftpBaseDir.mkdirs();
    }

    private void deleteFtpServerBaseDir()
    {
        File ftpServerBase = new File(FTP_SERVER_BASE_DIR);
        FileUtils.deleteTree(ftpServerBase);
    }

    private void startServer() throws Exception
    {
        server = new Server(ftpPort, ftplet);
        // this is really ugly, but the above doesn't get to waiting.
        // need to improve this as part of ftp server work
        synchronized(this)
        {
            wait(500);
        }
    }

    private void stopServer() throws Exception
    {
        // stop the server
        if (null != server)
        {
            server.stop();
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy