browserstack / browserstack-local-nodejs

NodeJS bindings for BrowserStack Local
https://www.browserstack.com
MIT License
71 stars 56 forks source link

Not specifing localIdentifier fails with another process running error #99

Open adriaandotcom opened 4 years ago

adriaandotcom commented 4 years ago

When starting the app (see example below) without localIdentifier is fails to load:

const bs_local_args = {
  key: "***",
  // localIdentifier: "testing"
}

Expected Behavior

It just loads.

Actual Behavior

It fails with LocalError: Either another browserstack local client is running on your machine or some server is listening on port 45691 ``` Error: LocalError: Either another browserstack local client is running on your machine or some server is listening on port 45691 at /Users/Adriaan/node_modules/browserstack-local/lib/Local.js:65:20 at ChildProcess.exithandler (child_process.js:286:7) at ChildProcess.emit (events.js:210:5) at maybeClose (internal/child_process.js:1021:16) at Process.ChildProcess._handle.onexit (internal/child_process.js:283:5) { name: 'LocalError', message: 'Either another browserstack local client is running on your machine or some server is listening on port 45691', extra: undefined ```

Platform details

  1. browserstack-local-nodejs version: 1.4.5
  2. node version: 12.14.0
  3. os type and version: mac os x Catalina

Details

This is a minimal version of the bug:

const browserstack = require("browserstack-local");
const url = require("url");
const http = require("http");
const PORT = 8080;

(async () => {
  http
    .createServer(req => {
      const { pathname } = url.parse(req.url);
      console.log("Request:", pathname);
    })
    .listen(PORT, () => {
      console.log("Started node server");
    });

  const bs_local = new browserstack.Local();

  const bs_local_args = {
    key: "***",
    // localIdentifier: "testing"
  };

  bs_local.start(bs_local_args, function(error) {
    if (error) return console.error("Error:", error);
    console.log("Running BrowserStackLocal", bs_local.isRunning());
    bs_local.stop(function() {
      console.log("Stopped BrowserStackLocal");
    });
  });
})();
readikus commented 4 years ago

Similar issue - force no longer seems to be effective at killing existing local connections.

RohanImmanuel commented 4 years ago

Hi @adriaanvanrossum

Browserstack Local allows for only one instance of the binary(without local identifier). This includes any instance run by you using the terminal, language bindings or processes running in the background.

If you have run local tests via language bindings in the past, an instance may be running in the background if the driver process failed to quit.

If you have BrowserStack's Local app installed on your system, you will be required to uninstall the app and preferably restart before running the Local Binary.

RohanImmanuel commented 4 years ago

@readikus the force parameter would only kill binary instances with the same local identifier and hence it won't work on binary instances that are initialized without a local identifier

ref: https://www.browserstack.com/local-testing/binary-params