@corellium/corellium-cli 1.0.3 → 1.0.6

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.
Files changed (490) hide show
  1. package/README.md +5 -17
  2. package/docs/OVERVIEW.md +1 -1
  3. package/jenkinsbuild/build.sh +1 -1
  4. package/package.json +3 -3
  5. package/src/TrialAccount.js +76 -0
  6. package/src/commands/Client.js +2 -2
  7. package/src/commands/agent/Agent.js +10 -19
  8. package/src/commands/agent/apps.js +2 -1
  9. package/src/commands/agent/file.js +2 -1
  10. package/src/commands/agent/index.js +1 -0
  11. package/src/commands/agent/ready.js +43 -0
  12. package/src/commands/extensions/delete.js +2 -1
  13. package/src/commands/extensions/list.js +2 -1
  14. package/src/commands/extensions/load.js +2 -1
  15. package/src/commands/extensions/validate.js +2 -1
  16. package/src/commands/firmware/list.js +2 -1
  17. package/src/commands/firmware/load.js +2 -1
  18. package/src/commands/images/create.js +2 -1
  19. package/src/commands/images/delete.js +2 -1
  20. package/src/commands/images/list.js +2 -1
  21. package/src/commands/instances/Instance.js +27 -0
  22. package/src/commands/instances/create.js +11 -4
  23. package/src/commands/instances/delete.js +20 -5
  24. package/src/commands/instances/index.js +2 -1
  25. package/src/commands/instances/list.js +11 -5
  26. package/src/commands/instances/start.js +2 -1
  27. package/src/commands/instances/stop.js +2 -1
  28. package/src/commands/instances/upgrade.js +90 -0
  29. package/src/commands/login.js +14 -2
  30. package/src/commands/logout.js +2 -1
  31. package/src/commands/projects/create.js +2 -1
  32. package/src/commands/projects/delete.js +2 -1
  33. package/src/commands/projects/list.js +2 -1
  34. package/src/commands/signup.js +14 -5
  35. package/src/commands/webplayer/WebPlayer.js +2 -1
  36. package/src/commands/webplayer/create.js +8 -1
  37. package/src/commands/webplayer/destroy.js +2 -1
  38. package/src/commands/webplayer/list.js +19 -17
  39. package/src/commands/webplayer/login.js +2 -1
  40. package/src/error.js +14 -1
  41. package/src/logging.js +1 -1
  42. package/src/profile.js +12 -9
  43. package/src/resumable.js +1314 -0
  44. package/src/table.js +7 -2
  45. package/src/upload.js +64 -2
  46. package/src/utils.js +11 -4
  47. package/test/test.js +89 -0
  48. package/example/WebPlayerSample.js +0 -263
  49. package/node_modules/@corellium/corellium-api/README.md +0 -1210
  50. package/node_modules/@corellium/corellium-api/node_modules/form-data/License +0 -19
  51. package/node_modules/@corellium/corellium-api/node_modules/form-data/README.md.bak +0 -356
  52. package/node_modules/@corellium/corellium-api/node_modules/form-data/Readme.md +0 -356
  53. package/node_modules/@corellium/corellium-api/node_modules/form-data/index.d.ts +0 -62
  54. package/node_modules/@corellium/corellium-api/node_modules/form-data/lib/browser.js +0 -2
  55. package/node_modules/@corellium/corellium-api/node_modules/form-data/lib/form_data.js +0 -498
  56. package/node_modules/@corellium/corellium-api/node_modules/form-data/lib/populate.js +0 -10
  57. package/node_modules/@corellium/corellium-api/node_modules/form-data/package.json +0 -104
  58. package/node_modules/@corellium/corellium-api/node_modules/uuid/AUTHORS +0 -5
  59. package/node_modules/@corellium/corellium-api/node_modules/uuid/CHANGELOG.md +0 -119
  60. package/node_modules/@corellium/corellium-api/node_modules/uuid/LICENSE.md +0 -21
  61. package/node_modules/@corellium/corellium-api/node_modules/uuid/README.md +0 -276
  62. package/node_modules/@corellium/corellium-api/node_modules/uuid/bin/uuid +0 -65
  63. package/node_modules/@corellium/corellium-api/node_modules/uuid/index.js +0 -8
  64. package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/bytesToUuid.js +0 -26
  65. package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/md5-browser.js +0 -216
  66. package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/md5.js +0 -25
  67. package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/rng-browser.js +0 -34
  68. package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/rng.js +0 -8
  69. package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/sha1-browser.js +0 -89
  70. package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/sha1.js +0 -25
  71. package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/v35.js +0 -57
  72. package/node_modules/@corellium/corellium-api/node_modules/uuid/package.json +0 -103
  73. package/node_modules/@corellium/corellium-api/node_modules/uuid/v1.js +0 -109
  74. package/node_modules/@corellium/corellium-api/node_modules/uuid/v3.js +0 -4
  75. package/node_modules/@corellium/corellium-api/node_modules/uuid/v4.js +0 -29
  76. package/node_modules/@corellium/corellium-api/node_modules/uuid/v5.js +0 -3
  77. package/node_modules/@corellium/corellium-api/package.json +0 -106
  78. package/node_modules/@corellium/corellium-api/resumable.js +0 -1312
  79. package/node_modules/@corellium/corellium-api/src/agent.js +0 -962
  80. package/node_modules/@corellium/corellium-api/src/corellium.js +0 -444
  81. package/node_modules/@corellium/corellium-api/src/images.js +0 -131
  82. package/node_modules/@corellium/corellium-api/src/input.js +0 -178
  83. package/node_modules/@corellium/corellium-api/src/instance-updater.js +0 -56
  84. package/node_modules/@corellium/corellium-api/src/instance.js +0 -1031
  85. package/node_modules/@corellium/corellium-api/src/netmon.js +0 -308
  86. package/node_modules/@corellium/corellium-api/src/project.js +0 -393
  87. package/node_modules/@corellium/corellium-api/src/role.js +0 -65
  88. package/node_modules/@corellium/corellium-api/src/snapshot.js +0 -77
  89. package/node_modules/@corellium/corellium-api/src/team.js +0 -29
  90. package/node_modules/@corellium/corellium-api/src/user.js +0 -51
  91. package/node_modules/@corellium/corellium-api/src/util/fetch.js +0 -62
  92. package/node_modules/@corellium/corellium-api/src/util/sleep.js +0 -7
  93. package/node_modules/@corellium/corellium-api/test/integration-tests.js +0 -1292
  94. package/node_modules/@corellium/corellium-api/test/root-hook-set-flag-if-test-failed.js +0 -7
  95. package/node_modules/async-limiter/.eslintignore +0 -2
  96. package/node_modules/async-limiter/.nycrc +0 -10
  97. package/node_modules/async-limiter/.travis.yml +0 -9
  98. package/node_modules/async-limiter/LICENSE +0 -8
  99. package/node_modules/async-limiter/index.js +0 -67
  100. package/node_modules/async-limiter/package.json +0 -72
  101. package/node_modules/async-limiter/readme.md +0 -132
  102. package/node_modules/buffer-crc32/LICENSE +0 -19
  103. package/node_modules/buffer-crc32/README.md +0 -47
  104. package/node_modules/buffer-crc32/index.js +0 -111
  105. package/node_modules/buffer-crc32/package.json +0 -72
  106. package/node_modules/cross-fetch/LICENSE +0 -21
  107. package/node_modules/cross-fetch/README.md +0 -169
  108. package/node_modules/cross-fetch/dist/browser-polyfill.js +0 -532
  109. package/node_modules/cross-fetch/dist/browser-ponyfill.js +0 -554
  110. package/node_modules/cross-fetch/dist/cross-fetch.js +0 -2
  111. package/node_modules/cross-fetch/dist/cross-fetch.js.map +0 -1
  112. package/node_modules/cross-fetch/dist/node-polyfill.js +0 -11
  113. package/node_modules/cross-fetch/dist/node-ponyfill.js +0 -22
  114. package/node_modules/cross-fetch/dist/react-native-polyfill.js +0 -12
  115. package/node_modules/cross-fetch/dist/react-native-ponyfill.js +0 -6
  116. package/node_modules/cross-fetch/index.d.ts +0 -14
  117. package/node_modules/cross-fetch/package.json +0 -160
  118. package/node_modules/cross-fetch/polyfill/package.json +0 -8
  119. package/node_modules/duplexify/.travis.yml +0 -6
  120. package/node_modules/duplexify/LICENSE +0 -21
  121. package/node_modules/duplexify/README.md +0 -97
  122. package/node_modules/duplexify/example.js +0 -21
  123. package/node_modules/duplexify/index.js +0 -234
  124. package/node_modules/duplexify/package.json +0 -69
  125. package/node_modules/duplexify/test.js +0 -295
  126. package/node_modules/end-of-stream/LICENSE +0 -21
  127. package/node_modules/end-of-stream/README.md +0 -54
  128. package/node_modules/end-of-stream/index.js +0 -94
  129. package/node_modules/end-of-stream/package.json +0 -69
  130. package/node_modules/fast-stable-stringify/.npmignore +0 -4
  131. package/node_modules/fast-stable-stringify/.travis.yml +0 -10
  132. package/node_modules/fast-stable-stringify/LICENSE +0 -21
  133. package/node_modules/fast-stable-stringify/README.md +0 -81
  134. package/node_modules/fast-stable-stringify/cli/files-to-comparison-results.js +0 -67
  135. package/node_modules/fast-stable-stringify/cli/format-table.js +0 -70
  136. package/node_modules/fast-stable-stringify/cli/index.js +0 -19
  137. package/node_modules/fast-stable-stringify/fixtures/index.js +0 -5
  138. package/node_modules/fast-stable-stringify/fixtures/input-data-types.js +0 -191
  139. package/node_modules/fast-stable-stringify/fixtures/log-result.json +0 -22
  140. package/node_modules/fast-stable-stringify/fixtures/log.txt +0 -24
  141. package/node_modules/fast-stable-stringify/index.js +0 -73
  142. package/node_modules/fast-stable-stringify/karma.conf.js +0 -124
  143. package/node_modules/fast-stable-stringify/karma.conf.travis.js +0 -95
  144. package/node_modules/fast-stable-stringify/package.json +0 -77
  145. package/node_modules/fast-stable-stringify/results/escape-long/Chrome 60.0.3112 (Windows 7 0.0.0).json +0 -57
  146. package/node_modules/fast-stable-stringify/results/escape-long/Chrome Mobile 55.0.2883 (Android 6.0.0).json +0 -57
  147. package/node_modules/fast-stable-stringify/results/escape-long/Edge 14.14393.0 (Windows 10 0.0.0).json +0 -57
  148. package/node_modules/fast-stable-stringify/results/escape-long/Firefox 54.0.0 (Windows 7 0.0.0).json +0 -57
  149. package/node_modules/fast-stable-stringify/results/escape-long/IE 10.0.0 (Windows 7 0.0.0).json +0 -57
  150. package/node_modules/fast-stable-stringify/results/escape-long/IE 11.0.0 (Windows 7 0.0.0).json +0 -57
  151. package/node_modules/fast-stable-stringify/results/escape-long/IE 9.0.0 (Windows 7 0.0.0).json +0 -57
  152. package/node_modules/fast-stable-stringify/results/escape-long/Mobile Safari 10.0.0 (iOS 10.3.0).json +0 -57
  153. package/node_modules/fast-stable-stringify/results/escape-long/Safari 10.0.1 (Mac OS X 10.12.1).json +0 -57
  154. package/node_modules/fast-stable-stringify/results/escape-short/Chrome 60.0.3112 (Windows 7 0.0.0).json +0 -57
  155. package/node_modules/fast-stable-stringify/results/escape-short/Chrome Mobile 55.0.2883 (Android 6.0.0).json +0 -57
  156. package/node_modules/fast-stable-stringify/results/escape-short/Edge 14.14393.0 (Windows 10 0.0.0).json +0 -57
  157. package/node_modules/fast-stable-stringify/results/escape-short/Firefox 54.0.0 (Windows 7 0.0.0).json +0 -57
  158. package/node_modules/fast-stable-stringify/results/escape-short/IE 10.0.0 (Windows 7 0.0.0).json +0 -57
  159. package/node_modules/fast-stable-stringify/results/escape-short/IE 11.0.0 (Windows 7 0.0.0).json +0 -57
  160. package/node_modules/fast-stable-stringify/results/escape-short/IE 9.0.0 (Windows 7 0.0.0).json +0 -57
  161. package/node_modules/fast-stable-stringify/results/escape-short/Mobile Safari 10.0.0 (iOS 10.3.0).json +0 -57
  162. package/node_modules/fast-stable-stringify/results/escape-short/Safari 10.0.1 (Mac OS X 10.12.1).json +0 -57
  163. package/node_modules/fast-stable-stringify/results/escape.md +0 -20
  164. package/node_modules/fast-stable-stringify/results/itar-long/Chrome 60.0.3112 (Windows 7 0.0.0).json +0 -35
  165. package/node_modules/fast-stable-stringify/results/itar-long/Chrome Mobile 55.0.2883 (Android 6.0.0).json +0 -35
  166. package/node_modules/fast-stable-stringify/results/itar-long/Edge 14.14393.0 (Windows 10 0.0.0).json +0 -35
  167. package/node_modules/fast-stable-stringify/results/itar-long/Firefox 54.0.0 (Windows 7 0.0.0).json +0 -35
  168. package/node_modules/fast-stable-stringify/results/itar-long/IE 10.0.0 (Windows 7 0.0.0).json +0 -35
  169. package/node_modules/fast-stable-stringify/results/itar-long/IE 11.0.0 (Windows 7 0.0.0).json +0 -35
  170. package/node_modules/fast-stable-stringify/results/itar-long/IE 9.0.0 (Windows 7 0.0.0).json +0 -35
  171. package/node_modules/fast-stable-stringify/results/itar-long/Mobile Safari 10.0.0 (iOS 10.3.0).json +0 -35
  172. package/node_modules/fast-stable-stringify/results/itar-long/Safari 10.0.1 (Mac OS X 10.12.1).json +0 -35
  173. package/node_modules/fast-stable-stringify/results/itar-short/Chrome 60.0.3112 (Windows 7 0.0.0).json +0 -35
  174. package/node_modules/fast-stable-stringify/results/itar-short/Chrome Mobile 55.0.2883 (Android 6.0.0).json +0 -35
  175. package/node_modules/fast-stable-stringify/results/itar-short/Edge 14.14393.0 (Windows 10 0.0.0).json +0 -35
  176. package/node_modules/fast-stable-stringify/results/itar-short/Firefox 54.0.0 (Windows 7 0.0.0).json +0 -35
  177. package/node_modules/fast-stable-stringify/results/itar-short/IE 10.0.0 (Windows 7 0.0.0).json +0 -35
  178. package/node_modules/fast-stable-stringify/results/itar-short/IE 11.0.0 (Windows 7 0.0.0).json +0 -35
  179. package/node_modules/fast-stable-stringify/results/itar-short/IE 9.0.0 (Windows 7 0.0.0).json +0 -35
  180. package/node_modules/fast-stable-stringify/results/itar-short/Mobile Safari 10.0.0 (iOS 10.3.0).json +0 -35
  181. package/node_modules/fast-stable-stringify/results/itar-short/Safari 10.0.1 (Mac OS X 10.12.1).json +0 -35
  182. package/node_modules/fast-stable-stringify/results/itar.md +0 -20
  183. package/node_modules/fast-stable-stringify/results/iter/Chrome 60.0.3112 (Windows 7 0.0.0).json +0 -35
  184. package/node_modules/fast-stable-stringify/results/iter/Chrome Mobile 39.0.0 (Android 5.1.1).json +0 -35
  185. package/node_modules/fast-stable-stringify/results/iter/Chrome Mobile 55.0.2883 (Android 6.0.0).json +0 -35
  186. package/node_modules/fast-stable-stringify/results/iter/Edge 14.14393.0 (Windows 10 0.0.0).json +0 -35
  187. package/node_modules/fast-stable-stringify/results/iter/Firefox 54.0.0 (Windows 7 0.0.0).json +0 -35
  188. package/node_modules/fast-stable-stringify/results/iter/IE 10.0.0 (Windows 7 0.0.0).json +0 -35
  189. package/node_modules/fast-stable-stringify/results/iter/IE 11.0.0 (Windows 7 0.0.0).json +0 -35
  190. package/node_modules/fast-stable-stringify/results/iter/IE 9.0.0 (Windows 7 0.0.0).json +0 -35
  191. package/node_modules/fast-stable-stringify/results/iter/Mobile Safari 10.0.0 (iOS 10.3.0).json +0 -35
  192. package/node_modules/fast-stable-stringify/results/iter/Mobile Safari 9.0.0 (iOS 9.2.0).json +0 -35
  193. package/node_modules/fast-stable-stringify/results/iter/Safari 10.0.1 (Mac OS X 10.12.1).json +0 -35
  194. package/node_modules/fast-stable-stringify/results/iter/Safari 9.1.2 (Mac OS X 10.11.6).json +0 -35
  195. package/node_modules/fast-stable-stringify/results/iter.md +0 -14
  196. package/node_modules/fast-stable-stringify/results/libs/Chrome 60.0.3112 (Windows 7 0.0.0).json +0 -46
  197. package/node_modules/fast-stable-stringify/results/libs/Chrome Mobile 55.0.2883 (Android 6.0.0).json +0 -46
  198. package/node_modules/fast-stable-stringify/results/libs/Edge 14.14393.0 (Windows 10 0.0.0).json +0 -46
  199. package/node_modules/fast-stable-stringify/results/libs/Firefox 54.0.0 (Windows 7 0.0.0).json +0 -46
  200. package/node_modules/fast-stable-stringify/results/libs/IE 10.0.0 (Windows 7 0.0.0).json +0 -35
  201. package/node_modules/fast-stable-stringify/results/libs/IE 11.0.0 (Windows 7 0.0.0).json +0 -35
  202. package/node_modules/fast-stable-stringify/results/libs/IE 9.0.0 (Windows 7 0.0.0).json +0 -35
  203. package/node_modules/fast-stable-stringify/results/libs/Mobile Safari 10.0.0 (iOS 10.3.0).json +0 -46
  204. package/node_modules/fast-stable-stringify/results/libs/Safari 10.0.1 (Mac OS X 10.12.1).json +0 -46
  205. package/node_modules/fast-stable-stringify/results/libs.md +0 -15
  206. package/node_modules/fast-stable-stringify/test/escape-long.js +0 -147
  207. package/node_modules/fast-stable-stringify/test/escape-short.js +0 -147
  208. package/node_modules/fast-stable-stringify/test/index.js +0 -6
  209. package/node_modules/fast-stable-stringify/test/itar-long.js +0 -52
  210. package/node_modules/fast-stable-stringify/test/itar-short.js +0 -52
  211. package/node_modules/fast-stable-stringify/test/iter.js +0 -84
  212. package/node_modules/fast-stable-stringify/test/libs.js +0 -57
  213. package/node_modules/fast-stable-stringify/test/travis.js +0 -43
  214. package/node_modules/fast-stable-stringify/test/validate.js +0 -24
  215. package/node_modules/fast-stable-stringify/util/eachRecursive.js +0 -9
  216. package/node_modules/fast-stable-stringify/util/get-git-hash-sync.js +0 -21
  217. package/node_modules/fast-stable-stringify/util/get-lib-info.js +0 -22
  218. package/node_modules/fast-stable-stringify/util/object-path.js +0 -47
  219. package/node_modules/fast-stable-stringify/v8-profile/bench.js +0 -8
  220. package/node_modules/fast-stable-stringify/v8-profile/run.sh +0 -2
  221. package/node_modules/fast-stable-stringify/zuul-local.sh +0 -2
  222. package/node_modules/hkdf/.npmignore +0 -2
  223. package/node_modules/hkdf/README.md +0 -23
  224. package/node_modules/hkdf/hkdf.py +0 -171
  225. package/node_modules/hkdf/hkdf.pyc +0 -0
  226. package/node_modules/hkdf/index.js +0 -1
  227. package/node_modules/hkdf/lib/hkdf.js +0 -55
  228. package/node_modules/hkdf/package.json +0 -55
  229. package/node_modules/hkdf/scripts/run_all_tests.sh +0 -19
  230. package/node_modules/hkdf/test/all-test.js +0 -79
  231. package/node_modules/hkdf/test.py +0 -11
  232. package/node_modules/immediate/LICENSE.txt +0 -20
  233. package/node_modules/immediate/README.md +0 -93
  234. package/node_modules/immediate/dist/immediate.js +0 -75
  235. package/node_modules/immediate/dist/immediate.min.js +0 -1
  236. package/node_modules/immediate/lib/browser.js +0 -69
  237. package/node_modules/immediate/lib/index.js +0 -73
  238. package/node_modules/immediate/package.json +0 -86
  239. package/node_modules/isarray/.npmignore +0 -1
  240. package/node_modules/isarray/.travis.yml +0 -4
  241. package/node_modules/isarray/Makefile +0 -6
  242. package/node_modules/isarray/README.md +0 -60
  243. package/node_modules/isarray/component.json +0 -19
  244. package/node_modules/isarray/index.js +0 -5
  245. package/node_modules/isarray/package.json +0 -77
  246. package/node_modules/isarray/test.js +0 -20
  247. package/node_modules/jszip/.codeclimate.yml +0 -16
  248. package/node_modules/jszip/.editorconfig +0 -8
  249. package/node_modules/jszip/.github/workflows/pr.yaml +0 -41
  250. package/node_modules/jszip/.jshintignore +0 -1
  251. package/node_modules/jszip/.jshintrc +0 -21
  252. package/node_modules/jszip/.travis.yml +0 -17
  253. package/node_modules/jszip/CHANGES.md +0 -192
  254. package/node_modules/jszip/LICENSE.markdown +0 -651
  255. package/node_modules/jszip/README.markdown +0 -33
  256. package/node_modules/jszip/dist/jszip.js +0 -11583
  257. package/node_modules/jszip/dist/jszip.min.js +0 -13
  258. package/node_modules/jszip/index.d.ts +0 -335
  259. package/node_modules/jszip/lib/base64.js +0 -106
  260. package/node_modules/jszip/lib/compressedObject.js +0 -74
  261. package/node_modules/jszip/lib/compressions.js +0 -14
  262. package/node_modules/jszip/lib/crc32.js +0 -77
  263. package/node_modules/jszip/lib/defaults.js +0 -11
  264. package/node_modules/jszip/lib/external.js +0 -19
  265. package/node_modules/jszip/lib/flate.js +0 -85
  266. package/node_modules/jszip/lib/generate/ZipFileWorker.js +0 -540
  267. package/node_modules/jszip/lib/generate/index.js +0 -57
  268. package/node_modules/jszip/lib/index.js +0 -55
  269. package/node_modules/jszip/lib/license_header.js +0 -11
  270. package/node_modules/jszip/lib/load.js +0 -88
  271. package/node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js +0 -74
  272. package/node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js +0 -42
  273. package/node_modules/jszip/lib/nodejsUtils.js +0 -57
  274. package/node_modules/jszip/lib/object.js +0 -389
  275. package/node_modules/jszip/lib/readable-stream-browser.js +0 -9
  276. package/node_modules/jszip/lib/reader/ArrayReader.js +0 -57
  277. package/node_modules/jszip/lib/reader/DataReader.js +0 -116
  278. package/node_modules/jszip/lib/reader/NodeBufferReader.js +0 -19
  279. package/node_modules/jszip/lib/reader/StringReader.js +0 -38
  280. package/node_modules/jszip/lib/reader/Uint8ArrayReader.js +0 -22
  281. package/node_modules/jszip/lib/reader/readerFor.js +0 -28
  282. package/node_modules/jszip/lib/signature.js +0 -7
  283. package/node_modules/jszip/lib/stream/ConvertWorker.js +0 -26
  284. package/node_modules/jszip/lib/stream/Crc32Probe.js +0 -24
  285. package/node_modules/jszip/lib/stream/DataLengthProbe.js +0 -29
  286. package/node_modules/jszip/lib/stream/DataWorker.js +0 -116
  287. package/node_modules/jszip/lib/stream/GenericWorker.js +0 -263
  288. package/node_modules/jszip/lib/stream/StreamHelper.js +0 -212
  289. package/node_modules/jszip/lib/support.js +0 -38
  290. package/node_modules/jszip/lib/utf8.js +0 -275
  291. package/node_modules/jszip/lib/utils.js +0 -501
  292. package/node_modules/jszip/lib/zipEntries.js +0 -262
  293. package/node_modules/jszip/lib/zipEntry.js +0 -294
  294. package/node_modules/jszip/lib/zipObject.js +0 -133
  295. package/node_modules/jszip/package.json +0 -99
  296. package/node_modules/jszip/tsconfig.json +0 -101
  297. package/node_modules/jszip/vendor/FileSaver.js +0 -247
  298. package/node_modules/lie/README.md +0 -62
  299. package/node_modules/lie/dist/lie.js +0 -350
  300. package/node_modules/lie/dist/lie.min.js +0 -1
  301. package/node_modules/lie/dist/lie.polyfill.js +0 -358
  302. package/node_modules/lie/dist/lie.polyfill.min.js +0 -1
  303. package/node_modules/lie/lib/browser.js +0 -273
  304. package/node_modules/lie/lib/index.js +0 -298
  305. package/node_modules/lie/license.md +0 -7
  306. package/node_modules/lie/lie.d.ts +0 -244
  307. package/node_modules/lie/package.json +0 -98
  308. package/node_modules/lie/polyfill.js +0 -4
  309. package/node_modules/p-finally/index.js +0 -15
  310. package/node_modules/p-finally/license +0 -21
  311. package/node_modules/p-finally/package.json +0 -77
  312. package/node_modules/p-finally/readme.md +0 -47
  313. package/node_modules/p-retry/index.js +0 -52
  314. package/node_modules/p-retry/license +0 -9
  315. package/node_modules/p-retry/package.json +0 -83
  316. package/node_modules/p-retry/readme.md +0 -109
  317. package/node_modules/p-timeout/index.d.ts +0 -72
  318. package/node_modules/p-timeout/index.js +0 -57
  319. package/node_modules/p-timeout/license +0 -9
  320. package/node_modules/p-timeout/package.json +0 -80
  321. package/node_modules/p-timeout/readme.md +0 -87
  322. package/node_modules/pako/CHANGELOG.md +0 -164
  323. package/node_modules/pako/LICENSE +0 -21
  324. package/node_modules/pako/README.md +0 -191
  325. package/node_modules/pako/dist/pako.js +0 -6818
  326. package/node_modules/pako/dist/pako.min.js +0 -1
  327. package/node_modules/pako/dist/pako_deflate.js +0 -3997
  328. package/node_modules/pako/dist/pako_deflate.min.js +0 -1
  329. package/node_modules/pako/dist/pako_inflate.js +0 -3300
  330. package/node_modules/pako/dist/pako_inflate.min.js +0 -1
  331. package/node_modules/pako/index.js +0 -14
  332. package/node_modules/pako/lib/deflate.js +0 -400
  333. package/node_modules/pako/lib/inflate.js +0 -423
  334. package/node_modules/pako/lib/utils/common.js +0 -105
  335. package/node_modules/pako/lib/utils/strings.js +0 -187
  336. package/node_modules/pako/lib/zlib/README +0 -59
  337. package/node_modules/pako/lib/zlib/adler32.js +0 -51
  338. package/node_modules/pako/lib/zlib/constants.js +0 -68
  339. package/node_modules/pako/lib/zlib/crc32.js +0 -59
  340. package/node_modules/pako/lib/zlib/deflate.js +0 -1874
  341. package/node_modules/pako/lib/zlib/gzheader.js +0 -58
  342. package/node_modules/pako/lib/zlib/inffast.js +0 -345
  343. package/node_modules/pako/lib/zlib/inflate.js +0 -1556
  344. package/node_modules/pako/lib/zlib/inftrees.js +0 -343
  345. package/node_modules/pako/lib/zlib/messages.js +0 -32
  346. package/node_modules/pako/lib/zlib/trees.js +0 -1222
  347. package/node_modules/pako/lib/zlib/zstream.js +0 -47
  348. package/node_modules/pako/package.json +0 -94
  349. package/node_modules/process-nextick-args/index.js +0 -45
  350. package/node_modules/process-nextick-args/license.md +0 -19
  351. package/node_modules/process-nextick-args/package.json +0 -53
  352. package/node_modules/process-nextick-args/readme.md +0 -18
  353. package/node_modules/readable-stream/.travis.yml +0 -34
  354. package/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  355. package/node_modules/readable-stream/GOVERNANCE.md +0 -136
  356. package/node_modules/readable-stream/LICENSE +0 -47
  357. package/node_modules/readable-stream/README.md +0 -58
  358. package/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +0 -60
  359. package/node_modules/readable-stream/duplex-browser.js +0 -1
  360. package/node_modules/readable-stream/duplex.js +0 -1
  361. package/node_modules/readable-stream/lib/_stream_duplex.js +0 -131
  362. package/node_modules/readable-stream/lib/_stream_passthrough.js +0 -47
  363. package/node_modules/readable-stream/lib/_stream_readable.js +0 -1019
  364. package/node_modules/readable-stream/lib/_stream_transform.js +0 -214
  365. package/node_modules/readable-stream/lib/_stream_writable.js +0 -687
  366. package/node_modules/readable-stream/lib/internal/streams/BufferList.js +0 -79
  367. package/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -74
  368. package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  369. package/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  370. package/node_modules/readable-stream/package.json +0 -86
  371. package/node_modules/readable-stream/passthrough.js +0 -1
  372. package/node_modules/readable-stream/readable-browser.js +0 -7
  373. package/node_modules/readable-stream/readable.js +0 -19
  374. package/node_modules/readable-stream/transform.js +0 -1
  375. package/node_modules/readable-stream/writable-browser.js +0 -1
  376. package/node_modules/readable-stream/writable.js +0 -8
  377. package/node_modules/retry/.npmignore +0 -3
  378. package/node_modules/retry/.travis.yml +0 -15
  379. package/node_modules/retry/License +0 -21
  380. package/node_modules/retry/Makefile +0 -18
  381. package/node_modules/retry/README.md +0 -227
  382. package/node_modules/retry/equation.gif +0 -0
  383. package/node_modules/retry/example/dns.js +0 -31
  384. package/node_modules/retry/example/stop.js +0 -40
  385. package/node_modules/retry/index.js +0 -1
  386. package/node_modules/retry/lib/retry.js +0 -100
  387. package/node_modules/retry/lib/retry_operation.js +0 -158
  388. package/node_modules/retry/package.json +0 -67
  389. package/node_modules/retry/test/common.js +0 -10
  390. package/node_modules/retry/test/integration/test-forever.js +0 -24
  391. package/node_modules/retry/test/integration/test-retry-operation.js +0 -258
  392. package/node_modules/retry/test/integration/test-retry-wrap.js +0 -101
  393. package/node_modules/retry/test/integration/test-timeouts.js +0 -69
  394. package/node_modules/setimmediate/LICENSE.txt +0 -20
  395. package/node_modules/setimmediate/package.json +0 -77
  396. package/node_modules/setimmediate/setImmediate.js +0 -186
  397. package/node_modules/split/.npmignore +0 -3
  398. package/node_modules/split/.travis.yml +0 -3
  399. package/node_modules/split/LICENCE +0 -22
  400. package/node_modules/split/examples/pretty.js +0 -26
  401. package/node_modules/split/index.js +0 -63
  402. package/node_modules/split/package.json +0 -65
  403. package/node_modules/split/readme.markdown +0 -72
  404. package/node_modules/split/test/options.asynct.js +0 -46
  405. package/node_modules/split/test/partitioned_unicode.js +0 -34
  406. package/node_modules/split/test/split.asynct.js +0 -137
  407. package/node_modules/split/test/try_catch.asynct.js +0 -51
  408. package/node_modules/stream-shift/.travis.yml +0 -6
  409. package/node_modules/stream-shift/LICENSE +0 -21
  410. package/node_modules/stream-shift/README.md +0 -25
  411. package/node_modules/stream-shift/index.js +0 -20
  412. package/node_modules/stream-shift/package.json +0 -56
  413. package/node_modules/stream-shift/test.js +0 -48
  414. package/node_modules/ultron/LICENSE +0 -22
  415. package/node_modules/ultron/README.md +0 -113
  416. package/node_modules/ultron/index.js +0 -136
  417. package/node_modules/ultron/package.json +0 -71
  418. package/node_modules/websocket-stream/LICENSE +0 -8
  419. package/node_modules/websocket-stream/collaborators.md +0 -11
  420. package/node_modules/websocket-stream/echo-server.js +0 -51
  421. package/node_modules/websocket-stream/index.d.ts +0 -27
  422. package/node_modules/websocket-stream/index.js +0 -6
  423. package/node_modules/websocket-stream/package.json +0 -82
  424. package/node_modules/websocket-stream/readme.md +0 -148
  425. package/node_modules/websocket-stream/server.js +0 -29
  426. package/node_modules/websocket-stream/stream.js +0 -189
  427. package/node_modules/websocket-stream/test-client.js +0 -74
  428. package/node_modules/websocket-stream/test-server.js +0 -56
  429. package/node_modules/websocket-stream/test.js +0 -338
  430. package/node_modules/websocket-stream/ts-tests.ts +0 -69
  431. package/node_modules/websocket-stream/ws-fallback.js +0 -12
  432. package/node_modules/ws/LICENSE +0 -21
  433. package/node_modules/ws/README.md +0 -341
  434. package/node_modules/ws/index.js +0 -15
  435. package/node_modules/ws/lib/.DS_Store +0 -0
  436. package/node_modules/ws/lib/BufferUtil.js +0 -71
  437. package/node_modules/ws/lib/Constants.js +0 -10
  438. package/node_modules/ws/lib/ErrorCodes.js +0 -28
  439. package/node_modules/ws/lib/EventTarget.js +0 -151
  440. package/node_modules/ws/lib/Extensions.js +0 -203
  441. package/node_modules/ws/lib/PerMessageDeflate.js +0 -507
  442. package/node_modules/ws/lib/Receiver.js +0 -553
  443. package/node_modules/ws/lib/Sender.js +0 -412
  444. package/node_modules/ws/lib/Validation.js +0 -17
  445. package/node_modules/ws/lib/WebSocket.js +0 -717
  446. package/node_modules/ws/lib/WebSocketServer.js +0 -326
  447. package/node_modules/ws/package.json +0 -83
  448. package/node_modules/xhr2/CONTRIBUTING.md +0 -33
  449. package/node_modules/xhr2/Cakefile +0 -131
  450. package/node_modules/xhr2/LICENSE.txt +0 -19
  451. package/node_modules/xhr2/README.md +0 -142
  452. package/node_modules/xhr2/lib/browser.js +0 -1
  453. package/node_modules/xhr2/lib/xhr2.js +0 -1244
  454. package/node_modules/xhr2/package.json +0 -103
  455. package/node_modules/xhr2/src/000-xml_http_request_event_target.coffee +0 -89
  456. package/node_modules/xhr2/src/001-xml_http_request.coffee +0 -781
  457. package/node_modules/xhr2/src/errors.coffee +0 -31
  458. package/node_modules/xhr2/src/progress_event.coffee +0 -39
  459. package/node_modules/xhr2/src/xml_http_request_upload.coffee +0 -95
  460. package/node_modules/xhr2/test/fixtures/hello.json +0 -1
  461. package/node_modules/xhr2/test/fixtures/hello.txt +0 -1
  462. package/node_modules/xhr2/test/fixtures/xhr2.png +0 -0
  463. package/node_modules/xhr2/test/html/browser_test.html +0 -30
  464. package/node_modules/xhr2/test/src/event_target_test.coffee +0 -85
  465. package/node_modules/xhr2/test/src/events_test.coffee +0 -204
  466. package/node_modules/xhr2/test/src/headers_test.coffee +0 -168
  467. package/node_modules/xhr2/test/src/helpers/browser_mocha_runner.coffee +0 -10
  468. package/node_modules/xhr2/test/src/helpers/browser_mocha_setup.coffee +0 -1
  469. package/node_modules/xhr2/test/src/helpers/setup.coffee +0 -38
  470. package/node_modules/xhr2/test/src/helpers/xhr_server.coffee +0 -156
  471. package/node_modules/xhr2/test/src/nodejs_set_test.coffee +0 -162
  472. package/node_modules/xhr2/test/src/redirect_test.coffee +0 -57
  473. package/node_modules/xhr2/test/src/response_type_test.coffee +0 -88
  474. package/node_modules/xhr2/test/src/responseurl_test.coffee +0 -18
  475. package/node_modules/xhr2/test/src/send_test.coffee +0 -89
  476. package/node_modules/xhr2/test/src/status_test.coffee +0 -47
  477. package/node_modules/xhr2/test/src/xhr_test.coffee +0 -102
  478. package/node_modules/xtend/.jshintrc +0 -30
  479. package/node_modules/xtend/LICENSE +0 -20
  480. package/node_modules/xtend/README.md +0 -32
  481. package/node_modules/xtend/immutable.js +0 -19
  482. package/node_modules/xtend/mutable.js +0 -17
  483. package/node_modules/xtend/package.json +0 -89
  484. package/node_modules/xtend/test.js +0 -103
  485. package/node_modules/yazl/LICENSE +0 -21
  486. package/node_modules/yazl/README.md +0 -389
  487. package/node_modules/yazl/index.js +0 -749
  488. package/node_modules/yazl/package.json +0 -69
  489. package/src/commands/CorelliumAPI.js +0 -76
  490. 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
- });