1
1
package com .browserstack .local ;
2
2
3
- import java .io .BufferedReader ;
4
- import java .io .InputStreamReader ;
5
- import java .io .FileReader ;
6
- import java .io .FileWriter ;
3
+ import java .io .*;
7
4
import java .util .ArrayList ;
8
5
import java .util .HashMap ;
9
6
import java .util .Arrays ;
@@ -22,7 +19,7 @@ public class Local {
22
19
String logFilePath ;
23
20
int pid = 0 ;
24
21
25
- private Process proc = null ;
22
+ private LocalProcess proc = null ;
26
23
27
24
private final Map <String , String > parameters ;
28
25
@@ -64,13 +61,11 @@ public void start(Map<String, String> options) throws Exception {
64
61
if (options .get ("onlyCommand" ) != null ) return ;
65
62
66
63
if (proc == null ) {
67
- ProcessBuilder processBuilder = new ProcessBuilder (command );
68
-
69
64
FileWriter fw = new FileWriter (logFilePath );
70
65
fw .write ("" );
71
66
fw .close ();
72
67
73
- proc = processBuilder . start ( );
68
+ proc = runCommand ( command );
74
69
BufferedReader stdoutbr = new BufferedReader (new InputStreamReader (proc .getInputStream ()));
75
70
BufferedReader stderrbr = new BufferedReader (new InputStreamReader (proc .getErrorStream ()));
76
71
String stdout ="" , stderr ="" , line ;
@@ -100,8 +95,7 @@ public void start(Map<String, String> options) throws Exception {
100
95
public void stop () throws Exception {
101
96
if (pid != 0 ) {
102
97
makeCommand (startOptions , "stop" );
103
- ProcessBuilder processBuilder = new ProcessBuilder (command );
104
- proc = processBuilder .start ();
98
+ proc = runCommand (command );
105
99
proc .waitFor ();
106
100
pid = 0 ;
107
101
}
@@ -170,11 +164,47 @@ private boolean isProcessRunning(int pid) throws Exception {
170
164
cmd .add (String .valueOf (pid ));
171
165
}
172
166
173
- ProcessBuilder processBuilder = new ProcessBuilder (cmd );
174
- proc = processBuilder .start ();
167
+ proc = runCommand (cmd );
175
168
int exitValue = proc .waitFor ();
176
169
177
170
// 0 is the default exit code which means the process exists
178
171
return exitValue == 0 ;
179
172
}
173
+
174
+ /**
175
+ * Executes the supplied command on the shell.
176
+ *
177
+ * @param command Command to be executed on the shell.
178
+ * @return {@link LocalProcess} for managing the launched process.
179
+ * @throws IOException
180
+ */
181
+ protected LocalProcess runCommand (List <String > command ) throws IOException {
182
+ ProcessBuilder processBuilder = new ProcessBuilder (command );
183
+ final Process process = processBuilder .start ();
184
+
185
+ return new LocalProcess () {
186
+ @ Override
187
+ public InputStream getInputStream () {
188
+ return process .getInputStream ();
189
+ }
190
+
191
+ @ Override
192
+ public InputStream getErrorStream () {
193
+ return process .getErrorStream ();
194
+ }
195
+
196
+ @ Override
197
+ public int waitFor () throws InterruptedException {
198
+ return process .waitFor ();
199
+ }
200
+ };
201
+ }
202
+
203
+ public interface LocalProcess {
204
+ InputStream getInputStream ();
205
+
206
+ InputStream getErrorStream ();
207
+
208
+ int waitFor () throws InterruptedException ;
209
+ }
180
210
}
0 commit comments