--------------------------------------------------
				FakeFtpServer versus StubFtpServer
		--------------------------------------------------

FakeFtpServer or StubFtpServer?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  The <<MockFtpServer>> project includes two separate <mock> implementations of an FTP Server. Which one you
  use is dependent on what kind of FTP scenario(s) you wish to simulate, and what level of control you need
  over exact server replies.

* FakeFtpServer
~~~~~~~~~~~~~~~

  <<FakeFtpServer>> provides a high-level abstraction for an FTP Server and is suitable for most testing
  and simulation scenarios. You define a filesystem (internal, 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.

  <<FakeFtpServer>> processes FTP client requests and responds with reply codes and reply messages
  consistent with its configuration and the contents of its internal filesystem, including file and
  directory permissions, if they have been configured.

  <<FakeFtpServer>>  can be fully configured programmatically or within a
  {{{http://www.springframework.org/}Spring Framework}} or other dependency-injection container.

  See the {{{./fakeftpserver-features.html}FakeFtpServer Features and Limitations}} page for more information on
  which features and scenarios are supported.

* StubFtpServer
~~~~~~~~~~~~~~~

  <<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.

  <<StubFtpServer>> works out of the box with reasonable defaults, but can be fully configured programmatically
  or within a {{{http://www.springframework.org/}Spring Framework}} or other dependency-injection container.

  See the {{{./stubftpserver-features.html}StubFtpServer Features and Limitations}} page for more information on
  which features and scenarios are supported.

* So, Which One Should I Use?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  In general, if your testing and simulation needs are pretty straightforward, then using <<FakeFtpServer>> is
  probably the best choice. See the {{{./fakeftpserver-features.html}FakeFtpServer Features and Limitations}} page
  for more information on which features and scenarios are supported.

  Some reasons to use <<StubFtpServer>> include:

  * If you need to simulate an FTP server scenario not supported by <<FakeFtpServer>>.

  * You want to test a very specific and/or limited FTP scenario. In this case, the setup of the
    <<StubFtpServer>> might be simpler -- you don't have to setup fake files and directories and user accounts.

  * You are more comfortable with configuring and using the lower-level FTP server command reply codes and behavior.