		--------------------------------------------------
				FakeFtpServer Features and Limitations
		--------------------------------------------------

FakeFtpServer Features
~~~~~~~~~~~~~~~~~~~~~~

  * Standalone dummy FTP server. Run either within the same JVM as test code or in a different JVM.

  * Implements common FTP server commands.

  * Works out of the box with reasonable and expected behavior. Can simulate most mainline success and error scenarios.

  * In most cases, requires little or no knowledge or understanding of FTP server commands and reply codes. 

  * Provides a simulated server file system, including support for file and directory permissions and owner and
   group authorization based on Unix. This file system can be populated at startup (or thereafter) with
   directories and files (including arbitrary content) to be retrieved by an FTP client. Any files sent to the server
   by an FTP client exist within that file system as well, and can be accessed through the file system API, or
   can even be subsequently retrieved by an FTP client.

  * Allows defining the set of user accounts that control which users can login to the FTP server, and their home
    (default) directories.

  * Supports active and passive mode data transfers.

  * Use a dynamically chosen free port number for the server control port instead of using the default (21)
    or hard-coding some other value (set the serverControlPort property of the server to 0).

  * Supports extended address (IPv6) data transfers (RFC2428)

  * Fully supports configuration within the <<Spring Framework>> or other dependency-injection container.
  
  * Can be used to test FTP client code written in any language
  
FTP Scenarios Supported by FakeFtpServer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  Some of the mainline success scenarios that you can simulate with <<FakeFtpServer>> include:

    * Login (USER/PASS): with password, or when no password is required

    * Retrieve existing file (RETR) from the server

    * Send file to the server (STOR,STOU,APPE)

    * List of file entries (LIST) and list of filenames (NLST)

    * Print current working directory (PWD)

    * Change current working directory (CWD)

    * Rename an existing file (RNFR/RNTO)

    * Delete an existing file (DELE)

    * Create directory (MKD)

    * Remove directory (RMD)

    * Both active and passive mode (PASV) data transfers

    * Extended Address (IPv6) data transfers (EPRT and EPSV commands)

  Some of the error scenarios that you can simulate with <<FakeFtpServer>> include:

    * Failed login (USER/PASS): no such user, wrong password

    * Invalid client requests: missing required parameter, not logged in

    * Failed retrieve (RETR): no such file, missing required access permissions for the current user

    * Failed send (STOR,STOU,APPE): missing required access permissions for the current user

    * Failed change current working directory (CWD): no such directory, missing required access permissions for the current user

    * Failed delete an existing file (DELE): file does not exist, missing required access permissions for the current user

    * Failed rename (RNFR/RNTO): no such file, missing required access permissions for the current user

    * Failed create directory (MKD): parent directory does not exist, directory already exists, missing required access permissions for the current user

    * Failed remove directory (RMD): no such directory, directory not empty, missing required access permissions for the current user


FakeFtpServer Limitations
~~~~~~~~~~~~~~~~~~~~~~~~~

  Not all FTP features, error scenarios and reply codes can be simulated using <<FakeFtpServer>>. Features and
  scenarios not supported include:

  * Leaving the data connection open across multiple client requests.

  * Transmission mode other than 'Stream'. The STRU command is implemented but has no effect (NOOP).

  * Data Types other than ASCII and IMAGE (binary).

  * Vertical Format Control other than the default (NON PRINT).

  * Record Structure and Page Structure. The STRU command is implemented but has no effect (NOOP).

  * Error Recovery and Restart. The REST command is implemented but has no effect (NOOP).

  * Structure Mount. The SMNT command is implemented but has no effect (NOOP).

  * Abort. The ABOR command is implemented but has no effect (NOOP).

  * Allocate. The ALLO command is implemented but has no effect (NOOP).

  []

  For unsupported features, error scenarios and reply codes, consider using <<StubFtpServer>> instead, which
  provides a lower-level abstraction and finer control over exact server reply codes and responses.
