Hi

I had a look at the commons ftp code and the following snippet may help us understand what is going on:

/***
    * Sends an FTP command to the server, waits for a reply and returns the
    * numerical response code.  After invocation, for more detailed
    * information, the actual reply text can be accessed by calling
    * [EMAIL PROTECTED] #getReplyString  getReplyString } or
    * [EMAIL PROTECTED] #getReplyStrings  getReplyStrings }.
    * <p>
    * @param command  The text representation of the  FTP command to send.
    * @param args The arguments to the FTP command.  If this parameter is
    *             set to null, then the command is sent with no argument.
* @return The integer value of the FTP reply code returned by the server
    *         in response to the command.
    * @exception FTPConnectionClosedException
    *      If the FTP server prematurely closes the connection as a result
    *      of the client being idle or some other reason causing the server
    *      to send FTP reply code 421.  This exception may be caught either
    *      as an IOException or independently as itself.
* @exception IOException If an I/O error occurs while either sending the
    *      command or receiving the server reply.
    ***/
   public int sendCommand(String command, String args) throws IOException
   {
       String message;

       __commandBuffer.setLength(0);
       __commandBuffer.append(command);

       if (args != null)
       {
           __commandBuffer.append(' ');
           __commandBuffer.append(args);
       }
       __commandBuffer.append(SocketClient.NETASCII_EOL);

       try{
       _controlOutput.write(message = __commandBuffer.toString());
       _controlOutput.flush();
       }
       catch (SocketException e)
       {
           if (!isConnected() || !socketIsConnected(_socket_))  <<<<<<<<<<
           {
throw new FTPConnectionClosedException("Connection unexpectedly closed.");
           }
           else
           {
               throw e;
           }
       }
       if (_commandSupport_.getListenerCount() > 0)
           _commandSupport_.fireCommandSent(command, message);

       __getReply();
       return _replyCode;
   }


Is it worthwhile adding SocketException catch clauses to tests expecting FTPConnectionClosedException exceptions? or is something else going on that should not?


Niklas Gustavsson wrote:
Hi

I've commited a change for this. Not really sure what causes the problem but the test now allows for a SocketException as well.

Keep on reporting!

/niklas

Peter Kostouros wrote:
Hi

DefaultMaxLoginTest and CustomMaxLoginTest are failing on a Unix/Linux environment: SocketExceptions are raised whereas FTPConnectionClosedExceptions are expected.

FTPConnectionClosedException documentation mentions that such exceptions are raised when an FTPReply.SERVICE_NOT_AVAILABLE|| <http://commons.apache.org/net/apidocs/org/apache/commons/net/ftp/FTPReply.html#SERVICE_NOT_AVAILABLE>| |response (421) is received to a failed FTP command. I have not noticed this error under a Windows environment.

Here is the surefire report for DefaultMaxLoginTest.

-------------------------------------------------------------------------------
Test set: org.apache.ftpserver.clienttests.DefaultMaxLoginTest
------------------------------------------------------------------------------- Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 1.693 sec <<< FAILURE! testLogin(org.apache.ftpserver.clienttests.DefaultMaxLoginTest) Time elapsed: 1.686 sec <<< ERROR!
java.net.SocketException: Connection reset


--

Regards

Peter

As always the organisation disavows knowledge of this email

Reply via email to