FTP sessions disconnect after about a minute of user idle even if user max idle 
time is set to infinite
-------------------------------------------------------------------------------------------------------

                 Key: FTPSERVER-78
                 URL: https://issues.apache.org/jira/browse/FTPSERVER-78
             Project: FtpServer
          Issue Type: Bug
          Components: Core
    Affects Versions: 1.0-M1, 1.0-M2, 1.0, WISHLIST
         Environment: FreeBSD, JDK6

            Reporter: Peter Kostouros
            Priority: Minor


The FTP server forcibly disconnects clients after about a minute of user idle 
even if the user's maximum idle time setting is not exceeded.

Test case shown below:

/home/peter/ftpserver/trunk/core/src/test/org/apache/ftpserver/clienttests/TimeoutTest

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */  

package org.apache.ftpserver.clienttests;

import java.io.ByteArrayOutputStream;
import java.io.File;

import org.apache.ftpserver.test.TestUtil;


public class TimeoutTest extends ClientTestTemplate {
    private static final String TEST_FILENAME = "test.txt";
    private static final File TEST_FILE = new File(ROOT_DIR, TEST_FILENAME);

    private static byte[] testData = null;

    private static long TIMEOUT = 120000L;
    
    /* (non-Javadoc)
     * @see org.apache.ftpserver.clienttests.ClientTestTemplate#setUp()
     */
    protected void setUp() throws Exception {
        super.setUp();

        testData = "TESTDATA".getBytes("UTF-8");
        
        client.login(ADMIN_USERNAME, ADMIN_PASSWORD);
    }

    public void testTimeout() throws Exception {
        
        TestUtil.writeDataToFile(TEST_FILE, testData);

        assertTrue(TEST_FILE.exists());

        Thread.sleep(TIMEOUT);

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        assertTrue(client.retrieveFile(TEST_FILENAME, baos));
        
        assertTrue(TEST_FILE.exists());
        TestUtil.assertArraysEqual(testData, baos.toByteArray());
    }
}


Test case report:

/home/peter/ftpserver/trunk/core/target/surefire-reports/TEST-org.apache.ftpserver.clienttests.TimeoutTest.xml

org.apache.commons.net.ftp.FTPConnectionClosedException: Connection closed 
without indication. at org.apache.commons.net.ftp.FTP.__getReply(FTP.java:267) 
at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:460) at 
org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:520) at 
org.apache.commons.net.ftp.FTP.port(FTP.java:849) at 
org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:477) 
at org.apache.commons.net.ftp.FTPClient.retrieveFile(FTPClient.java:1285) at 
org.apache.ftpserver.clienttests.TimeoutTest.testTimeout(TimeoutTest.java:56) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597) at 
junit.framework.TestCase.runTest(TestCase.java:154) at 
junit.framework.TestCase.runBare(TestCase.java:127) at 
junit.framework.TestResult$1.protect(TestResult.java:106) at 
junit.framework.TestResult.runProtected(TestResult.java:124) at 
junit.framework.TestResult.run(TestResult.java:109) at 
junit.framework.TestCase.run(TestCase.java:118) at 
junit.framework.TestSuite.runTest(TestSuite.java:208) at 
junit.framework.TestSuite.run(TestSuite.java:203) at 
sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source) at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597) at 
org.codehaus.surefire.battery.JUnitBattery.executeJUnit(JUnitBattery.java:246) 
at org.codehaus.surefire.battery.JUnitBattery.execute(JUnitBattery.java:220) at 
org.codehaus.surefire.Surefire.executeBattery(Surefire.java:204) at 
org.codehaus.surefire.Surefire.run(Surefire.java:153) at 
org.codehaus.surefire.Surefire.run(Surefire.java:77) at 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597) at 
org.codehaus.surefire.SurefireBooter.run(SurefireBooter.java:104) at 
org.apache.maven.test.SurefirePlugin.execute(SurefirePlugin.java:303) at 
org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:420)
 at 
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)
 at 
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:480)
 at 
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:459)
 at 
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:311)
 at 
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:278)
 at 
org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:143)
 at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:330) at 
org.apache.maven.DefaultMaven.execute(DefaultMaven.java:123) at 
org.apache.maven.cli.MavenCli.main(MavenCli.java:272) at 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:597) at 
org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315) at 
org.codehaus.classworlds.Launcher.launch(Launcher.java:255) at 
org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430) at 
org.codehaus.classworlds.Launcher.main(Launcher.java:375)  Server ready :: 


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to