From c6358a93d44f0e132f0e94d62379983adef5e4ce Mon Sep 17 00:00:00 2001 From: div Date: Tue, 17 Dec 2019 16:43:43 +1000 Subject: [PATCH] GH-3123: Don't logout FtpSession if not connected Fixes https://github.com/spring-projects/spring-integration/issues/3123 --- .../springframework/integration/ftp/session/FtpSession.java | 5 ++++- .../integration/ftp/session/SessionFactoryTests.java | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/session/FtpSession.java b/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/session/FtpSession.java index 21b10bb1e0..1f907a87dc 100644 --- a/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/session/FtpSession.java +++ b/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/session/FtpSession.java @@ -38,6 +38,7 @@ import org.springframework.util.ObjectUtils; * @author Oleg Zhurakousky * @author Gary Russell * @author Artem Bilan + * @author Den Ivanov * * @since 2.0 */ @@ -154,7 +155,9 @@ public class FtpSession implements Session { if (this.readingRaw.get() && !finalizeRaw() && LOGGER.isWarnEnabled()) { LOGGER.warn("Finalize on readRaw() returned false for " + this); } - this.client.logout(); + if (this.client.isConnected()) { + this.client.logout(); + } this.client.disconnect(); } catch (Exception e) { diff --git a/spring-integration-ftp/src/test/java/org/springframework/integration/ftp/session/SessionFactoryTests.java b/spring-integration-ftp/src/test/java/org/springframework/integration/ftp/session/SessionFactoryTests.java index 4e55cad139..06b98adb6a 100644 --- a/spring-integration-ftp/src/test/java/org/springframework/integration/ftp/session/SessionFactoryTests.java +++ b/spring-integration-ftp/src/test/java/org/springframework/integration/ftp/session/SessionFactoryTests.java @@ -69,6 +69,7 @@ class SessionFactoryTests { sessionFactory.setDataTimeout(789); doReturn(200).when(client).getReplyCode(); doReturn(true).when(client).login("foo", null); + doReturn(true).when(client).isConnected(); FtpSession session = sessionFactory.getSession(); verify(client).setConnectTimeout(123); verify(client).setDefaultTimeout(456); @@ -210,7 +211,6 @@ class SessionFactoryTests { session.close(); } catch (Exception e) { - e.printStackTrace(); failures.incrementAndGet(); } });