Skip to content

Commit d75cbb4

Browse files
Krinklefrancisf
authored andcommitted
Fix broken BrowserStackLocal binary after first test
Currently after installing browserstack-runner you can run one test. After that, the command is broken. There are numerous symptoms from this: * BrowserStackLocal gets re-downloaded every single time. * an ETXTBSY error appears because the previous file is still busy. Here is what happens on later runs: * `fs.exists(localBinary)` finds the binary. * `runTunnelCmd(['-version'])` gets the following output: ``` $ node_modules/browserstack-runner/lib/BrowserStackLocal -version Sun Apr 11 2021 20:59:41 GMT+0000 (UTC) -- BrowserStackLocal v8.1 Sun Apr 11 2021 20:59:41 GMT+0000 (UTC) -- Container runtime environment detected Sun Apr 11 2021 20:59:41 GMT+0000 (UTC) -- Attaching services to public interface BrowserStack Local version 8.1 ``` * Only the first line of data is checked by `subProcess.stdout.on('data')`. * The line does not match `/version\s+(\d)/`. It reports: `Tunnel binary: found version null`. * The script invokes `callbackOnce()` and will try to kill the process. This may succeed, but it is not immediate as there are additional output lines still in the data buffer which must be processed first, which is not possible since we are still indirectly in the call stack of the first `data` stdout callback. * The re-download begins, but the operating system does not permit writing to a currently executing binary, since it will not shutdown until a few milliseconds later. * We fail with `Error: ETXTBSY: text file is busy`. All of this happens only because `-version` is interpreted as both `-v` for verbose and `--version` at the same time, the verbose output comes first and does not match the regex. Changing it to `--version` solves the problem. This code should also be changed so that it actually waits for this subprocess to exit. Perhaps falling back to unlinking the file if we can't close it so that at least the redownload will work. But, that is another issue and will not be a problem in most cases. Fixes #224.
1 parent 69982f7 commit d75cbb4

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

lib/local.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ var Tunnel = function Tunnel(key, port, uniqueIdentifier, config, callback) {
151151
function getTunnelBinaryVersion(callback) {
152152
var subProcessTimeout = 3000;
153153

154-
runTunnelCmd([ '-version' ], subProcessTimeout, function (data, done) {
154+
runTunnelCmd([ '--version' ], subProcessTimeout, function (data, done) {
155155
var matches = /version\s+(\d+(\.\d+)*)/.exec(data);
156156
var version = (matches && matches.length > 2) && matches[1];
157157
logger.debug('[%s] Tunnel binary: found version', new Date(), version);

0 commit comments

Comments
 (0)