@corellium/corellium-cli 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -16
- package/docs/OVERVIEW.md +2 -2
- package/example/WebPlayerSample.js +93 -37
- package/jenkinsbuild/build.sh +1 -1
- package/node_modules/@babel/cli/node_modules/commander/package.json +27 -58
- package/node_modules/@babel/cli/node_modules/make-dir/package.json +62 -93
- package/node_modules/@babel/cli/node_modules/pify/package.json +54 -85
- package/node_modules/@babel/cli/node_modules/semver/package.json +20 -51
- package/node_modules/@babel/cli/node_modules/slash/package.json +37 -68
- package/node_modules/@babel/cli/package.json +37 -69
- package/node_modules/@corellium/client-api/package.json +15 -40
- package/node_modules/@jridgewell/resolve-uri/package.json +40 -75
- package/node_modules/@jridgewell/sourcemap-codec/package.json +43 -74
- package/node_modules/@jridgewell/trace-mapping/package.json +40 -72
- package/node_modules/@mapbox/node-pre-gyp/package.json +27 -61
- package/node_modules/@nicolo-ribaudo/chokidar-2/package.json +22 -55
- package/node_modules/abbrev/package.json +18 -52
- package/node_modules/agent-base/package.json +33 -62
- package/node_modules/ansi-regex/package.json +58 -89
- package/node_modules/ansi-styles/package.json +59 -95
- package/node_modules/anymatch/package.json +28 -56
- package/node_modules/aproba/package.json +23 -50
- package/node_modules/are-we-there-yet/node_modules/readable-stream/package.json +32 -60
- package/node_modules/are-we-there-yet/package.json +32 -62
- package/node_modules/ascii-art/package.json +51 -83
- package/node_modules/ascii-art-ansi/package.json +30 -61
- package/node_modules/ascii-art-braille/package.json +7 -32
- package/node_modules/ascii-art-font/package.json +17 -47
- package/node_modules/ascii-art-graph/package.json +10 -34
- package/node_modules/ascii-art-image/node_modules/ascii-art-braille/package.json +7 -32
- package/node_modules/ascii-art-image/package.json +11 -36
- package/node_modules/ascii-art-table/package.json +10 -35
- package/node_modules/ascii-art-utf/package.json +18 -47
- package/node_modules/async/package.json +29 -55
- package/node_modules/async-arrays/package.json +34 -62
- package/node_modules/asynckit/package.json +45 -74
- package/node_modules/axios/package.json +46 -72
- package/node_modules/balanced-match/package.json +22 -49
- package/node_modules/binary-extensions/package.json +41 -73
- package/node_modules/brace-expansion/package.json +23 -50
- package/node_modules/braces/package.json +30 -76
- package/node_modules/call-bind/package.json +83 -125
- package/node_modules/canvas/package.json +43 -86
- package/node_modules/chokidar/package.json +40 -74
- package/node_modules/chownr/package.json +24 -56
- package/node_modules/cli/package.json +23 -70
- package/node_modules/cliui/package.json +53 -87
- package/node_modules/color/node_modules/color-convert/package.json +26 -60
- package/node_modules/color/node_modules/color-name/package.json +18 -45
- package/node_modules/color/package.json +26 -57
- package/node_modules/color-convert/package.json +25 -59
- package/node_modules/color-difference/package.json +26 -52
- package/node_modules/color-model/package.json +17 -44
- package/node_modules/color-name/package.json +32 -60
- package/node_modules/color-string/package.json +26 -67
- package/node_modules/color-support/package.json +26 -60
- package/node_modules/combined-stream/package.json +19 -52
- package/node_modules/component-emitter/package.json +17 -45
- package/node_modules/concat-map/package.json +45 -89
- package/node_modules/console-control-strings/package.json +22 -55
- package/node_modules/convert-source-map/package.json +28 -55
- package/node_modules/cookiejar/package.json +16 -44
- package/node_modules/core-util-is/package.json +21 -51
- package/node_modules/d3/package.json +43 -70
- package/node_modules/d3-array/package.json +24 -55
- package/node_modules/d3-axis/package.json +27 -54
- package/node_modules/d3-brush/package.json +33 -60
- package/node_modules/d3-chord/package.json +28 -55
- package/node_modules/d3-collection/package.json +25 -54
- package/node_modules/d3-color/package.json +2 -2
- package/node_modules/d3-contour/package.json +27 -54
- package/node_modules/d3-dispatch/package.json +28 -60
- package/node_modules/d3-drag/package.json +32 -61
- package/node_modules/d3-dsv/node_modules/commander/package.json +25 -56
- package/node_modules/d3-dsv/package.json +36 -64
- package/node_modules/d3-ease/package.json +28 -56
- package/node_modules/d3-fetch/package.json +31 -58
- package/node_modules/d3-force/package.json +30 -57
- package/node_modules/d3-format/package.json +29 -57
- package/node_modules/d3-geo/package.json +35 -62
- package/node_modules/d3-hierarchy/package.json +33 -60
- package/node_modules/d3-interpolate/package.json +31 -63
- package/node_modules/d3-path/package.json +28 -57
- package/node_modules/d3-polygon/package.json +28 -55
- package/node_modules/d3-quadtree/package.json +29 -57
- package/node_modules/d3-random/package.json +26 -53
- package/node_modules/d3-scale/package.json +29 -56
- package/node_modules/d3-scale-chromatic/package.json +33 -60
- package/node_modules/d3-selection/package.json +29 -60
- package/node_modules/d3-shape/package.json +32 -59
- package/node_modules/d3-time/package.json +28 -57
- package/node_modules/d3-time-format/package.json +33 -61
- package/node_modules/d3-timer/package.json +28 -57
- package/node_modules/d3-transition/package.json +35 -64
- package/node_modules/d3-voronoi/package.json +24 -51
- package/node_modules/d3-zoom/package.json +34 -61
- package/node_modules/debug/package.json +37 -87
- package/node_modules/decompress-response/package.json +53 -84
- package/node_modules/delayed-stream/package.json +19 -53
- package/node_modules/delegates/package.json +11 -45
- package/node_modules/detect-libc/package.json +26 -60
- package/node_modules/dirname-shim/package.json +26 -60
- package/node_modules/dotenv/package.json +37 -64
- package/node_modules/duplexer/package.json +18 -49
- package/node_modules/emoji-regex/package.json +32 -58
- package/node_modules/escalade/package.json +28 -59
- package/node_modules/extended-emitter/package.json +37 -65
- package/node_modules/fast-safe-stringify/package.json +33 -73
- package/node_modules/fill-range/package.json +28 -72
- package/node_modules/follow-redirects/package.json +42 -77
- package/node_modules/form-data/package.json +42 -74
- package/node_modules/formidable/package.json +22 -52
- package/node_modules/fs-minipass/package.json +24 -52
- package/node_modules/fs-readdir-recursive/package.json +20 -50
- package/node_modules/fs.realpath/package.json +21 -53
- package/node_modules/fsevents/package.json +38 -63
- package/node_modules/ftp-response-parser/node_modules/isarray/package.json +22 -54
- package/node_modules/ftp-response-parser/node_modules/readable-stream/package.json +22 -55
- package/node_modules/ftp-response-parser/node_modules/string_decoder/package.json +17 -45
- package/node_modules/ftp-response-parser/package.json +23 -64
- package/node_modules/function-bind/package.json +28 -61
- package/node_modules/gauge/package.json +25 -52
- package/node_modules/generate-password/package.json +28 -54
- package/node_modules/get-caller-file/package.json +27 -53
- package/node_modules/get-intrinsic/package.json +91 -124
- package/node_modules/glob/package.json +34 -68
- package/node_modules/glob-parent/package.json +27 -70
- package/node_modules/has/package.json +26 -55
- package/node_modules/has-symbols/package.json +104 -133
- package/node_modules/has-unicode/package.json +25 -52
- package/node_modules/https-proxy-agent/package.json +30 -59
- package/node_modules/iconv-lite/package.json +48 -77
- package/node_modules/inflight/package.json +20 -48
- package/node_modules/inherits/package.json +17 -54
- package/node_modules/is-binary-path/package.json +43 -75
- package/node_modules/is-extglob/package.json +22 -52
- package/node_modules/is-fullwidth-code-point/package.json +45 -79
- package/node_modules/is-glob/package.json +26 -68
- package/node_modules/is-number/package.json +26 -65
- package/node_modules/jsftp/node_modules/debug/package.json +28 -67
- package/node_modules/jsftp/package.json +22 -59
- package/node_modules/json2csv/node_modules/commander/package.json +25 -56
- package/node_modules/json2csv/package.json +37 -64
- package/node_modules/jsonparse/package.json +18 -53
- package/node_modules/lodash/package.json +15 -61
- package/node_modules/lodash.get/package.json +16 -67
- package/node_modules/lru-cache/package.json +27 -61
- package/node_modules/make-dir/node_modules/semver/package.json +20 -51
- package/node_modules/make-dir/package.json +62 -93
- package/node_modules/maplex/package.json +22 -54
- package/node_modules/methods/package.json +22 -64
- package/node_modules/mime/package.json +20 -48
- package/node_modules/mime-db/package.json +25 -67
- package/node_modules/mime-types/package.json +20 -64
- package/node_modules/mimic-response/package.json +45 -76
- package/node_modules/minimatch/package.json +25 -61
- package/node_modules/minipass/package.json +30 -64
- package/node_modules/minizlib/package.json +27 -59
- package/node_modules/mkdirp/package.json +27 -57
- package/node_modules/ms/package.json +24 -58
- package/node_modules/multi-progress/package.json +20 -46
- package/node_modules/nan/package.json +27 -87
- package/node_modules/node-fetch/package.json +77 -104
- package/node_modules/nopt/package.json +22 -54
- package/node_modules/normalize-path/package.json +25 -63
- package/node_modules/npmlog/package.json +23 -55
- package/node_modules/object-assign/package.json +20 -51
- package/node_modules/object-inspect/package.json +53 -81
- package/node_modules/once/package.json +19 -56
- package/node_modules/parse-listing/package.json +27 -56
- package/node_modules/path-is-absolute/package.json +16 -47
- package/node_modules/picomatch/package.json +28 -60
- package/node_modules/progress/package.json +21 -65
- package/node_modules/qs/package.json +78 -105
- package/node_modules/readdirp/package.json +47 -83
- package/node_modules/require-directory/package.json +29 -57
- package/node_modules/rimraf/package.json +23 -61
- package/node_modules/rw/package.json +19 -46
- package/node_modules/safe-buffer/package.json +10 -38
- package/node_modules/safer-buffer/package.json +18 -43
- package/node_modules/semver/package.json +36 -70
- package/node_modules/set-blocking/package.json +29 -56
- package/node_modules/side-channel/package.json +70 -98
- package/node_modules/sift/package.json +30 -62
- package/node_modules/signal-exit/package.json +29 -58
- package/node_modules/simple-concat/package.json +22 -46
- package/node_modules/simple-get/package.json +9 -33
- package/node_modules/simple-swizzle/node_modules/is-arrayish/package.json +28 -59
- package/node_modules/simple-swizzle/package.json +23 -57
- package/node_modules/strangler/package.json +39 -67
- package/node_modules/stream-combiner/package.json +15 -48
- package/node_modules/string-tools/package.json +16 -50
- package/node_modules/string-width/package.json +59 -97
- package/node_modules/string_decoder/package.json +18 -47
- package/node_modules/strip-ansi/package.json +57 -94
- package/node_modules/superagent/node_modules/form-data/package.json +42 -74
- package/node_modules/superagent/node_modules/readable-stream/package.json +32 -60
- package/node_modules/superagent/package.json +13 -59
- package/node_modules/tar/package.json +27 -59
- package/node_modules/through/package.json +17 -50
- package/node_modules/to-regex-range/package.json +25 -61
- package/node_modules/tr46/package.json +24 -51
- package/node_modules/unorm/package.json +34 -75
- package/node_modules/util-deprecate/package.json +19 -49
- package/node_modules/uuid/package.json +74 -102
- package/node_modules/webidl-conversions/package.json +18 -53
- package/node_modules/whatwg-url/package.json +15 -49
- package/node_modules/wide-align/package.json +21 -53
- package/node_modules/wolfy87-eventemitter/package.json +25 -49
- package/node_modules/wrap-ansi/package.json +65 -97
- package/node_modules/wrappy/package.json +21 -50
- package/node_modules/y18n/package.json +43 -73
- package/node_modules/yallist/package.json +20 -55
- package/node_modules/yargs/package.json +72 -99
- package/node_modules/yargs-parser/package.json +52 -83
- package/package.json +2 -3
- package/src/TrialAccount.js +76 -0
- package/src/commands/agent/Agent.js +10 -19
- package/src/commands/agent/index.js +1 -0
- package/src/commands/agent/ready.js +42 -0
- package/src/commands/instances/list.js +8 -3
- package/src/commands/signup.js +14 -5
- package/src/commands/webplayer/WebPlayer.js +2 -1
- package/src/commands/webplayer/create.js +6 -0
- package/src/commands/webplayer/list.js +17 -16
- package/src/logging.js +1 -1
- package/src/profile.js +12 -9
- package/src/resumable.js +1314 -0
- package/src/table.js +7 -2
- package/src/upload.js +64 -2
- package/test/test.js +89 -0
- package/node_modules/@corellium/corellium-api/README.md +0 -1210
- package/node_modules/@corellium/corellium-api/node_modules/form-data/License +0 -19
- package/node_modules/@corellium/corellium-api/node_modules/form-data/README.md.bak +0 -356
- package/node_modules/@corellium/corellium-api/node_modules/form-data/Readme.md +0 -356
- package/node_modules/@corellium/corellium-api/node_modules/form-data/index.d.ts +0 -62
- package/node_modules/@corellium/corellium-api/node_modules/form-data/lib/browser.js +0 -2
- package/node_modules/@corellium/corellium-api/node_modules/form-data/lib/form_data.js +0 -498
- package/node_modules/@corellium/corellium-api/node_modules/form-data/lib/populate.js +0 -10
- package/node_modules/@corellium/corellium-api/node_modules/form-data/package.json +0 -104
- package/node_modules/@corellium/corellium-api/node_modules/uuid/AUTHORS +0 -5
- package/node_modules/@corellium/corellium-api/node_modules/uuid/CHANGELOG.md +0 -119
- package/node_modules/@corellium/corellium-api/node_modules/uuid/LICENSE.md +0 -21
- package/node_modules/@corellium/corellium-api/node_modules/uuid/README.md +0 -276
- package/node_modules/@corellium/corellium-api/node_modules/uuid/bin/uuid +0 -65
- package/node_modules/@corellium/corellium-api/node_modules/uuid/index.js +0 -8
- package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/bytesToUuid.js +0 -26
- package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/md5-browser.js +0 -216
- package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/md5.js +0 -25
- package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/rng-browser.js +0 -34
- package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/rng.js +0 -8
- package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/sha1-browser.js +0 -89
- package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/sha1.js +0 -25
- package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/v35.js +0 -57
- package/node_modules/@corellium/corellium-api/node_modules/uuid/package.json +0 -103
- package/node_modules/@corellium/corellium-api/node_modules/uuid/v1.js +0 -109
- package/node_modules/@corellium/corellium-api/node_modules/uuid/v3.js +0 -4
- package/node_modules/@corellium/corellium-api/node_modules/uuid/v4.js +0 -29
- package/node_modules/@corellium/corellium-api/node_modules/uuid/v5.js +0 -3
- package/node_modules/@corellium/corellium-api/package.json +0 -106
- package/node_modules/@corellium/corellium-api/resumable.js +0 -1312
- package/node_modules/@corellium/corellium-api/src/agent.js +0 -962
- package/node_modules/@corellium/corellium-api/src/corellium.js +0 -444
- package/node_modules/@corellium/corellium-api/src/images.js +0 -131
- package/node_modules/@corellium/corellium-api/src/input.js +0 -178
- package/node_modules/@corellium/corellium-api/src/instance-updater.js +0 -56
- package/node_modules/@corellium/corellium-api/src/instance.js +0 -1031
- package/node_modules/@corellium/corellium-api/src/netmon.js +0 -308
- package/node_modules/@corellium/corellium-api/src/project.js +0 -393
- package/node_modules/@corellium/corellium-api/src/role.js +0 -65
- package/node_modules/@corellium/corellium-api/src/snapshot.js +0 -77
- package/node_modules/@corellium/corellium-api/src/team.js +0 -29
- package/node_modules/@corellium/corellium-api/src/user.js +0 -51
- package/node_modules/@corellium/corellium-api/src/util/fetch.js +0 -62
- package/node_modules/@corellium/corellium-api/src/util/sleep.js +0 -7
- package/node_modules/@corellium/corellium-api/test/integration-tests.js +0 -1292
- package/node_modules/@corellium/corellium-api/test/root-hook-set-flag-if-test-failed.js +0 -7
- package/node_modules/async-limiter/.eslintignore +0 -2
- package/node_modules/async-limiter/.nycrc +0 -10
- package/node_modules/async-limiter/.travis.yml +0 -9
- package/node_modules/async-limiter/LICENSE +0 -8
- package/node_modules/async-limiter/index.js +0 -67
- package/node_modules/async-limiter/package.json +0 -72
- package/node_modules/async-limiter/readme.md +0 -132
- package/node_modules/buffer-crc32/LICENSE +0 -19
- package/node_modules/buffer-crc32/README.md +0 -47
- package/node_modules/buffer-crc32/index.js +0 -111
- package/node_modules/buffer-crc32/package.json +0 -72
- package/node_modules/cross-fetch/LICENSE +0 -21
- package/node_modules/cross-fetch/README.md +0 -169
- package/node_modules/cross-fetch/dist/browser-polyfill.js +0 -532
- package/node_modules/cross-fetch/dist/browser-ponyfill.js +0 -554
- package/node_modules/cross-fetch/dist/cross-fetch.js +0 -2
- package/node_modules/cross-fetch/dist/cross-fetch.js.map +0 -1
- package/node_modules/cross-fetch/dist/node-polyfill.js +0 -11
- package/node_modules/cross-fetch/dist/node-ponyfill.js +0 -22
- package/node_modules/cross-fetch/dist/react-native-polyfill.js +0 -12
- package/node_modules/cross-fetch/dist/react-native-ponyfill.js +0 -6
- package/node_modules/cross-fetch/index.d.ts +0 -14
- package/node_modules/cross-fetch/package.json +0 -160
- package/node_modules/cross-fetch/polyfill/package.json +0 -8
- package/node_modules/duplexify/.travis.yml +0 -6
- package/node_modules/duplexify/LICENSE +0 -21
- package/node_modules/duplexify/README.md +0 -97
- package/node_modules/duplexify/example.js +0 -21
- package/node_modules/duplexify/index.js +0 -234
- package/node_modules/duplexify/package.json +0 -69
- package/node_modules/duplexify/test.js +0 -295
- package/node_modules/end-of-stream/LICENSE +0 -21
- package/node_modules/end-of-stream/README.md +0 -54
- package/node_modules/end-of-stream/index.js +0 -94
- package/node_modules/end-of-stream/package.json +0 -69
- package/node_modules/fast-stable-stringify/.npmignore +0 -4
- package/node_modules/fast-stable-stringify/.travis.yml +0 -10
- package/node_modules/fast-stable-stringify/LICENSE +0 -21
- package/node_modules/fast-stable-stringify/README.md +0 -81
- package/node_modules/fast-stable-stringify/cli/files-to-comparison-results.js +0 -67
- package/node_modules/fast-stable-stringify/cli/format-table.js +0 -70
- package/node_modules/fast-stable-stringify/cli/index.js +0 -19
- package/node_modules/fast-stable-stringify/fixtures/index.js +0 -5
- package/node_modules/fast-stable-stringify/fixtures/input-data-types.js +0 -191
- package/node_modules/fast-stable-stringify/fixtures/log-result.json +0 -22
- package/node_modules/fast-stable-stringify/fixtures/log.txt +0 -24
- package/node_modules/fast-stable-stringify/index.js +0 -73
- package/node_modules/fast-stable-stringify/karma.conf.js +0 -124
- package/node_modules/fast-stable-stringify/karma.conf.travis.js +0 -95
- package/node_modules/fast-stable-stringify/package.json +0 -77
- package/node_modules/fast-stable-stringify/results/escape-long/Chrome 60.0.3112 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-long/Chrome Mobile 55.0.2883 (Android 6.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-long/Edge 14.14393.0 (Windows 10 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-long/Firefox 54.0.0 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-long/IE 10.0.0 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-long/IE 11.0.0 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-long/IE 9.0.0 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-long/Mobile Safari 10.0.0 (iOS 10.3.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-long/Safari 10.0.1 (Mac OS X 10.12.1).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-short/Chrome 60.0.3112 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-short/Chrome Mobile 55.0.2883 (Android 6.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-short/Edge 14.14393.0 (Windows 10 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-short/Firefox 54.0.0 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-short/IE 10.0.0 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-short/IE 11.0.0 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-short/IE 9.0.0 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-short/Mobile Safari 10.0.0 (iOS 10.3.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-short/Safari 10.0.1 (Mac OS X 10.12.1).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape.md +0 -20
- package/node_modules/fast-stable-stringify/results/itar-long/Chrome 60.0.3112 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-long/Chrome Mobile 55.0.2883 (Android 6.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-long/Edge 14.14393.0 (Windows 10 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-long/Firefox 54.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-long/IE 10.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-long/IE 11.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-long/IE 9.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-long/Mobile Safari 10.0.0 (iOS 10.3.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-long/Safari 10.0.1 (Mac OS X 10.12.1).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-short/Chrome 60.0.3112 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-short/Chrome Mobile 55.0.2883 (Android 6.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-short/Edge 14.14393.0 (Windows 10 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-short/Firefox 54.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-short/IE 10.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-short/IE 11.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-short/IE 9.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-short/Mobile Safari 10.0.0 (iOS 10.3.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-short/Safari 10.0.1 (Mac OS X 10.12.1).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar.md +0 -20
- package/node_modules/fast-stable-stringify/results/iter/Chrome 60.0.3112 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/Chrome Mobile 39.0.0 (Android 5.1.1).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/Chrome Mobile 55.0.2883 (Android 6.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/Edge 14.14393.0 (Windows 10 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/Firefox 54.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/IE 10.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/IE 11.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/IE 9.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/Mobile Safari 10.0.0 (iOS 10.3.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/Mobile Safari 9.0.0 (iOS 9.2.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/Safari 10.0.1 (Mac OS X 10.12.1).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/Safari 9.1.2 (Mac OS X 10.11.6).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter.md +0 -14
- package/node_modules/fast-stable-stringify/results/libs/Chrome 60.0.3112 (Windows 7 0.0.0).json +0 -46
- package/node_modules/fast-stable-stringify/results/libs/Chrome Mobile 55.0.2883 (Android 6.0.0).json +0 -46
- package/node_modules/fast-stable-stringify/results/libs/Edge 14.14393.0 (Windows 10 0.0.0).json +0 -46
- package/node_modules/fast-stable-stringify/results/libs/Firefox 54.0.0 (Windows 7 0.0.0).json +0 -46
- package/node_modules/fast-stable-stringify/results/libs/IE 10.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/libs/IE 11.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/libs/IE 9.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/libs/Mobile Safari 10.0.0 (iOS 10.3.0).json +0 -46
- package/node_modules/fast-stable-stringify/results/libs/Safari 10.0.1 (Mac OS X 10.12.1).json +0 -46
- package/node_modules/fast-stable-stringify/results/libs.md +0 -15
- package/node_modules/fast-stable-stringify/test/escape-long.js +0 -147
- package/node_modules/fast-stable-stringify/test/escape-short.js +0 -147
- package/node_modules/fast-stable-stringify/test/index.js +0 -6
- package/node_modules/fast-stable-stringify/test/itar-long.js +0 -52
- package/node_modules/fast-stable-stringify/test/itar-short.js +0 -52
- package/node_modules/fast-stable-stringify/test/iter.js +0 -84
- package/node_modules/fast-stable-stringify/test/libs.js +0 -57
- package/node_modules/fast-stable-stringify/test/travis.js +0 -43
- package/node_modules/fast-stable-stringify/test/validate.js +0 -24
- package/node_modules/fast-stable-stringify/util/eachRecursive.js +0 -9
- package/node_modules/fast-stable-stringify/util/get-git-hash-sync.js +0 -21
- package/node_modules/fast-stable-stringify/util/get-lib-info.js +0 -22
- package/node_modules/fast-stable-stringify/util/object-path.js +0 -47
- package/node_modules/fast-stable-stringify/v8-profile/bench.js +0 -8
- package/node_modules/fast-stable-stringify/v8-profile/run.sh +0 -2
- package/node_modules/fast-stable-stringify/zuul-local.sh +0 -2
- package/node_modules/hkdf/.npmignore +0 -2
- package/node_modules/hkdf/README.md +0 -23
- package/node_modules/hkdf/hkdf.py +0 -171
- package/node_modules/hkdf/hkdf.pyc +0 -0
- package/node_modules/hkdf/index.js +0 -1
- package/node_modules/hkdf/lib/hkdf.js +0 -55
- package/node_modules/hkdf/package.json +0 -55
- package/node_modules/hkdf/scripts/run_all_tests.sh +0 -19
- package/node_modules/hkdf/test/all-test.js +0 -79
- package/node_modules/hkdf/test.py +0 -11
- package/node_modules/immediate/LICENSE.txt +0 -20
- package/node_modules/immediate/README.md +0 -93
- package/node_modules/immediate/dist/immediate.js +0 -75
- package/node_modules/immediate/dist/immediate.min.js +0 -1
- package/node_modules/immediate/lib/browser.js +0 -69
- package/node_modules/immediate/lib/index.js +0 -73
- package/node_modules/immediate/package.json +0 -86
- package/node_modules/isarray/.npmignore +0 -1
- package/node_modules/isarray/.travis.yml +0 -4
- package/node_modules/isarray/Makefile +0 -6
- package/node_modules/isarray/README.md +0 -60
- package/node_modules/isarray/component.json +0 -19
- package/node_modules/isarray/index.js +0 -5
- package/node_modules/isarray/package.json +0 -77
- package/node_modules/isarray/test.js +0 -20
- package/node_modules/jszip/.codeclimate.yml +0 -16
- package/node_modules/jszip/.editorconfig +0 -8
- package/node_modules/jszip/.github/workflows/pr.yaml +0 -41
- package/node_modules/jszip/.jshintignore +0 -1
- package/node_modules/jszip/.jshintrc +0 -21
- package/node_modules/jszip/.travis.yml +0 -17
- package/node_modules/jszip/CHANGES.md +0 -192
- package/node_modules/jszip/LICENSE.markdown +0 -651
- package/node_modules/jszip/README.markdown +0 -33
- package/node_modules/jszip/dist/jszip.js +0 -11583
- package/node_modules/jszip/dist/jszip.min.js +0 -13
- package/node_modules/jszip/index.d.ts +0 -335
- package/node_modules/jszip/lib/base64.js +0 -106
- package/node_modules/jszip/lib/compressedObject.js +0 -74
- package/node_modules/jszip/lib/compressions.js +0 -14
- package/node_modules/jszip/lib/crc32.js +0 -77
- package/node_modules/jszip/lib/defaults.js +0 -11
- package/node_modules/jszip/lib/external.js +0 -19
- package/node_modules/jszip/lib/flate.js +0 -85
- package/node_modules/jszip/lib/generate/ZipFileWorker.js +0 -540
- package/node_modules/jszip/lib/generate/index.js +0 -57
- package/node_modules/jszip/lib/index.js +0 -55
- package/node_modules/jszip/lib/license_header.js +0 -11
- package/node_modules/jszip/lib/load.js +0 -88
- package/node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js +0 -74
- package/node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js +0 -42
- package/node_modules/jszip/lib/nodejsUtils.js +0 -57
- package/node_modules/jszip/lib/object.js +0 -389
- package/node_modules/jszip/lib/readable-stream-browser.js +0 -9
- package/node_modules/jszip/lib/reader/ArrayReader.js +0 -57
- package/node_modules/jszip/lib/reader/DataReader.js +0 -116
- package/node_modules/jszip/lib/reader/NodeBufferReader.js +0 -19
- package/node_modules/jszip/lib/reader/StringReader.js +0 -38
- package/node_modules/jszip/lib/reader/Uint8ArrayReader.js +0 -22
- package/node_modules/jszip/lib/reader/readerFor.js +0 -28
- package/node_modules/jszip/lib/signature.js +0 -7
- package/node_modules/jszip/lib/stream/ConvertWorker.js +0 -26
- package/node_modules/jszip/lib/stream/Crc32Probe.js +0 -24
- package/node_modules/jszip/lib/stream/DataLengthProbe.js +0 -29
- package/node_modules/jszip/lib/stream/DataWorker.js +0 -116
- package/node_modules/jszip/lib/stream/GenericWorker.js +0 -263
- package/node_modules/jszip/lib/stream/StreamHelper.js +0 -212
- package/node_modules/jszip/lib/support.js +0 -38
- package/node_modules/jszip/lib/utf8.js +0 -275
- package/node_modules/jszip/lib/utils.js +0 -501
- package/node_modules/jszip/lib/zipEntries.js +0 -262
- package/node_modules/jszip/lib/zipEntry.js +0 -294
- package/node_modules/jszip/lib/zipObject.js +0 -133
- package/node_modules/jszip/package.json +0 -99
- package/node_modules/jszip/tsconfig.json +0 -101
- package/node_modules/jszip/vendor/FileSaver.js +0 -247
- package/node_modules/lie/README.md +0 -62
- package/node_modules/lie/dist/lie.js +0 -350
- package/node_modules/lie/dist/lie.min.js +0 -1
- package/node_modules/lie/dist/lie.polyfill.js +0 -358
- package/node_modules/lie/dist/lie.polyfill.min.js +0 -1
- package/node_modules/lie/lib/browser.js +0 -273
- package/node_modules/lie/lib/index.js +0 -298
- package/node_modules/lie/license.md +0 -7
- package/node_modules/lie/lie.d.ts +0 -244
- package/node_modules/lie/package.json +0 -98
- package/node_modules/lie/polyfill.js +0 -4
- package/node_modules/p-finally/index.js +0 -15
- package/node_modules/p-finally/license +0 -21
- package/node_modules/p-finally/package.json +0 -77
- package/node_modules/p-finally/readme.md +0 -47
- package/node_modules/p-retry/index.js +0 -52
- package/node_modules/p-retry/license +0 -9
- package/node_modules/p-retry/package.json +0 -83
- package/node_modules/p-retry/readme.md +0 -109
- package/node_modules/p-timeout/index.d.ts +0 -72
- package/node_modules/p-timeout/index.js +0 -57
- package/node_modules/p-timeout/license +0 -9
- package/node_modules/p-timeout/package.json +0 -80
- package/node_modules/p-timeout/readme.md +0 -87
- package/node_modules/pako/CHANGELOG.md +0 -164
- package/node_modules/pako/LICENSE +0 -21
- package/node_modules/pako/README.md +0 -191
- package/node_modules/pako/dist/pako.js +0 -6818
- package/node_modules/pako/dist/pako.min.js +0 -1
- package/node_modules/pako/dist/pako_deflate.js +0 -3997
- package/node_modules/pako/dist/pako_deflate.min.js +0 -1
- package/node_modules/pako/dist/pako_inflate.js +0 -3300
- package/node_modules/pako/dist/pako_inflate.min.js +0 -1
- package/node_modules/pako/index.js +0 -14
- package/node_modules/pako/lib/deflate.js +0 -400
- package/node_modules/pako/lib/inflate.js +0 -423
- package/node_modules/pako/lib/utils/common.js +0 -105
- package/node_modules/pako/lib/utils/strings.js +0 -187
- package/node_modules/pako/lib/zlib/README +0 -59
- package/node_modules/pako/lib/zlib/adler32.js +0 -51
- package/node_modules/pako/lib/zlib/constants.js +0 -68
- package/node_modules/pako/lib/zlib/crc32.js +0 -59
- package/node_modules/pako/lib/zlib/deflate.js +0 -1874
- package/node_modules/pako/lib/zlib/gzheader.js +0 -58
- package/node_modules/pako/lib/zlib/inffast.js +0 -345
- package/node_modules/pako/lib/zlib/inflate.js +0 -1556
- package/node_modules/pako/lib/zlib/inftrees.js +0 -343
- package/node_modules/pako/lib/zlib/messages.js +0 -32
- package/node_modules/pako/lib/zlib/trees.js +0 -1222
- package/node_modules/pako/lib/zlib/zstream.js +0 -47
- package/node_modules/pako/package.json +0 -94
- package/node_modules/process-nextick-args/index.js +0 -45
- package/node_modules/process-nextick-args/license.md +0 -19
- package/node_modules/process-nextick-args/package.json +0 -53
- package/node_modules/process-nextick-args/readme.md +0 -18
- package/node_modules/readable-stream/.travis.yml +0 -34
- package/node_modules/readable-stream/CONTRIBUTING.md +0 -38
- package/node_modules/readable-stream/GOVERNANCE.md +0 -136
- package/node_modules/readable-stream/LICENSE +0 -47
- package/node_modules/readable-stream/README.md +0 -58
- package/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +0 -60
- package/node_modules/readable-stream/duplex-browser.js +0 -1
- package/node_modules/readable-stream/duplex.js +0 -1
- package/node_modules/readable-stream/lib/_stream_duplex.js +0 -131
- package/node_modules/readable-stream/lib/_stream_passthrough.js +0 -47
- package/node_modules/readable-stream/lib/_stream_readable.js +0 -1019
- package/node_modules/readable-stream/lib/_stream_transform.js +0 -214
- package/node_modules/readable-stream/lib/_stream_writable.js +0 -687
- package/node_modules/readable-stream/lib/internal/streams/BufferList.js +0 -79
- package/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -74
- package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
- package/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
- package/node_modules/readable-stream/package.json +0 -86
- package/node_modules/readable-stream/passthrough.js +0 -1
- package/node_modules/readable-stream/readable-browser.js +0 -7
- package/node_modules/readable-stream/readable.js +0 -19
- package/node_modules/readable-stream/transform.js +0 -1
- package/node_modules/readable-stream/writable-browser.js +0 -1
- package/node_modules/readable-stream/writable.js +0 -8
- package/node_modules/retry/.npmignore +0 -3
- package/node_modules/retry/.travis.yml +0 -15
- package/node_modules/retry/License +0 -21
- package/node_modules/retry/Makefile +0 -18
- package/node_modules/retry/README.md +0 -227
- package/node_modules/retry/equation.gif +0 -0
- package/node_modules/retry/example/dns.js +0 -31
- package/node_modules/retry/example/stop.js +0 -40
- package/node_modules/retry/index.js +0 -1
- package/node_modules/retry/lib/retry.js +0 -100
- package/node_modules/retry/lib/retry_operation.js +0 -158
- package/node_modules/retry/package.json +0 -67
- package/node_modules/retry/test/common.js +0 -10
- package/node_modules/retry/test/integration/test-forever.js +0 -24
- package/node_modules/retry/test/integration/test-retry-operation.js +0 -258
- package/node_modules/retry/test/integration/test-retry-wrap.js +0 -101
- package/node_modules/retry/test/integration/test-timeouts.js +0 -69
- package/node_modules/setimmediate/LICENSE.txt +0 -20
- package/node_modules/setimmediate/package.json +0 -77
- package/node_modules/setimmediate/setImmediate.js +0 -186
- package/node_modules/split/.npmignore +0 -3
- package/node_modules/split/.travis.yml +0 -3
- package/node_modules/split/LICENCE +0 -22
- package/node_modules/split/examples/pretty.js +0 -26
- package/node_modules/split/index.js +0 -63
- package/node_modules/split/package.json +0 -65
- package/node_modules/split/readme.markdown +0 -72
- package/node_modules/split/test/options.asynct.js +0 -46
- package/node_modules/split/test/partitioned_unicode.js +0 -34
- package/node_modules/split/test/split.asynct.js +0 -137
- package/node_modules/split/test/try_catch.asynct.js +0 -51
- package/node_modules/stream-shift/.travis.yml +0 -6
- package/node_modules/stream-shift/LICENSE +0 -21
- package/node_modules/stream-shift/README.md +0 -25
- package/node_modules/stream-shift/index.js +0 -20
- package/node_modules/stream-shift/package.json +0 -56
- package/node_modules/stream-shift/test.js +0 -48
- package/node_modules/ultron/LICENSE +0 -22
- package/node_modules/ultron/README.md +0 -113
- package/node_modules/ultron/index.js +0 -136
- package/node_modules/ultron/package.json +0 -71
- package/node_modules/websocket-stream/LICENSE +0 -8
- package/node_modules/websocket-stream/collaborators.md +0 -11
- package/node_modules/websocket-stream/echo-server.js +0 -51
- package/node_modules/websocket-stream/index.d.ts +0 -27
- package/node_modules/websocket-stream/index.js +0 -6
- package/node_modules/websocket-stream/package.json +0 -82
- package/node_modules/websocket-stream/readme.md +0 -148
- package/node_modules/websocket-stream/server.js +0 -29
- package/node_modules/websocket-stream/stream.js +0 -189
- package/node_modules/websocket-stream/test-client.js +0 -74
- package/node_modules/websocket-stream/test-server.js +0 -56
- package/node_modules/websocket-stream/test.js +0 -338
- package/node_modules/websocket-stream/ts-tests.ts +0 -69
- package/node_modules/websocket-stream/ws-fallback.js +0 -12
- package/node_modules/ws/LICENSE +0 -21
- package/node_modules/ws/README.md +0 -341
- package/node_modules/ws/index.js +0 -15
- package/node_modules/ws/lib/.DS_Store +0 -0
- package/node_modules/ws/lib/BufferUtil.js +0 -71
- package/node_modules/ws/lib/Constants.js +0 -10
- package/node_modules/ws/lib/ErrorCodes.js +0 -28
- package/node_modules/ws/lib/EventTarget.js +0 -151
- package/node_modules/ws/lib/Extensions.js +0 -203
- package/node_modules/ws/lib/PerMessageDeflate.js +0 -507
- package/node_modules/ws/lib/Receiver.js +0 -553
- package/node_modules/ws/lib/Sender.js +0 -412
- package/node_modules/ws/lib/Validation.js +0 -17
- package/node_modules/ws/lib/WebSocket.js +0 -717
- package/node_modules/ws/lib/WebSocketServer.js +0 -326
- package/node_modules/ws/package.json +0 -83
- package/node_modules/xhr2/CONTRIBUTING.md +0 -33
- package/node_modules/xhr2/Cakefile +0 -131
- package/node_modules/xhr2/LICENSE.txt +0 -19
- package/node_modules/xhr2/README.md +0 -142
- package/node_modules/xhr2/lib/browser.js +0 -1
- package/node_modules/xhr2/lib/xhr2.js +0 -1244
- package/node_modules/xhr2/package.json +0 -103
- package/node_modules/xhr2/src/000-xml_http_request_event_target.coffee +0 -89
- package/node_modules/xhr2/src/001-xml_http_request.coffee +0 -781
- package/node_modules/xhr2/src/errors.coffee +0 -31
- package/node_modules/xhr2/src/progress_event.coffee +0 -39
- package/node_modules/xhr2/src/xml_http_request_upload.coffee +0 -95
- package/node_modules/xhr2/test/fixtures/hello.json +0 -1
- package/node_modules/xhr2/test/fixtures/hello.txt +0 -1
- package/node_modules/xhr2/test/fixtures/xhr2.png +0 -0
- package/node_modules/xhr2/test/html/browser_test.html +0 -30
- package/node_modules/xhr2/test/src/event_target_test.coffee +0 -85
- package/node_modules/xhr2/test/src/events_test.coffee +0 -204
- package/node_modules/xhr2/test/src/headers_test.coffee +0 -168
- package/node_modules/xhr2/test/src/helpers/browser_mocha_runner.coffee +0 -10
- package/node_modules/xhr2/test/src/helpers/browser_mocha_setup.coffee +0 -1
- package/node_modules/xhr2/test/src/helpers/setup.coffee +0 -38
- package/node_modules/xhr2/test/src/helpers/xhr_server.coffee +0 -156
- package/node_modules/xhr2/test/src/nodejs_set_test.coffee +0 -162
- package/node_modules/xhr2/test/src/redirect_test.coffee +0 -57
- package/node_modules/xhr2/test/src/response_type_test.coffee +0 -88
- package/node_modules/xhr2/test/src/responseurl_test.coffee +0 -18
- package/node_modules/xhr2/test/src/send_test.coffee +0 -89
- package/node_modules/xhr2/test/src/status_test.coffee +0 -47
- package/node_modules/xhr2/test/src/xhr_test.coffee +0 -102
- package/node_modules/xtend/.jshintrc +0 -30
- package/node_modules/xtend/LICENSE +0 -20
- package/node_modules/xtend/README.md +0 -32
- package/node_modules/xtend/immutable.js +0 -19
- package/node_modules/xtend/mutable.js +0 -17
- package/node_modules/xtend/package.json +0 -89
- package/node_modules/xtend/test.js +0 -103
- package/node_modules/yazl/LICENSE +0 -21
- package/node_modules/yazl/README.md +0 -389
- package/node_modules/yazl/index.js +0 -749
- package/node_modules/yazl/package.json +0 -69
- package/src/commands/CorelliumAPI.js +0 -76
- package/src/subscriberInvite.js +0 -140
|
@@ -1,1292 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const assert = require("assert");
|
|
4
|
-
const fs = require("fs");
|
|
5
|
-
const path = require("path");
|
|
6
|
-
const stream = require("stream");
|
|
7
|
-
|
|
8
|
-
const wtfnode = require("wtfnode");
|
|
9
|
-
|
|
10
|
-
const Corellium = require("../src/corellium").Corellium;
|
|
11
|
-
const { Input } = require("../src/input");
|
|
12
|
-
|
|
13
|
-
const CONFIGURATION = require("./config.json");
|
|
14
|
-
|
|
15
|
-
/** @typedef {import('../src/instance.js')} Instance */
|
|
16
|
-
/** @typedef {import('../src/project.js')} Project */
|
|
17
|
-
|
|
18
|
-
process.title = "integration-tests";
|
|
19
|
-
process.on("SIGUSR2", () => wtfnode.dump());
|
|
20
|
-
|
|
21
|
-
global.hookOrTestFailed = false;
|
|
22
|
-
|
|
23
|
-
function setFlagIfHookFailedDecorator(fn) {
|
|
24
|
-
return function () {
|
|
25
|
-
return Promise.resolve(fn.apply(this, arguments)).catch((error) => {
|
|
26
|
-
global.hookOrTestFailed = true;
|
|
27
|
-
throw error;
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
async function turnOff(instance) {
|
|
33
|
-
await instance.stop();
|
|
34
|
-
await instance.waitForState("off");
|
|
35
|
-
assert.strictEqual(instance.state, "off");
|
|
36
|
-
assert.notEqual(instance.stateChanged, null);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
async function turnOn(instance) {
|
|
40
|
-
await instance.start();
|
|
41
|
-
await instance.waitForState("on");
|
|
42
|
-
assert.strictEqual(instance.state, "on");
|
|
43
|
-
assert.notEqual(instance.stateChanged, null);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
describe("Corellium API", function () {
|
|
47
|
-
let BASE_LIFECYCLE_TIMEOUT = 0;
|
|
48
|
-
let BASE_SNAPSHOT_TIMEOUT = 0;
|
|
49
|
-
let INSTANCE_VERSIONS = [];
|
|
50
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
51
|
-
this.slow(10000);
|
|
52
|
-
this.timeout(20000);
|
|
53
|
-
|
|
54
|
-
BASE_LIFECYCLE_TIMEOUT = 40000;
|
|
55
|
-
BASE_SNAPSHOT_TIMEOUT = 20000;
|
|
56
|
-
INSTANCE_VERSIONS = ["7.1.2", "8.1.0", "9.0.0", "10.0.0", "11.0.0", "12.0.0"];
|
|
57
|
-
} else {
|
|
58
|
-
this.slow(40000);
|
|
59
|
-
this.timeout(50000);
|
|
60
|
-
|
|
61
|
-
BASE_LIFECYCLE_TIMEOUT = 700000;
|
|
62
|
-
BASE_SNAPSHOT_TIMEOUT = 300000;
|
|
63
|
-
INSTANCE_VERSIONS = ["10.3.3", "11.4.1", "12.4.1", "13.7", "14.1"];
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const instanceMap = new Map();
|
|
67
|
-
let corellium = null;
|
|
68
|
-
let loggedIn = false;
|
|
69
|
-
|
|
70
|
-
before(
|
|
71
|
-
"should have a configuration",
|
|
72
|
-
setFlagIfHookFailedDecorator(function () {
|
|
73
|
-
if (
|
|
74
|
-
!CONFIGURATION.endpoint ||
|
|
75
|
-
!CONFIGURATION.project ||
|
|
76
|
-
!CONFIGURATION.testFlavor ||
|
|
77
|
-
(!(CONFIGURATION.username && CONFIGURATION.password) && !CONFIGURATION.apiToken)
|
|
78
|
-
) {
|
|
79
|
-
throw new Error(
|
|
80
|
-
"The configuration must include endpoint, project and testFlavor as well as username and password or apiToken properties.",
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
}),
|
|
84
|
-
);
|
|
85
|
-
|
|
86
|
-
before(
|
|
87
|
-
"should log in",
|
|
88
|
-
setFlagIfHookFailedDecorator(async function () {
|
|
89
|
-
corellium = new Corellium(CONFIGURATION);
|
|
90
|
-
await corellium.login();
|
|
91
|
-
|
|
92
|
-
const token = await corellium.token;
|
|
93
|
-
assert(token && token.token, "Token was never set, login must have silently failed");
|
|
94
|
-
|
|
95
|
-
loggedIn = true;
|
|
96
|
-
}),
|
|
97
|
-
);
|
|
98
|
-
|
|
99
|
-
INSTANCE_VERSIONS.forEach((instanceVersion) => {
|
|
100
|
-
after(
|
|
101
|
-
setFlagIfHookFailedDecorator(async function () {
|
|
102
|
-
this.timeout(80000);
|
|
103
|
-
|
|
104
|
-
const instance = instanceMap.get(instanceVersion);
|
|
105
|
-
if (!instance) {
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// To facilitate debugging, don't destroy instances if a test or hook failed.
|
|
110
|
-
if (global.hookOrTestFailed) {
|
|
111
|
-
// Stop updating the instance. Otherwise the updater keeps at it and the
|
|
112
|
-
// integration tests don't terminate.
|
|
113
|
-
instance.project.updater.remove(instance);
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
await instance.destroy();
|
|
118
|
-
await instance.waitForState("deleted");
|
|
119
|
-
}),
|
|
120
|
-
);
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
describe("projects", function () {
|
|
124
|
-
let project = /** @type {Project} */ (null);
|
|
125
|
-
|
|
126
|
-
before(
|
|
127
|
-
"should be logged in",
|
|
128
|
-
setFlagIfHookFailedDecorator(function () {
|
|
129
|
-
assert(loggedIn, "All tests will fail as login failed");
|
|
130
|
-
}),
|
|
131
|
-
);
|
|
132
|
-
|
|
133
|
-
it("lists projects", async function () {
|
|
134
|
-
project = await corellium.projects().then((projects) => {
|
|
135
|
-
const foundProject = projects.find(
|
|
136
|
-
(project) => project.info.name === CONFIGURATION.project,
|
|
137
|
-
);
|
|
138
|
-
assert(
|
|
139
|
-
foundProject !== undefined,
|
|
140
|
-
new Error(
|
|
141
|
-
`Your test configuration specifies a project named "${CONFIGURATION.project}", but no such project was found on ${CONFIGURATION.endpoint}`,
|
|
142
|
-
),
|
|
143
|
-
);
|
|
144
|
-
return foundProject;
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
it("lists files", async function () {
|
|
149
|
-
const files = await corellium.files();
|
|
150
|
-
assert(Array.isArray(files));
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
it(`has room for ${INSTANCE_VERSIONS.length} new VMs (get quota / quotasUsed)`, async function () {
|
|
154
|
-
assert(project, "Unable to test as no project was returned from previous tests");
|
|
155
|
-
assert(project.quotas !== project.quotasUsed);
|
|
156
|
-
if (project.quotas.cores - project.quotasUsed.cores < 2 * INSTANCE_VERSIONS.length)
|
|
157
|
-
throw new Error(
|
|
158
|
-
`no room for an extra device to be made, please free at least ${
|
|
159
|
-
2 * INSTANCE_VERSIONS.length
|
|
160
|
-
} cores`,
|
|
161
|
-
);
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
INSTANCE_VERSIONS.forEach((instanceVersion) => {
|
|
165
|
-
it(`can start create ${instanceVersion}`, async function () {
|
|
166
|
-
assert(project, "Unable to test as no project was returned from previous tests");
|
|
167
|
-
const name = `API Test ${instanceVersion}`;
|
|
168
|
-
let instanceConfig = {};
|
|
169
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
170
|
-
instanceConfig = {
|
|
171
|
-
flavor: CONFIGURATION.testFlavor,
|
|
172
|
-
name: name,
|
|
173
|
-
os: instanceVersion,
|
|
174
|
-
};
|
|
175
|
-
} else {
|
|
176
|
-
instanceConfig = {
|
|
177
|
-
flavor: CONFIGURATION.testFlavor,
|
|
178
|
-
name: name,
|
|
179
|
-
os: instanceVersion,
|
|
180
|
-
bootOptions: {
|
|
181
|
-
udid: "9564a02c6255d8c449a3f691aeb8296dd352f3d6",
|
|
182
|
-
},
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
const instance = await project.createInstance(instanceConfig);
|
|
186
|
-
|
|
187
|
-
instanceMap.set(instanceVersion, instance);
|
|
188
|
-
|
|
189
|
-
await instance.waitForState("creating");
|
|
190
|
-
assert.strictEqual(instance.flavor, CONFIGURATION.testFlavor);
|
|
191
|
-
assert.strictEqual(instance.name, name);
|
|
192
|
-
});
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
it("can list supported devices", async function () {
|
|
196
|
-
const supportedDevices = await corellium.supported();
|
|
197
|
-
const firmware = supportedDevices.find(
|
|
198
|
-
(device) => device.name === CONFIGURATION.testFlavor,
|
|
199
|
-
);
|
|
200
|
-
assert(firmware);
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
it("can get teams and users", async function () {
|
|
204
|
-
let teamsAndUsers = await corellium.getTeamsAndUsers();
|
|
205
|
-
teamsAndUsers.users.forEach((value, key) => {
|
|
206
|
-
assert.strictEqual(value, corellium._users.get(key));
|
|
207
|
-
});
|
|
208
|
-
|
|
209
|
-
teamsAndUsers.teams.forEach((value, key) => {
|
|
210
|
-
assert.strictEqual(value, corellium._teams.get(key));
|
|
211
|
-
});
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
it("can get roles", async function () {
|
|
215
|
-
const roles = await corellium.roles();
|
|
216
|
-
assert(roles, "Roles should not be undefined, even if there have been no roles");
|
|
217
|
-
});
|
|
218
|
-
|
|
219
|
-
// Not visible to cloud users with one project:
|
|
220
|
-
it("can add and remove keys", async function () {
|
|
221
|
-
let keyInfo = await project
|
|
222
|
-
.addKey(
|
|
223
|
-
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCqpvRmc/JQoH9P6XVlHnod0wRCg+7iSGfpyoBoe+nWwp2iEqPyM7A2RzW7ZIX2FZmlD5ldR6Oj5Z+LUR/GXfCFQvpQkidL5htzGMoI59SwntpSMvHlFLOcbyS7VmI4MKbdIF+UrelPCcCJjOaZIFOJfNtuLWDx0L14jW/4wflzcj6Fd1rBTVh2SB3mvhsraOuv9an74zr/PMSHtpFnt5m4SYWpE4HLTf0FJksEe/Qda9jQu5i86Mhu6ewSAVccUDLzgz6E4i8hvSqfctcYGT7asqxsubPTpTPfuOkc3WOxlqZYnnAbpGh8NvCu9uC+5gfWRcLoyRBE4J2Y3wcfOueP example-key",
|
|
224
|
-
)
|
|
225
|
-
.then((projectKey) => {
|
|
226
|
-
assert(
|
|
227
|
-
projectKey.label === "example-key",
|
|
228
|
-
"label defaults to public key comment",
|
|
229
|
-
);
|
|
230
|
-
assert(
|
|
231
|
-
projectKey.fingerprint ===
|
|
232
|
-
"9c:71:e5:40:08:fb:cd:88:1b:6d:8e:4f:c0:4c:0f:dd",
|
|
233
|
-
);
|
|
234
|
-
return projectKey;
|
|
235
|
-
})
|
|
236
|
-
.catch((error) => {
|
|
237
|
-
throw error;
|
|
238
|
-
});
|
|
239
|
-
|
|
240
|
-
const keys = await project.keys();
|
|
241
|
-
assert(!!keys.find((key) => key.identifier === keyInfo.identifier));
|
|
242
|
-
|
|
243
|
-
await project.deleteKey(keyInfo.identifier);
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
it("can refresh", async function () {
|
|
247
|
-
let tempName = project.info.name;
|
|
248
|
-
await project.refresh();
|
|
249
|
-
assert(tempName === project.info.name);
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
INSTANCE_VERSIONS.forEach((instanceVersion) => {
|
|
253
|
-
it(`can getInstance ${instanceVersion}`, async function () {
|
|
254
|
-
const instanceFromMap = instanceMap.get(instanceVersion);
|
|
255
|
-
assert(instanceFromMap, "Instance failed to create, test will fail");
|
|
256
|
-
const instance = await project.getInstance(instanceFromMap.id);
|
|
257
|
-
assert(instance.id === instanceFromMap.id);
|
|
258
|
-
});
|
|
259
|
-
});
|
|
260
|
-
|
|
261
|
-
it("can get openvpn profile", async function () {
|
|
262
|
-
let expected = Buffer.from("client");
|
|
263
|
-
|
|
264
|
-
await project
|
|
265
|
-
.vpnConfig("ovpn", undefined)
|
|
266
|
-
.then((profile) => {
|
|
267
|
-
assert(profile.length > expected.length);
|
|
268
|
-
assert(profile.compare(expected, 0, expected.length, 0, expected.length) === 0);
|
|
269
|
-
return profile;
|
|
270
|
-
})
|
|
271
|
-
.catch((error) => {
|
|
272
|
-
// Hack to ignore onsite installs for this test
|
|
273
|
-
if (!error.toString().includes("500 Internal Server Error")) {
|
|
274
|
-
throw error;
|
|
275
|
-
}
|
|
276
|
-
console.log(
|
|
277
|
-
"Forcing pass, this does not appear to be a server which supports vpns",
|
|
278
|
-
);
|
|
279
|
-
return undefined;
|
|
280
|
-
});
|
|
281
|
-
});
|
|
282
|
-
|
|
283
|
-
it("can get tunnelblick profile", async function () {
|
|
284
|
-
let expected = Buffer.from("504b0304", "hex");
|
|
285
|
-
|
|
286
|
-
await project
|
|
287
|
-
.vpnConfig("tblk", undefined)
|
|
288
|
-
.then((profile) => {
|
|
289
|
-
assert(profile.length > expected.length);
|
|
290
|
-
assert(profile.compare(expected, 0, expected.length, 0, expected.length) === 0);
|
|
291
|
-
return profile;
|
|
292
|
-
})
|
|
293
|
-
.catch((error) => {
|
|
294
|
-
// Hack to ignore onsite installs for this test
|
|
295
|
-
if (!error.toString().includes("500 Internal Server Error")) {
|
|
296
|
-
throw error;
|
|
297
|
-
}
|
|
298
|
-
console.log(
|
|
299
|
-
"Forcing pass, this does not appear to be a server which supports vpns",
|
|
300
|
-
);
|
|
301
|
-
return undefined;
|
|
302
|
-
});
|
|
303
|
-
});
|
|
304
|
-
|
|
305
|
-
INSTANCE_VERSIONS.forEach((instanceVersion) => {
|
|
306
|
-
it(`can finish create ${instanceVersion}`, async function () {
|
|
307
|
-
this.slow(BASE_LIFECYCLE_TIMEOUT);
|
|
308
|
-
this.timeout(BASE_LIFECYCLE_TIMEOUT + 30000);
|
|
309
|
-
|
|
310
|
-
const instance = instanceMap.get(instanceVersion);
|
|
311
|
-
assert(instance, "Instance failed to create, test will fail");
|
|
312
|
-
await instance.finishRestore();
|
|
313
|
-
});
|
|
314
|
-
});
|
|
315
|
-
});
|
|
316
|
-
|
|
317
|
-
INSTANCE_VERSIONS.forEach((instanceVersion) => {
|
|
318
|
-
describe(`panics ${instanceVersion}`, function () {
|
|
319
|
-
before(
|
|
320
|
-
"should have an instance",
|
|
321
|
-
setFlagIfHookFailedDecorator(function () {
|
|
322
|
-
assert(
|
|
323
|
-
instanceMap.get(instanceVersion),
|
|
324
|
-
"No instances available for testing, tests will fail",
|
|
325
|
-
);
|
|
326
|
-
}),
|
|
327
|
-
);
|
|
328
|
-
|
|
329
|
-
it("can request panics", async function () {
|
|
330
|
-
const instance = instanceMap.get(instanceVersion);
|
|
331
|
-
const panics = instance.panics();
|
|
332
|
-
assert(panics, "Panics should not be undefined, even if there have been no panics");
|
|
333
|
-
});
|
|
334
|
-
|
|
335
|
-
it("can clear panics", async function () {
|
|
336
|
-
const instance = instanceMap.get(instanceVersion);
|
|
337
|
-
instance.clearPanics();
|
|
338
|
-
});
|
|
339
|
-
});
|
|
340
|
-
});
|
|
341
|
-
|
|
342
|
-
INSTANCE_VERSIONS.forEach((instanceVersion) => {
|
|
343
|
-
describe(`instances ${instanceVersion}`, function () {
|
|
344
|
-
before(
|
|
345
|
-
"should have an instance",
|
|
346
|
-
setFlagIfHookFailedDecorator(async function () {
|
|
347
|
-
assert(
|
|
348
|
-
instanceMap.get(instanceVersion),
|
|
349
|
-
"No instances available for testing, tests will fail",
|
|
350
|
-
);
|
|
351
|
-
const instance = instanceMap.get(instanceVersion);
|
|
352
|
-
await instance.waitForState("on");
|
|
353
|
-
}),
|
|
354
|
-
);
|
|
355
|
-
|
|
356
|
-
describe(`billing ${instanceVersion}`, function () {
|
|
357
|
-
it("can get rate information", async function () {
|
|
358
|
-
const instance = instanceMap.get(instanceVersion);
|
|
359
|
-
const rate = await instance.rate();
|
|
360
|
-
|
|
361
|
-
assert.strictEqual(
|
|
362
|
-
((rate.onRateMicrocents * (60 * 60 * 24)) / 1000000 / 100).toFixed(2) > 0,
|
|
363
|
-
true,
|
|
364
|
-
`'On' rate should be larger than 0`,
|
|
365
|
-
);
|
|
366
|
-
assert.strictEqual(
|
|
367
|
-
((rate.offRateMicrocents * (60 * 60 * 24)) / 1000000 / 100).toFixed(2) > 0,
|
|
368
|
-
true,
|
|
369
|
-
`'Off' rate should be larger than 0`,
|
|
370
|
-
);
|
|
371
|
-
});
|
|
372
|
-
});
|
|
373
|
-
|
|
374
|
-
describe(`device lifecycle ${instanceVersion}`, function () {
|
|
375
|
-
this.slow(BASE_LIFECYCLE_TIMEOUT / 2);
|
|
376
|
-
this.timeout(BASE_LIFECYCLE_TIMEOUT);
|
|
377
|
-
|
|
378
|
-
beforeEach(async function () {
|
|
379
|
-
const instance = instanceMap.get(instanceVersion);
|
|
380
|
-
await instance.update();
|
|
381
|
-
});
|
|
382
|
-
|
|
383
|
-
it("can pause", async function () {
|
|
384
|
-
const instance = instanceMap.get(instanceVersion);
|
|
385
|
-
await instance.waitForState("on");
|
|
386
|
-
await instance.pause();
|
|
387
|
-
await instance.waitForState("paused");
|
|
388
|
-
});
|
|
389
|
-
|
|
390
|
-
it("can unpause", async function () {
|
|
391
|
-
const instance = instanceMap.get(instanceVersion);
|
|
392
|
-
if (instance.state !== "paused") {
|
|
393
|
-
await instance.pause();
|
|
394
|
-
await instance.waitForState("paused");
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
await instance.unpause();
|
|
398
|
-
await instance.waitForState("on");
|
|
399
|
-
});
|
|
400
|
-
|
|
401
|
-
it("can reboot", async function () {
|
|
402
|
-
const instance = instanceMap.get(instanceVersion);
|
|
403
|
-
await instance.reboot();
|
|
404
|
-
});
|
|
405
|
-
|
|
406
|
-
it("can stop", async function () {
|
|
407
|
-
const instance = instanceMap.get(instanceVersion);
|
|
408
|
-
if (instance.state !== "on") {
|
|
409
|
-
await turnOn(instance);
|
|
410
|
-
}
|
|
411
|
-
await turnOff(instance);
|
|
412
|
-
});
|
|
413
|
-
|
|
414
|
-
it("can start", async function () {
|
|
415
|
-
const instance = instanceMap.get(instanceVersion);
|
|
416
|
-
if (instance.state !== "off") {
|
|
417
|
-
await turnOff(instance);
|
|
418
|
-
}
|
|
419
|
-
await turnOn(instance);
|
|
420
|
-
});
|
|
421
|
-
});
|
|
422
|
-
|
|
423
|
-
describe(`snapshots ${instanceVersion}`, function () {
|
|
424
|
-
this.slow(BASE_SNAPSHOT_TIMEOUT);
|
|
425
|
-
this.timeout(BASE_SNAPSHOT_TIMEOUT * 2);
|
|
426
|
-
|
|
427
|
-
before(
|
|
428
|
-
"should have an up-to-date instance",
|
|
429
|
-
setFlagIfHookFailedDecorator(async function () {
|
|
430
|
-
const instance = instanceMap.get(instanceVersion);
|
|
431
|
-
await instance.update();
|
|
432
|
-
}),
|
|
433
|
-
);
|
|
434
|
-
|
|
435
|
-
it("has a fresh snapshot", async function () {
|
|
436
|
-
const instance = instanceMap.get(instanceVersion);
|
|
437
|
-
const snapshots = await instance.snapshots();
|
|
438
|
-
const fresh = snapshots.find((snap) => snap.fresh);
|
|
439
|
-
assert(fresh.status.created === true);
|
|
440
|
-
// MIDDLEWARE-672 : Ensure snapshot has an actual date object
|
|
441
|
-
assert(isNaN(fresh.created.getDate()) === false);
|
|
442
|
-
});
|
|
443
|
-
|
|
444
|
-
let latestSnapshot;
|
|
445
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
446
|
-
it("refuses to take snapshot if instance is on", async function () {
|
|
447
|
-
const instance = instanceMap.get(instanceVersion);
|
|
448
|
-
if (instance.state !== "on") {
|
|
449
|
-
await turnOn(instance);
|
|
450
|
-
}
|
|
451
|
-
await assert.rejects(() => instance.takeSnapshot());
|
|
452
|
-
});
|
|
453
|
-
|
|
454
|
-
it("can take snapshot if instance is off", async function () {
|
|
455
|
-
const instance = instanceMap.get(instanceVersion);
|
|
456
|
-
if (instance.state !== "off") {
|
|
457
|
-
await turnOff(instance);
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
latestSnapshot = await instance.takeSnapshot();
|
|
461
|
-
|
|
462
|
-
while (latestSnapshot.status.created !== true) {
|
|
463
|
-
await latestSnapshot.update();
|
|
464
|
-
}
|
|
465
|
-
});
|
|
466
|
-
} else {
|
|
467
|
-
it("can take snapshot if instance is on", async function () {
|
|
468
|
-
const instance = instanceMap.get(instanceVersion);
|
|
469
|
-
latestSnapshot = await instance.takeSnapshot();
|
|
470
|
-
|
|
471
|
-
while (latestSnapshot.status.created !== true) {
|
|
472
|
-
await latestSnapshot.update();
|
|
473
|
-
}
|
|
474
|
-
});
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
it("can restore a snapshot", async function () {
|
|
478
|
-
assert(
|
|
479
|
-
latestSnapshot,
|
|
480
|
-
"This test cannot run because there is no latestSnapshot to use",
|
|
481
|
-
);
|
|
482
|
-
const instance = instanceMap.get(instanceVersion);
|
|
483
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
484
|
-
await latestSnapshot.restore();
|
|
485
|
-
} else {
|
|
486
|
-
await instance.pause();
|
|
487
|
-
await instance.waitForState("paused");
|
|
488
|
-
await latestSnapshot.restore();
|
|
489
|
-
await instance.waitForAgentReady();
|
|
490
|
-
}
|
|
491
|
-
});
|
|
492
|
-
|
|
493
|
-
it("can delete a snapshot", async function () {
|
|
494
|
-
assert(
|
|
495
|
-
latestSnapshot,
|
|
496
|
-
"This test cannot run because there is no latestSnapshot to use",
|
|
497
|
-
);
|
|
498
|
-
|
|
499
|
-
const instance = instanceMap.get(instanceVersion);
|
|
500
|
-
assert(
|
|
501
|
-
(await instance.snapshots()).some(
|
|
502
|
-
(snapshot) => snapshot.id === latestSnapshot.id,
|
|
503
|
-
),
|
|
504
|
-
);
|
|
505
|
-
|
|
506
|
-
await latestSnapshot.delete();
|
|
507
|
-
|
|
508
|
-
while (
|
|
509
|
-
(await instance.snapshots()).some(
|
|
510
|
-
(snapshot) => snapshot.id === latestSnapshot.id,
|
|
511
|
-
)
|
|
512
|
-
);
|
|
513
|
-
});
|
|
514
|
-
|
|
515
|
-
after("should be on", async function () {
|
|
516
|
-
const instance = instanceMap.get(instanceVersion);
|
|
517
|
-
await instance.update();
|
|
518
|
-
await turnOn(instance);
|
|
519
|
-
});
|
|
520
|
-
});
|
|
521
|
-
|
|
522
|
-
it("can take a screenshot", async function () {
|
|
523
|
-
const expected = Buffer.from("89504E470D0A1A0A", "hex");
|
|
524
|
-
const instance = instanceMap.get(instanceVersion);
|
|
525
|
-
await instance.takeScreenshot().then((png) => {
|
|
526
|
-
assert(png.length > expected.length);
|
|
527
|
-
assert(png.compare(expected, 0, expected.length, 0, expected.length) === 0);
|
|
528
|
-
});
|
|
529
|
-
});
|
|
530
|
-
|
|
531
|
-
it("can rename", async function () {
|
|
532
|
-
const instance = instanceMap.get(instanceVersion);
|
|
533
|
-
const instanceName = instance.name;
|
|
534
|
-
async function rename(name) {
|
|
535
|
-
await instance.rename(name);
|
|
536
|
-
await instance.update();
|
|
537
|
-
assert.strictEqual(instance.name, name);
|
|
538
|
-
}
|
|
539
|
-
await rename("test rename foo");
|
|
540
|
-
await rename(instanceName);
|
|
541
|
-
});
|
|
542
|
-
|
|
543
|
-
it("has a console log", async function () {
|
|
544
|
-
const instance = instanceMap.get(instanceVersion);
|
|
545
|
-
const log = await instance.consoleLog();
|
|
546
|
-
if (log === undefined) {
|
|
547
|
-
throw new Error("Unable to acquire any console log");
|
|
548
|
-
}
|
|
549
|
-
});
|
|
550
|
-
|
|
551
|
-
it("has a console", async function () {
|
|
552
|
-
const instance = instanceMap.get(instanceVersion);
|
|
553
|
-
const consoleStream = await instance.console();
|
|
554
|
-
// Wait for the socket to open before killing it,
|
|
555
|
-
// otherwise this will throw an error
|
|
556
|
-
consoleStream.socket.on("open", function () {
|
|
557
|
-
consoleStream.socket.close();
|
|
558
|
-
});
|
|
559
|
-
// When the socket closes, it will be safe to destroy the console duplexify object
|
|
560
|
-
consoleStream.socket.on("close", function () {
|
|
561
|
-
consoleStream.destroy();
|
|
562
|
-
});
|
|
563
|
-
});
|
|
564
|
-
|
|
565
|
-
it("can send input", async function () {
|
|
566
|
-
const input = new Input();
|
|
567
|
-
const instance = instanceMap.get(instanceVersion);
|
|
568
|
-
instance.sendInput(input.pressRelease("home"));
|
|
569
|
-
});
|
|
570
|
-
|
|
571
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
572
|
-
// Peripherals/sensor are only supported for android currently
|
|
573
|
-
describe(`peripherals ${instanceVersion}`, function () {
|
|
574
|
-
before(
|
|
575
|
-
setFlagIfHookFailedDecorator(async function () {
|
|
576
|
-
this.timeout(BASE_LIFECYCLE_TIMEOUT + 60000);
|
|
577
|
-
|
|
578
|
-
const instance = instanceMap.get(instanceVersion);
|
|
579
|
-
await instance.waitForState("on");
|
|
580
|
-
}),
|
|
581
|
-
);
|
|
582
|
-
|
|
583
|
-
it("can get peripheral data", async function () {
|
|
584
|
-
const instance = instanceMap.get(instanceVersion);
|
|
585
|
-
let peripheralData = await instance.getPeripherals();
|
|
586
|
-
assert(
|
|
587
|
-
peripheralData !== undefined && Object.keys(peripheralData).length > 0,
|
|
588
|
-
);
|
|
589
|
-
});
|
|
590
|
-
|
|
591
|
-
it("can set and get updated peripheral data", async function () {
|
|
592
|
-
const instance = instanceMap.get(instanceVersion);
|
|
593
|
-
await instance.modifyPeripherals({ batteryCapacity: "42" });
|
|
594
|
-
let peripheralData = await instance.getPeripherals();
|
|
595
|
-
assert(
|
|
596
|
-
peripheralData !== undefined &&
|
|
597
|
-
parseInt(peripheralData.batteryCapacity) === 42,
|
|
598
|
-
);
|
|
599
|
-
});
|
|
600
|
-
});
|
|
601
|
-
}
|
|
602
|
-
|
|
603
|
-
describe(`agent ${instanceVersion}`, function () {
|
|
604
|
-
let agent;
|
|
605
|
-
let installSuccess = false;
|
|
606
|
-
|
|
607
|
-
before(
|
|
608
|
-
setFlagIfHookFailedDecorator(async function () {
|
|
609
|
-
this.timeout(BASE_LIFECYCLE_TIMEOUT + 60000);
|
|
610
|
-
|
|
611
|
-
const instance = instanceMap.get(instanceVersion);
|
|
612
|
-
await instance.waitForState("on");
|
|
613
|
-
await instance.waitForAgentReady();
|
|
614
|
-
}),
|
|
615
|
-
);
|
|
616
|
-
|
|
617
|
-
beforeEach(async function () {
|
|
618
|
-
const instance = instanceMap.get(instanceVersion);
|
|
619
|
-
if (agent === undefined || !agent.connected) {
|
|
620
|
-
agent = await instance.agent();
|
|
621
|
-
await agent.ready();
|
|
622
|
-
}
|
|
623
|
-
});
|
|
624
|
-
|
|
625
|
-
after(
|
|
626
|
-
setFlagIfHookFailedDecorator(async function () {
|
|
627
|
-
if (agent !== undefined && agent.connected) agent.disconnect();
|
|
628
|
-
}),
|
|
629
|
-
);
|
|
630
|
-
|
|
631
|
-
it("can list device apps", async function () {
|
|
632
|
-
let appList = await agent.appList();
|
|
633
|
-
assert(appList !== undefined && appList.length > 0);
|
|
634
|
-
});
|
|
635
|
-
|
|
636
|
-
it("can use shellExec", async function () {
|
|
637
|
-
let uname = await agent.shellExec("uname");
|
|
638
|
-
assert(uname.output !== undefined && uname.output.length > 0);
|
|
639
|
-
assert(uname["success"], true);
|
|
640
|
-
});
|
|
641
|
-
|
|
642
|
-
describe(`Files ${instanceVersion}`, function () {
|
|
643
|
-
let expectedData = Buffer.from("D1FF", "hex");
|
|
644
|
-
let testPath;
|
|
645
|
-
|
|
646
|
-
it("can get temp file", async function () {
|
|
647
|
-
testPath = await agent.tempFile();
|
|
648
|
-
});
|
|
649
|
-
|
|
650
|
-
it("can upload a file", async function () {
|
|
651
|
-
let rs = stream.Readable.from(expectedData);
|
|
652
|
-
|
|
653
|
-
let lastStatus;
|
|
654
|
-
try {
|
|
655
|
-
await agent.upload(testPath, rs, (_progress, status) => {
|
|
656
|
-
lastStatus = status;
|
|
657
|
-
});
|
|
658
|
-
} catch (err) {
|
|
659
|
-
assert(
|
|
660
|
-
false,
|
|
661
|
-
`Error uploading file during '${lastStatus} stage: ${err}`,
|
|
662
|
-
);
|
|
663
|
-
}
|
|
664
|
-
});
|
|
665
|
-
|
|
666
|
-
it("can stat a file", async function () {
|
|
667
|
-
let stat = await agent.stat(testPath);
|
|
668
|
-
assert.strictEqual(stat.name, testPath);
|
|
669
|
-
});
|
|
670
|
-
|
|
671
|
-
it("can change a files attributes", async function () {
|
|
672
|
-
await agent.changeFileAttributes(testPath, { mode: 511 });
|
|
673
|
-
let stat = await agent.stat(testPath);
|
|
674
|
-
assert.strictEqual(stat.mode, 33279);
|
|
675
|
-
});
|
|
676
|
-
|
|
677
|
-
it("can download files", async function () {
|
|
678
|
-
try {
|
|
679
|
-
let downloaded = await new Promise((resolve) => {
|
|
680
|
-
const rs = agent.download(testPath);
|
|
681
|
-
let bufs = [];
|
|
682
|
-
rs.on("data", function (chunk) {
|
|
683
|
-
bufs.push(chunk);
|
|
684
|
-
});
|
|
685
|
-
rs.on("end", function () {
|
|
686
|
-
resolve(Buffer.concat(bufs));
|
|
687
|
-
});
|
|
688
|
-
});
|
|
689
|
-
|
|
690
|
-
assert(Buffer.compare(downloaded, expectedData) === 0);
|
|
691
|
-
} catch (err) {
|
|
692
|
-
assert(false, `Error reading downloadable file ${err}`);
|
|
693
|
-
}
|
|
694
|
-
});
|
|
695
|
-
|
|
696
|
-
it("can delete files", async function () {
|
|
697
|
-
await agent.deleteFile(testPath).then((path) => {
|
|
698
|
-
assert(path === undefined);
|
|
699
|
-
});
|
|
700
|
-
|
|
701
|
-
// We should get an OperationFailed since the file is gone
|
|
702
|
-
try {
|
|
703
|
-
await agent.stat(testPath);
|
|
704
|
-
} catch (error) {
|
|
705
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
706
|
-
assert(error.toString().includes("No such file or directory"));
|
|
707
|
-
} else {
|
|
708
|
-
assert(
|
|
709
|
-
error
|
|
710
|
-
.toString()
|
|
711
|
-
.includes("Stat of file '" + testPath + "' failed."),
|
|
712
|
-
);
|
|
713
|
-
}
|
|
714
|
-
}
|
|
715
|
-
});
|
|
716
|
-
});
|
|
717
|
-
|
|
718
|
-
describe(`configuration profiles ${instanceVersion}`, function () {
|
|
719
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
720
|
-
// These are unimplemented on ranchu devices
|
|
721
|
-
it("cannot use profile/list", async function () {
|
|
722
|
-
assert.rejects(() => agent.profileList());
|
|
723
|
-
});
|
|
724
|
-
|
|
725
|
-
it("cannot use profile/install", async function () {
|
|
726
|
-
assert.rejects(() => agent.installProfile("test"));
|
|
727
|
-
});
|
|
728
|
-
|
|
729
|
-
it("cannot use profile/remove", async function () {
|
|
730
|
-
assert.rejects(() => agent.removeProfile("test"));
|
|
731
|
-
});
|
|
732
|
-
|
|
733
|
-
it("cannot use profile/get", async function () {
|
|
734
|
-
assert.rejects(() => agent.getProfile("test"));
|
|
735
|
-
});
|
|
736
|
-
} else {
|
|
737
|
-
let profileID = "TBA";
|
|
738
|
-
|
|
739
|
-
it.skip("can use profile/list", async function () {
|
|
740
|
-
await agent.profileList();
|
|
741
|
-
});
|
|
742
|
-
|
|
743
|
-
it.skip("can use profile/install", async function () {
|
|
744
|
-
var profile = fs.readFileSync(path.join(__dirname, "TBA.mobileconfig"));
|
|
745
|
-
await agent.installProfile(profile);
|
|
746
|
-
});
|
|
747
|
-
|
|
748
|
-
it.skip("can use profile/get", async function () {
|
|
749
|
-
await agent.getProfile(profileID);
|
|
750
|
-
});
|
|
751
|
-
|
|
752
|
-
it.skip("can use profile/remove", async function () {
|
|
753
|
-
await agent.removeProfile(profileID);
|
|
754
|
-
});
|
|
755
|
-
}
|
|
756
|
-
});
|
|
757
|
-
|
|
758
|
-
describe(`provisioning profiles ${instanceVersion}`, function () {
|
|
759
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
760
|
-
// These are unimplemented on ranchu devices
|
|
761
|
-
it("cannot use provisioning/list", async function () {
|
|
762
|
-
assert.rejects(() => agent.listProvisioningProfiles());
|
|
763
|
-
});
|
|
764
|
-
|
|
765
|
-
it("cannot use provisioning/install", async function () {
|
|
766
|
-
assert.rejects(() => agent.installProvisioningProfile("test", true));
|
|
767
|
-
});
|
|
768
|
-
|
|
769
|
-
it("cannot use provisioning/remove", async function () {
|
|
770
|
-
assert.rejects(() => agent.removeProvisioningProfile("test"));
|
|
771
|
-
});
|
|
772
|
-
|
|
773
|
-
it("cannot use provisioning/preapprove", async function () {
|
|
774
|
-
assert.rejects(() => agent.preApproveProvisioningProfile());
|
|
775
|
-
});
|
|
776
|
-
} else {
|
|
777
|
-
let certID = "TBA";
|
|
778
|
-
let profileID = "TBA";
|
|
779
|
-
|
|
780
|
-
it.skip("can use provisioning/install", async function () {
|
|
781
|
-
var profile = fs.readFileSync(
|
|
782
|
-
path.join(__dirname, "embedded.mobileprovision"),
|
|
783
|
-
);
|
|
784
|
-
await agent.installProvisioningProfile(profile, true);
|
|
785
|
-
});
|
|
786
|
-
|
|
787
|
-
it.skip("can use provisioning/list", async function () {
|
|
788
|
-
await agent.listProvisioningProfiles();
|
|
789
|
-
});
|
|
790
|
-
|
|
791
|
-
it.skip("can use provisioning/remove", async function () {
|
|
792
|
-
await agent.removeProvisioningProfile(profileID);
|
|
793
|
-
});
|
|
794
|
-
|
|
795
|
-
it.skip("can use provisioning/preapprove", async function () {
|
|
796
|
-
await agent.preApproveProvisioningProfile(certID, profileID);
|
|
797
|
-
});
|
|
798
|
-
}
|
|
799
|
-
});
|
|
800
|
-
|
|
801
|
-
describe(`locks ${instanceVersion}`, function () {
|
|
802
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
803
|
-
// These are unimplemented on ranchu devices
|
|
804
|
-
it("cannot use lock", async function () {
|
|
805
|
-
assert.rejects(() => agent.lockDevice());
|
|
806
|
-
});
|
|
807
|
-
|
|
808
|
-
it("cannot use unlock", async function () {
|
|
809
|
-
assert.rejects(() => agent.unlockDevice());
|
|
810
|
-
});
|
|
811
|
-
|
|
812
|
-
it("cannot use acquireDisableAutolockAssertion", async function () {
|
|
813
|
-
assert.rejects(() => agent.acquireDisableAutolockAssertion());
|
|
814
|
-
});
|
|
815
|
-
|
|
816
|
-
it("cannot use releaseDisableAutolockAssertion", async function () {
|
|
817
|
-
assert.rejects(() => agent.releaseDisableAutolockAssertion());
|
|
818
|
-
});
|
|
819
|
-
} else {
|
|
820
|
-
it("can use lock", async function () {
|
|
821
|
-
await agent.lockDevice();
|
|
822
|
-
});
|
|
823
|
-
|
|
824
|
-
it("can use unlock", async function () {
|
|
825
|
-
await agent.unlockDevice();
|
|
826
|
-
});
|
|
827
|
-
|
|
828
|
-
it("can use acquireDisableAutolockAssertion", async function () {
|
|
829
|
-
await agent.acquireDisableAutolockAssertion();
|
|
830
|
-
});
|
|
831
|
-
|
|
832
|
-
it("can use releaseDisableAutolockAssertion", async function () {
|
|
833
|
-
await agent.releaseDisableAutolockAssertion();
|
|
834
|
-
});
|
|
835
|
-
}
|
|
836
|
-
});
|
|
837
|
-
|
|
838
|
-
describe(`UI automation ${instanceVersion}`, function () {
|
|
839
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
840
|
-
// These are unimplemented on ranchu devices
|
|
841
|
-
it("cannot use enableUIAutomation", async function () {
|
|
842
|
-
assert.rejects(() => agent.enableUIAutomation());
|
|
843
|
-
});
|
|
844
|
-
|
|
845
|
-
it("cannot use disableUIAutomation", async function () {
|
|
846
|
-
assert.rejects(() => agent.disableUIAutomation());
|
|
847
|
-
});
|
|
848
|
-
} else {
|
|
849
|
-
it("can use enableUIAutomation", async function () {
|
|
850
|
-
await agent.enableUIAutomation();
|
|
851
|
-
});
|
|
852
|
-
|
|
853
|
-
it("can use disableUIAutomation", async function () {
|
|
854
|
-
await agent.disableUIAutomation();
|
|
855
|
-
});
|
|
856
|
-
}
|
|
857
|
-
});
|
|
858
|
-
|
|
859
|
-
describe(`WiFi ${instanceVersion}`, function () {
|
|
860
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
861
|
-
// These are unimplemented on ranchu devices
|
|
862
|
-
it("cannot use connectToWifi", async function () {
|
|
863
|
-
assert.rejects(() => agent.connectToWifi());
|
|
864
|
-
});
|
|
865
|
-
|
|
866
|
-
it("cannot use disconnectFromWifi", async function () {
|
|
867
|
-
assert.rejects(() => agent.disconnectFromWifi());
|
|
868
|
-
});
|
|
869
|
-
} else {
|
|
870
|
-
it("can use disconnectFromWifi", async function () {
|
|
871
|
-
await agent.disconnectFromWifi();
|
|
872
|
-
|
|
873
|
-
// Wait a bit to avoid WiFi connection race on some devices
|
|
874
|
-
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
875
|
-
});
|
|
876
|
-
|
|
877
|
-
it("can use connectToWifi", async function () {
|
|
878
|
-
await agent.connectToWifi();
|
|
879
|
-
});
|
|
880
|
-
}
|
|
881
|
-
});
|
|
882
|
-
|
|
883
|
-
let bundleID = "";
|
|
884
|
-
if (CONFIGURATION.testFlavor === "ranchu") bundleID = "com.corellium.test.app";
|
|
885
|
-
else bundleID = "com.corellium.Red";
|
|
886
|
-
describe(`Applications ${instanceVersion}`, function () {
|
|
887
|
-
it("can install a signed apk/ipa", function () {
|
|
888
|
-
this.slow(50000);
|
|
889
|
-
this.timeout(100000);
|
|
890
|
-
|
|
891
|
-
let appFile = "";
|
|
892
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
893
|
-
appFile = "api-test.apk";
|
|
894
|
-
} else {
|
|
895
|
-
appFile = "Red.ipa";
|
|
896
|
-
}
|
|
897
|
-
return agent
|
|
898
|
-
.installFile(fs.createReadStream(path.join(__dirname, appFile)))
|
|
899
|
-
.then(() => (installSuccess = true));
|
|
900
|
-
});
|
|
901
|
-
|
|
902
|
-
it("can run an app", async function () {
|
|
903
|
-
assert(
|
|
904
|
-
installSuccess,
|
|
905
|
-
"This test cannot run because application installation failed",
|
|
906
|
-
);
|
|
907
|
-
await agent.run(bundleID);
|
|
908
|
-
});
|
|
909
|
-
|
|
910
|
-
it("can kill an app", async function () {
|
|
911
|
-
assert(
|
|
912
|
-
installSuccess,
|
|
913
|
-
"This test cannot run because application installation failed",
|
|
914
|
-
);
|
|
915
|
-
await agent.kill(bundleID);
|
|
916
|
-
});
|
|
917
|
-
});
|
|
918
|
-
|
|
919
|
-
describe(`crash watcher ${instanceVersion}`, function () {
|
|
920
|
-
let crashListener;
|
|
921
|
-
|
|
922
|
-
before(
|
|
923
|
-
setFlagIfHookFailedDecorator(async function () {
|
|
924
|
-
const instance = instanceMap.get(instanceVersion);
|
|
925
|
-
await instance.waitForState("on");
|
|
926
|
-
await instance.waitForAgentReady();
|
|
927
|
-
crashListener = await instance.newAgent();
|
|
928
|
-
}),
|
|
929
|
-
);
|
|
930
|
-
|
|
931
|
-
after(
|
|
932
|
-
setFlagIfHookFailedDecorator(async function () {
|
|
933
|
-
if (crashListener !== undefined && crashListener.connected)
|
|
934
|
-
crashListener.disconnect();
|
|
935
|
-
}),
|
|
936
|
-
);
|
|
937
|
-
|
|
938
|
-
it("can catch an expected crash", function () {
|
|
939
|
-
return new Promise((resolve) => {
|
|
940
|
-
assert(
|
|
941
|
-
installSuccess,
|
|
942
|
-
"This test cannot run because application installation failed",
|
|
943
|
-
);
|
|
944
|
-
let targetLine = "";
|
|
945
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
946
|
-
targetLine = "com.corellium.test.app";
|
|
947
|
-
} else {
|
|
948
|
-
targetLine = "com.apple.Maps";
|
|
949
|
-
}
|
|
950
|
-
return crashListener.ready().then(() => {
|
|
951
|
-
crashListener
|
|
952
|
-
.crashes(targetLine, (err, crashReport) => {
|
|
953
|
-
assert(!err, err);
|
|
954
|
-
assert(
|
|
955
|
-
crashReport !== undefined,
|
|
956
|
-
"The crash report is undefined",
|
|
957
|
-
);
|
|
958
|
-
assert(
|
|
959
|
-
crashReport.includes(targetLine),
|
|
960
|
-
`The crash reported doesn't include "${targetLine}":\n\n${crashReport}`,
|
|
961
|
-
);
|
|
962
|
-
resolve();
|
|
963
|
-
})
|
|
964
|
-
.catch((error) => {
|
|
965
|
-
if (
|
|
966
|
-
error.message &&
|
|
967
|
-
error.message.includes("disconnected")
|
|
968
|
-
) {
|
|
969
|
-
return;
|
|
970
|
-
}
|
|
971
|
-
throw error;
|
|
972
|
-
});
|
|
973
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
974
|
-
return agent.runActivity(
|
|
975
|
-
"com.corellium.test.app",
|
|
976
|
-
"com.corellium.test.app/com.corellium.test.app.CrashActivity",
|
|
977
|
-
);
|
|
978
|
-
} else {
|
|
979
|
-
return agent.run("com.apple.Maps");
|
|
980
|
-
}
|
|
981
|
-
});
|
|
982
|
-
});
|
|
983
|
-
});
|
|
984
|
-
});
|
|
985
|
-
|
|
986
|
-
describe(`SSL pinning control ${instanceVersion}`, function () {
|
|
987
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
988
|
-
// These are unimplemented on ranchu devices
|
|
989
|
-
it("cannot use enableSSLPinning", async function () {
|
|
990
|
-
assert.rejects(() => agent.enableSSLPinning());
|
|
991
|
-
});
|
|
992
|
-
|
|
993
|
-
it("cannot use isSSLPinningEnabled", async function () {
|
|
994
|
-
assert.rejects(() => agent.isSSLPinningEnabled());
|
|
995
|
-
});
|
|
996
|
-
|
|
997
|
-
it("cannot use disableSSLPinning", async function () {
|
|
998
|
-
assert.rejects(() => agent.disableSSLPinning());
|
|
999
|
-
});
|
|
1000
|
-
} else {
|
|
1001
|
-
it("can use enableSSLPinning", async function () {
|
|
1002
|
-
await agent.enableSSLPinning();
|
|
1003
|
-
});
|
|
1004
|
-
|
|
1005
|
-
it("can use isSSLPinningEnabled", async function () {
|
|
1006
|
-
assert(await agent.isSSLPinningEnabled());
|
|
1007
|
-
});
|
|
1008
|
-
|
|
1009
|
-
it("can use disableSSLPinning", async function () {
|
|
1010
|
-
await agent.disableSSLPinning();
|
|
1011
|
-
});
|
|
1012
|
-
}
|
|
1013
|
-
});
|
|
1014
|
-
|
|
1015
|
-
describe(`Network Monitor ${instanceVersion}`, function () {
|
|
1016
|
-
let netmon;
|
|
1017
|
-
|
|
1018
|
-
after(
|
|
1019
|
-
"disconnect network monitor",
|
|
1020
|
-
setFlagIfHookFailedDecorator(function () {
|
|
1021
|
-
if (CONFIGURATION.testFlavor !== "ranchu") {
|
|
1022
|
-
agent.kill("com.saurik.Cydia");
|
|
1023
|
-
}
|
|
1024
|
-
|
|
1025
|
-
netmon.disconnect();
|
|
1026
|
-
}),
|
|
1027
|
-
);
|
|
1028
|
-
|
|
1029
|
-
it("can get monitor", async function () {
|
|
1030
|
-
const instance = instanceMap.get(instanceVersion);
|
|
1031
|
-
netmon = await instance.newNetworkMonitor();
|
|
1032
|
-
assert.strictEqual(
|
|
1033
|
-
netmon !== undefined,
|
|
1034
|
-
true,
|
|
1035
|
-
`Expected monitor to be returned`,
|
|
1036
|
-
);
|
|
1037
|
-
});
|
|
1038
|
-
|
|
1039
|
-
it("can start monitor", async function () {
|
|
1040
|
-
assert.strictEqual(
|
|
1041
|
-
await netmon.start(),
|
|
1042
|
-
true,
|
|
1043
|
-
`Expected the network monitor to start and return true`,
|
|
1044
|
-
);
|
|
1045
|
-
});
|
|
1046
|
-
|
|
1047
|
-
it("can monitor data", async function () {
|
|
1048
|
-
assert(
|
|
1049
|
-
installSuccess,
|
|
1050
|
-
`This test can't run because application installation failed.`,
|
|
1051
|
-
);
|
|
1052
|
-
|
|
1053
|
-
return new Promise((resolve) => {
|
|
1054
|
-
this.slow(80000);
|
|
1055
|
-
this.timeout(100000);
|
|
1056
|
-
|
|
1057
|
-
netmon.handleMessage((message) => {
|
|
1058
|
-
const hostHeader = message.request.headers.find(
|
|
1059
|
-
(header) => header.key === "Host",
|
|
1060
|
-
);
|
|
1061
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
1062
|
-
if (hostHeader.value === "corellium.com") {
|
|
1063
|
-
netmon.handleMessage(null);
|
|
1064
|
-
resolve();
|
|
1065
|
-
}
|
|
1066
|
-
} else {
|
|
1067
|
-
if (hostHeader.value === "cydia.zodttd.com") {
|
|
1068
|
-
netmon.handleMessage(null);
|
|
1069
|
-
resolve();
|
|
1070
|
-
}
|
|
1071
|
-
}
|
|
1072
|
-
});
|
|
1073
|
-
|
|
1074
|
-
// The test application gets ECONNREFUSEDs if it's run too soon after
|
|
1075
|
-
// Network Monitor starts.
|
|
1076
|
-
return new Promise((resolve) => setTimeout(resolve, 1000 * 5)).then(
|
|
1077
|
-
async () => {
|
|
1078
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
1079
|
-
await agent.runActivity(
|
|
1080
|
-
"com.corellium.test.app",
|
|
1081
|
-
"com.corellium.test.app/com.corellium.test.app.NetworkActivity",
|
|
1082
|
-
);
|
|
1083
|
-
resolve();
|
|
1084
|
-
} else {
|
|
1085
|
-
return agent.run("com.saurik.Cydia");
|
|
1086
|
-
}
|
|
1087
|
-
},
|
|
1088
|
-
);
|
|
1089
|
-
});
|
|
1090
|
-
});
|
|
1091
|
-
|
|
1092
|
-
it("can stop monitor", async function () {
|
|
1093
|
-
assert.strictEqual(
|
|
1094
|
-
await netmon.stop(),
|
|
1095
|
-
true,
|
|
1096
|
-
`Expected the network monitor to stop and return true`,
|
|
1097
|
-
);
|
|
1098
|
-
});
|
|
1099
|
-
|
|
1100
|
-
it("can clear log", async function () {
|
|
1101
|
-
await netmon.clearLog();
|
|
1102
|
-
});
|
|
1103
|
-
});
|
|
1104
|
-
|
|
1105
|
-
describe(`Frida ${instanceVersion}`, function () {
|
|
1106
|
-
let pid = 0;
|
|
1107
|
-
let name = "";
|
|
1108
|
-
|
|
1109
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
1110
|
-
it("can get process list", async function () {
|
|
1111
|
-
let procList = await agent.runFridaPs();
|
|
1112
|
-
let lines = procList.output.trim().split("\n");
|
|
1113
|
-
lines.shift();
|
|
1114
|
-
lines.shift();
|
|
1115
|
-
for (const line of lines) {
|
|
1116
|
-
[pid, name] = line.trim().split(/\s+/);
|
|
1117
|
-
if (name === "keystore") {
|
|
1118
|
-
break;
|
|
1119
|
-
}
|
|
1120
|
-
}
|
|
1121
|
-
assert(pid != 0);
|
|
1122
|
-
});
|
|
1123
|
-
} else {
|
|
1124
|
-
it("cannot get process list", async function () {
|
|
1125
|
-
assert.rejects(() => agent.runFridaPs());
|
|
1126
|
-
});
|
|
1127
|
-
}
|
|
1128
|
-
|
|
1129
|
-
it("can get console", async function () {
|
|
1130
|
-
const instance = instanceMap.get(instanceVersion);
|
|
1131
|
-
const consoleStream = await instance.fridaConsole();
|
|
1132
|
-
|
|
1133
|
-
consoleStream.socket.on("close", function () {
|
|
1134
|
-
consoleStream.destroy();
|
|
1135
|
-
});
|
|
1136
|
-
consoleStream.socket.close();
|
|
1137
|
-
});
|
|
1138
|
-
|
|
1139
|
-
describe("frida attaching and execution", function () {
|
|
1140
|
-
if (CONFIGURATION.testFlavor === "ranchu") {
|
|
1141
|
-
it("can attach frida", async function () {
|
|
1142
|
-
if (name === "") {
|
|
1143
|
-
name = "keystore";
|
|
1144
|
-
}
|
|
1145
|
-
await agent.runFrida(pid, name);
|
|
1146
|
-
let processList;
|
|
1147
|
-
do {
|
|
1148
|
-
processList = await agent.runFridaPs();
|
|
1149
|
-
} while (
|
|
1150
|
-
!(
|
|
1151
|
-
processList.attached &&
|
|
1152
|
-
processList.attached.target_name === name
|
|
1153
|
-
)
|
|
1154
|
-
);
|
|
1155
|
-
});
|
|
1156
|
-
|
|
1157
|
-
it("can get frida scripts", async function () {
|
|
1158
|
-
let fridaScripts = await agent.stat(
|
|
1159
|
-
"/data/corellium/frida/scripts/",
|
|
1160
|
-
);
|
|
1161
|
-
let scriptList = fridaScripts.entries.map((entry) => entry.name);
|
|
1162
|
-
let s = "";
|
|
1163
|
-
for (s of scriptList) {
|
|
1164
|
-
if (s === "hook_native.js") break;
|
|
1165
|
-
}
|
|
1166
|
-
assert(s != "");
|
|
1167
|
-
});
|
|
1168
|
-
|
|
1169
|
-
it.skip("can execute script", async function () {
|
|
1170
|
-
const instance = instanceMap.get(instanceVersion);
|
|
1171
|
-
await instance.executeFridaScript(
|
|
1172
|
-
"/data/corellium/frida/scripts/hook_native.js",
|
|
1173
|
-
);
|
|
1174
|
-
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
1175
|
-
|
|
1176
|
-
let fridaConsole = await instance.fridaConsole();
|
|
1177
|
-
let fridaOutput = await new Promise((resolve) => {
|
|
1178
|
-
const w = new stream.Writable({
|
|
1179
|
-
write(chunk, _encoding, _callback) {
|
|
1180
|
-
fridaConsole.socket.close();
|
|
1181
|
-
resolve(chunk);
|
|
1182
|
-
},
|
|
1183
|
-
});
|
|
1184
|
-
fridaConsole.pipe(w);
|
|
1185
|
-
});
|
|
1186
|
-
assert(fridaOutput.toString().includes("Hook android_log_write()"));
|
|
1187
|
-
});
|
|
1188
|
-
|
|
1189
|
-
it("can detach frida", async function () {
|
|
1190
|
-
await agent.runFridaKill();
|
|
1191
|
-
});
|
|
1192
|
-
} else {
|
|
1193
|
-
it("cannot attach frida", async function () {
|
|
1194
|
-
assert.rejects(() => agent.runFrida(1, "launchd"));
|
|
1195
|
-
});
|
|
1196
|
-
|
|
1197
|
-
it("cannot get frida scripts", async function () {
|
|
1198
|
-
assert.rejects(() => agent.stat("/data/corellium/frida/scripts/"));
|
|
1199
|
-
});
|
|
1200
|
-
|
|
1201
|
-
it.skip("cannot execute script", async function () {
|
|
1202
|
-
const instance = instanceMap.get(instanceVersion);
|
|
1203
|
-
await instance.executeFridaScript(
|
|
1204
|
-
"/data/corellium/frida/scripts/hook_native.js",
|
|
1205
|
-
);
|
|
1206
|
-
});
|
|
1207
|
-
|
|
1208
|
-
it("cannot detach frida", async function () {
|
|
1209
|
-
assert.rejects(() => agent.runFridaKill());
|
|
1210
|
-
});
|
|
1211
|
-
}
|
|
1212
|
-
});
|
|
1213
|
-
});
|
|
1214
|
-
|
|
1215
|
-
describe(`app clean up ${instanceVersion}`, function () {
|
|
1216
|
-
it("can uninstall an app", async function () {
|
|
1217
|
-
assert(
|
|
1218
|
-
installSuccess,
|
|
1219
|
-
"This test cannot run because application installation failed",
|
|
1220
|
-
);
|
|
1221
|
-
|
|
1222
|
-
let lastStatus;
|
|
1223
|
-
try {
|
|
1224
|
-
await agent.uninstall("com.corellium.test.app", (_progress, status) => {
|
|
1225
|
-
lastStatus = status;
|
|
1226
|
-
});
|
|
1227
|
-
} catch (err) {
|
|
1228
|
-
assert(
|
|
1229
|
-
false,
|
|
1230
|
-
`Error uninstalling app during '${lastStatus} stage: ${err}`,
|
|
1231
|
-
);
|
|
1232
|
-
}
|
|
1233
|
-
});
|
|
1234
|
-
});
|
|
1235
|
-
|
|
1236
|
-
describe(`CoreTrace ${instanceVersion}`, function () {
|
|
1237
|
-
let pid = 0;
|
|
1238
|
-
|
|
1239
|
-
it("can get thread list", async function () {
|
|
1240
|
-
const instance = instanceMap.get(instanceVersion);
|
|
1241
|
-
let threadList = await instance.getCoreTraceThreadList();
|
|
1242
|
-
for (let p of threadList) {
|
|
1243
|
-
if (p.name.includes("corelliumd")) {
|
|
1244
|
-
pid = p.pid;
|
|
1245
|
-
break;
|
|
1246
|
-
}
|
|
1247
|
-
}
|
|
1248
|
-
assert(pid != 0);
|
|
1249
|
-
});
|
|
1250
|
-
|
|
1251
|
-
it("can set filter", async function () {
|
|
1252
|
-
const instance = instanceMap.get(instanceVersion);
|
|
1253
|
-
await instance.setCoreTraceFilter([pid], [], []);
|
|
1254
|
-
});
|
|
1255
|
-
|
|
1256
|
-
it("can start capture", async function () {
|
|
1257
|
-
const instance = instanceMap.get(instanceVersion);
|
|
1258
|
-
await instance.startCoreTrace();
|
|
1259
|
-
});
|
|
1260
|
-
|
|
1261
|
-
it.skip("can capture data", async function () {
|
|
1262
|
-
let statTarget = "";
|
|
1263
|
-
const instance = instanceMap.get(instanceVersion);
|
|
1264
|
-
if (CONFIGURATION.testFlavor === "ranchu")
|
|
1265
|
-
statTarget = "/data/corellium/frida/scripts/";
|
|
1266
|
-
else statTarget = "/var/mobile/Media";
|
|
1267
|
-
await agent.stat(statTarget);
|
|
1268
|
-
await new Promise((resolve) => setTimeout(resolve, 9000));
|
|
1269
|
-
const log = await instance.downloadCoreTraceLog();
|
|
1270
|
-
assert(log !== undefined);
|
|
1271
|
-
assert(log.toString().includes(":corelliumd"));
|
|
1272
|
-
});
|
|
1273
|
-
|
|
1274
|
-
it("can stop capture", async function () {
|
|
1275
|
-
const instance = instanceMap.get(instanceVersion);
|
|
1276
|
-
await instance.stopCoreTrace();
|
|
1277
|
-
});
|
|
1278
|
-
|
|
1279
|
-
it("can clear filter", async function () {
|
|
1280
|
-
const instance = instanceMap.get(instanceVersion);
|
|
1281
|
-
await instance.clearCoreTraceFilter();
|
|
1282
|
-
});
|
|
1283
|
-
|
|
1284
|
-
it("can clear log", async function () {
|
|
1285
|
-
const instance = instanceMap.get(instanceVersion);
|
|
1286
|
-
await instance.clearCoreTraceLog();
|
|
1287
|
-
});
|
|
1288
|
-
});
|
|
1289
|
-
});
|
|
1290
|
-
});
|
|
1291
|
-
});
|
|
1292
|
-
});
|