From 567480461c3b6fb7663f44321346e08fad2ca450 Mon Sep 17 00:00:00 2001 From: Pulkit Sharma Date: Fri, 30 Dec 2016 19:30:04 +0530 Subject: [PATCH 1/3] Checking binary after download and retrying once if it is corrupt. --- .../com/browserstack/local/LocalBinary.java | 48 ++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/browserstack/local/LocalBinary.java b/src/main/java/com/browserstack/local/LocalBinary.java index 6357206..e18a564 100644 --- a/src/main/java/com/browserstack/local/LocalBinary.java +++ b/src/main/java/com/browserstack/local/LocalBinary.java @@ -1,9 +1,12 @@ package com.browserstack.local; import org.apache.commons.io.FileUtils; - +import java.io.IOException; +import java.io.BufferedReader; +import java.io.InputStreamReader; import java.io.File; import java.net.URL; +import java.util.regex.Pattern; class LocalBinary { @@ -24,6 +27,7 @@ class LocalBinary { LocalBinary() throws LocalException { initialize(); getBinary(); + checkBinary(); } private void initialize() throws LocalException { @@ -45,6 +49,48 @@ private void initialize() throws LocalException { httpPath = BIN_URL + binFileName; } + private void checkBinary() throws LocalException{ + boolean binaryWorking = validateBinary(); + + if(!binaryWorking){ + File binary_file = new File(binaryPath); + if (binary_file.exists()) { + binary_file.delete(); + } + getBinary(); + if(!validateBinary()){ + throw new LocalException("BrowserStackLocal binary is corrupt"); + } + } + } + + private boolean validateBinary() throws LocalException{ + System.out.println("Validating binary at " + binaryPath); + Process process; + + try { + + process = new ProcessBuilder(binaryPath,"--version").start(); + + BufferedReader stdoutbr = new BufferedReader(new InputStreamReader(process.getInputStream())); + String stdout="",line=""; + + while ((line = stdoutbr.readLine()) != null) { + stdout += line; + } + process.waitFor(); + + boolean validBinary = Pattern.matches("BrowserStack Local version \\d+\\.\\d+", stdout); + + return binaryValid; + }catch(IOException ex){ + throw new LocalException(ex.toString()); + } + catch(InterruptedException ex){ + throw new LocalException(ex.toString()); + } + } + private void getBinary() throws LocalException { String destParentDir = getAvailableDirectory(); binaryPath = destParentDir + "/BrowserStackLocal"; From c91e77ba603753e1c6a2eba7196a50cd943b73e4 Mon Sep 17 00:00:00 2001 From: Pulkit Sharma Date: Fri, 30 Dec 2016 19:33:54 +0530 Subject: [PATCH 2/3] Removed debug message --- src/main/java/com/browserstack/local/LocalBinary.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/browserstack/local/LocalBinary.java b/src/main/java/com/browserstack/local/LocalBinary.java index e18a564..f5f3aa6 100644 --- a/src/main/java/com/browserstack/local/LocalBinary.java +++ b/src/main/java/com/browserstack/local/LocalBinary.java @@ -65,9 +65,7 @@ private void checkBinary() throws LocalException{ } private boolean validateBinary() throws LocalException{ - System.out.println("Validating binary at " + binaryPath); Process process; - try { process = new ProcessBuilder(binaryPath,"--version").start(); From 379d1a9fda40aafcd4a37b125265af507e7eebd2 Mon Sep 17 00:00:00 2001 From: Pulkit Sharma Date: Fri, 30 Dec 2016 19:37:02 +0530 Subject: [PATCH 3/3] returning whether binary is valid or not --- src/main/java/com/browserstack/local/LocalBinary.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/browserstack/local/LocalBinary.java b/src/main/java/com/browserstack/local/LocalBinary.java index f5f3aa6..03e2ca3 100644 --- a/src/main/java/com/browserstack/local/LocalBinary.java +++ b/src/main/java/com/browserstack/local/LocalBinary.java @@ -80,7 +80,7 @@ private boolean validateBinary() throws LocalException{ boolean validBinary = Pattern.matches("BrowserStack Local version \\d+\\.\\d+", stdout); - return binaryValid; + return validBinary; }catch(IOException ex){ throw new LocalException(ex.toString()); }