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();
}
});