From 731be3a50ed6ee72130c6d4c0ce75fb0cd0cbc2e Mon Sep 17 00:00:00 2001 From: Wainer dos Santos Moschetta Date: Fri, 4 Mar 2016 16:29:53 -0300 Subject: [PATCH] Bug 489051 - JSchProcess#exitValue() should throws IllegalThreadStateException Call to exitValue() throws IllegalThreadStateException when the process has not terminated insted of -1. Change-Id: Ia119ecf0c7aba34619f2b95c072bd4261f1ac898 Signed-off-by: Wainer dos Santos Moschetta --- .../internal/jsch/core/JSchProcess.java | 4 ++++ .../internal/jsch/core/messages/Messages.java | 1 + .../jsch/core/messages/messages.properties | 1 + .../remote/jsch/tests/ProcessTests.java | 23 +++++++++++++++++++ 4 files changed, 29 insertions(+) diff --git a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchProcess.java b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchProcess.java index 616b4c21dab..f024b78185b 100644 --- a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchProcess.java +++ b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchProcess.java @@ -21,6 +21,7 @@ import org.eclipse.remote.core.IRemoteProcessControlService; import org.eclipse.remote.core.IRemoteProcessSignalService; import org.eclipse.remote.core.IRemoteProcessTerminalService; import org.eclipse.remote.core.exception.RemoteConnectionException; +import org.eclipse.remote.internal.jsch.core.messages.Messages; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelExec; @@ -162,6 +163,9 @@ public class JSchProcess implements IRemoteProcessControlService, IRemoteProcess */ @Override public int exitValue() { + if(!isCompleted()) { + throw new IllegalThreadStateException(Messages.JSchProcess_exitValue_exception_msg); + } return fChannel.getExitStatus(); } diff --git a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/messages/Messages.java b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/messages/Messages.java index 221a3e8664e..0e3736eae45 100755 --- a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/messages/Messages.java +++ b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/messages/Messages.java @@ -42,6 +42,7 @@ public class Messages extends NLS { public static String JSchConnectionProxyFactory_ProxyCommandFailed; public static String JSchConnectionProxyFactory_timedOut; public static String JSchConnectionProxyFactory_wasCanceled; + public static String JSchProcess_exitValue_exception_msg; public static String JSchProcessBuilder_Connection_is_not_open; public static String JschFileStore_Connection_is_not_open; public static String JschFileStore_File_doesnt_exist; diff --git a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/messages/messages.properties b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/messages/messages.properties index b9152f94c3c..201a11bf29e 100755 --- a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/messages/messages.properties +++ b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/messages/messages.properties @@ -32,6 +32,7 @@ JSchConnectionProxyFactory_failed=failed JSchConnectionProxyFactory_ProxyCommandFailed=Proxy command "{0}" {1} and printed message "{2}" JSchConnectionProxyFactory_timedOut=timed out JSchConnectionProxyFactory_wasCanceled=was canceled +JSchProcess_exitValue_exception_msg=process has not exited JSchProcessBuilder_Connection_is_not_open=Connection is not open JschFileStore_Connection_is_not_open=Connection is not open JschFileStore_File_doesnt_exist=File {0} doesn't exist diff --git a/tests/org.eclipse.remote.jsch.tests/src/org/eclipse/remote/jsch/tests/ProcessTests.java b/tests/org.eclipse.remote.jsch.tests/src/org/eclipse/remote/jsch/tests/ProcessTests.java index 001c8993529..e9cc5353593 100644 --- a/tests/org.eclipse.remote.jsch.tests/src/org/eclipse/remote/jsch/tests/ProcessTests.java +++ b/tests/org.eclipse.remote.jsch.tests/src/org/eclipse/remote/jsch/tests/ProcessTests.java @@ -19,6 +19,7 @@ import org.eclipse.remote.core.IRemoteProcess; import org.eclipse.remote.core.IRemoteProcessBuilder; import org.eclipse.remote.core.IRemoteProcessService; import org.eclipse.remote.core.IRemoteServicesManager; +import org.eclipse.remote.core.RemoteProcessAdapter; import org.eclipse.remote.internal.jsch.core.JSchConnection; public class ProcessTests extends TestCase { @@ -171,6 +172,28 @@ public class ProcessTests extends TestCase { assertEquals("0123456789", result.toString()); } + public void testExitValue() { + IRemoteProcessService processService = fRemoteConnection.getService(IRemoteProcessService.class); + assertNotNull(processService); + IRemoteProcessBuilder builder = processService.getProcessBuilder(new String[]{"sleep","60"}); //$NON-NLS-1$ + assertNotNull(builder); + IRemoteProcess rp = null; + try { + rp = builder.start(); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getLocalizedMessage()); + } + assertNotNull(rp); + Process p = new RemoteProcessAdapter(rp); + try { + p.exitValue(); + fail("Process has not exited. Should throws an IllegalThreadStateException exception"); + } catch(IllegalThreadStateException e) { + e.printStackTrace(); + } + } + @Override protected void setUp() throws Exception { IRemoteServicesManager manager = Activator.getService(IRemoteServicesManager.class);