From a74f6adf170dc4ede0f0ee6a9a930ed70fa700d2 Mon Sep 17 00:00:00 2001 From: Shirish Kamath Date: Mon, 7 Oct 2024 10:25:36 +0530 Subject: [PATCH 1/3] feat: add gzip support, send UA containing version --- .../java/com/browserstack/local/Local.java | 11 ++++++++- .../com/browserstack/local/LocalBinary.java | 24 ++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/browserstack/local/Local.java b/src/main/java/com/browserstack/local/Local.java index 8e4cb34..7fefe33 100644 --- a/src/main/java/com/browserstack/local/Local.java +++ b/src/main/java/com/browserstack/local/Local.java @@ -23,7 +23,7 @@ public class Local { private LocalProcess proc = null; // Current version of binding package, used for --source option of binary - private final String packageVersion = "1.1.4"; + private static final String packageVersion = "1.1.4"; private final Map parameters; private final Map avoidValueParameters; @@ -130,6 +130,15 @@ public boolean isRunning() throws Exception { return isProcessRunning(pid); } + /** + * Returns the package version + * + * @return {String} package version + */ + public static String getPackageVersion() { + return packageVersion; + } + /** * Creates a list of command-line arguments for the Local instance * diff --git a/src/main/java/com/browserstack/local/LocalBinary.java b/src/main/java/com/browserstack/local/LocalBinary.java index 5f088d0..7e6bdfd 100644 --- a/src/main/java/com/browserstack/local/LocalBinary.java +++ b/src/main/java/com/browserstack/local/LocalBinary.java @@ -2,11 +2,15 @@ import org.apache.commons.io.FileUtils; import java.io.IOException; +import java.io.InputStream; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.File; import java.net.URL; +import java.net.URLConnection; import java.util.regex.Pattern; +import java.util.zip.GZIPInputStream; +import java.util.zip.ZipException; class LocalBinary { @@ -174,7 +178,7 @@ private void downloadBinary(String destParentDir, Boolean custom) throws LocalEx URL url = new URL(httpPath); File f = new File(source); - FileUtils.copyURLToFile(url, f); + newCopyToFile(url, f); changePermissions(binaryPath); } catch (Exception e) { @@ -192,4 +196,22 @@ private void changePermissions(String path) { public String getBinaryPath() { return binaryPath; } + + private static void newCopyToFile(URL url, File f) throws IOException { + URLConnection conn = url.openConnection(); + conn.setRequestProperty("User-Agent", "browserstack-local-java/" + Local.getPackageVersion()); + conn.setRequestProperty("Accept-Encoding", "gzip, *"); + String contentEncoding = conn.getContentEncoding(); + + if (contentEncoding == null || !contentEncoding.toLowerCase().contains("gzip")) { + FileUtils.copyToFile(conn.getInputStream(), f); + return; + } + + try (InputStream stream = new GZIPInputStream(conn.getInputStream())) { + FileUtils.copyToFile(stream, f); + } catch (ZipException e) { + FileUtils.copyURLToFile(url, f); + } + } } From 57b1622cbf533b2df33dd3cf2487b0d97e3025f1 Mon Sep 17 00:00:00 2001 From: Shirish Kamath Date: Mon, 7 Oct 2024 10:33:38 +0530 Subject: [PATCH 2/3] chore: apply sourceURL override, log line for debugging --- .../java/com/browserstack/local/LocalBinary.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/browserstack/local/LocalBinary.java b/src/main/java/com/browserstack/local/LocalBinary.java index 7e6bdfd..4722cae 100644 --- a/src/main/java/com/browserstack/local/LocalBinary.java +++ b/src/main/java/com/browserstack/local/LocalBinary.java @@ -62,7 +62,13 @@ private void initialize() throws LocalException { throw new LocalException("Failed to detect OS type"); } - httpPath = BIN_URL + binFileName; + String sourceURL = BIN_URL; + String envURL = System.getenv("BROWSERSTACK_LOCAL_BIN_URL"); + if (envURL != null && !envURL.isEmpty()) { + // apply sourceURL override + sourceURL = envURL; + } + httpPath = sourceURL + binFileName; } private boolean isAlpine() { @@ -209,6 +215,10 @@ private static void newCopyToFile(URL url, File f) throws IOException { } try (InputStream stream = new GZIPInputStream(conn.getInputStream())) { + if (System.getenv().containsKey("BROWSERSTACK_LOCAL_DEBUG_GZIP")) { + System.out.println("using gzip in " + conn.getRequestProperty("User-Agent")); + } + FileUtils.copyToFile(stream, f); } catch (ZipException e) { FileUtils.copyURLToFile(url, f); From eb40ccc3adef22cc3d50c5b1e94c6f2477488f8b Mon Sep 17 00:00:00 2001 From: Kamalpreet Kaur Date: Mon, 23 Dec 2024 15:21:01 +0530 Subject: [PATCH 3/3] update: remove URL flag --- src/main/java/com/browserstack/local/LocalBinary.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/com/browserstack/local/LocalBinary.java b/src/main/java/com/browserstack/local/LocalBinary.java index 4722cae..6c83156 100644 --- a/src/main/java/com/browserstack/local/LocalBinary.java +++ b/src/main/java/com/browserstack/local/LocalBinary.java @@ -63,11 +63,6 @@ private void initialize() throws LocalException { } String sourceURL = BIN_URL; - String envURL = System.getenv("BROWSERSTACK_LOCAL_BIN_URL"); - if (envURL != null && !envURL.isEmpty()) { - // apply sourceURL override - sourceURL = envURL; - } httpPath = sourceURL + binFileName; }