browserstack/browserstack-local-nodejs

Not specifing localIdentifier fails with another process running error

Opened this issue · 3 comments

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");
    });
  });
})();

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

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.

@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