@cloudant/couchbackup 2.9.11 → 2.9.12-SNAPSHOT.124

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 (392) hide show
  1. package/.scannerwork/report-task.txt +2 -2
  2. package/.scannerwork/scanner-report/analysis-warnings.pb +2 -2
  3. package/.scannerwork/scanner-report/changesets-16.pb +1 -0
  4. package/.scannerwork/scanner-report/changesets-17.pb +1 -0
  5. package/.scannerwork/scanner-report/changesets-18.pb +1 -0
  6. package/.scannerwork/scanner-report/changesets-20.pb +1 -0
  7. package/.scannerwork/scanner-report/changesets-22.pb +1 -0
  8. package/.scannerwork/scanner-report/changesets-26.pb +1 -0
  9. package/.scannerwork/scanner-report/changesets-27.pb +1 -0
  10. package/.scannerwork/scanner-report/changesets-32.pb +1 -0
  11. package/.scannerwork/scanner-report/changesets-33.pb +1 -0
  12. package/.scannerwork/scanner-report/changesets-34.pb +1 -0
  13. package/.scannerwork/scanner-report/changesets-35.pb +1 -0
  14. package/.scannerwork/scanner-report/changesets-36.pb +1 -0
  15. package/.scannerwork/scanner-report/changesets-57.pb +1 -0
  16. package/.scannerwork/scanner-report/changesets-60.pb +1 -0
  17. package/.scannerwork/scanner-report/changesets-61.pb +1 -0
  18. package/.scannerwork/scanner-report/changesets-63.pb +1 -0
  19. package/.scannerwork/scanner-report/changesets-64.pb +1 -0
  20. package/.scannerwork/scanner-report/component-1.pb +2 -2
  21. package/.scannerwork/scanner-report/component-10.pb +1 -1
  22. package/.scannerwork/scanner-report/component-11.pb +1 -1
  23. package/.scannerwork/scanner-report/component-12.pb +1 -1
  24. package/.scannerwork/scanner-report/component-13.pb +1 -1
  25. package/.scannerwork/scanner-report/component-15.pb +1 -1
  26. package/.scannerwork/scanner-report/component-16.pb +1 -1
  27. package/.scannerwork/scanner-report/component-17.pb +1 -0
  28. package/.scannerwork/scanner-report/component-18.pb +1 -1
  29. package/.scannerwork/scanner-report/component-19.pb +1 -1
  30. package/.scannerwork/scanner-report/component-2.pb +1 -1
  31. package/.scannerwork/scanner-report/component-20.pb +1 -0
  32. package/.scannerwork/scanner-report/component-22.pb +1 -0
  33. package/.scannerwork/scanner-report/component-24.pb +1 -1
  34. package/.scannerwork/scanner-report/component-26.pb +1 -0
  35. package/.scannerwork/scanner-report/component-27.pb +1 -0
  36. package/.scannerwork/scanner-report/component-3.pb +1 -1
  37. package/.scannerwork/scanner-report/component-32.pb +1 -0
  38. package/.scannerwork/scanner-report/component-33.pb +1 -0
  39. package/.scannerwork/scanner-report/component-34.pb +1 -0
  40. package/.scannerwork/scanner-report/component-35.pb +1 -0
  41. package/.scannerwork/scanner-report/component-36.pb +1 -0
  42. package/.scannerwork/scanner-report/component-37.pb +1 -1
  43. package/.scannerwork/scanner-report/component-38.pb +1 -1
  44. package/.scannerwork/scanner-report/component-39.pb +1 -1
  45. package/.scannerwork/scanner-report/component-40.pb +1 -1
  46. package/.scannerwork/scanner-report/component-5.pb +1 -1
  47. package/.scannerwork/scanner-report/component-52.pb +1 -1
  48. package/.scannerwork/scanner-report/component-53.pb +1 -1
  49. package/.scannerwork/scanner-report/component-54.pb +1 -1
  50. package/.scannerwork/scanner-report/component-55.pb +1 -1
  51. package/.scannerwork/scanner-report/component-56.pb +1 -1
  52. package/.scannerwork/scanner-report/component-57.pb +1 -0
  53. package/.scannerwork/scanner-report/component-58.pb +1 -1
  54. package/.scannerwork/scanner-report/component-59.pb +1 -1
  55. package/.scannerwork/scanner-report/component-6.pb +1 -1
  56. package/.scannerwork/scanner-report/component-60.pb +1 -0
  57. package/.scannerwork/scanner-report/component-61.pb +1 -0
  58. package/.scannerwork/scanner-report/component-62.pb +1 -1
  59. package/.scannerwork/scanner-report/component-63.pb +1 -1
  60. package/.scannerwork/scanner-report/component-64.pb +1 -0
  61. package/.scannerwork/scanner-report/component-67.pb +1 -1
  62. package/.scannerwork/scanner-report/component-7.pb +1 -1
  63. package/.scannerwork/scanner-report/component-9.pb +1 -1
  64. package/.scannerwork/scanner-report/coverages-10.pb +0 -0
  65. package/.scannerwork/scanner-report/coverages-11.pb +0 -0
  66. package/.scannerwork/scanner-report/coverages-12.pb +0 -0
  67. package/.scannerwork/scanner-report/coverages-13.pb +0 -0
  68. package/.scannerwork/scanner-report/coverages-15.pb +0 -0
  69. package/.scannerwork/scanner-report/coverages-16.pb +0 -0
  70. package/.scannerwork/scanner-report/coverages-18.pb +0 -0
  71. package/.scannerwork/scanner-report/coverages-19.pb +0 -0
  72. package/.scannerwork/scanner-report/coverages-22.pb +0 -0
  73. package/.scannerwork/scanner-report/coverages-24.pb +0 -0
  74. package/.scannerwork/scanner-report/coverages-27.pb +0 -0
  75. package/.scannerwork/scanner-report/coverages-3.pb +0 -0
  76. package/.scannerwork/scanner-report/coverages-33.pb +0 -0
  77. package/.scannerwork/scanner-report/coverages-35.pb +0 -0
  78. package/.scannerwork/scanner-report/coverages-36.pb +0 -0
  79. package/.scannerwork/scanner-report/coverages-37.pb +0 -0
  80. package/.scannerwork/scanner-report/coverages-38.pb +0 -0
  81. package/.scannerwork/scanner-report/coverages-39.pb +0 -0
  82. package/.scannerwork/scanner-report/coverages-40.pb +0 -0
  83. package/.scannerwork/scanner-report/coverages-52.pb +0 -0
  84. package/.scannerwork/scanner-report/coverages-53.pb +0 -0
  85. package/.scannerwork/scanner-report/coverages-54.pb +0 -0
  86. package/.scannerwork/scanner-report/coverages-55.pb +0 -0
  87. package/.scannerwork/scanner-report/coverages-56.pb +0 -0
  88. package/.scannerwork/scanner-report/coverages-57.pb +0 -0
  89. package/.scannerwork/scanner-report/coverages-58.pb +0 -0
  90. package/.scannerwork/scanner-report/coverages-59.pb +0 -0
  91. package/.scannerwork/scanner-report/coverages-60.pb +0 -0
  92. package/.scannerwork/scanner-report/coverages-62.pb +0 -0
  93. package/.scannerwork/scanner-report/coverages-64.pb +0 -0
  94. package/.scannerwork/scanner-report/coverages-67.pb +0 -0
  95. package/.scannerwork/scanner-report/coverages-7.pb +0 -0
  96. package/.scannerwork/scanner-report/coverages-9.pb +0 -0
  97. package/.scannerwork/scanner-report/duplications-12.pb +0 -2
  98. package/.scannerwork/scanner-report/duplications-13.pb +0 -2
  99. package/.scannerwork/scanner-report/duplications-19.pb +2 -0
  100. package/.scannerwork/scanner-report/duplications-22.pb +2 -0
  101. package/.scannerwork/scanner-report/duplications-24.pb +2 -3
  102. package/.scannerwork/scanner-report/duplications-33.pb +2 -0
  103. package/.scannerwork/scanner-report/duplications-37.pb +3 -0
  104. package/.scannerwork/scanner-report/duplications-38.pb +0 -2
  105. package/.scannerwork/scanner-report/duplications-52.pb +3 -0
  106. package/.scannerwork/scanner-report/duplications-53.pb +2 -0
  107. package/.scannerwork/scanner-report/duplications-56.pb +0 -2
  108. package/.scannerwork/scanner-report/duplications-59.pb +0 -2
  109. package/.scannerwork/scanner-report/duplications-60.pb +3 -0
  110. package/.scannerwork/scanner-report/duplications-62.pb +2 -0
  111. package/.scannerwork/scanner-report/duplications-7.pb +2 -0
  112. package/.scannerwork/scanner-report/measures-10.pb +0 -0
  113. package/.scannerwork/scanner-report/measures-11.pb +0 -0
  114. package/.scannerwork/scanner-report/measures-12.pb +0 -0
  115. package/.scannerwork/scanner-report/measures-13.pb +0 -0
  116. package/.scannerwork/scanner-report/measures-15.pb +0 -0
  117. package/.scannerwork/scanner-report/measures-16.pb +0 -0
  118. package/.scannerwork/scanner-report/measures-17.pb +16 -0
  119. package/.scannerwork/scanner-report/measures-18.pb +0 -0
  120. package/.scannerwork/scanner-report/measures-19.pb +0 -0
  121. package/.scannerwork/scanner-report/measures-2.pb +0 -0
  122. package/.scannerwork/scanner-report/measures-22.pb +0 -0
  123. package/.scannerwork/scanner-report/measures-24.pb +0 -0
  124. package/.scannerwork/scanner-report/measures-27.pb +0 -0
  125. package/.scannerwork/scanner-report/measures-3.pb +0 -0
  126. package/.scannerwork/scanner-report/measures-33.pb +15 -0
  127. package/.scannerwork/scanner-report/measures-35.pb +0 -0
  128. package/.scannerwork/scanner-report/measures-36.pb +0 -0
  129. package/.scannerwork/scanner-report/measures-37.pb +0 -0
  130. package/.scannerwork/scanner-report/measures-38.pb +0 -0
  131. package/.scannerwork/scanner-report/measures-39.pb +0 -0
  132. package/.scannerwork/scanner-report/measures-40.pb +0 -0
  133. package/.scannerwork/scanner-report/measures-5.pb +0 -0
  134. package/.scannerwork/scanner-report/measures-52.pb +0 -0
  135. package/.scannerwork/scanner-report/measures-53.pb +0 -0
  136. package/.scannerwork/scanner-report/measures-54.pb +0 -0
  137. package/.scannerwork/scanner-report/measures-55.pb +0 -0
  138. package/.scannerwork/scanner-report/measures-56.pb +0 -0
  139. package/.scannerwork/scanner-report/measures-57.pb +0 -0
  140. package/.scannerwork/scanner-report/measures-58.pb +0 -0
  141. package/.scannerwork/scanner-report/measures-59.pb +0 -0
  142. package/.scannerwork/scanner-report/measures-6.pb +0 -0
  143. package/.scannerwork/scanner-report/measures-60.pb +0 -0
  144. package/.scannerwork/scanner-report/measures-62.pb +0 -0
  145. package/.scannerwork/scanner-report/measures-63.pb +0 -0
  146. package/.scannerwork/scanner-report/measures-64.pb +0 -0
  147. package/.scannerwork/scanner-report/measures-67.pb +0 -0
  148. package/.scannerwork/scanner-report/measures-7.pb +0 -0
  149. package/.scannerwork/scanner-report/measures-9.pb +0 -0
  150. package/.scannerwork/scanner-report/metadata.pb +0 -0
  151. package/.scannerwork/scanner-report/source-10.txt +37 -147
  152. package/.scannerwork/scanner-report/source-11.txt +25 -59
  153. package/.scannerwork/scanner-report/source-12.txt +86 -50
  154. package/.scannerwork/scanner-report/source-13.txt +59 -71
  155. package/.scannerwork/scanner-report/source-15.txt +98 -34
  156. package/.scannerwork/scanner-report/source-16.txt +164 -167
  157. package/.scannerwork/scanner-report/source-17.txt +178 -0
  158. package/.scannerwork/scanner-report/source-18.txt +281 -509
  159. package/.scannerwork/scanner-report/source-19.txt +52 -395
  160. package/.scannerwork/scanner-report/source-2.txt +167 -178
  161. package/.scannerwork/scanner-report/source-22.txt +190 -0
  162. package/.scannerwork/scanner-report/source-24.txt +156 -225
  163. package/.scannerwork/scanner-report/source-27.txt +77 -0
  164. package/.scannerwork/scanner-report/source-3.txt +96 -100
  165. package/.scannerwork/scanner-report/source-33.txt +293 -0
  166. package/.scannerwork/scanner-report/source-35.txt +68 -0
  167. package/.scannerwork/scanner-report/source-36.txt +36 -0
  168. package/.scannerwork/scanner-report/source-37.txt +96 -6
  169. package/.scannerwork/scanner-report/source-38.txt +120 -189
  170. package/.scannerwork/scanner-report/source-39.txt +606 -17
  171. package/.scannerwork/scanner-report/source-40.txt +11 -38
  172. package/.scannerwork/scanner-report/source-5.txt +509 -46
  173. package/.scannerwork/scanner-report/source-52.txt +101 -62
  174. package/.scannerwork/scanner-report/source-53.txt +126 -28
  175. package/.scannerwork/scanner-report/source-54.txt +41 -598
  176. package/.scannerwork/scanner-report/source-55.txt +125 -51
  177. package/.scannerwork/scanner-report/source-56.txt +108 -254
  178. package/.scannerwork/scanner-report/source-57.txt +92 -0
  179. package/.scannerwork/scanner-report/source-58.txt +11 -172
  180. package/.scannerwork/scanner-report/source-59.txt +40 -152
  181. package/.scannerwork/scanner-report/source-6.txt +509 -104
  182. package/.scannerwork/scanner-report/source-60.txt +244 -0
  183. package/.scannerwork/scanner-report/source-62.txt +200 -89
  184. package/.scannerwork/scanner-report/source-63.txt +100 -509
  185. package/.scannerwork/scanner-report/source-64.txt +47 -0
  186. package/.scannerwork/scanner-report/source-67.txt +395 -54
  187. package/.scannerwork/scanner-report/source-7.txt +65 -254
  188. package/.scannerwork/scanner-report/source-9.txt +81 -88
  189. package/.scannerwork/scanner-report/symbols-10.pb +15 -126
  190. package/.scannerwork/scanner-report/symbols-11.pb +19 -45
  191. package/.scannerwork/scanner-report/symbols-12.pb +58 -41
  192. package/.scannerwork/scanner-report/symbols-13.pb +45 -43
  193. package/.scannerwork/scanner-report/symbols-15.pb +30 -15
  194. package/.scannerwork/scanner-report/symbols-16.pb +126 -0
  195. package/.scannerwork/scanner-report/symbols-18.pb +354 -0
  196. package/.scannerwork/scanner-report/symbols-19.pb +42 -610
  197. package/.scannerwork/scanner-report/symbols-22.pb +180 -0
  198. package/.scannerwork/scanner-report/symbols-24.pb +145 -386
  199. package/.scannerwork/scanner-report/symbols-27.pb +30 -0
  200. package/.scannerwork/scanner-report/symbols-3.pb +27 -29
  201. package/.scannerwork/scanner-report/symbols-33.pb +486 -0
  202. package/.scannerwork/scanner-report/symbols-35.pb +36 -0
  203. package/.scannerwork/scanner-report/symbols-36.pb +11 -0
  204. package/.scannerwork/scanner-report/symbols-37.pb +77 -9
  205. package/.scannerwork/scanner-report/symbols-38.pb +104 -410
  206. package/.scannerwork/scanner-report/symbols-39.pb +1254 -11
  207. package/.scannerwork/scanner-report/symbols-40.pb +14 -43
  208. package/.scannerwork/scanner-report/symbols-52.pb +97 -60
  209. package/.scannerwork/scanner-report/symbols-53.pb +102 -27
  210. package/.scannerwork/scanner-report/symbols-54.pb +44 -1253
  211. package/.scannerwork/scanner-report/symbols-55.pb +116 -36
  212. package/.scannerwork/scanner-report/symbols-56.pb +85 -486
  213. package/.scannerwork/scanner-report/symbols-57.pb +60 -0
  214. package/.scannerwork/scanner-report/symbols-58.pb +9 -180
  215. package/.scannerwork/scanner-report/symbols-59.pb +42 -152
  216. package/.scannerwork/scanner-report/symbols-60.pb +394 -0
  217. package/.scannerwork/scanner-report/symbols-62.pb +417 -27
  218. package/.scannerwork/scanner-report/symbols-64.pb +27 -0
  219. package/.scannerwork/scanner-report/symbols-67.pb +610 -30
  220. package/.scannerwork/scanner-report/symbols-7.pb +44 -354
  221. package/.scannerwork/scanner-report/symbols-9.pb +41 -58
  222. package/.scannerwork/scanner-report/syntax-highlightings-10.pb +20 -179
  223. package/.scannerwork/scanner-report/syntax-highlightings-11.pb +30 -61
  224. package/.scannerwork/scanner-report/syntax-highlightings-12.pb +94 -39
  225. package/.scannerwork/scanner-report/syntax-highlightings-13.pb +57 -52
  226. package/.scannerwork/scanner-report/syntax-highlightings-15.pb +81 -22
  227. package/.scannerwork/scanner-report/syntax-highlightings-16.pb +192 -927
  228. package/.scannerwork/scanner-report/syntax-highlightings-17.pb +243 -0
  229. package/.scannerwork/scanner-report/syntax-highlightings-18.pb +199 -3662
  230. package/.scannerwork/scanner-report/syntax-highlightings-19.pb +47 -617
  231. package/.scannerwork/scanner-report/syntax-highlightings-2.pb +915 -209
  232. package/.scannerwork/scanner-report/syntax-highlightings-22.pb +225 -0
  233. package/.scannerwork/scanner-report/syntax-highlightings-24.pb +169 -284
  234. package/.scannerwork/scanner-report/syntax-highlightings-27.pb +103 -0
  235. package/.scannerwork/scanner-report/syntax-highlightings-3.pb +104 -79
  236. package/.scannerwork/scanner-report/syntax-highlightings-33.pb +659 -0
  237. package/.scannerwork/scanner-report/syntax-highlightings-35.pb +95 -0
  238. package/.scannerwork/scanner-report/syntax-highlightings-36.pb +59 -0
  239. package/.scannerwork/scanner-report/syntax-highlightings-37.pb +123 -13
  240. package/.scannerwork/scanner-report/syntax-highlightings-38.pb +162 -270
  241. package/.scannerwork/scanner-report/syntax-highlightings-39.pb +853 -25
  242. package/.scannerwork/scanner-report/syntax-highlightings-40.pb +19 -47
  243. package/.scannerwork/scanner-report/syntax-highlightings-5.pb +3737 -53
  244. package/.scannerwork/scanner-report/syntax-highlightings-52.pb +144 -72
  245. package/.scannerwork/scanner-report/syntax-highlightings-53.pb +188 -29
  246. package/.scannerwork/scanner-report/syntax-highlightings-54.pb +66 -843
  247. package/.scannerwork/scanner-report/syntax-highlightings-55.pb +98 -59
  248. package/.scannerwork/scanner-report/syntax-highlightings-56.pb +142 -610
  249. package/.scannerwork/scanner-report/syntax-highlightings-57.pb +110 -0
  250. package/.scannerwork/scanner-report/syntax-highlightings-58.pb +19 -196
  251. package/.scannerwork/scanner-report/syntax-highlightings-59.pb +52 -184
  252. package/.scannerwork/scanner-report/syntax-highlightings-6.pb +3737 -105
  253. package/.scannerwork/scanner-report/syntax-highlightings-60.pb +329 -0
  254. package/.scannerwork/scanner-report/syntax-highlightings-62.pb +296 -103
  255. package/.scannerwork/scanner-report/syntax-highlightings-63.pb +94 -3738
  256. package/.scannerwork/scanner-report/syntax-highlightings-64.pb +68 -0
  257. package/.scannerwork/scanner-report/syntax-highlightings-67.pb +623 -78
  258. package/.scannerwork/scanner-report/syntax-highlightings-7.pb +48 -243
  259. package/.scannerwork/scanner-report/syntax-highlightings-9.pb +79 -96
  260. package/package.json +2 -2
  261. package/test-16-results.xml +160 -160
  262. package/test-18-results.xml +160 -160
  263. package/test-iam-18-results.xml +50 -50
  264. package/.scannerwork/scanner-report/changesets-2.pb +0 -1
  265. package/.scannerwork/scanner-report/changesets-25.pb +0 -1
  266. package/.scannerwork/scanner-report/changesets-4.pb +0 -1
  267. package/.scannerwork/scanner-report/changesets-41.pb +0 -1
  268. package/.scannerwork/scanner-report/changesets-42.pb +0 -1
  269. package/.scannerwork/scanner-report/changesets-43.pb +0 -1
  270. package/.scannerwork/scanner-report/changesets-44.pb +0 -1
  271. package/.scannerwork/scanner-report/changesets-45.pb +0 -1
  272. package/.scannerwork/scanner-report/changesets-46.pb +0 -1
  273. package/.scannerwork/scanner-report/changesets-47.pb +0 -1
  274. package/.scannerwork/scanner-report/changesets-48.pb +0 -1
  275. package/.scannerwork/scanner-report/changesets-49.pb +0 -1
  276. package/.scannerwork/scanner-report/changesets-5.pb +0 -1
  277. package/.scannerwork/scanner-report/changesets-50.pb +0 -1
  278. package/.scannerwork/scanner-report/changesets-51.pb +0 -1
  279. package/.scannerwork/scanner-report/changesets-6.pb +0 -1
  280. package/.scannerwork/scanner-report/changesets-68.pb +0 -1
  281. package/.scannerwork/scanner-report/component-25.pb +0 -1
  282. package/.scannerwork/scanner-report/component-4.pb +0 -1
  283. package/.scannerwork/scanner-report/component-41.pb +0 -1
  284. package/.scannerwork/scanner-report/component-42.pb +0 -1
  285. package/.scannerwork/scanner-report/component-43.pb +0 -1
  286. package/.scannerwork/scanner-report/component-44.pb +0 -1
  287. package/.scannerwork/scanner-report/component-45.pb +0 -1
  288. package/.scannerwork/scanner-report/component-46.pb +0 -1
  289. package/.scannerwork/scanner-report/component-47.pb +0 -1
  290. package/.scannerwork/scanner-report/component-48.pb +0 -1
  291. package/.scannerwork/scanner-report/component-49.pb +0 -1
  292. package/.scannerwork/scanner-report/component-50.pb +0 -1
  293. package/.scannerwork/scanner-report/component-51.pb +0 -1
  294. package/.scannerwork/scanner-report/component-68.pb +0 -1
  295. package/.scannerwork/scanner-report/coverages-25.pb +0 -0
  296. package/.scannerwork/scanner-report/coverages-42.pb +0 -0
  297. package/.scannerwork/scanner-report/coverages-43.pb +0 -0
  298. package/.scannerwork/scanner-report/coverages-44.pb +0 -0
  299. package/.scannerwork/scanner-report/coverages-45.pb +0 -0
  300. package/.scannerwork/scanner-report/coverages-46.pb +0 -0
  301. package/.scannerwork/scanner-report/coverages-48.pb +0 -0
  302. package/.scannerwork/scanner-report/coverages-5.pb +0 -0
  303. package/.scannerwork/scanner-report/coverages-50.pb +0 -0
  304. package/.scannerwork/scanner-report/coverages-6.pb +0 -0
  305. package/.scannerwork/scanner-report/duplications-45.pb +0 -2
  306. package/.scannerwork/scanner-report/duplications-46.pb +0 -3
  307. package/.scannerwork/scanner-report/duplications-48.pb +0 -3
  308. package/.scannerwork/scanner-report/duplications-58.pb +0 -2
  309. package/.scannerwork/scanner-report/measures-25.pb +0 -0
  310. package/.scannerwork/scanner-report/measures-42.pb +0 -0
  311. package/.scannerwork/scanner-report/measures-43.pb +0 -0
  312. package/.scannerwork/scanner-report/measures-44.pb +0 -0
  313. package/.scannerwork/scanner-report/measures-45.pb +0 -0
  314. package/.scannerwork/scanner-report/measures-46.pb +0 -0
  315. package/.scannerwork/scanner-report/measures-48.pb +0 -0
  316. package/.scannerwork/scanner-report/measures-49.pb +0 -0
  317. package/.scannerwork/scanner-report/measures-50.pb +0 -0
  318. package/.scannerwork/scanner-report/source-25.txt +0 -142
  319. package/.scannerwork/scanner-report/source-42.txt +0 -68
  320. package/.scannerwork/scanner-report/source-43.txt +0 -156
  321. package/.scannerwork/scanner-report/source-44.txt +0 -147
  322. package/.scannerwork/scanner-report/source-45.txt +0 -145
  323. package/.scannerwork/scanner-report/source-46.txt +0 -131
  324. package/.scannerwork/scanner-report/source-48.txt +0 -119
  325. package/.scannerwork/scanner-report/source-49.txt +0 -100
  326. package/.scannerwork/scanner-report/source-50.txt +0 -36
  327. package/.scannerwork/scanner-report/symbols-25.pb +0 -116
  328. package/.scannerwork/scanner-report/symbols-42.pb +0 -45
  329. package/.scannerwork/scanner-report/symbols-43.pb +0 -112
  330. package/.scannerwork/scanner-report/symbols-44.pb +0 -85
  331. package/.scannerwork/scanner-report/symbols-45.pb +0 -102
  332. package/.scannerwork/scanner-report/symbols-46.pb +0 -97
  333. package/.scannerwork/scanner-report/symbols-48.pb +0 -77
  334. package/.scannerwork/scanner-report/symbols-5.pb +0 -20
  335. package/.scannerwork/scanner-report/symbols-50.pb +0 -14
  336. package/.scannerwork/scanner-report/symbols-6.pb +0 -42
  337. package/.scannerwork/scanner-report/syntax-highlightings-25.pb +0 -134
  338. package/.scannerwork/scanner-report/syntax-highlightings-42.pb +0 -110
  339. package/.scannerwork/scanner-report/syntax-highlightings-43.pb +0 -223
  340. package/.scannerwork/scanner-report/syntax-highlightings-44.pb +0 -191
  341. package/.scannerwork/scanner-report/syntax-highlightings-45.pb +0 -227
  342. package/.scannerwork/scanner-report/syntax-highlightings-46.pb +0 -182
  343. package/.scannerwork/scanner-report/syntax-highlightings-48.pb +0 -158
  344. package/.scannerwork/scanner-report/syntax-highlightings-49.pb +0 -105
  345. package/.scannerwork/scanner-report/syntax-highlightings-50.pb +0 -54
  346. /package/.scannerwork/scanner-report/{coverages-2.pb → coverages-17.pb} +0 -0
  347. /package/.scannerwork/scanner-report/{coverages-4.pb → coverages-20.pb} +0 -0
  348. /package/.scannerwork/scanner-report/{coverages-68.pb → coverages-26.pb} +0 -0
  349. /package/.scannerwork/scanner-report/{coverages-51.pb → coverages-32.pb} +0 -0
  350. /package/.scannerwork/scanner-report/{coverages-41.pb → coverages-34.pb} +0 -0
  351. /package/.scannerwork/scanner-report/{coverages-47.pb → coverages-61.pb} +0 -0
  352. /package/.scannerwork/scanner-report/{coverages-49.pb → coverages-63.pb} +0 -0
  353. /package/.scannerwork/scanner-report/{duplications-2.pb → duplications-16.pb} +0 -0
  354. /package/.scannerwork/scanner-report/{duplications-25.pb → duplications-17.pb} +0 -0
  355. /package/.scannerwork/scanner-report/{duplications-4.pb → duplications-18.pb} +0 -0
  356. /package/.scannerwork/scanner-report/{duplications-41.pb → duplications-20.pb} +0 -0
  357. /package/.scannerwork/scanner-report/{duplications-42.pb → duplications-26.pb} +0 -0
  358. /package/.scannerwork/scanner-report/{duplications-43.pb → duplications-27.pb} +0 -0
  359. /package/.scannerwork/scanner-report/{duplications-44.pb → duplications-32.pb} +0 -0
  360. /package/.scannerwork/scanner-report/{duplications-47.pb → duplications-34.pb} +0 -0
  361. /package/.scannerwork/scanner-report/{duplications-49.pb → duplications-35.pb} +0 -0
  362. /package/.scannerwork/scanner-report/{duplications-5.pb → duplications-36.pb} +0 -0
  363. /package/.scannerwork/scanner-report/{duplications-50.pb → duplications-57.pb} +0 -0
  364. /package/.scannerwork/scanner-report/{duplications-51.pb → duplications-61.pb} +0 -0
  365. /package/.scannerwork/scanner-report/{duplications-6.pb → duplications-63.pb} +0 -0
  366. /package/.scannerwork/scanner-report/{duplications-68.pb → duplications-64.pb} +0 -0
  367. /package/.scannerwork/scanner-report/{issues-41.pb → issues-34.pb} +0 -0
  368. /package/.scannerwork/scanner-report/{issues-25.pb → issues-55.pb} +0 -0
  369. /package/.scannerwork/scanner-report/{issues-24.pb → issues-60.pb} +0 -0
  370. /package/.scannerwork/scanner-report/{issues-53.pb → issues-64.pb} +0 -0
  371. /package/.scannerwork/scanner-report/{measures-4.pb → measures-20.pb} +0 -0
  372. /package/.scannerwork/scanner-report/{measures-68.pb → measures-26.pb} +0 -0
  373. /package/.scannerwork/scanner-report/{measures-51.pb → measures-32.pb} +0 -0
  374. /package/.scannerwork/scanner-report/{measures-41.pb → measures-34.pb} +0 -0
  375. /package/.scannerwork/scanner-report/{measures-47.pb → measures-61.pb} +0 -0
  376. /package/.scannerwork/scanner-report/{source-4.txt → source-20.txt} +0 -0
  377. /package/.scannerwork/scanner-report/{source-68.txt → source-26.txt} +0 -0
  378. /package/.scannerwork/scanner-report/{source-51.txt → source-32.txt} +0 -0
  379. /package/.scannerwork/scanner-report/{source-41.txt → source-34.txt} +0 -0
  380. /package/.scannerwork/scanner-report/{source-47.txt → source-61.txt} +0 -0
  381. /package/.scannerwork/scanner-report/{symbols-2.pb → symbols-17.pb} +0 -0
  382. /package/.scannerwork/scanner-report/{symbols-4.pb → symbols-20.pb} +0 -0
  383. /package/.scannerwork/scanner-report/{symbols-68.pb → symbols-26.pb} +0 -0
  384. /package/.scannerwork/scanner-report/{symbols-51.pb → symbols-32.pb} +0 -0
  385. /package/.scannerwork/scanner-report/{symbols-41.pb → symbols-34.pb} +0 -0
  386. /package/.scannerwork/scanner-report/{symbols-47.pb → symbols-61.pb} +0 -0
  387. /package/.scannerwork/scanner-report/{symbols-49.pb → symbols-63.pb} +0 -0
  388. /package/.scannerwork/scanner-report/{syntax-highlightings-4.pb → syntax-highlightings-20.pb} +0 -0
  389. /package/.scannerwork/scanner-report/{syntax-highlightings-68.pb → syntax-highlightings-26.pb} +0 -0
  390. /package/.scannerwork/scanner-report/{syntax-highlightings-51.pb → syntax-highlightings-32.pb} +0 -0
  391. /package/.scannerwork/scanner-report/{syntax-highlightings-41.pb → syntax-highlightings-34.pb} +0 -0
  392. /package/.scannerwork/scanner-report/{syntax-highlightings-47.pb → syntax-highlightings-61.pb} +0 -0
