From e261488fa9444cbe995d1f0eddc406d5a1f327e5 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Fri, 11 Dec 2015 19:01:47 -0800 Subject: [PATCH 1/9] Start builder integration. --- package.json | 10 +++++++--- test/func/setup.js | 2 ++ test/func/spec/base.spec.js | 3 --- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 6f88c52..e3543d4 100644 --- a/package.json +++ b/package.json @@ -10,16 +10,19 @@ "lint-client": "eslint -c .eslintrc-client test/func/*/src", "lint-server": "eslint -c .eslintrc-server lib bin *.js test/func/*/*.config*.js test/func/*/build.js test/util", "lint-server-test": "eslint -c .eslintrc-server-test test/func/spec test/func/*/spec", - "lint": "npm run lint-client && npm run lint-server && npm run lint-server-test", - "test-server": "mocha --opts test/server/mocha.opts test/server/spec", + "lint": "builder concurrent lint-client lint-server lint-server-test", + "test-server": "mocha --color --opts test/server/mocha.opts test/server/spec", "test-server-cov": "istanbul cover --config .istanbul.server.yml _mocha -- --opts test/server/mocha.opts test/server/spec", "test-func-build": "for s in $(ls test/func/*/build.js); do (node $s); done;", - "test-func": "mocha --opts test/func/mocha.opts test/func/spec test/func/*/spec", + "test-func": "mocha --color --opts test/func/mocha.opts test/func/spec test/func/*/spec", "test-func-cov": "istanbul cover --config .istanbul.func.yml _mocha -- --opts test/func/mocha.opts test/func/spec test/func/*/spec", "test-ci": "npm run test-server-cov && npm run test-func-build && npm run test-func-cov", "test": "npm run test-server && npm run test-func-build && npm run test-func", "check": "npm run lint && npm run test", "check-ci": "npm run lint && npm run test-ci", + "setup-dev-server": "http-server -a $TEST_FUNC_HOST -p $TEST_FUNC_PORT --silent 2>&1", + "setup-sauce-connect": "selenium-standalone start 2>&1", + "setup-ci": "builder concurrent setup-dev-server setup-sauce-connect", "server": "http-server -p 3001 .", "install-dev": "selenium-standalone install" }, @@ -40,6 +43,7 @@ }, "devDependencies": { "almond": "^0.3.1", + "builder": "FormidableLabs/builder#feature-setup", "chai": "^3.3.0", "coveralls": "^2.11.4", "eslint": "^1.5.1", diff --git a/test/func/setup.js b/test/func/setup.js index dfb95d9..9699acc 100644 --- a/test/func/setup.js +++ b/test/func/setup.js @@ -4,6 +4,8 @@ * Test setup for functional tests. */ var chai = require("chai"); + +process.env.TRAVIS = "true"; // TODO: REMOVE EVERYTHING AND HONE THROUGH THIS. var startSelenium = process.env.TRAVIS !== "true"; // Enable Rowdy with webdriverio. diff --git a/test/func/spec/base.spec.js b/test/func/spec/base.spec.js index bd5dcef..a980613 100644 --- a/test/func/spec/base.spec.js +++ b/test/func/spec/base.spec.js @@ -32,9 +32,6 @@ if (isSauceLabs && process.env.LAUNCH_SAUCE_CONNECT === "true") { // Stash process. connectPs = ps; - // Patch settings - //obj.desiredCapabilities.tunnelIdentifier = - done(); }); }); From 3adb2b11b3d487362de0d07564a3a53aa19158a5 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Mon, 14 Dec 2015 06:47:11 -0800 Subject: [PATCH 2/9] Replace run-concurrent with builder-envs. --- .travis.yml | 10 ++- README.md | 1 - docs/development.md | 138 ++++++++++++++++++++++++++++++++++++ package.json | 24 ++++--- test/func/setup.js | 4 +- test/func/spec/base.spec.js | 41 +---------- test/util/run-concurrent.js | 63 ---------------- 7 files changed, 163 insertions(+), 118 deletions(-) delete mode 100644 test/util/run-concurrent.js diff --git a/.travis.yml b/.travis.yml index 393bb3c..fa5a51f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,7 +15,8 @@ env: global: - TEST_FUNC_PORT=3030 - TEST_FUNC_HOST=127.0.0.1 - - SAUCE_CONNECT_TUNNEL_ID=$TRAVIS_JOB_NUMBER + - TEST_PARALLEL=true + - SAUCE_CONNECT_TUNNEL_ID=TRAVIS_FMD_REQUIREPACK_${TRAVIS_JOB_NUMBER} - SAUCE_USERNAME=requirepack - secure: "Gg2no6CkOreDPINT4xoJQPV/93Wq7MxZ7fwgATucuze9KYdidJaKFY8nEx3oJshFtPZ6t46JXxlVrR6n9De720R5RefHUBpuSVVzDedXsdYHXyjh6eNj1z88zteUcLp62hGipvAOrXUeC/l8OuCMCjeqIJtICYF4VJF7RlOyc5RnONOID0u62bogaGnwnHqTH/NlBVLjYDvPGrHhX2FB0TNQaRA89AaE69GyaCSFunEigpA48b/ogfHTF6OfHIvAvtLZf1hrQxGrf854snsqi/yi7+3Kz0m6EABINVGNmD29FqPteR5o7ZPquXt8A8IicL8omFM0jxgU4ma0hRFPvzZLaApFpsCtKfkN9h75LvFkTHkBNXXlaS/ZGMgxWzng6x7jOHxnoczoC2GrqPB48H0kZggHUa7O10gFhmmkbJOywAWv+X2cUaINL/Zn/mxons3JKa1ojb4DDT05TlpUDKv/zPhCAg0fB35GR2/XaZXs1wA8/2fA11VHHfB8Wea91sV+V+3L4H3PD5UueHEV4pE40t54GkjrLVr1OSFIqkDjgVHEkmHJQrx9uVoON6uWT7TwNNK9v2Nt9pRyIYFlHdm1S7pb6h279meN7NC9DueMXp3CYzTwWPgzHGg032tBZ8ga4Nr7wLYZu40Ql+h7D3aw4TWKyPNRo5YM3HkxqRc=" @@ -27,6 +28,9 @@ before_install: before_script: # Install dev. stuff (e.g., selenium drivers). - npm run install-dev + # Start up processes used in parallel tests. + # Note: We're playing a bit fast & loose here bceause selenium standalone needs to "just be ready" + # by the time we start our tests. - nohup bash -c "node_modules/.bin/selenium-standalone start 2>&1 &" - nohup bash -c "node_modules/.bin/http-server -a $TEST_FUNC_HOST -p $TEST_FUNC_PORT --silent 2>&1 &" @@ -39,7 +43,7 @@ script: # Sauce Labs - >- - node test/util/run-concurrent.js "npm run test-func" + node_modules/.bin/builder envs test-func --buffer '[ { "ROWDY_SETTINGS":"sauceLabs.IE_8_Windows_2008_Desktop" }, { "ROWDY_SETTINGS":"sauceLabs.IE_9_Windows_2008_Desktop" }, { "ROWDY_SETTINGS":"sauceLabs.IE_10_Windows_2012_Desktop" }, @@ -55,4 +59,4 @@ script: # Manually send coverage reports to coveralls. - ls coverage/*/lcov.info | cat - - cat coverage/*/lcov.info | ./node_modules/.bin/coveralls || echo "Coveralls upload failed" + - cat coverage/*/lcov.info | node_modules/.bin/coveralls || echo "Coveralls upload failed" diff --git a/README.md b/README.md index d3508ce..a074836 100644 --- a/README.md +++ b/README.md @@ -48,7 +48,6 @@ Ports various servers run on: * **[Tests](docs/test.md)**: Our test suite encompasses a lot of different types of builds that are likely to be encountered, running demos, and - [webpack]: http://webpack.github.io/ [wp-dll]: https://github.com/webpack/webpack/tree/master/examples/dll [wp-dll-user]: https://github.com/webpack/webpack/tree/master/examples/dll-user diff --git a/docs/development.md b/docs/development.md index 00fb6c9..d22d8cd 100644 --- a/docs/development.md +++ b/docs/development.md @@ -1,6 +1,142 @@ Development =========== +We use [builder][] and `npm` to control all aspects of development and +publishing. + +As a preliminary matter, please update your shell to include +`./node_modules/.bin` in `PATH` like: + +```sh +export PATH="${PATH}:./node_modules/.bin" +``` + +So you can type `builder` instead of `./node_modules/.bin/builder` for all +commands. + + +## Quality + +We have various development / CI / coverage helper tasks. + +For the overall quality check, run: + +```sh +$ builder run check # PhantomJS only +$ builder run check-ci # (OR) PhantomJS w/ coverage +``` + +Which is currently comprised of: + +```sh +$ builder run lint # AND ... + +$ builder run test # PhantomJS only +$ builder run test-cov # (OR) PhantomJS w/ coverage +$ builder run test-ci # (OR) PhantomJS,Firefox + coverage +``` + +Note that `(test|check)-(cov|ci)` run code coverage and thus the +test code may be harder to debug because it is instrumented. + +### Parallel Execution + +Our CI is setup with a specific optimized parallel workflow. To run parallel +functional tests in development, here are some helper tasks... + +#### Local Browsers + +Run parallel functional tests on local browsers: + +```sh +$ TEST_PARALLEL=true \ + builder envs test-func-local \ + --setup=setup-local \ + --buffer \ + '[ { "ROWDY_SETTINGS":"local.phantomjs" }, + { "ROWDY_SETTINGS":"local.firefox" }, + { "ROWDY_SETTINGS":"local.chrome" } + ]' +``` + +Notes: + +* The `TEST_PARALLEL` environment variable signals to _not_ have Rowdy start up + selenium and a local dev. server, which is done instead by `setup-local`. +* The `--buffer` flag stores all parallel output and displays individually as + each test task exits for easier comprehensibility. +* There is a small delay inserted in each task in `test-func-local` to give + time for the selenium server to start up. + +For a faster, iterative version, use two terminals: + +```sh +# First terminal: Leave persistent tasks running. +$ builder run setup-local + +# Second terminal: Run tests (and repeat) +$ TEST_PARALLEL=true \ + builder envs test-func \ + --buffer \ + '[ { "ROWDY_SETTINGS":"local.phantomjs" }, + { "ROWDY_SETTINGS":"local.firefox" }, + { "ROWDY_SETTINGS":"local.chrome" } + ]' +``` + +#### Sauce Labs + +Run parallel functional tests in Sauce Labs: + +```sh +$ TEST_PARALLEL=true \ + TEST_FUNC_PORT=3030 \ + TEST_FUNC_HOST=127.0.0.1 \ + SAUCE_USERNAME= \ + SAUCE_ACCESS_KEY= \ + builder envs test-func-sauce \ + --setup=setup-sauce \ + --buffer \ + '[ { "ROWDY_SETTINGS":"sauceLabs.IE_8_Windows_2008_Desktop" }, + { "ROWDY_SETTINGS":"sauceLabs.IE_9_Windows_2008_Desktop" }, + { "ROWDY_SETTINGS":"sauceLabs.IE_10_Windows_2012_Desktop" } + ]' +``` + +Notes: This adds an even longer delay in `test-func-sauce` to account for the +relatively slow startup of Sauce Connect. + +For a faster, iterative version, use two terminals: + +```sh +# First terminal: Leave persistent tasks running. +$ builder run setup-sauce + +# Second terminal: Run tests (and repeat) +$ TEST_PARALLEL=true \ + TEST_FUNC_PORT=3030 \ + TEST_FUNC_HOST=127.0.0.1 \ + SAUCE_USERNAME= \ + SAUCE_ACCESS_KEY= \ + builder envs test-func \ + --buffer \ + '[ { "ROWDY_SETTINGS":"sauceLabs.IE_8_Windows_2008_Desktop" }, + { "ROWDY_SETTINGS":"sauceLabs.IE_9_Windows_2008_Desktop" }, + { "ROWDY_SETTINGS":"sauceLabs.IE_10_Windows_2012_Desktop" } + ]' +``` + +### Code Coverage + +Code coverage reports are outputted to: + +``` +coverage/ + server|func/ + lcov-report/index.html # Viewable web report. +``` + + ## Releases **IMPORTANT - NPM**: To correctly run `preversion` your first step is to make @@ -33,3 +169,5 @@ $ npm publish ``` And you've published! + +[builder]: https://github.com/FormidableLabs/builder diff --git a/package.json b/package.json index e3543d4..3c62de8 100644 --- a/package.json +++ b/package.json @@ -12,17 +12,21 @@ "lint-server-test": "eslint -c .eslintrc-server-test test/func/spec test/func/*/spec", "lint": "builder concurrent lint-client lint-server lint-server-test", "test-server": "mocha --color --opts test/server/mocha.opts test/server/spec", - "test-server-cov": "istanbul cover --config .istanbul.server.yml _mocha -- --opts test/server/mocha.opts test/server/spec", + "test-server-cov": "istanbul cover --config .istanbul.server.yml _mocha -- --color --opts test/server/mocha.opts test/server/spec", "test-func-build": "for s in $(ls test/func/*/build.js); do (node $s); done;", "test-func": "mocha --color --opts test/func/mocha.opts test/func/spec test/func/*/spec", - "test-func-cov": "istanbul cover --config .istanbul.func.yml _mocha -- --opts test/func/mocha.opts test/func/spec test/func/*/spec", - "test-ci": "npm run test-server-cov && npm run test-func-build && npm run test-func-cov", - "test": "npm run test-server && npm run test-func-build && npm run test-func", - "check": "npm run lint && npm run test", - "check-ci": "npm run lint && npm run test-ci", - "setup-dev-server": "http-server -a $TEST_FUNC_HOST -p $TEST_FUNC_PORT --silent 2>&1", - "setup-sauce-connect": "selenium-standalone start 2>&1", - "setup-ci": "builder concurrent setup-dev-server setup-sauce-connect", + "test-func-cov": "istanbul cover --config .istanbul.func.yml _mocha -- --color --opts test/func/mocha.opts test/func/spec test/func/*/spec", + "test-ci": "builder run test-server-cov && builder run test-func-build && builder run test-func-cov", + "test": "builder run test-server && builder run test-func-build && builder run test-func", + "check": "builder run lint && builder run test", + "check-ci": "builder run lint && builder run test-ci", + "setup-local-server": "http-server -p 3030 --silent >/dev/null", + "setup-local-selenium": "selenium-standalone start >/dev/null 2>&1", + "setup-local": "builder concurrent setup-local-server setup-local-selenium", + "test-func-local": "sleep 5 && echo \"Starting ${ROWDY_SETTINGS}\" && builder run test-func", + "setup-sauce-connect": "node_modules/sauce-connect-launcher/sc/*/bin/sc", + "setup-sauce": "builder concurrent setup-local-server setup-sauce-connect", + "test-func-sauce": "sleep 30 && echo \"Starting ${ROWDY_SETTINGS}\" && builder run test-func", "server": "http-server -p 3001 .", "install-dev": "selenium-standalone install" }, @@ -43,7 +47,7 @@ }, "devDependencies": { "almond": "^0.3.1", - "builder": "FormidableLabs/builder#feature-setup", + "builder": "FormidableLabs/builder#feature-setup-cleanup2", "chai": "^3.3.0", "coveralls": "^2.11.4", "eslint": "^1.5.1", diff --git a/test/func/setup.js b/test/func/setup.js index 9699acc..2213cd4 100644 --- a/test/func/setup.js +++ b/test/func/setup.js @@ -4,9 +4,7 @@ * Test setup for functional tests. */ var chai = require("chai"); - -process.env.TRAVIS = "true"; // TODO: REMOVE EVERYTHING AND HONE THROUGH THIS. -var startSelenium = process.env.TRAVIS !== "true"; +var startSelenium = process.env.TEST_PARALLEL !== "true"; // Enable Rowdy with webdriverio. var _ = require("lodash"); diff --git a/test/func/spec/base.spec.js b/test/func/spec/base.spec.js index a980613..0de2dd9 100644 --- a/test/func/spec/base.spec.js +++ b/test/func/spec/base.spec.js @@ -9,49 +9,14 @@ // Set test environment process.env.NODE_ENV = process.env.NODE_ENV || "test-func"; -// ---------------------------------------------------------------------------- -// Sauce Connect Tunnel -// ---------------------------------------------------------------------------- -var rowdy = require("rowdy"); -var isSauceLabs = rowdy.config.setting.isSauceLabs; - -if (isSauceLabs && process.env.LAUNCH_SAUCE_CONNECT === "true") { - var connect = require("sauce-connect-launcher"); - var connectPs; - - before(function (done) { - // SC takes a **long** time. - this.timeout(60000); - - connect({ - username: rowdy.config.setting.host, - accessKey: rowdy.config.setting.key, - verbose: true - }, function (err, ps) { - if (err) { return done(err); } - // Stash process. - connectPs = ps; - - done(); - }); - }); - - after(function (done) { - if (connectPs) { - this.timeout(30000); - return connectPs.close(done); - } - - done(); - }); -} - // ---------------------------------------------------------------------------- // Selenium (Webdriverio/Rowdy) initialization // ---------------------------------------------------------------------------- // **Note** Can stash adapter, but not `adapter.client` because it is a lazy // getter that relies on the global `before|beforeEach` setup. +var rowdy = require("rowdy"); var adapter = global.adapter; +var isSauceLabs = rowdy.config.setting.isSauceLabs; var ELEM_WAIT = isSauceLabs ? 5000 : 500; // Global wait. adapter.before(); @@ -89,7 +54,7 @@ before(function () { // App server // ---------------------------------------------------------------------------- before(function (done) { - if (process.env.TRAVIS === "true") { return done(); } + if (process.env.TEST_PARALLEL === "true") { return done(); } server = httpServer.createServer(); server.listen(APP_PORT, APP_HOST, done); diff --git a/test/util/run-concurrent.js b/test/util/run-concurrent.js deleted file mode 100644 index 8d57d7c..0000000 --- a/test/util/run-concurrent.js +++ /dev/null @@ -1,63 +0,0 @@ -"use strict"; - -/** - * Run multiple commands concurrently. - * - * Usage: - * - * node test/util/run-concurrent.js "npm run test-func" "[ {ENV_VARS1}, {ENV_VARS2} ]" - */ -var _ = require("lodash"); -var async = require("async"); -var kill = require("tree-kill"); -var spawn = require("child_process").spawn; - -// Parse argv. -var args = process.argv; -if (args.length !== 4) { - throw new Error("requires two arguments: [command] [ENV_VARS_ARRAY]"); -} - -// Get the arguments. -// Command: Assume splitable on space. (VERY NAIVE). -var cmdParts = args[2].split(" "); -var cmd = cmdParts[0]; -var cmdFlags = _.rest(cmdParts); -var envObjs = JSON.parse(args[3]); - -// Track the processes. -var procs = []; - -// Let's go parallel! -async.map(envObjs, function (env, cb) { - var err; - - var proc = spawn(cmd, cmdFlags, { - stdio: "inherit", - env: _.merge({}, process.env, env) - }); - - proc.on("close", function (code) { - if (!err && code !== 0) { - err = new Error( - "non-zero exit of " + args[2] + - " w/ env: " + JSON.stringify(env) + - " w/ code: " + code); - - err.code = code; - } - - cb(err); - }); - - procs.push(proc); -}, function (err) { - if (err) { - // Kill all existing procs. - async.map(procs, function (proc, cb) { - kill(proc.pid, "SIGKILL", cb); - }, function (killErr) { - throw killErr || err; - }); - } -}); From e6b0e0eefa78e0a41c86feeda23b4041182d42bd Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Mon, 14 Dec 2015 06:51:23 -0800 Subject: [PATCH 3/9] Errant dep --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index 3c62de8..c084637 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,6 @@ "server-destroy": "^1.0.1", "sinon": "^1.17.1", "sinon-chai": "^2.8.0", - "tree-kill": "^1.0.0", "webdriverio": "^3.2.4", "webpack": "^1.12.2" } From 44b7ea18c4b397f40a28431c4ec5d5dcd3d65288 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Mon, 14 Dec 2015 06:55:03 -0800 Subject: [PATCH 4/9] Add 2 tries to sauce labs tasks. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index fa5a51f..8a22812 100644 --- a/.travis.yml +++ b/.travis.yml @@ -43,7 +43,7 @@ script: # Sauce Labs - >- - node_modules/.bin/builder envs test-func --buffer + node_modules/.bin/builder envs test-func --buffer --tries=2 '[ { "ROWDY_SETTINGS":"sauceLabs.IE_8_Windows_2008_Desktop" }, { "ROWDY_SETTINGS":"sauceLabs.IE_9_Windows_2008_Desktop" }, { "ROWDY_SETTINGS":"sauceLabs.IE_10_Windows_2012_Desktop" }, From 872e4f64cd2ea08db924e8e7e2bd2cc51fadf201 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Mon, 14 Dec 2015 06:57:27 -0800 Subject: [PATCH 5/9] Update README --- docs/development.md | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/docs/development.md b/docs/development.md index d22d8cd..50607c0 100644 --- a/docs/development.md +++ b/docs/development.md @@ -32,8 +32,7 @@ Which is currently comprised of: $ builder run lint # AND ... $ builder run test # PhantomJS only -$ builder run test-cov # (OR) PhantomJS w/ coverage -$ builder run test-ci # (OR) PhantomJS,Firefox + coverage +$ builder run test-ci # (OR) PhantomJS w/ coverage ``` Note that `(test|check)-(cov|ci)` run code coverage and thus the @@ -146,28 +145,21 @@ sure that you have a very modern `npm` binary: $ npm install -g npm ``` -The basic workflow is: +First, you can optionally edit and commit the project history. ```sh -# Make sure you have a clean, up-to-date `master` -$ git pull -$ git status # (should be no changes) - -# Choose a semantic update for the new version. -# If you're unsure, read about semantic versioning at http://semver.org/ -$ npm version major|minor|patch -m "Version %s - INSERT_REASONS" - -# `package.json` is updated, and files are committed to git (but unpushed). +$ vim HISTORY.md +$ git add HISTORY.md +$ git commit -m "Update history for VERSION" +``` -# Check that everything looks good in last commit and push. -$ git diff HEAD^ HEAD -$ git push && git push --tags -# ... the project is now pushed to GitHub. +Now we're ready to publish. Choose a semantic update for the new version. +If you're unsure, read about semantic versioning at http://semver.org/ -# And finally publish to `npm`! -$ npm publish +```sh +$ npm version VERSION|major|minor|patch -m "Version %s - INSERT_REASONS" ``` -And you've published! +Now `postversion` will push to git and publish to NPM. [builder]: https://github.com/FormidableLabs/builder From 4a9a39c1c437c38339b0e4d2a2cb44cb899b47cb Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Mon, 14 Dec 2015 09:02:09 -0800 Subject: [PATCH 6/9] Remove SAUCE_CONNECT_TUNNEL_ID --- .travis.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8a22812..523e168 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,7 +16,11 @@ env: - TEST_FUNC_PORT=3030 - TEST_FUNC_HOST=127.0.0.1 - TEST_PARALLEL=true - - SAUCE_CONNECT_TUNNEL_ID=TRAVIS_FMD_REQUIREPACK_${TRAVIS_JOB_NUMBER} + # Hitting `No active tunnel found for identifier` issues, e.g.: + # https://saucelabs.com/jobs/dcc5f828edb6462ca7735062d87ebce1 + # going _without_ for now... + # + #- SAUCE_CONNECT_TUNNEL_ID=TRAVIS_FMD_REQUIREPACK_${TRAVIS_JOB_NUMBER} - SAUCE_USERNAME=requirepack - secure: "Gg2no6CkOreDPINT4xoJQPV/93Wq7MxZ7fwgATucuze9KYdidJaKFY8nEx3oJshFtPZ6t46JXxlVrR6n9De720R5RefHUBpuSVVzDedXsdYHXyjh6eNj1z88zteUcLp62hGipvAOrXUeC/l8OuCMCjeqIJtICYF4VJF7RlOyc5RnONOID0u62bogaGnwnHqTH/NlBVLjYDvPGrHhX2FB0TNQaRA89AaE69GyaCSFunEigpA48b/ogfHTF6OfHIvAvtLZf1hrQxGrf854snsqi/yi7+3Kz0m6EABINVGNmD29FqPteR5o7ZPquXt8A8IicL8omFM0jxgU4ma0hRFPvzZLaApFpsCtKfkN9h75LvFkTHkBNXXlaS/ZGMgxWzng6x7jOHxnoczoC2GrqPB48H0kZggHUa7O10gFhmmkbJOywAWv+X2cUaINL/Zn/mxons3JKa1ojb4DDT05TlpUDKv/zPhCAg0fB35GR2/XaZXs1wA8/2fA11VHHfB8Wea91sV+V+3L4H3PD5UueHEV4pE40t54GkjrLVr1OSFIqkDjgVHEkmHJQrx9uVoON6uWT7TwNNK9v2Nt9pRyIYFlHdm1S7pb6h279meN7NC9DueMXp3CYzTwWPgzHGg032tBZ8ga4Nr7wLYZu40Ql+h7D3aw4TWKyPNRo5YM3HkxqRc=" From 203cceec3e8a9db278d850e8d705911c361e24f8 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Mon, 14 Dec 2015 11:51:36 -0800 Subject: [PATCH 7/9] Upgrade to npmv2, reenable sauce connect tunnel. --- .travis.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 523e168..42a1288 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,11 +16,7 @@ env: - TEST_FUNC_PORT=3030 - TEST_FUNC_HOST=127.0.0.1 - TEST_PARALLEL=true - # Hitting `No active tunnel found for identifier` issues, e.g.: - # https://saucelabs.com/jobs/dcc5f828edb6462ca7735062d87ebce1 - # going _without_ for now... - # - #- SAUCE_CONNECT_TUNNEL_ID=TRAVIS_FMD_REQUIREPACK_${TRAVIS_JOB_NUMBER} + - SAUCE_CONNECT_TUNNEL_ID=TRAVIS_FMD_REQUIREPACK_${TRAVIS_JOB_NUMBER} - SAUCE_USERNAME=requirepack - secure: "Gg2no6CkOreDPINT4xoJQPV/93Wq7MxZ7fwgATucuze9KYdidJaKFY8nEx3oJshFtPZ6t46JXxlVrR6n9De720R5RefHUBpuSVVzDedXsdYHXyjh6eNj1z88zteUcLp62hGipvAOrXUeC/l8OuCMCjeqIJtICYF4VJF7RlOyc5RnONOID0u62bogaGnwnHqTH/NlBVLjYDvPGrHhX2FB0TNQaRA89AaE69GyaCSFunEigpA48b/ogfHTF6OfHIvAvtLZf1hrQxGrf854snsqi/yi7+3Kz0m6EABINVGNmD29FqPteR5o7ZPquXt8A8IicL8omFM0jxgU4ma0hRFPvzZLaApFpsCtKfkN9h75LvFkTHkBNXXlaS/ZGMgxWzng6x7jOHxnoczoC2GrqPB48H0kZggHUa7O10gFhmmkbJOywAWv+X2cUaINL/Zn/mxons3JKa1ojb4DDT05TlpUDKv/zPhCAg0fB35GR2/XaZXs1wA8/2fA11VHHfB8Wea91sV+V+3L4H3PD5UueHEV4pE40t54GkjrLVr1OSFIqkDjgVHEkmHJQrx9uVoON6uWT7TwNNK9v2Nt9pRyIYFlHdm1S7pb6h279meN7NC9DueMXp3CYzTwWPgzHGg032tBZ8ga4Nr7wLYZu40Ql+h7D3aw4TWKyPNRo5YM3HkxqRc=" @@ -28,6 +24,8 @@ before_install: # GUI for real browsers. - export DISPLAY=:99.0 - sh -e /etc/init.d/xvfb start + # Upgrade to npm v2 + - npm install -g npm@2 before_script: # Install dev. stuff (e.g., selenium drivers). From 2951066a75b2f88ae3d7d7d57f8e742e18102003 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Mon, 14 Dec 2015 12:05:19 -0800 Subject: [PATCH 8/9] Update selenium-standalone to work with node 0.10 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c084637..0760407 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "rowdy": "^0.3.4", "sauce-connect-launcher": "^0.13.0", "saucelabs": "^1.0.1", - "selenium-standalone": "^4.6.3", + "selenium-standalone": "4.7.2", "server-destroy": "^1.0.1", "sinon": "^1.17.1", "sinon-chai": "^2.8.0", From c6772974171b113a64b776ead0265751489d6321 Mon Sep 17 00:00:00 2001 From: Ryan Roemer Date: Mon, 14 Dec 2015 12:44:00 -0800 Subject: [PATCH 9/9] Limit queue and don't buffer. --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 42a1288..9e5051f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -44,8 +44,9 @@ script: - npm run check-ci # Sauce Labs + # TODO HERE: --buffer --tries=2 --queue=2 - >- - node_modules/.bin/builder envs test-func --buffer --tries=2 + node_modules/.bin/builder envs test-func --tries=2 --queue=2 '[ { "ROWDY_SETTINGS":"sauceLabs.IE_8_Windows_2008_Desktop" }, { "ROWDY_SETTINGS":"sauceLabs.IE_9_Windows_2008_Desktop" }, { "ROWDY_SETTINGS":"sauceLabs.IE_10_Windows_2012_Desktop" },