Switch from Sauce Labs to Browserstack (#965)
* Switch from Sauce Labs to Browserstack * Don't run all tests on CI
This commit is contained in:
parent
91aa8b0d4c
commit
9b5124d5cd
32
.travis.yml
32
.travis.yml
|
@ -16,34 +16,36 @@ matrix:
|
|||
- node_js: "12"
|
||||
env: OPENPGP_NODE_JS='12' OPENPGPJSTEST='unit'
|
||||
- node_js: "9"
|
||||
env: BROWSER='Firefox' VERSION='26' PLATFORM='macOS 10.13' OPENPGPJSTEST='saucelabs' COMPAT=1
|
||||
env: BROWSER='"firefox_26"' OPENPGPJSTEST='browserstack' COMPAT=1
|
||||
- node_js: "9"
|
||||
env: BROWSER='Firefox' VERSION='61' PLATFORM='macOS 10.13' OPENPGPJSTEST='saucelabs'
|
||||
env: BROWSER='"firefox_61"' OPENPGPJSTEST='browserstack'
|
||||
- node_js: "9"
|
||||
env: BROWSER='Chrome' VERSION='49' PLATFORM='macOS 10.13' OPENPGPJSTEST='saucelabs' COMPAT=1
|
||||
env: BROWSER='"chrome_49"' OPENPGPJSTEST='browserstack' COMPAT=1
|
||||
- node_js: "10"
|
||||
env: BROWSER='Chrome' VERSION='68' PLATFORM='macOS 10.13' OPENPGPJSTEST='saucelabs'
|
||||
env: BROWSER='"chrome_68"' OPENPGPJSTEST='browserstack'
|
||||
- node_js: "9"
|
||||
env: BROWSER='Internet Explorer' VERSION='11.103' PLATFORM='Windows 10' OPENPGPJSTEST='saucelabs' COMPAT=1
|
||||
env: BROWSER='"ie_11"' OPENPGPJSTEST='browserstack' COMPAT=1
|
||||
- node_js: "9"
|
||||
env: BROWSER='MicrosoftEdge' VERSION='17.17134' PLATFORM='Windows 10' OPENPGPJSTEST='saucelabs'
|
||||
env: BROWSER='"edge_17"' OPENPGPJSTEST='browserstack'
|
||||
- node_js: "9"
|
||||
env: BROWSER='Safari' VERSION='9' PLATFORM='OS X 10.11' OPENPGPJSTEST='saucelabs' COMPAT=1
|
||||
env: BROWSER='"safari_9_1"' OPENPGPJSTEST='browserstack' COMPAT=1
|
||||
- node_js: "9"
|
||||
env: BROWSER='Safari' VERSION='10' PLATFORM='macOS 10.12' OPENPGPJSTEST='saucelabs' COMPAT=1
|
||||
env: BROWSER='"safari_10_1"' OPENPGPJSTEST='browserstack' COMPAT=1
|
||||
- node_js: "9"
|
||||
env: BROWSER='Safari' VERSION='11' PLATFORM='macOS 10.13' OPENPGPJSTEST='saucelabs'
|
||||
env: BROWSER='"safari_11_1"' OPENPGPJSTEST='browserstack'
|
||||
- node_js: "9"
|
||||
env: BROWSER='Android' VERSION='6.0' OPENPGPJSTEST='saucelabs'
|
||||
env: BROWSER='{"os":"ios", "os_version":"10.3", "device":"iPhone 7 Plus", "real_mobile":true}' OPENPGPJSTEST='browserstack' COMPAT=1
|
||||
- node_js: "9"
|
||||
env: BROWSER='iPad' VERSION='10.0' OPENPGPJSTEST='saucelabs' COMPAT=1
|
||||
- node_js: "9"
|
||||
env: BROWSER='iPad' VERSION='11.0' OPENPGPJSTEST='saucelabs'
|
||||
env: BROWSER='{"os":"ios", "os_version":"11.3", "device":"iPhone 8 Plus", "real_mobile":true}' OPENPGPJSTEST='browserstack'
|
||||
allow_failures:
|
||||
- node_js: "9"
|
||||
|
||||
before_script:
|
||||
- npm install -g grunt-cli codeclimate-test-reporter
|
||||
- npm install -g grunt-cli codeclimate-test-reporter browserstack-runner
|
||||
script:
|
||||
- $TRAVIS_BUILD_DIR/travis.sh
|
||||
install: npm install
|
||||
install: npm install
|
||||
env:
|
||||
global:
|
||||
- BROWSERSTACK_USERNAME=danielhuigens2
|
||||
- BROWSERSTACK_KEY=aW2q1ms393QRorwBnfmW
|
||||
|
|
24
Gruntfile.js
24
Gruntfile.js
|
@ -230,28 +230,6 @@ module.exports = function(grunt) {
|
|||
}
|
||||
}
|
||||
},
|
||||
'saucelabs-mocha': {
|
||||
all: {
|
||||
options: {
|
||||
username: 'openpgpjs',
|
||||
key: getSauceKey,
|
||||
urls: [
|
||||
'http://localhost:3000/test/unittests.html?saucelabs=true&grep=' + encodeURIComponent('Sauce Labs Group 1'),
|
||||
'http://localhost:3000/test/unittests.html?saucelabs=true&grep=' + encodeURIComponent('Sauce Labs Group 2'),
|
||||
'http://localhost:3000/test/unittests.html?saucelabs=true&grep=' + encodeURIComponent('^(?!.*Sauce Labs Group [1-2])')
|
||||
],
|
||||
build: process.env.TRAVIS_BUILD_ID,
|
||||
testname: 'Sauce Unit Test for openpgpjs',
|
||||
browsers: [browser_capabilities],
|
||||
public: "public",
|
||||
maxRetries: 3,
|
||||
throttled: 3,
|
||||
pollInterval: 10000,
|
||||
sauceConfig: {maxDuration: 1800, commandTimeout: 600, idleTimeout: 1000},
|
||||
statusCheckAttempts: 200
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
src: {
|
||||
files: ['src/**/*.js'],
|
||||
|
@ -277,7 +255,6 @@ module.exports = function(grunt) {
|
|||
grunt.loadNpmTasks('grunt-contrib-copy');
|
||||
grunt.loadNpmTasks('grunt-contrib-clean');
|
||||
grunt.loadNpmTasks('grunt-contrib-connect');
|
||||
grunt.loadNpmTasks('grunt-saucelabs');
|
||||
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||
|
||||
grunt.registerTask('set_version', function() {
|
||||
|
@ -321,7 +298,6 @@ module.exports = function(grunt) {
|
|||
// Test/Dev tasks
|
||||
grunt.registerTask('test', ['eslint', 'mochaTest']);
|
||||
grunt.registerTask('coverage', ['mocha_istanbul:coverage']);
|
||||
grunt.registerTask('saucelabs', ['build', 'browserify:unittests', 'copy:browsertest', 'connect:test', 'saucelabs-mocha']);
|
||||
grunt.registerTask('browsertest', ['build', 'browserify:unittests', 'copy:browsertest', 'connect:test', 'watch']);
|
||||
|
||||
};
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
OpenPGP.js [](https://travis-ci.org/openpgpjs/openpgpjs) [](https://gitter.im/openpgpjs/openpgpjs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
OpenPGP.js [](https://travis-ci.org/openpgpjs/openpgpjs) [](https://automate.browserstack.com/public-build/eEkxVVM1TytwOGJNWEdnTjk4Y0VNUUNyR3pXcEtJUGRXOVFBRjVNT1JpUT0tLTZYUlZaMWdtQWs4Z0ROS3grRXc2bFE9PQ==--4a9cac0d6ea009d81aff66de0dbb239edd1aef3c) [](https://gitter.im/openpgpjs/openpgpjs?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
==========
|
||||
|
||||
[OpenPGP.js](https://openpgpjs.org/) is a JavaScript implementation of the OpenPGP protocol. This is defined in [RFC 4880](https://tools.ietf.org/html/rfc4880).
|
||||
|
||||
|
||||
[](https://saucelabs.com/u/openpgpjs)
|
||||
|
||||
<!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-generate-toc again -->
|
||||
**Table of Contents**
|
||||
|
||||
|
|
524
npm-shrinkwrap.json
generated
524
npm-shrinkwrap.json
generated
|
@ -104,15 +104,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"agent-base": {
|
||||
"version": "4.3.0",
|
||||
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
|
||||
"integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"es6-promisify": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"ajv": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.0.tgz",
|
||||
|
@ -257,15 +248,6 @@
|
|||
"from": "github:openpgpjs/asmcrypto#6e4e407b9b8ae317925a9e677cc7b4de3e447e83",
|
||||
"dev": true
|
||||
},
|
||||
"asn1": {
|
||||
"version": "0.2.4",
|
||||
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
|
||||
"integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"safer-buffer": "~2.1.0"
|
||||
}
|
||||
},
|
||||
"asn1.js": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.0.0.tgz",
|
||||
|
@ -302,12 +284,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"assert-plus": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
|
||||
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
|
||||
"dev": true
|
||||
},
|
||||
"assertion-error": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
|
||||
|
@ -326,24 +302,6 @@
|
|||
"integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=",
|
||||
"dev": true
|
||||
},
|
||||
"asynckit": {
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
|
||||
"dev": true
|
||||
},
|
||||
"aws-sign2": {
|
||||
"version": "0.7.0",
|
||||
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
|
||||
"integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
|
||||
"dev": true
|
||||
},
|
||||
"aws4": {
|
||||
"version": "1.8.0",
|
||||
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
|
||||
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
|
||||
"dev": true
|
||||
},
|
||||
"babel-code-frame": {
|
||||
"version": "6.26.0",
|
||||
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
|
||||
|
@ -1139,23 +1097,6 @@
|
|||
"integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
|
||||
"dev": true
|
||||
},
|
||||
"bcrypt-pbkdf": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
|
||||
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"tweetnacl": "^0.14.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"tweetnacl": {
|
||||
"version": "0.14.5",
|
||||
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
|
||||
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"binary-extensions": {
|
||||
"version": "1.11.0",
|
||||
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz",
|
||||
|
@ -1614,12 +1555,6 @@
|
|||
"integrity": "sha512-vs79o1mOSKRGv/1pSkp4EXgl4ZviWeYReXw60XfacPU64uQWZwJT6vZNmxRF9O+6zu71sJwMxLK5JXxbzuVrLw==",
|
||||
"dev": true
|
||||
},
|
||||
"caseless": {
|
||||
"version": "0.12.0",
|
||||
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
|
||||
"integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
|
||||
"dev": true
|
||||
},
|
||||
"catharsis": {
|
||||
"version": "0.8.9",
|
||||
"resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz",
|
||||
|
@ -1806,15 +1741,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"commander": {
|
||||
"version": "2.12.2",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz",
|
||||
|
@ -2025,15 +1951,6 @@
|
|||
"es5-ext": "^0.10.9"
|
||||
}
|
||||
},
|
||||
"dashdash": {
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
|
||||
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"assert-plus": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"date-now": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
|
||||
|
@ -2101,12 +2018,6 @@
|
|||
"rimraf": "^2.2.8"
|
||||
}
|
||||
},
|
||||
"delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
|
||||
"dev": true
|
||||
},
|
||||
"depd": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz",
|
||||
|
@ -2253,16 +2164,6 @@
|
|||
"readable-stream": "^2.0.2"
|
||||
}
|
||||
},
|
||||
"ecc-jsbn": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
|
||||
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"jsbn": "~0.1.0",
|
||||
"safer-buffer": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"editorconfig": {
|
||||
"version": "0.13.3",
|
||||
"resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.13.3.tgz",
|
||||
|
@ -2367,21 +2268,6 @@
|
|||
"event-emitter": "~0.3.5"
|
||||
}
|
||||
},
|
||||
"es6-promise": {
|
||||
"version": "4.2.8",
|
||||
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
|
||||
"integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
|
||||
"dev": true
|
||||
},
|
||||
"es6-promisify": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
|
||||
"integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"es6-promise": "^4.0.3"
|
||||
}
|
||||
},
|
||||
"es6-set": {
|
||||
"version": "0.1.5",
|
||||
"resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
|
||||
|
@ -2888,12 +2774,6 @@
|
|||
"fill-range": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"extend": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
|
||||
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
|
||||
"dev": true
|
||||
},
|
||||
"external-editor": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz",
|
||||
|
@ -2914,12 +2794,6 @@
|
|||
"is-extglob": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"extsprintf": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
|
||||
"integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
|
||||
"dev": true
|
||||
},
|
||||
"fast-deep-equal": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz",
|
||||
|
@ -2947,30 +2821,6 @@
|
|||
"websocket-driver": ">=0.5.1"
|
||||
}
|
||||
},
|
||||
"fg-lodash": {
|
||||
"version": "0.0.2",
|
||||
"resolved": "https://registry.npmjs.org/fg-lodash/-/fg-lodash-0.0.2.tgz",
|
||||
"integrity": "sha1-mINSU39CfaavIiEpu2OsyknmL6M=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"lodash": "^2.4.1",
|
||||
"underscore.string": "~2.3.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"lodash": {
|
||||
"version": "2.4.2",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
|
||||
"integrity": "sha1-+t2DS5aDBz2hebPq5tnA0VBT9z4=",
|
||||
"dev": true
|
||||
},
|
||||
"underscore.string": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
|
||||
"integrity": "sha1-ccCL9rQosRM/N+ePo6Icgvcymw0=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"file-entry-cache": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
|
||||
|
@ -3082,23 +2932,6 @@
|
|||
"for-in": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"forever-agent": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
|
||||
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
|
||||
"dev": true
|
||||
},
|
||||
"form-data": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
|
||||
"integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"asynckit": "^0.4.0",
|
||||
"combined-stream": "^1.0.6",
|
||||
"mime-types": "^2.1.12"
|
||||
}
|
||||
},
|
||||
"fresh": {
|
||||
"version": "0.5.2",
|
||||
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
|
||||
|
@ -3710,15 +3543,6 @@
|
|||
"integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=",
|
||||
"dev": true
|
||||
},
|
||||
"getpass": {
|
||||
"version": "0.1.7",
|
||||
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
|
||||
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"assert-plus": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"glob": {
|
||||
"version": "7.0.6",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz",
|
||||
|
@ -4160,27 +3984,6 @@
|
|||
"mkdirp": "^0.5.0"
|
||||
}
|
||||
},
|
||||
"grunt-saucelabs": {
|
||||
"version": "github:mar10/grunt-saucelabs#dfc0bb6f34d1c1b2bb9cda26ce8e50ad9d8c1463",
|
||||
"from": "github:mar10/grunt-saucelabs#dfc0bb6f34d1c1b2bb9cda26ce8e50ad9d8c1463",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"colors": "~1.1.2",
|
||||
"lodash": "^4.17.11",
|
||||
"q": "~1.4.1",
|
||||
"requestretry": "~1.9.0",
|
||||
"sauce-tunnel": "github:mar10/sauce-tunnel#update_4.5.3",
|
||||
"saucelabs": "^1.5.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"lodash": {
|
||||
"version": "4.17.11",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
|
||||
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"grunt-terser": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/grunt-terser/-/grunt-terser-0.1.0.tgz",
|
||||
|
@ -4288,48 +4091,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"har-schema": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
|
||||
"integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
|
||||
"dev": true
|
||||
},
|
||||
"har-validator": {
|
||||
"version": "5.1.3",
|
||||
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
|
||||
"integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ajv": "^6.5.5",
|
||||
"har-schema": "^2.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ajv": {
|
||||
"version": "6.10.0",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
|
||||
"integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"fast-deep-equal": "^2.0.1",
|
||||
"fast-json-stable-stringify": "^2.0.0",
|
||||
"json-schema-traverse": "^0.4.1",
|
||||
"uri-js": "^4.2.2"
|
||||
}
|
||||
},
|
||||
"fast-deep-equal": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
|
||||
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
|
||||
"dev": true
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
|
||||
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"has": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz",
|
||||
|
@ -4437,17 +4198,6 @@
|
|||
"integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=",
|
||||
"dev": true
|
||||
},
|
||||
"http-signature": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
|
||||
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"assert-plus": "^1.0.0",
|
||||
"jsprim": "^1.2.2",
|
||||
"sshpk": "^1.7.0"
|
||||
}
|
||||
},
|
||||
"http2": {
|
||||
"version": "3.3.7",
|
||||
"resolved": "https://registry.npmjs.org/http2/-/http2-3.3.7.tgz",
|
||||
|
@ -4460,33 +4210,6 @@
|
|||
"integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
|
||||
"dev": true
|
||||
},
|
||||
"https-proxy-agent": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz",
|
||||
"integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"agent-base": "^4.1.0",
|
||||
"debug": "^3.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"debug": {
|
||||
"version": "3.2.6",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
|
||||
"integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ms": "^2.1.1"
|
||||
}
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"iconv-lite": {
|
||||
"version": "0.4.19",
|
||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz",
|
||||
|
@ -4846,12 +4569,6 @@
|
|||
"integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
|
||||
"dev": true
|
||||
},
|
||||
"is-typedarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
|
||||
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
|
||||
"dev": true
|
||||
},
|
||||
"is-utf8": {
|
||||
"version": "0.2.1",
|
||||
"resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
|
||||
|
@ -4879,12 +4596,6 @@
|
|||
"isarray": "1.0.0"
|
||||
}
|
||||
},
|
||||
"isstream": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
|
||||
"integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
|
||||
"dev": true
|
||||
},
|
||||
"istanbul": {
|
||||
"version": "0.4.5",
|
||||
"resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz",
|
||||
|
@ -4974,12 +4685,6 @@
|
|||
"xmlcreate": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"jsbn": {
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
|
||||
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
|
||||
"dev": true
|
||||
},
|
||||
"jsdoc": {
|
||||
"version": "3.5.5",
|
||||
"resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz",
|
||||
|
@ -5014,12 +4719,6 @@
|
|||
"integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
|
||||
"dev": true
|
||||
},
|
||||
"json-schema": {
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
|
||||
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
|
||||
"dev": true
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "0.3.1",
|
||||
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
|
||||
|
@ -5041,12 +4740,6 @@
|
|||
"integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
|
||||
"dev": true
|
||||
},
|
||||
"json-stringify-safe": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
|
||||
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
|
||||
"dev": true
|
||||
},
|
||||
"json5": {
|
||||
"version": "0.5.1",
|
||||
"resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz",
|
||||
|
@ -5065,18 +4758,6 @@
|
|||
"integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=",
|
||||
"dev": true
|
||||
},
|
||||
"jsprim": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
|
||||
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"assert-plus": "1.0.0",
|
||||
"extsprintf": "1.3.0",
|
||||
"json-schema": "0.2.3",
|
||||
"verror": "1.10.0"
|
||||
}
|
||||
},
|
||||
"just-extend": {
|
||||
"version": "1.1.27",
|
||||
"resolved": "https://registry.npmjs.org/just-extend/-/just-extend-1.1.27.tgz",
|
||||
|
@ -5618,12 +5299,6 @@
|
|||
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
|
||||
"dev": true
|
||||
},
|
||||
"oauth-sign": {
|
||||
"version": "0.9.0",
|
||||
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
||||
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
|
||||
"dev": true
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
|
@ -5929,12 +5604,6 @@
|
|||
"sha.js": "^2.4.8"
|
||||
}
|
||||
},
|
||||
"performance-now": {
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
|
||||
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
|
||||
"dev": true
|
||||
},
|
||||
"pify": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
||||
|
@ -6028,12 +5697,6 @@
|
|||
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
|
||||
"dev": true
|
||||
},
|
||||
"psl": {
|
||||
"version": "1.1.33",
|
||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.1.33.tgz",
|
||||
"integrity": "sha512-LTDP2uSrsc7XCb5lO7A8BI1qYxRe/8EqlRvMeEl6rsnYAqDOl8xHR+8lSAIVfrNaSAlTPTNOCgNjWcoUL3AZsw==",
|
||||
"dev": true
|
||||
},
|
||||
"public-encrypt": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz",
|
||||
|
@ -6053,12 +5716,6 @@
|
|||
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
|
||||
"dev": true
|
||||
},
|
||||
"q": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
|
||||
"integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=",
|
||||
"dev": true
|
||||
},
|
||||
"qs": {
|
||||
"version": "6.5.2",
|
||||
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
|
||||
|
@ -6337,69 +5994,6 @@
|
|||
"is-finite": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"request": {
|
||||
"version": "2.88.0",
|
||||
"resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
|
||||
"integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"aws-sign2": "~0.7.0",
|
||||
"aws4": "^1.8.0",
|
||||
"caseless": "~0.12.0",
|
||||
"combined-stream": "~1.0.6",
|
||||
"extend": "~3.0.2",
|
||||
"forever-agent": "~0.6.1",
|
||||
"form-data": "~2.3.2",
|
||||
"har-validator": "~5.1.0",
|
||||
"http-signature": "~1.2.0",
|
||||
"is-typedarray": "~1.0.0",
|
||||
"isstream": "~0.1.2",
|
||||
"json-stringify-safe": "~5.0.1",
|
||||
"mime-types": "~2.1.19",
|
||||
"oauth-sign": "~0.9.0",
|
||||
"performance-now": "^2.1.0",
|
||||
"qs": "~6.5.2",
|
||||
"safe-buffer": "^5.1.2",
|
||||
"tough-cookie": "~2.4.3",
|
||||
"tunnel-agent": "^0.6.0",
|
||||
"uuid": "^3.3.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"mime-db": {
|
||||
"version": "1.40.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
|
||||
"integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==",
|
||||
"dev": true
|
||||
},
|
||||
"mime-types": {
|
||||
"version": "2.1.24",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
|
||||
"integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"mime-db": "1.40.0"
|
||||
}
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"requestretry": {
|
||||
"version": "1.9.1",
|
||||
"resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.9.1.tgz",
|
||||
"integrity": "sha1-CioATq8hGWnEzCz+vz/p5XuSx04=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"extend": "^3.0.0",
|
||||
"fg-lodash": "0.0.2",
|
||||
"request": "^2.74.x",
|
||||
"when": "~3.7.5"
|
||||
}
|
||||
},
|
||||
"require-directory": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
||||
|
@ -6529,37 +6123,12 @@
|
|||
"integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=",
|
||||
"dev": true
|
||||
},
|
||||
"safer-buffer": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
||||
"dev": true
|
||||
},
|
||||
"samsam": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz",
|
||||
"integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==",
|
||||
"dev": true
|
||||
},
|
||||
"sauce-tunnel": {
|
||||
"version": "github:mar10/sauce-tunnel#acaca325c19db4e0c93d64204e5626ae13399595",
|
||||
"from": "github:mar10/sauce-tunnel#update_4.5.3",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"chalk": "^1.1.3",
|
||||
"request": "^2.72.0",
|
||||
"split": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"saucelabs": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz",
|
||||
"integrity": "sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"https-proxy-agent": "^2.2.1"
|
||||
}
|
||||
},
|
||||
"seek-bzip": {
|
||||
"version": "github:openpgpjs/seek-bzip#6187fc025851d35c4e104a25ea15a10b9b8d6f7d",
|
||||
"from": "github:openpgpjs/seek-bzip#6187fc025851d35c4e104a25ea15a10b9b8d6f7d",
|
||||
|
@ -6812,46 +6381,12 @@
|
|||
"integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=",
|
||||
"dev": true
|
||||
},
|
||||
"split": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
|
||||
"integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"through": "2"
|
||||
}
|
||||
},
|
||||
"sprintf-js": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
|
||||
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
|
||||
"dev": true
|
||||
},
|
||||
"sshpk": {
|
||||
"version": "1.16.1",
|
||||
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
|
||||
"integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"asn1": "~0.2.3",
|
||||
"assert-plus": "^1.0.0",
|
||||
"bcrypt-pbkdf": "^1.0.0",
|
||||
"dashdash": "^1.12.0",
|
||||
"ecc-jsbn": "~0.1.1",
|
||||
"getpass": "^0.1.1",
|
||||
"jsbn": "~0.1.0",
|
||||
"safer-buffer": "^2.0.2",
|
||||
"tweetnacl": "~0.14.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"tweetnacl": {
|
||||
"version": "0.14.5",
|
||||
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
|
||||
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"statuses": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz",
|
||||
|
@ -7262,16 +6797,6 @@
|
|||
"integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
|
||||
"dev": true
|
||||
},
|
||||
"tough-cookie": {
|
||||
"version": "2.4.3",
|
||||
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
|
||||
"integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"psl": "^1.1.24",
|
||||
"punycode": "^1.4.1"
|
||||
}
|
||||
},
|
||||
"trim-newlines": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
|
||||
|
@ -7290,15 +6815,6 @@
|
|||
"integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==",
|
||||
"dev": true
|
||||
},
|
||||
"tunnel-agent": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
|
||||
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"safe-buffer": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"tweetnacl": {
|
||||
"version": "github:openpgpjs/tweetnacl-js#1ef755f2b252a3e328ac739848d00e0dad76be2d",
|
||||
"from": "github:openpgpjs/tweetnacl-js#1ef755f2b252a3e328ac739848d00e0dad76be2d",
|
||||
|
@ -7385,23 +6901,6 @@
|
|||
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
|
||||
"dev": true
|
||||
},
|
||||
"uri-js": {
|
||||
"version": "4.2.2",
|
||||
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
|
||||
"integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"punycode": "^2.1.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"punycode": {
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
|
||||
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"url": {
|
||||
"version": "0.11.0",
|
||||
"resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
|
||||
|
@ -7441,12 +6940,6 @@
|
|||
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
|
||||
"dev": true
|
||||
},
|
||||
"uuid": {
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
|
||||
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
|
||||
"dev": true
|
||||
},
|
||||
"validate-npm-package-license": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
|
||||
|
@ -7457,17 +6950,6 @@
|
|||
"spdx-expression-parse": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"verror": {
|
||||
"version": "1.10.0",
|
||||
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
|
||||
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"assert-plus": "^1.0.0",
|
||||
"core-util-is": "1.0.2",
|
||||
"extsprintf": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"vm-browserify": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz",
|
||||
|
@ -7528,12 +7010,6 @@
|
|||
"integrity": "sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=",
|
||||
"dev": true
|
||||
},
|
||||
"when": {
|
||||
"version": "3.7.8",
|
||||
"resolved": "https://registry.npmjs.org/when/-/when-3.7.8.tgz",
|
||||
"integrity": "sha1-xxMLan6gRpPoQs3J56Hyqjmjn4I=",
|
||||
"dev": true
|
||||
},
|
||||
"which": {
|
||||
"version": "1.2.14",
|
||||
"resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
|
||||
|
|
|
@ -61,7 +61,6 @@
|
|||
"grunt-jsdoc": "^2.2.1",
|
||||
"grunt-mocha-istanbul": "^5.0.2",
|
||||
"grunt-mocha-test": "^0.13.3",
|
||||
"grunt-saucelabs": "github:mar10/grunt-saucelabs#dfc0bb6f34d1c1b2bb9cda26ce8e50ad9d8c1463",
|
||||
"grunt-terser": "^0.1.0",
|
||||
"grunt-text-replace": "~0.4.0",
|
||||
"gruntify-eslint": "^4.0.0",
|
||||
|
|
|
@ -8,7 +8,7 @@ const input = require('./testInputs.js');
|
|||
|
||||
const expect = chai.expect;
|
||||
|
||||
describe('Brainpool Cryptography', function () {
|
||||
(openpgp.config.ci ? describe.skip : describe)('Brainpool Cryptography', function () {
|
||||
const data = {
|
||||
romeo: {
|
||||
id: 'fa3d64c9bcf338bc',
|
||||
|
@ -267,77 +267,85 @@ EJ4QcD/oQ6x1M/8X/iKQCtxZP8RnlrbH7ExkNON5s5g=
|
|||
expect(result.signatures).to.have.length(1);
|
||||
expect(result.signatures[0].valid).to.be.true;
|
||||
});
|
||||
});
|
||||
|
||||
function omnibus() {
|
||||
it('Omnibus BrainpoolP256r1 Test', function () {
|
||||
const options = { userIds: {name: "Hi", email: "hi@hel.lo"}, curve: "brainpoolP256r1" };
|
||||
return openpgp.generateKey(options).then(function (firstKey) {
|
||||
const hi = firstKey.key;
|
||||
const pubHi = hi.toPublic();
|
||||
function omnibus() {
|
||||
it('Omnibus BrainpoolP256r1 Test', function() {
|
||||
const options = { userIds: { name: "Hi", email: "hi@hel.lo" }, curve: "brainpoolP256r1" };
|
||||
return openpgp.generateKey(options).then(function(firstKey) {
|
||||
const hi = firstKey.key;
|
||||
const pubHi = hi.toPublic();
|
||||
|
||||
const options = { userIds: { name: "Bye", email: "bye@good.bye" }, curve: "brainpoolP256r1" };
|
||||
return openpgp.generateKey(options).then(function (secondKey) {
|
||||
const bye = secondKey.key;
|
||||
const pubBye = bye.toPublic();
|
||||
const options = { userIds: { name: "Bye", email: "bye@good.bye" }, curve: "brainpoolP256r1" };
|
||||
return openpgp.generateKey(options).then(function(secondKey) {
|
||||
const bye = secondKey.key;
|
||||
const pubBye = bye.toPublic();
|
||||
|
||||
const testData = input.createSomeMessage();
|
||||
const testData2 = input.createSomeMessage();
|
||||
return Promise.all([
|
||||
// Signing message
|
||||
openpgp.sign(
|
||||
{ message: openpgp.cleartext.fromText(testData), privateKeys: hi }
|
||||
).then(async signed => {
|
||||
const msg = await openpgp.cleartext.readArmored(signed.data);
|
||||
// Verifying signed message
|
||||
return Promise.all([
|
||||
openpgp.verify(
|
||||
{ message: msg, publicKeys: pubHi }
|
||||
).then(output => expect(output.signatures[0].valid).to.be.true),
|
||||
// Verifying detached signature
|
||||
openpgp.verify(
|
||||
{ message: openpgp.cleartext.fromText(testData),
|
||||
publicKeys: pubHi,
|
||||
signature: await openpgp.signature.readArmored(signed.data) }
|
||||
).then(output => expect(output.signatures[0].valid).to.be.true)
|
||||
]);
|
||||
}),
|
||||
// Encrypting and signing
|
||||
openpgp.encrypt(
|
||||
{ message: openpgp.message.fromText(testData2),
|
||||
publicKeys: [pubBye],
|
||||
privateKeys: [hi] }
|
||||
).then(async encrypted => {
|
||||
const msg = await openpgp.message.readArmored(encrypted.data);
|
||||
// Decrypting and verifying
|
||||
return openpgp.decrypt(
|
||||
{ message: msg,
|
||||
privateKeys: bye,
|
||||
publicKeys: [pubHi] }
|
||||
).then(output => {
|
||||
expect(output.data).to.equal(testData2);
|
||||
expect(output.signatures[0].valid).to.be.true;
|
||||
});
|
||||
})
|
||||
]);
|
||||
});
|
||||
const testData = input.createSomeMessage();
|
||||
const testData2 = input.createSomeMessage();
|
||||
return Promise.all([
|
||||
// Signing message
|
||||
openpgp.sign(
|
||||
{ message: openpgp.cleartext.fromText(testData), privateKeys: hi }
|
||||
).then(async signed => {
|
||||
const msg = await openpgp.cleartext.readArmored(signed.data);
|
||||
// Verifying signed message
|
||||
return Promise.all([
|
||||
openpgp.verify(
|
||||
{ message: msg, publicKeys: pubHi }
|
||||
).then(output => expect(output.signatures[0].valid).to.be.true),
|
||||
// Verifying detached signature
|
||||
openpgp.verify(
|
||||
{
|
||||
message: openpgp.cleartext.fromText(testData),
|
||||
publicKeys: pubHi,
|
||||
signature: await openpgp.signature.readArmored(signed.data)
|
||||
}
|
||||
).then(output => expect(output.signatures[0].valid).to.be.true)
|
||||
]);
|
||||
}),
|
||||
// Encrypting and signing
|
||||
openpgp.encrypt(
|
||||
{
|
||||
message: openpgp.message.fromText(testData2),
|
||||
publicKeys: [pubBye],
|
||||
privateKeys: [hi]
|
||||
}
|
||||
).then(async encrypted => {
|
||||
const msg = await openpgp.message.readArmored(encrypted.data);
|
||||
// Decrypting and verifying
|
||||
return openpgp.decrypt(
|
||||
{
|
||||
message: msg,
|
||||
privateKeys: bye,
|
||||
publicKeys: [pubHi]
|
||||
}
|
||||
).then(output => {
|
||||
expect(output.data).to.equal(testData2);
|
||||
expect(output.signatures[0].valid).to.be.true;
|
||||
});
|
||||
})
|
||||
]);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
omnibus();
|
||||
|
||||
tryTests('Brainpool Worker Tests', omnibus, {
|
||||
if: typeof window !== 'undefined' && window.Worker,
|
||||
before: async function() {
|
||||
await openpgp.initWorker({ path:'../dist/openpgp.worker.js' });
|
||||
},
|
||||
beforeEach: function() {
|
||||
openpgp.config.use_native = true;
|
||||
},
|
||||
after: function() {
|
||||
openpgp.destroyWorker();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// TODO find test vectors
|
||||
tryTests('Brainpool Omnibus Tests', omnibus, {
|
||||
if: !openpgp.config.ci
|
||||
});
|
||||
|
||||
tryTests('Brainpool Omnibus Tests - Worker', omnibus, {
|
||||
if: typeof window !== 'undefined' && window.Worker,
|
||||
before: async function() {
|
||||
await openpgp.initWorker({ path: '../dist/openpgp.worker.js' });
|
||||
},
|
||||
beforeEach: function() {
|
||||
openpgp.config.use_native = true;
|
||||
},
|
||||
after: function() {
|
||||
openpgp.destroyWorker();
|
||||
}
|
||||
});
|
||||
|
||||
// TODO find test vectors
|
||||
|
|
|
@ -3,10 +3,8 @@ describe('General', function () {
|
|||
require('./armor.js');
|
||||
require('./packet.js');
|
||||
require('./keyring.js');
|
||||
describe('[Sauce Labs Group 1]', function() {
|
||||
require('./signature.js');
|
||||
require('./key.js');
|
||||
});
|
||||
require('./signature.js');
|
||||
require('./key.js');
|
||||
require('./openpgp.js');
|
||||
require('./hkp.js');
|
||||
require('./wkd.js');
|
||||
|
|
|
@ -2208,7 +2208,9 @@ describe('Key', function() {
|
|||
rsaGenStub.restore();
|
||||
});
|
||||
|
||||
describe('V4', versionSpecificTests);
|
||||
tryTests('V4', versionSpecificTests, {
|
||||
if: !openpgp.config.ci
|
||||
});
|
||||
|
||||
tryTests('V4 - With Worker', versionSpecificTests, {
|
||||
if: typeof window !== 'undefined' && window.Worker,
|
||||
|
@ -2223,7 +2225,7 @@ describe('Key', function() {
|
|||
let v5_keysVal;
|
||||
let aead_protectVal;
|
||||
tryTests('V5', versionSpecificTests, {
|
||||
if: !openpgp.config.saucelabs,
|
||||
if: !openpgp.config.ci,
|
||||
beforeEach: function() {
|
||||
v5_keysVal = openpgp.config.v5_keys;
|
||||
aead_protectVal = openpgp.config.aead_protect;
|
||||
|
|
|
@ -425,7 +425,7 @@ function withCompression(tests) {
|
|||
});
|
||||
}
|
||||
|
||||
describe('[Sauce Labs Group 2] OpenPGP.js public api tests', function() {
|
||||
describe('OpenPGP.js public api tests', function() {
|
||||
|
||||
let rsaGenStub;
|
||||
let rsaGenValue = openpgp.crypto.publicKey.rsa.generate(openpgp.util.getWebCryptoAll() ? 2048 : 512, "10001");
|
||||
|
@ -874,7 +874,7 @@ describe('[Sauce Labs Group 2] OpenPGP.js public api tests', function() {
|
|||
});
|
||||
|
||||
tryTests('OCB mode', tests, {
|
||||
if: !openpgp.config.saucelabs,
|
||||
if: !openpgp.config.ci,
|
||||
beforeEach: function() {
|
||||
openpgp.config.aead_protect = true;
|
||||
openpgp.config.aead_mode = openpgp.enums.aead.ocb;
|
||||
|
|
|
@ -4,7 +4,7 @@ const chai = require('chai');
|
|||
|
||||
const { expect } = chai;
|
||||
|
||||
describe('WKD unit tests', function() {
|
||||
describe.skip('WKD unit tests', function() {
|
||||
this.timeout(60000);
|
||||
|
||||
let wkd;
|
||||
|
|
|
@ -8,7 +8,7 @@ chai.use(require('chai-as-promised'));
|
|||
const { expect } = chai;
|
||||
const input = require('./testInputs');
|
||||
|
||||
describe('X25519 Cryptography', function () {
|
||||
(openpgp.config.ci ? describe.skip : describe)('X25519 Cryptography', function () {
|
||||
const data = {
|
||||
light: {
|
||||
id: '1ecdf026c0245830',
|
||||
|
@ -214,122 +214,6 @@ describe('X25519 Cryptography', function () {
|
|||
expect(result.signatures[0].valid).to.be.true;
|
||||
});
|
||||
|
||||
// TODO export, then reimport key and validate
|
||||
function omnibus() {
|
||||
it('Omnibus Ed25519/Curve25519 Test', function () {
|
||||
const options = {
|
||||
userIds: {name: "Hi", email: "hi@hel.lo"},
|
||||
curve: "ed25519"
|
||||
};
|
||||
return openpgp.generateKey(options).then(async function (firstKey) {
|
||||
expect(firstKey).to.exist;
|
||||
expect(firstKey.privateKeyArmored).to.exist;
|
||||
expect(firstKey.publicKeyArmored).to.exist;
|
||||
expect(firstKey.key).to.exist;
|
||||
expect(firstKey.key.primaryKey).to.exist;
|
||||
expect(firstKey.key.subKeys).to.have.length(1);
|
||||
expect(firstKey.key.subKeys[0].keyPacket).to.exist;
|
||||
|
||||
const hi = firstKey.key;
|
||||
const primaryKey = hi.primaryKey;
|
||||
const subKey = hi.subKeys[0];
|
||||
expect(hi.getAlgorithmInfo().curve).to.equal('ed25519');
|
||||
expect(hi.getAlgorithmInfo().algorithm).to.equal('eddsa');
|
||||
expect(subKey.getAlgorithmInfo().curve).to.equal('curve25519');
|
||||
expect(subKey.getAlgorithmInfo().algorithm).to.equal('ecdh');
|
||||
|
||||
// Self Certificate is valid
|
||||
const user = hi.users[0];
|
||||
await expect(user.selfCertifications[0].verify(
|
||||
primaryKey, openpgp.enums.signature.cert_generic, { userId: user.userId, key: primaryKey }
|
||||
)).to.eventually.be.true;
|
||||
await expect(user.verifyCertificate(
|
||||
primaryKey, user.selfCertifications[0], [hi.toPublic()]
|
||||
)).to.eventually.equal(openpgp.enums.keyStatus.valid);
|
||||
|
||||
const options = {
|
||||
userIds: { name: "Bye", email: "bye@good.bye" },
|
||||
curve: "curve25519"
|
||||
};
|
||||
return openpgp.generateKey(options).then(async function (secondKey) {
|
||||
const bye = secondKey.key;
|
||||
expect(bye.getAlgorithmInfo().curve).to.equal('ed25519');
|
||||
expect(bye.getAlgorithmInfo().algorithm).to.equal('eddsa');
|
||||
expect(bye.subKeys[0].getAlgorithmInfo().curve).to.equal('curve25519');
|
||||
expect(bye.subKeys[0].getAlgorithmInfo().algorithm).to.equal('ecdh');
|
||||
|
||||
// Self Certificate is valid
|
||||
const user = bye.users[0];
|
||||
await expect(user.selfCertifications[0].verify(
|
||||
bye.primaryKey, openpgp.enums.signature.cert_generic, { userId: user.userId, key: bye.primaryKey }
|
||||
)).to.eventually.be.true;
|
||||
await expect(user.verifyCertificate(
|
||||
bye.primaryKey, user.selfCertifications[0], [bye.toPublic()]
|
||||
)).to.eventually.equal(openpgp.enums.keyStatus.valid);
|
||||
|
||||
return Promise.all([
|
||||
// Hi trusts Bye!
|
||||
bye.toPublic().signPrimaryUser([hi]).then(trustedBye => {
|
||||
expect(trustedBye.users[0].otherCertifications[0].verify(
|
||||
primaryKey, openpgp.enums.signature.cert_generic, { userId: user.userId, key: bye.toPublic().primaryKey }
|
||||
)).to.eventually.be.true;
|
||||
}),
|
||||
// Signing message
|
||||
openpgp.sign(
|
||||
{ message: openpgp.cleartext.fromText('Hi, this is me, Hi!'), privateKeys: hi }
|
||||
).then(async signed => {
|
||||
const msg = await openpgp.cleartext.readArmored(signed.data);
|
||||
// Verifying signed message
|
||||
return Promise.all([
|
||||
openpgp.verify(
|
||||
{ message: msg, publicKeys: hi.toPublic() }
|
||||
).then(output => expect(output.signatures[0].valid).to.be.true),
|
||||
// Verifying detached signature
|
||||
openpgp.verify(
|
||||
{ message: openpgp.message.fromText('Hi, this is me, Hi!'),
|
||||
publicKeys: hi.toPublic(),
|
||||
signature: await openpgp.signature.readArmored(signed.data) }
|
||||
).then(output => expect(output.signatures[0].valid).to.be.true)
|
||||
]);
|
||||
}),
|
||||
// Encrypting and signing
|
||||
openpgp.encrypt(
|
||||
{ message: openpgp.message.fromText('Hi, Hi wrote this but only Bye can read it!'),
|
||||
publicKeys: [bye.toPublic()],
|
||||
privateKeys: [hi] }
|
||||
).then(async encrypted => {
|
||||
const msg = await openpgp.message.readArmored(encrypted.data);
|
||||
// Decrypting and verifying
|
||||
return openpgp.decrypt(
|
||||
{ message: msg,
|
||||
privateKeys: bye,
|
||||
publicKeys: [hi.toPublic()] }
|
||||
).then(output => {
|
||||
expect(output.data).to.equal('Hi, Hi wrote this but only Bye can read it!');
|
||||
expect(output.signatures[0].valid).to.be.true;
|
||||
});
|
||||
})
|
||||
]);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
omnibus();
|
||||
|
||||
tryTests('X25519 Worker Tests', omnibus, {
|
||||
if: typeof window !== 'undefined' && window.Worker,
|
||||
before: async function() {
|
||||
await openpgp.initWorker({ path:'../dist/openpgp.worker.js' });
|
||||
},
|
||||
beforeEach: function() {
|
||||
openpgp.config.use_native = true;
|
||||
},
|
||||
after: function() {
|
||||
openpgp.destroyWorker();
|
||||
}
|
||||
});
|
||||
|
||||
describe('Ed25519 Test Vectors from RFC8032', function () {
|
||||
// https://tools.ietf.org/html/rfc8032#section-7.1
|
||||
const signature = openpgp.crypto.signature;
|
||||
|
@ -546,3 +430,127 @@ describe('X25519 Cryptography', function () {
|
|||
)).to.eventually.equal(openpgp.enums.keyStatus.valid);
|
||||
}); */
|
||||
});
|
||||
|
||||
// TODO export, then reimport key and validate
|
||||
function omnibus() {
|
||||
it('Omnibus Ed25519/Curve25519 Test', function() {
|
||||
const options = {
|
||||
userIds: { name: "Hi", email: "hi@hel.lo" },
|
||||
curve: "ed25519"
|
||||
};
|
||||
return openpgp.generateKey(options).then(async function(firstKey) {
|
||||
expect(firstKey).to.exist;
|
||||
expect(firstKey.privateKeyArmored).to.exist;
|
||||
expect(firstKey.publicKeyArmored).to.exist;
|
||||
expect(firstKey.key).to.exist;
|
||||
expect(firstKey.key.primaryKey).to.exist;
|
||||
expect(firstKey.key.subKeys).to.have.length(1);
|
||||
expect(firstKey.key.subKeys[0].keyPacket).to.exist;
|
||||
|
||||
const hi = firstKey.key;
|
||||
const primaryKey = hi.primaryKey;
|
||||
const subKey = hi.subKeys[0];
|
||||
expect(hi.getAlgorithmInfo().curve).to.equal('ed25519');
|
||||
expect(hi.getAlgorithmInfo().algorithm).to.equal('eddsa');
|
||||
expect(subKey.getAlgorithmInfo().curve).to.equal('curve25519');
|
||||
expect(subKey.getAlgorithmInfo().algorithm).to.equal('ecdh');
|
||||
|
||||
// Self Certificate is valid
|
||||
const user = hi.users[0];
|
||||
await expect(user.selfCertifications[0].verify(
|
||||
primaryKey, openpgp.enums.signature.cert_generic, { userId: user.userId, key: primaryKey }
|
||||
)).to.eventually.be.true;
|
||||
await expect(user.verifyCertificate(
|
||||
primaryKey, user.selfCertifications[0], [hi.toPublic()]
|
||||
)).to.eventually.equal(openpgp.enums.keyStatus.valid);
|
||||
|
||||
const options = {
|
||||
userIds: { name: "Bye", email: "bye@good.bye" },
|
||||
curve: "curve25519"
|
||||
};
|
||||
return openpgp.generateKey(options).then(async function(secondKey) {
|
||||
const bye = secondKey.key;
|
||||
expect(bye.getAlgorithmInfo().curve).to.equal('ed25519');
|
||||
expect(bye.getAlgorithmInfo().algorithm).to.equal('eddsa');
|
||||
expect(bye.subKeys[0].getAlgorithmInfo().curve).to.equal('curve25519');
|
||||
expect(bye.subKeys[0].getAlgorithmInfo().algorithm).to.equal('ecdh');
|
||||
|
||||
// Self Certificate is valid
|
||||
const user = bye.users[0];
|
||||
await expect(user.selfCertifications[0].verify(
|
||||
bye.primaryKey, openpgp.enums.signature.cert_generic, { userId: user.userId, key: bye.primaryKey }
|
||||
)).to.eventually.be.true;
|
||||
await expect(user.verifyCertificate(
|
||||
bye.primaryKey, user.selfCertifications[0], [bye.toPublic()]
|
||||
)).to.eventually.equal(openpgp.enums.keyStatus.valid);
|
||||
|
||||
return Promise.all([
|
||||
// Hi trusts Bye!
|
||||
bye.toPublic().signPrimaryUser([hi]).then(trustedBye => {
|
||||
expect(trustedBye.users[0].otherCertifications[0].verify(
|
||||
primaryKey, openpgp.enums.signature.cert_generic, { userId: user.userId, key: bye.toPublic().primaryKey }
|
||||
)).to.eventually.be.true;
|
||||
}),
|
||||
// Signing message
|
||||
openpgp.sign(
|
||||
{ message: openpgp.cleartext.fromText('Hi, this is me, Hi!'), privateKeys: hi }
|
||||
).then(async signed => {
|
||||
const msg = await openpgp.cleartext.readArmored(signed.data);
|
||||
// Verifying signed message
|
||||
return Promise.all([
|
||||
openpgp.verify(
|
||||
{ message: msg, publicKeys: hi.toPublic() }
|
||||
).then(output => expect(output.signatures[0].valid).to.be.true),
|
||||
// Verifying detached signature
|
||||
openpgp.verify(
|
||||
{
|
||||
message: openpgp.message.fromText('Hi, this is me, Hi!'),
|
||||
publicKeys: hi.toPublic(),
|
||||
signature: await openpgp.signature.readArmored(signed.data)
|
||||
}
|
||||
).then(output => expect(output.signatures[0].valid).to.be.true)
|
||||
]);
|
||||
}),
|
||||
// Encrypting and signing
|
||||
openpgp.encrypt(
|
||||
{
|
||||
message: openpgp.message.fromText('Hi, Hi wrote this but only Bye can read it!'),
|
||||
publicKeys: [bye.toPublic()],
|
||||
privateKeys: [hi]
|
||||
}
|
||||
).then(async encrypted => {
|
||||
const msg = await openpgp.message.readArmored(encrypted.data);
|
||||
// Decrypting and verifying
|
||||
return openpgp.decrypt(
|
||||
{
|
||||
message: msg,
|
||||
privateKeys: bye,
|
||||
publicKeys: [hi.toPublic()]
|
||||
}
|
||||
).then(output => {
|
||||
expect(output.data).to.equal('Hi, Hi wrote this but only Bye can read it!');
|
||||
expect(output.signatures[0].valid).to.be.true;
|
||||
});
|
||||
})
|
||||
]);
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
tryTests('X25519 Omnibus Tests', omnibus, {
|
||||
if: !openpgp.config.ci
|
||||
});
|
||||
|
||||
tryTests('X25519 Omnibus Tests - Worker', omnibus, {
|
||||
if: typeof window !== 'undefined' && window.Worker,
|
||||
before: async function() {
|
||||
await openpgp.initWorker({ path: '../dist/openpgp.worker.js' });
|
||||
},
|
||||
beforeEach: function() {
|
||||
openpgp.config.use_native = true;
|
||||
},
|
||||
after: function() {
|
||||
openpgp.destroyWorker();
|
||||
}
|
||||
});
|
||||
|
|
|
@ -5,10 +5,6 @@
|
|||
<title>OpenPGPJS Unit Tests</title>
|
||||
<link rel="stylesheet" href="lib/mocha.css" />
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div id="mocha"></div>
|
||||
|
||||
<!-- libs -->
|
||||
<script src="../dist/openpgp.js"></script>
|
||||
<script src="lib/mocha.js"></script>
|
||||
|
@ -16,30 +12,15 @@
|
|||
mocha.setup('bdd');
|
||||
mocha.timeout(240000);
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="mocha"></div>
|
||||
|
||||
<script src="lib/unittests-bundle.js"></script>
|
||||
<script>
|
||||
var runner = mocha.run();
|
||||
|
||||
var failedTests = [];
|
||||
runner.on('end', function(){
|
||||
window.mochaResults = runner.stats;
|
||||
window.mochaResults.reports = failedTests;
|
||||
});
|
||||
|
||||
function logFailure(test, err) {
|
||||
var flattenTitles = function(test) {
|
||||
var titles = [];
|
||||
while (test.parent.title) {
|
||||
titles.push(test.parent.title);
|
||||
test = test.parent;
|
||||
}
|
||||
return titles.reverse();
|
||||
};
|
||||
|
||||
failedTests.push({name: test.title, result: false, message: err.message, stack: err.stack, titles: flattenTitles(test)});
|
||||
};
|
||||
|
||||
runner.on('fail', logFailure);
|
||||
if (typeof openpgp !== 'undefined') {
|
||||
mocha.run();
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -40,7 +40,7 @@ describe('Unit Tests', function () {
|
|||
|
||||
afterEach(function () {
|
||||
if (window.scrollY >= document.body.scrollHeight - window.innerHeight - 100
|
||||
|| openpgp.config.saucelabs) {
|
||||
|| openpgp.config.ci) {
|
||||
window.scrollTo(0, document.body.scrollHeight);
|
||||
}
|
||||
});
|
||||
|
@ -48,7 +48,10 @@ describe('Unit Tests', function () {
|
|||
window.location.search.substr(1).split('&').forEach(param => {
|
||||
const [key, value] = param.split('=');
|
||||
if (key && key !== 'grep') {
|
||||
openpgp.config[key] = JSON.parse(value);
|
||||
openpgp.config[key] = decodeURIComponent(value);
|
||||
try {
|
||||
openpgp.config[key] = JSON.parse(openpgp.config[key]);
|
||||
} catch(e) {}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
56
travis.sh
56
travis.sh
|
@ -11,30 +11,50 @@ elif [ $OPENPGPJSTEST = "unit" ]; then
|
|||
echo "Running OpenPGP.js unit tests on node.js."
|
||||
npm test
|
||||
|
||||
elif [ $OPENPGPJSTEST = "saucelabs" ]; then
|
||||
echo "Running OpenPGP.js browser unit tests on Saucelabs."
|
||||
elif [ $OPENPGPJSTEST = "browserstack" ]; then
|
||||
echo "Running OpenPGP.js browser unit tests on Browserstack."
|
||||
|
||||
export SELENIUM_BROWSER_CAPABILITIES="{\"browserName\":\"$BROWSER\", \"version\":\"$VERSION\", \"platform\":\"$PLATFORM\", \"extendedDebugging\":true}"
|
||||
echo "SELENIUM_BROWSER_CAPABILITIES='$SELENIUM_BROWSER_CAPABILITIES'"
|
||||
grunt saucelabs --compat=$COMPAT &
|
||||
background_process_pid=$!
|
||||
grunt build browserify:unittests copy:browsertest --compat=$COMPAT
|
||||
echo -n "Using config: "
|
||||
echo "{\"browsers\": [$BROWSER], \"test_framework\": \"mocha\", \"test_path\": [\"test/unittests.html?ci=true\"], \"timeout\": 1800, \"exit_with_fail\": true, \"project\": \"openpgpjs/${TRAVIS_EVENT_TYPE:-push}${COMPAT:+/compat}\"}" > browserstack.json
|
||||
cat browserstack.json
|
||||
|
||||
# https://github.com/travis-ci/travis-ci/issues/4190
|
||||
minutes=0
|
||||
limit=30
|
||||
while kill -0 $background_process_pid >/dev/null 2>&1; do
|
||||
echo -n -e " \b" # never leave evidences!
|
||||
result=0
|
||||
count=1
|
||||
while [ $count -le 3 ]; do
|
||||
[ $result -ne 0 ] && {
|
||||
echo -e "\nThe command failed. Retrying, $count of 3.\n" >&2
|
||||
}
|
||||
|
||||
if [ $minutes == $limit ]; then
|
||||
exit 1
|
||||
fi
|
||||
browserstack-runner &
|
||||
background_process_pid=$!
|
||||
|
||||
minutes=$((minutes+1))
|
||||
# https://github.com/travis-ci/travis-ci/issues/4190
|
||||
seconds=0
|
||||
limit=2000
|
||||
while kill -0 $background_process_pid >/dev/null 2>&1; do
|
||||
echo -n -e " \b" # never leave evidences!
|
||||
|
||||
sleep 60
|
||||
if [ $seconds == $limit ]; then
|
||||
echo -e "\nThe tests timed out.\n" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
seconds=$((seconds+1))
|
||||
|
||||
sleep 1
|
||||
done
|
||||
|
||||
wait $background_process_pid && { result=0 && break; } || result=$?
|
||||
|
||||
[ $result -eq 0 ] && break
|
||||
[ $seconds -gt 10 ] && break # If the tests took <10 seconds, assume they failed to launch and try again.
|
||||
count=$(($count + 1))
|
||||
done
|
||||
|
||||
wait $background_process_pid
|
||||
[ $count -gt 3 ] && {
|
||||
echo -e "\nThe command failed 3 times.\n" >&2
|
||||
}
|
||||
|
||||
exit $? # were comes the status of the background_process :)
|
||||
exit $result
|
||||
fi
|
||||
|
|
Loading…
Reference in New Issue
Block a user