diff --git a/.travis.yml b/.travis.yml index 723c8d613..aeb2b6cf0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,15 +7,16 @@ addons: - ubuntu-toolchain-r-test packages: - g++-4.8 + sauce_connect: + username: + secure: nAMJ/d1fm9urTYsQ+1uqj6Jjf71J8rzwYBSZbTDAeUEZzAdvGc0a9H3PYWM4pnUDPo5s1c9MMetXi2XNdUbXgMKHbEnePZ2mJamqFtXMmpG8pgFmMqj+btMd7Yybt070tRsn4Vy0uBSi2H/en7F3j+grABJV+SAXqWkSB7CU1fZaN/u0DpoGBNj1ZNwkYCIhpLueYJTPRWBOodMAarXuFv5+7KFOKuZM3tF/JjsMNSSaDgTkz13BZnbX6vNPxGJJNJcyJGSaXrVW8hh1Zmvnk/XdiLy+vt7Wz1wz3A9ebiFDuydo5AAkxrLFsCJ5nGEqLg3bkr6NaTRpbM84ZT3i1FQMTdKP6OHHqwAeBscB6BkyhZhzvsFtl2YRBNK9mA3OtOYvBmTkFkNqvrPQlfu7cFtyG5+AUfSCiTTgS/vWIwoqSVAXaOEqN8Fp54ecUdkzCTttl3gXteZzNLRYvyQcFpoJb6E+dS8qAW0OFOteiwKVuPCh3nGUzBP13bRo1i9UAX7ZCTlpjinkxE8ryzbToo6ZcVQMBAkKhaw/x8GzOtfm5rgYMeQzGEoBJNfr7qqfs7JMxAIEMYjrTL9PXVOp/R8F3FdsqbV70jSyfsxMSMkwSWFRmVslG8+Djy8P3LnckGy1FEbMHnH8GZHZg+hbBzN8Be1/1fV0oRRAr939WRc= + access_key: + secure: OY3oWwiJghfty9wSPVvlhirvFGxPHDdIRuVkzAv6j7C/hj2BWYAP/UHrwdQ9XiYisHi/B5mGeyRVlrAf0MNGrG84rTDUbTWZbmktfuxl7A+Y6c0czk+s4SdhOiANG5b3tFl5wKq8h7uhrWH5/jWoKQ2Fz1VDCqxTvvZQbo41jSBhi7TBia626hxEePzdaiuw6HhGFZtfaoVs/FX30ylz8WDNrBjwCynjxsT52BaQrVvgEhuyzlOpI69YkZBPOq4fc3KiZ2YR43gLTx8K+sYCE9yJxdg1xT/UAawEhmedU83nyBZVo4rr7+03AixIxtI28MUCfBMlcsGwBxcKEKY/IWcp9UkPCq6+zALQoncV478tP21eYvlmxSFhYCrv+WEQlN+BcNjr4OJlmmFDbCVaF7r9qLeQPImU0+9iJU3OjrW7lpfLxORpGDEr2Nx6awKkIJCxNyK9weefeNo6Fz3V1kkyZ/7yWFeniJnRUCbahrB2XgzxIE+W307s1Qs4fm6JK7hVLTtG4fBzjChmAyGIzu744ws9WqmjvkC9D7OfnuXqanv/VcBFqPiudInerv7NL8FketUC+fxe/7XJfcxdaDGBjk8Kq7zXDohGRGymUXEoMDNJsKkMMlaKzdf7tgqdhsRJoH9NCVqrDXuG5al0UtrDP5RS7qfoxUunJmNFhlg= cache: apt: true directories: - node_modules - website/node_modules -before_script: -- export PATH=${PATH}:${HOME}/bin -- export DISPLAY=:99.0 -- /sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16 script: - npm run build - npm run test diff --git a/CHANGELOG.md b/CHANGELOG.md index dddb3b30e..b145e6f83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -67,7 +67,8 @@ Theme: Acceptance tests and Google Drive Polish Scheduled to be released: May 06, 2016 -- [ ] Add `addFile`-hack so we can have acceptance tests on Safari as well as Edge (@arturi) +- [ ] Wire saucelabs and travis togeteher, make saucelabsl fails fatal to travis builds +- [x] Add `addFile`-hack so we can have acceptance tests on Safari as well as Edge (@arturi) - [x] drive: possible UI polish (@hedgerh) - [x] drive: write files to filesystem correctly (@hedgerh) - [x] test: Fix 15s timeout image.jpg (@arturi) diff --git a/env.example.sh b/env.example.sh index 1bdc77225..69f35fc52 100644 --- a/env.example.sh +++ b/env.example.sh @@ -9,6 +9,10 @@ export UPPYSERVER_GOOGLE_SECRET="***" export UPPYSERVER_INSTAGRAM_KEY="***" export UPPYSERVER_INSTAGRAM_SECRET="***" +# Let's not set this by default, because that will make acceptance tests Always run on Saucelabs +## export SAUCE_ACCESS_KEY="***" +## export SAUCE_USERNAME="***" + # travis encrypt --add GHPAGES_URL=https://secret_access_token@github.com/transloadit/uppy.git # travis encrypt --add env.global "UPPYSERVER_DROPBOX_KEY=${UPPYSERVER_DROPBOX_KEY}" # travis encrypt --add env.global "UPPYSERVER_DROPBOX_SECRET=${UPPYSERVER_DROPBOX_SECRET}" @@ -16,3 +20,9 @@ export UPPYSERVER_INSTAGRAM_SECRET="***" # travis encrypt --add env.global "UPPYSERVER_GOOGLE_SECRET=${UPPYSERVER_GOOGLE_SECRET}" # travis encrypt --add env.global "UPPYSERVER_INSTAGRAM_KEY=${UPPYSERVER_INSTAGRAM_KEY}" # travis encrypt --add env.global "UPPYSERVER_INSTAGRAM_SECRET=${UPPYSERVER_INSTAGRAM_SECRET}" + +# The Travis Sauce Connect addon exports the SAUCE_USERNAME and SAUCE_ACCESS_KEY environment variables, +# and relays connections to the hub URL back to Sauce Labs. +# See: https://docs.travis-ci.com/user/gui-and-headless-browsers/#Using-Sauce-Labs +# travis encrypt --add addons.sauce_connect.username "${SAUCE_USERNAME}" +# travis encrypt --add addons.sauce_connect.access_key "${SAUCE_ACCESS_KEY}" diff --git a/test/acceptance/index.js b/test/acceptance/index.js index a76047e10..33bfd3574 100644 --- a/test/acceptance/index.js +++ b/test/acceptance/index.js @@ -15,15 +15,33 @@ require('babel-register') var webdriver = require('selenium-webdriver') var remote = require('selenium-webdriver/remote') -var username = process.env.SAUCELABS_USERNAME -var accessKey = process.env.SAUCELABS_ACCESS_KEY +// The Travis Sauce Connect addon exports the SAUCE_USERNAME and SAUCE_ACCESS_KEY environment variables, +// and relays connections to the hub URL back to Sauce Labs. +// See: https://docs.travis-ci.com/user/gui-and-headless-browsers/#Using-Sauce-Labs +var username = process.env.SAUCE_USERNAME +var accessKey = process.env.SAUCE_ACCESS_KEY var remoteHost = 'http://uppy.io' var localHost = 'http://localhost:4000' // if accessKey is supplied as env variable, this is a remote Saucelabs test -var isRemoteTest = accessKey ? true : '' -var host = isRemoteTest ? remoteHost : localHost +var isTravisTest = process.env.TRAVIS === 'true' +var isRemoteTest = !!accessKey + +var host = localHost +if (isTravisTest) { + // We have a tunnel via the saucelabs addon on Travis + host = localHost +} else if (isRemoteTest) { + // We're not too sure about a working tunnel otherwise, best just test uppy.io + host = remoteHost +} else { + // If we don't have any access keys set, we'll assume you'll be playing around with a local + // firefox webdriver. + host = localHost +} + +console.log('Acceptance tests will be targetting: ' + host) // FYI: old Chrome on Windows XP — didn’t pass var platforms = [ @@ -45,15 +63,26 @@ var tests = [ function buildDriver (platform) { var driver if (isRemoteTest) { + var capabilities = { + 'browserName': platform.browser, + 'platform': platform.os, + 'version': platform.version, + 'username': username, + 'accessKey': accessKey + } + + if (isTravisTest) { + // @todo Do we need a hub_url = "%s:%s@localhost:4445" % (username, access_key) + // as mentioned in https://docs.travis-ci.com/user/gui-and-headless-browsers/#Using-Sauce-Labs ? + capabilities['tunnel-identifier'] = process.env.TRAVIS_JOB_NUMBER + capabilities['build'] = process.env.TRAVIS_BUILD_NUMBER + capabilities['name'] = 'Travis ##' + process.env.TRAVIS_JOB_NUMBER + capabilities['tags'] = [process.env.TRAVIS_NODE_VERSION, 'CI'] + } + driver = new webdriver .Builder() - .withCapabilities({ - 'browserName': platform.browser, - 'platform': platform.os, - 'version': platform.version, - 'username': username, - 'accessKey': accessKey - }) + .withCapabilities(capabilities) .usingServer('http://' + username + ':' + accessKey + '@ondemand.saucelabs.com:80/wd/hub') .build() diff --git a/test/acceptance/saucelabs-dummy.spec.js b/test/acceptance/saucelabs-dummy.spec.js index ffd01b2f7..8a1f7f8c5 100644 --- a/test/acceptance/saucelabs-dummy.spec.js +++ b/test/acceptance/saucelabs-dummy.spec.js @@ -1,8 +1,8 @@ var webdriver = require('selenium-webdriver') var remote = require('selenium-webdriver/remote') -var username = process.env.SAUCELABS_USERNAME -var accessKey = process.env.SAUCELABS_ACCESS_KEY +var username = process.env.SAUCE_USERNAME +var accessKey = process.env.SAUCE_ACCESS_KEY // var platform = { browser: 'firefox', version: '34.0', os: 'Windows 7' } var platform = { browser: 'Safari', version: '9.0', os: 'OS X 10.11' }