@@ -0,0 +1,244 @@
1
+ // Copyright © 2017, 2021 IBM Corp. All rights reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ /* global describe it beforeEach */
16
+ 'use strict';
17
+
18
+ const assert = require('assert');
19
+ const nock = require('nock');
20
+ const request = require('../includes/request.js');
21
+ const error = require('../includes/error.js');
22
+
23
+ const url = 'http://localhost:7777/testdb';
24
+ const db = request.client(url, { parallelism: 1 });
25
+ const timeoutDb = request.client(url, { parallelism: 1, requestTimeout: 500 });
26
+ const longTestTimeout = 3000;
27
+
28
+ beforeEach('Clean nock', function() {
29
+ nock.cleanAll();
30
+ });
31
+
32
+ describe('#unit Check request headers', function() {
33
+ it('should have a couchbackup user-agent', function(done) {
34
+ const couch = nock(url)
35
+ .matchHeader('user-agent', /couchbackup-cloudant\/\d+\.\d+\.\d+(?:-SNAPSHOT)? \(Node.js v\d+\.\d+\.\d+\)/)
36
+ .head('/good')
37
+ .reply(200);
38
+
39
+ db.service.headDocument({ db: db.db, docId: 'good' }).then(response => {
40
+ assert.ok(couch.isDone());
41
+ done();
42
+ }).catch(err => {
43
+ done(err);
44
+ });
45
+ });
46
+ });
47
+
48
+ describe('#unit Check request response error callback', function() {
49
+ it('should not callback with error for 200 response', function(done) {
50
+ const couch = nock(url)
51
+ .get('/good')
52
+ .reply(200, { ok: true });
53
+
54
+ db.service.getDocument({ db: db.db, docId: 'good' }).then(response => {
55
+ assert.ok(response.result);
56
+ assert.ok(couch.isDone());
57
+ done();
58
+ }).catch(err => {
59
+ err = error.convertResponseError(err);
60
+ done(err);
61
+ });
62
+ });
63
+
64
+ it('should callback with error after 3 500 responses', function(done) {
65
+ const couch = nock(url)
66
+ .get('/bad')
67
+ .times(3)
68
+ .reply(500, function(uri, requestBody) {
69
+ this.req.response.statusMessage = 'Internal Server Error';
70
+ return { error: 'foo', reason: 'bar' };
71
+ });
72
+
73
+ db.service.getDocument({ db: db.db, docId: 'bad' }).then(response => {
74
+ done(new Error('Successful response when error expected.'));
75
+ }).catch(err => {
76
+ err = error.convertResponseError(err);
77
+ assert.strictEqual(err.name, 'HTTPFatalError');
78
+ assert.strictEqual(err.message, `500 Internal Server Error: get ${url}/bad - Error: foo, Reason: bar`);
79
+ assert.ok(couch.isDone());
80
+ done();
81
+ }).catch(err => {
82
+ // Handle assertion errors
83
+ done(err);
84
+ });
85
+ }).timeout(longTestTimeout);
86
+
87
+ it('should callback with error after 3 POST 503 responses', function(done) {
88
+ const couch = nock(url)
89
+ .post('/_bulk_get')
90
+ .query(true)
91
+ .times(3)
92
+ .reply(503, function(uri, requestBody) {
93
+ this.req.response.statusMessage = 'Service Unavailable';
94
+ return { error: 'service_unavailable', reason: 'Service unavailable' };
95
+ });
96
+
97
+ db.service.postBulkGet({ db: db.db, revs: true, docs: [] }).then(response => {
98
+ done(new Error('Successful response when error expected.'));
99
+ }).catch(err => {
100
+ err = error.convertResponseError(err);
101
+ assert.strictEqual(err.name, 'HTTPFatalError');
102
+ assert.strictEqual(err.message, `503 Service Unavailable: post ${url}/_bulk_get - Error: service_unavailable, Reason: Service unavailable`);
103
+ assert.ok(couch.isDone());
104
+ done();
105
+ }).catch(err => {
106
+ // Handle assertion errors
107
+ done(err);
108
+ });
109
+ }).timeout(longTestTimeout);
110
+
111
+ it('should callback with error after 3 429 responses', function(done) {
112
+ const couch = nock(url)
113
+ .get('/bad')
114
+ .times(3)
115
+ .reply(429, function(uri, requestBody) {
116
+ this.req.response.statusMessage = 'Too Many Requests';
117
+ return { error: 'foo', reason: 'bar' };
118
+ });
119
+
120
+ db.service.getDocument({ db: db.db, docId: 'bad' }).then(response => {
121
+ done(new Error('Successful response when error expected.'));
122
+ }).catch(err => {
123
+ err = error.convertResponseError(err);
124
+ assert.strictEqual(err.name, 'HTTPFatalError');
125
+ assert.strictEqual(err.message, `429 Too Many Requests: get ${url}/bad - Error: foo, Reason: bar`);
126
+ assert.ok(couch.isDone());
127
+ done();
128
+ }).catch(err => {
129
+ // Handle assertion errors
130
+ done(err);
131
+ });
132
+ }).timeout(longTestTimeout);
133
+
134
+ it('should callback with fatal error for 404 response', function(done) {
135
+ const couch = nock(url)
136
+ .get('/bad')
137
+ .reply(404, function(uri, requestBody) {
138
+ this.req.response.statusMessage = 'Not Found';
139
+ return { error: 'foo', reason: 'bar' };
140
+ });
141
+
142
+ db.service.getDocument({ db: db.db, docId: 'bad' }).then(response => {
143
+ done(new Error('Successful response when error expected.'));
144
+ }).catch(err => {
145
+ err = error.convertResponseError(err);
146
+ assert.strictEqual(err.name, 'HTTPFatalError');
147
+ assert.strictEqual(err.message, `404 Not Found: get ${url}/bad - Error: foo, Reason: bar`);
148
+ assert.ok(couch.isDone());
149
+ done();
150
+ }).catch(err => {
151
+ // Handle assertion errors
152
+ done(err);
153
+ });
154
+ });
155
+
156
+ it('should callback with same error for no status code error response', function(done) {
157
+ const couch = nock(url)
158
+ .get('/bad')
159
+ .times(3)
160
+ .replyWithError('testing badness');
161
+
162
+ db.service.getDocument({ db: db.db, docId: 'bad' }).then(response => {
163
+ done(new Error('Successful response when error expected.'));
164
+ }).catch(err => {
165
+ const err2 = error.convertResponseError(err);
166
+ assert.strictEqual(err, err2);
167
+ assert.ok(couch.isDone());
168
+ done();
169
+ }).catch(err => {
170
+ // Handle assertion errors
171
+ done(err);
172
+ });
173
+ }).timeout(longTestTimeout);
174
+
175
+ it('should retry request if HTTP request gets timed out', function(done) {
176
+ const couch = nock(url)
177
+ .post('/_bulk_get')
178
+ .query(true)
179
+ .delay(1000)
180
+ .reply(200, { results: { docs: [{ id: '1', ok: { _id: '1' } }] } })
181
+ .post('/_bulk_get')
182
+ .query(true)
183
+ .reply(200, { results: { docs: [{ id: '1', ok: { _id: '1' } }, { id: '2', ok: { _id: '2' } }] } });
184
+
185
+ timeoutDb.service.postBulkGet({ db: db.db, revs: true, docs: [] }).then(response => {
186
+ assert.ok(response);
187
+ assert.ok(response.result);
188
+ assert.ok(response.result.results);
189
+ assert.ok(response.result.results.docs);
190
+ assert.strictEqual(response.result.results.docs.length, 2);
191
+ assert.ok(couch.isDone());
192
+ done();
193
+ }).catch(err => {
194
+ done(err);
195
+ });
196
+ });
197
+
198
+ it('should callback with error code ESOCKETTIMEDOUT if 3 HTTP requests gets timed out', function(done) {
199
+ // Increase the timeout for this test to allow for the delays
200
+ this.timeout(3000);
201
+ const couch = nock(url)
202
+ .post('/_bulk_get')
203
+ .query(true)
204
+ .delay(1000)
205
+ .times(3)
206
+ .reply(200, { ok: true });
207
+
208
+ timeoutDb.service.postBulkGet({ db: db.db, revs: true, docs: [] }).then(response => {
209
+ done(new Error('Successful response when error expected.'));
210
+ }).catch(err => {
211
+ err = error.convertResponseError(err);
212
+ // Note axios returns ECONNABORTED rather than ESOCKETTIMEDOUT
213
+ // See https://github.com/axios/axios/issues/2710 via https://github.com/axios/axios/issues/1543`
214
+ assert.strictEqual(err.statusText, 'ECONNABORTED');
215
+ assert.strictEqual(err.message, `timeout of 500ms exceeded: post ${url}/_bulk_get ECONNABORTED`);
216
+ assert.ok(couch.isDone());
217
+ done();
218
+ }).catch(err => {
219
+ // Handle assertion errors
220
+ done(err);
221
+ });
222
+ });
223
+ describe('#unit Check credentials', function() {
224
+ it('should properly decode username and password', function(done) {
225
+ const username = 'user%123';
226
+ const password = 'colon:at@321';
227
+ const url = `http://${encodeURIComponent(username)}:${encodeURIComponent(password)}@localhost:7777/testdb`;
228
+ const sessionUrl = 'http://localhost:7777';
229
+ const couch = nock(sessionUrl)
230
+ .post('/_session', { username: username, password: password })
231
+ .reply(200, { ok: true }, { 'Set-Cookie': 'AuthSession=ABC123DEF4356;' })
232
+ .get('/')
233
+ .reply(200);
234
+ const db = request.client(url, { parallelism: 1 });
235
+ db.service.getServerInformation().then(response => {
236
+ assert.ok(response);
237
+ assert.ok(couch.isDone());
238
+ done();
239
+ }).catch(err => {
240
+ done(err);
241
+ });
242
+ });
243
+ });
244
+ });
@@ -1,4 +1,4 @@
1
- // Copyright © 2017 IBM Corp. All rights reserved.
1
+ // Copyright © 2017, 2018 IBM Corp. All rights reserved.
2
2
  //
