From f99e0130d93c8de2557df57ed4956a46304b9a90 Mon Sep 17 00:00:00 2001 From: Shirish Kamath Date: Thu, 12 May 2016 15:50:40 +0530 Subject: [PATCH 1/9] Enables overriding execution specifics of commands --- .../java/com/browserstack/local/Local.java | 54 ++++++++++++++----- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/browserstack/local/Local.java b/src/main/java/com/browserstack/local/Local.java index e59d6c3..5c20eae 100644 --- a/src/main/java/com/browserstack/local/Local.java +++ b/src/main/java/com/browserstack/local/Local.java @@ -1,9 +1,6 @@ package com.browserstack.local; -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.io.FileReader; -import java.io.FileWriter; +import java.io.*; import java.util.ArrayList; import java.util.HashMap; import java.util.Arrays; @@ -22,7 +19,7 @@ public class Local { String logFilePath; int pid = 0; - private Process proc = null; + private LocalProcess proc = null; private final Map parameters; @@ -64,13 +61,11 @@ public void start(Map options) throws Exception { if (options.get("onlyCommand") != null) return; if (proc == null) { - ProcessBuilder processBuilder = new ProcessBuilder(command); - FileWriter fw = new FileWriter(logFilePath); fw.write(""); fw.close(); - proc = processBuilder.start(); + proc = runCommand(command); BufferedReader stdoutbr = new BufferedReader(new InputStreamReader(proc.getInputStream())); BufferedReader stderrbr = new BufferedReader(new InputStreamReader(proc.getErrorStream())); String stdout="", stderr="", line; @@ -100,8 +95,7 @@ public void start(Map options) throws Exception { public void stop() throws Exception { if (pid != 0) { makeCommand(startOptions, "stop"); - ProcessBuilder processBuilder = new ProcessBuilder(command); - proc = processBuilder.start(); + proc = runCommand(command); proc.waitFor(); pid = 0; } @@ -170,11 +164,47 @@ private boolean isProcessRunning(int pid) throws Exception { cmd.add(String.valueOf(pid)); } - ProcessBuilder processBuilder = new ProcessBuilder(cmd); - proc = processBuilder.start(); + proc = runCommand(cmd); int exitValue = proc.waitFor(); // 0 is the default exit code which means the process exists return exitValue == 0; } + + /** + * Executes the supplied command on the shell. + * + * @param command Command to be executed on the shell. + * @return {@link LocalProcess} for managing the launched process. + * @throws IOException + */ + protected LocalProcess runCommand(List command) throws IOException { + ProcessBuilder processBuilder = new ProcessBuilder(command); + final Process process = processBuilder.start(); + + return new LocalProcess() { + @Override + public InputStream getInputStream() { + return process.getInputStream(); + } + + @Override + public InputStream getErrorStream() { + return process.getErrorStream(); + } + + @Override + public int waitFor() throws InterruptedException { + return process.waitFor(); + } + }; + } + + public interface LocalProcess { + InputStream getInputStream(); + + InputStream getErrorStream(); + + int waitFor() throws InterruptedException; + } } From 1652d672fd1926c0faaa12f9cc2cede3ecdff2dc Mon Sep 17 00:00:00 2001 From: Shirish Kamath Date: Thu, 12 May 2016 15:56:45 +0530 Subject: [PATCH 2/9] Set minimum supported Java version to 1.5 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 2569f17..e8420d1 100644 --- a/pom.xml +++ b/pom.xml @@ -143,8 +143,8 @@ maven-compiler-plugin 2.3.2 - 1.6 - 1.6 + 1.5 + 1.5 From 24b85679161ae76ca9a390dc6378ea8726cf12b5 Mon Sep 17 00:00:00 2001 From: Shirish Kamath Date: Thu, 12 May 2016 16:16:41 +0530 Subject: [PATCH 3/9] Java 1.5 compat, raise generic exception for waitFor --- src/main/java/com/browserstack/local/Local.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/browserstack/local/Local.java b/src/main/java/com/browserstack/local/Local.java index 5c20eae..6e77f3c 100644 --- a/src/main/java/com/browserstack/local/Local.java +++ b/src/main/java/com/browserstack/local/Local.java @@ -183,18 +183,15 @@ protected LocalProcess runCommand(List command) throws IOException { final Process process = processBuilder.start(); return new LocalProcess() { - @Override public InputStream getInputStream() { return process.getInputStream(); } - @Override public InputStream getErrorStream() { return process.getErrorStream(); } - @Override - public int waitFor() throws InterruptedException { + public int waitFor() throws Exception { return process.waitFor(); } }; @@ -205,6 +202,6 @@ public interface LocalProcess { InputStream getErrorStream(); - int waitFor() throws InterruptedException; + int waitFor() throws Exception; } } From 9f19513a96b01cf5885ced7eada6e3525174290e Mon Sep 17 00:00:00 2001 From: Shirish Kamath Date: Thu, 12 May 2016 16:17:23 +0530 Subject: [PATCH 4/9] Minor doc fix --- src/main/java/com/browserstack/local/Local.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/browserstack/local/Local.java b/src/main/java/com/browserstack/local/Local.java index 6e77f3c..d865b69 100644 --- a/src/main/java/com/browserstack/local/Local.java +++ b/src/main/java/com/browserstack/local/Local.java @@ -145,7 +145,7 @@ private void makeCommand(Map options, String opCode) { /** * Checks if process with pid is running * - * @param options Options supplied for the Local instance + * @param pid pid for the process to be checked. * @link http://stackoverflow.com/a/26423642/941691 */ private boolean isProcessRunning(int pid) throws Exception { From 76336ddd821471ae9c5bf3d2970d132ae2be88f4 Mon Sep 17 00:00:00 2001 From: Shirish Kamath Date: Thu, 12 May 2016 16:31:54 +0530 Subject: [PATCH 5/9] Minor refactor --- src/main/java/com/browserstack/local/Local.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/browserstack/local/Local.java b/src/main/java/com/browserstack/local/Local.java index d865b69..3717a3b 100644 --- a/src/main/java/com/browserstack/local/Local.java +++ b/src/main/java/com/browserstack/local/Local.java @@ -13,6 +13,8 @@ */ public class Local { + private static final List IGNORE_KEYS = Arrays.asList("key", "logfile", "binarypath"); + List command; Map startOptions; String binaryPath; @@ -126,9 +128,8 @@ private void makeCommand(Map options, String opCode) { command.add(options.get("key")); for (Map.Entry opt : options.entrySet()) { - List ignoreKeys = Arrays.asList("key", "logfile", "binarypath"); String parameter = opt.getKey().trim(); - if (ignoreKeys.contains(parameter)) { + if (IGNORE_KEYS.contains(parameter)) { continue; } if (parameters.get(parameter) != null) { From 68181883eabb83a56f88afd49c445abaef82e96f Mon Sep 17 00:00:00 2001 From: Shirish Kamath Date: Thu, 12 May 2016 16:37:14 +0530 Subject: [PATCH 6/9] Using equals() --- src/main/java/com/browserstack/local/Local.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/browserstack/local/Local.java b/src/main/java/com/browserstack/local/Local.java index 3717a3b..ddaf819 100644 --- a/src/main/java/com/browserstack/local/Local.java +++ b/src/main/java/com/browserstack/local/Local.java @@ -79,7 +79,7 @@ public void start(Map options) throws Exception { } int r = proc.waitFor(); - JSONObject obj = new JSONObject(stdout != "" ? stdout : stderr); + JSONObject obj = new JSONObject(!stdout.equals("") ? stdout : stderr); if(!obj.getString("state").equals("connected")){ throw new LocalException(obj.getString("message")); } From a19ca40e87387308963e1d4d289f3a1722a46f73 Mon Sep 17 00:00:00 2001 From: Shirish Kamath Date: Wed, 18 May 2016 11:43:00 +0530 Subject: [PATCH 7/9] Removed logPath --- src/main/java/com/browserstack/local/Local.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/main/java/com/browserstack/local/Local.java b/src/main/java/com/browserstack/local/Local.java index ddaf819..3425691 100644 --- a/src/main/java/com/browserstack/local/Local.java +++ b/src/main/java/com/browserstack/local/Local.java @@ -18,7 +18,6 @@ public class Local { List command; Map startOptions; String binaryPath; - String logFilePath; int pid = 0; private LocalProcess proc = null; @@ -57,16 +56,11 @@ public void start(Map options) throws Exception { binaryPath = lb.getBinaryPath(); } - logFilePath = options.get("logfile") == null ? (System.getProperty("user.dir") + "/local.log") : options.get("logfile"); makeCommand(options, "start"); if (options.get("onlyCommand") != null) return; if (proc == null) { - FileWriter fw = new FileWriter(logFilePath); - fw.write(""); - fw.close(); - proc = runCommand(command); BufferedReader stdoutbr = new BufferedReader(new InputStreamReader(proc.getInputStream())); BufferedReader stderrbr = new BufferedReader(new InputStreamReader(proc.getErrorStream())); @@ -123,8 +117,6 @@ private void makeCommand(Map options, String opCode) { command.add(binaryPath); command.add("-d"); command.add(opCode); - command.add("-logFile"); - command.add(logFilePath); command.add(options.get("key")); for (Map.Entry opt : options.entrySet()) { From 00425153d030630c5157d853cda12f2936e9f936 Mon Sep 17 00:00:00 2001 From: Shirish Kamath Date: Wed, 18 May 2016 14:03:49 +0530 Subject: [PATCH 8/9] Removed logfile from ignored keys --- src/main/java/com/browserstack/local/Local.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/browserstack/local/Local.java b/src/main/java/com/browserstack/local/Local.java index 3425691..001c83a 100644 --- a/src/main/java/com/browserstack/local/Local.java +++ b/src/main/java/com/browserstack/local/Local.java @@ -13,7 +13,7 @@ */ public class Local { - private static final List IGNORE_KEYS = Arrays.asList("key", "logfile", "binarypath"); + private static final List IGNORE_KEYS = Arrays.asList("key", "binarypath"); List command; Map startOptions; From 8710d237a54fbfab6f0dc4135dcbd6c5ed504fb2 Mon Sep 17 00:00:00 2001 From: Shirish Kamath Date: Thu, 19 May 2016 15:55:14 +0530 Subject: [PATCH 9/9] Bumped version to v0.3.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e8420d1..ed5a1ac 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.browserstack browserstack-local-java jar - 0.2.0 + 0.3.0 browserstack-local-java Java bindings for BrowserStack Local