		--------------------------------------------------
								Home
		--------------------------------------------------

MockFtpServer - Providing a Fake/Stub FTP Server
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  The <<MockFtpServer>> project provides mock/dummy FTP server implementations that can be very
  useful for testing of FTP client code. Two FTP Server implementations are provided, each at a different
  level of abstraction.

  <<FakeFtpServer>> provides a higher-level abstraction for an FTP server and is suitable for most testing
  and simulation scenarios. You define a filesystem (virtual, in-memory) containing an arbitrary set of
  files and directories. These files and directories can (optionally) have associated access permissions.
  You also configure a set of one or more user accounts that control which users can login to the FTP server,
  and their home (default) directories. The user account is also used when assigning file and directory
  ownership for new files. See {{{./fakeftpserver-features.html}FakeFtpServer Features and Limitations}}.

  <<StubFtpServer>> is a "stub" implementation of an FTP server. It supports the main FTP commands by
  implementing command handlers for each of the corresponding low-level FTP server commands (e.g. RETR,
  DELE, LIST). These <CommandHandler>s can be individually configured to return custom data or reply codes,
  allowing simulation of a complete range of both success and failure scenarios. The <CommandHandler>s can
  also be interrogated to verify command invocation data such as command parameters and timestamps.
  See {{{./stubftpserver-features.html}StubFtpServer Features and Limitations}}.

  See the {{{./fakeftpserver-versus-stubftpserver.html}FakeFtpServer or StubFtpServer?}} page for more
  information on deciding whether to use <<FakeFtpServer>> or <<StubFtpServer>>.

  The <<MockFtpServer>> project is written in Java, and is ideally suited to testing Java code. But because
  communication with the FTP server is across the network using sockets, it can be used to test FTP client 
  code written in any language.

  NOTE: Starting with <<MockFtpServer>> 2.4, the <<Log4J>> dependency has been replaced with {{{http://www.slf4j.org/}SLF4J}}.


* Requirements
~~~~~~~~~~~~~~

  The <<MockFtpServer>> project requires:

  *  Java (JDK) version 1.4 or later

  * The {{{http://www.slf4j.org/}SLF4J}} API jar, accessible on the CLASSPATH. An SLF4J binding (logging
    framework-specific jar) is optional.


* Maven Support
~~~~~~~~~~~~~~~

  For projects built using {{{http://maven.apache.org/}Maven}}, <<MockFtpServer>> is now available
  from the <<Maven Central Repository>>. Add a dependency to your POM like this:

--------------------
  <dependency>
    <groupId>org.mockftpserver</groupId>
    <artifactId>MockFtpServer</artifactId>
    <version>2.4</version>
    <scope>test</scope>
  </dependency>
--------------------