[ https://issues.apache.org/jira/browse/FTPSERVER-78?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Niklas Gustavsson closed FTPSERVER-78. -------------------------------------- Resolution: Fixed Fixed, thanks for the excellent test case. commit -m "Remove generic timeout for MINA sessions (FTPSERVER-78)" C:/home/niklas/workspaces/apache/ftpserver/core/src/java/org/apache/ftpserver/listener/mina/MinaFtpProtocolHandler.java Sending C:/home/niklas/workspaces/apache/ftpserver/core/src/java/org/apache/ftpserver/listener/mina/MinaFtpProtocolHandler.java Transmitting file data ... Committed revision 516774. > 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 > Environment: FreeBSD, JDK6 > Reporter: Peter Kostouros > Assigned To: Niklas Gustavsson > Priority: Minor > Fix For: 1.0-M2 > > > 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.