3
3
  // Licensed under the Apache License, Version 2.0 (the "License");
4
4
  // you may not use this file except in compliance with the License.
@@ -12,103 +12,214 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
 
15
- /* global after before describe */
15
+ /* global describe it */
16
16
  'use strict';
17
17
 
18
- const url = require('url');
19
- const toxy = require('toxy');
20
- // Import the common hooks
21
- require('../test/hooks.js');
18
+ const assert = require('assert');
19
+ const backup = require('../app.js').backup;
20
+ const fs = require('fs');
21
+ const nock = require('nock');
22
22
 
23
- const tpoisons = toxy.poisons;
24
- const trules = toxy.rules;
25
-
26
- function setupProxy(poison) {
27
- const backendUrl = new url.URL(process.env.COUCH_BACKEND_URL);
28
- const proxy = toxy({
29
- auth: `${backendUrl.username}:${backendUrl.password}`,
30
- changeOrigin: true
31
- });
32
-
33
- // Forward traffic to DB
34
- proxy.forward(process.env.COUCH_BACKEND_URL);
35
-
36
- switch (poison) {
37
- case 'normal':
38
- // No poisons to add
39
- break;
40
- case 'bandwidth-limit':
41
- // https://github.com/h2non/toxy#bandwidth
42
- // Note the implementation of bandwidth is simplistic and the threshold
43
- // delay is applied to every write of the buffer, so use the smallest
44
- // delay possible and adjust the rate using the bytes size instead.
45
- proxy
46
- .poison(tpoisons.bandwidth({ bytes: 512, threshold: 1 })); // 0.5 MB/s
47
- break;
48
- case 'latency':
49
- // https://github.com/h2non/toxy#latency
50
- proxy
51
- .poison(tpoisons.latency({ max: 1500, min: 250 }))
52
- .withRule(trules.probability(60));
53
- break;
54
- case 'slow-read':
55
- // https://github.com/h2non/toxy#slow-read
56
- // Note this only impacts read of data from requests so only for non-GET
57
- // In practice this means that it impacts restore much more than backup
58
- // since although backup POSTs to _bulk_get the content is much smaller
59
- // than what is POSTed to _bulk_docs for a restore.
60
- // Similarly to bandwidth-limit use a 1 ms threshold
61
- proxy
62
- .poison(tpoisons.slowRead({ chunk: 256, threshold: 1 }))
63
- // Slow read for 10 % of the time e.g. 10 ms in every 100
64
- .withRule(trules.timeThreshold({ duration: 10, period: 100 }));
65
- break;
66
- case 'rate-limit':
67
- // https://github.com/h2non/toxy#rate-limit
68
- // Simulate the Cloudant free plan with 20 lookups ps and 10 writes ps
69
- proxy.post('/*/_bulk_get')
70
- .poison(tpoisons.rateLimit({ limit: 20, threshold: 1000 }));
71
- proxy.post('/*/_bulk_docs')
72
- .poison(tpoisons.rateLimit({ limit: 10, threshold: 1000 }));
73
- break;
74
- default:
75
- throw Error('Unknown toxy poison ' + poison);
23
+ const goodUrl = 'http://localhost:5984/db';
24
+ // The real validateArgs function of app.js isn't
25
+ // exported - so we call the exported backup method
26
+ // instead. We don't get as far as a real backup when
27
+ // testing error cases. For success cases we nock the
28
+ // goodUrl and
29
+ const validateArgs = function(url, opts, callback) {
30
+ const nullStream = fs.createWriteStream('/dev/null');
31
+ let cb = callback;
32
+ if (url === goodUrl) {
33
+ // Nock the goodUrl
34
+ nock(goodUrl).head('').reply(404, { error: 'not_found', reason: 'missing' });
35
+ // replace the callback to handle the nock response
36
+ // to avoid attempting a real backup
37
+ cb = function(err) {
38
+ nullStream.end();
39
+ if (err.name === 'DatabaseNotFound') {
40
+ // This is what we expect if we reached the backup
41
+ // This is success for valid args cases.
42
+ err = null;
43
+ }
44
+ callback(err);
45
+ };
76
46
  }
47
+ backup(url, nullStream, opts, cb);
48
+ return true;
49
+ };
77
50
 
78
- // Catch remaining traffic
79
- proxy.all('/*');
80
- return proxy;
81
- }
82
-
83
- const poisons = [
84
- 'normal',
85
- 'bandwidth-limit',
86
- 'latency',
87
- 'slow-read',
88
- 'rate-limit'
89
- ];
51
+ const stderrWriteFun = process.stderr.write;
52
+ let capturedStderr;
90
53
 
91
- poisons.forEach(function(poison) {
92
- describe('unreliable network tests (using toxy poison ' + poison + ')', function() {
93
- let proxy;
54
+ function captureStderr() {
55
+ process.stderr.write = function(string, encoding, fd) {
56
+ capturedStderr += string;
57
+ };
58
+ }
94
59
 
95
- before('start toxy server', function() {
96
- proxy = setupProxy(poison);
97
- console.log('Using toxy poison ' + poison);
60
+ function releaseStderr() {
61
+ process.stderr.write = stderrWriteFun;
62
+ capturedStderr = null;
63
+ }
98
64
 
99
- // For these tests COUCH_URL points to the toxy proxy on localhost whereas
100
- // COUCH_BACKEND_URL is the real CouchDb instance.
101
- const toxyUrl = new url.URL(process.env.COUCH_URL);
102
- // Listen on the specified hostname only, so if using localhost we don't
103
- // need external connections.
104
- proxy.listen(toxyUrl.port, toxyUrl.hostname);
105
- });
65
+ function assertErrorMessage(msg, done) {
66
+ return function(err, data) {
67
+ try {
68
+ assert(err.message, 'There should be an error message');
69
+ assert(err.message.indexOf(msg) >= 0);
70
+ assert(data === null || data === undefined, 'There should only be an error.');
71
+ done();
72
+ } catch (e) {
73
+ done(e);
74
+ }
75
+ };
76
+ }
106
77
 
107
- after('stop toxy server', function() {
108
- proxy.close();
109
- });
78
+ function assertNoError(done) {
79
+ return function(err, data) {
80
+ try {
81
+ assert(err === null, 'There should be no error message.');
82
+ done();
83
+ } catch (e) {
84
+ done(e);
85
+ }
86
+ };
87
+ }
110
88
 
111
- delete require.cache[require.resolve('../test/ci_e2e.js')];
112
- require('../test/ci_e2e.js');
89
+ describe('#unit Validate arguments', function() {
90
+ it('returns error for invalid URL type', function(done) {
91
+ validateArgs(true, {}, assertErrorMessage('Invalid URL, must be type string', done));
92
+ });
93
+ it('returns no error for valid URL type', function(done) {
94
+ validateArgs(goodUrl, {}, assertNoError(done));
95
+ });
96
+ it('returns error for invalid (no host) URL', function(done) {
97
+ validateArgs('http://', {}, assertErrorMessage('Invalid URL', done));
98
+ });
99
+ it('returns error for invalid (no protocol) URL', function(done) {
100
+ validateArgs('invalid', {}, assertErrorMessage('Invalid URL', done));
101
+ });
102
+ it('returns error for invalid (wrong protocol) URL', function(done) {
103
+ validateArgs('ftp://invalid.example.com', {}, assertErrorMessage('Invalid URL protocol.', done));
104
+ });
105
+ it('returns error for invalid (no path) URL', function(done) {
106
+ validateArgs('https://invalid.example.com', {}, assertErrorMessage('Invalid URL, missing path element (no database).', done));
107
+ });
108
+ it('returns error for invalid (no protocol, no host) URL', function(done) {
109
+ validateArgs('invalid', {}, assertErrorMessage('Invalid URL', done));
110
+ });
111
+ it('returns error for invalid buffer size type', function(done) {
112
+ validateArgs(goodUrl, { bufferSize: '123' }, assertErrorMessage('Invalid buffer size option, must be a positive integer in the range (0, MAX_SAFE_INTEGER]', done));
113
+ });
114
+ it('returns error for zero buffer size', function(done) {
115
+ validateArgs(goodUrl, { bufferSize: 0 }, assertErrorMessage('Invalid buffer size option, must be a positive integer in the range (0, MAX_SAFE_INTEGER]', done));
116
+ });
117
+ it('returns error for float buffer size', function(done) {
118
+ validateArgs(goodUrl, { bufferSize: 1.23 }, assertErrorMessage('Invalid buffer size option, must be a positive integer in the range (0, MAX_SAFE_INTEGER]', done));
119
+ });
120
+ it('returns no error for valid buffer size type', function(done) {
121
+ validateArgs(goodUrl, { bufferSize: 123 }, assertNoError(done));
122
+ });
123
+ it('returns error for invalid log type', function(done) {
124
+ validateArgs(goodUrl, { log: true }, assertErrorMessage('Invalid log option, must be type string', done));
125
+ });
126
+ it('returns no error for valid log type', function(done) {
127
+ validateArgs(goodUrl, { log: 'log.txt' }, assertNoError(done));
128
+ });
129
+ it('returns error for invalid mode type', function(done) {
130
+ validateArgs(goodUrl, { mode: true }, assertErrorMessage('Invalid mode option, must be either "full" or "shallow"', done));
131
+ });
132
+ it('returns error for invalid mode string', function(done) {
133
+ validateArgs(goodUrl, { mode: 'foobar' }, assertErrorMessage('Invalid mode option, must be either "full" or "shallow"', done));
134
+ });
135
+ it('returns no error for valid mode type', function(done) {
136
+ validateArgs(goodUrl, { mode: 'full' }, assertNoError(done));
137
+ });
138
+ it('returns error for invalid output type', function(done) {
139
+ validateArgs(goodUrl, { output: true }, assertErrorMessage('Invalid output option, must be type string', done));
140
+ });
141
+ it('returns no error for valid output type', function(done) {
142
+ validateArgs(goodUrl, { output: 'output.txt' }, assertNoError(done));
143
+ });
144
+ it('returns error for invalid parallelism type', function(done) {
145
+ validateArgs(goodUrl, { parallelism: '123' }, assertErrorMessage('Invalid parallelism option, must be a positive integer in the range (0, MAX_SAFE_INTEGER]', done));
146
+ });
147
+ it('returns error for zero parallelism', function(done) {
148
+ validateArgs(goodUrl, { parallelism: 0 }, assertErrorMessage('Invalid parallelism option, must be a positive integer in the range (0, MAX_SAFE_INTEGER]', done));
149
+ });
150
+ it('returns error for float parallelism', function(done) {
151
+ validateArgs(goodUrl, { parallelism: 1.23 }, assertErrorMessage('Invalid parallelism option, must be a positive integer in the range (0, MAX_SAFE_INTEGER]', done));
152
+ });
153
+ it('returns no error for valid parallelism type', function(done) {
154
+ validateArgs(goodUrl, { parallelism: 123 }, assertNoError(done));
155
+ });
156
+ it('returns error for invalid request timeout type', function(done) {
157
+ validateArgs(goodUrl, { requestTimeout: '123' }, assertErrorMessage('Invalid request timeout option, must be a positive integer in the range (0, MAX_SAFE_INTEGER]', done));
158
+ });
159
+ it('returns error for zero request timeout', function(done) {
160
+ validateArgs(goodUrl, { requestTimeout: 0 }, assertErrorMessage('Invalid request timeout option, must be a positive integer in the range (0, MAX_SAFE_INTEGER]', done));
161
+ });
162
+ it('returns error for float request timout', function(done) {
163
+ validateArgs(goodUrl, { requestTimeout: 1.23 }, assertErrorMessage('Invalid request timeout option, must be a positive integer in the range (0, MAX_SAFE_INTEGER]', done));
164
+ });
165
+ it('returns no error for valid request timeout type', function(done) {
166
+ validateArgs(goodUrl, { requestTimeout: 123 }, assertNoError(done));
167
+ });
168
+ it('returns error for invalid resume type', function(done) {
169
+ validateArgs(goodUrl, { resume: 'true' }, assertErrorMessage('Invalid resume option, must be type boolean', done));
170
+ });
171
+ it('returns no error for valid resume type', function(done) {
172
+ validateArgs(goodUrl, { resume: false }, assertNoError(done));
173
+ });
174
+ it('returns error for invalid key type', function(done) {
175
+ validateArgs(goodUrl, { iamApiKey: true }, assertErrorMessage('Invalid iamApiKey option, must be type string', done));
176
+ });
177
+ it('returns error for key and URL credentials supplied', function(done) {
178
+ validateArgs('https://a:b@example.com/db', { iamApiKey: 'abc123' }, assertErrorMessage('URL user information must not be supplied when using IAM API key.', done));
179
+ });
180
+ it('warns for log arg in shallow mode', function(done) {
181
+ captureStderr();
182
+ try {
183
+ validateArgs(goodUrl, { mode: 'shallow', log: 'test' }, function(err, data) {
184
+ assert.ok(err);
185
+ assert.ok(!data);
186
+ assert(capturedStderr.indexOf('The options "log" and "resume" are invalid when using shallow mode.') > -1, 'Log warning message was not present');
187
+ });
188
+ done();
189
+ } catch (e) {
190
+ done(e);
191
+ } finally {
192
+ releaseStderr();
193
+ }
194
+ });
195
+ it('warns for resume arg in shallow mode', function(done) {
196
+ captureStderr();
197
+ try {
198
+ validateArgs(goodUrl, { mode: 'shallow', log: 'test', resume: true }, function(err, data) {
199
+ assert.ok(err);
200
+ assert.ok(!data);
201
+ assert(capturedStderr.indexOf('The options "log" and "resume" are invalid when using shallow mode.') > -1, 'Log warning message was not present');
202
+ });
203
+ done();
204
+ } catch (e) {
205
+ done(e);
206
+ } finally {
207
+ releaseStderr();
208
+ }
209
+ });
210
+ it('warns for parallism arg in shallow mode', function(done) {
211
+ captureStderr();
212
+ try {
213
+ validateArgs(goodUrl, { mode: 'shallow', parallelsim: 10 }, function(err, data) {
214
+ assert.ok(err);
215
+ assert.ok(!data);
216
+ assert(capturedStderr.indexOf('The option "parallelism" has no effect when using shallow mode.') > -1, 'Log warning message was not present');
217
+ });
218
+ done();
219
+ } catch (e) {
220
+ done(e);
221
+ } finally {
222
+ releaseStderr();
223
+ }
113
224
  });
114
225
  });