Преглед на файлове

Marrying travis & sauce (#88)

* First swing at marrying travis & sauce

* Try to utilize the tunnel on Travis so we can test localhost

* Fix tag tyoe

* No longer spin up xwindows as saucelabs runs our browsers now
Kevin van Zonneveld преди 9 години
родител
ревизия
36aca95a88
променени са 5 файла, в които са добавени 59 реда и са изтрити 18 реда
  1. 5 4
      .travis.yml
  2. 2 1
      CHANGELOG.md
  3. 10 0
      env.example.sh
  4. 40 11
      test/acceptance/index.js
  5. 2 2
      test/acceptance/saucelabs-dummy.spec.js

+ 5 - 4
.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

+ 2 - 1
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)

+ 10 - 0
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}"

+ 40 - 11
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()

+ 2 - 2
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' }