@cloudant/couchbackup 2.9.9-SNAPSHOT.99 → 2.9.9

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 (351) 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/analysis.log +1 -1
  4. package/.scannerwork/scanner-report/changesets-36.pb +1 -0
  5. package/.scannerwork/scanner-report/changesets-45.pb +1 -0
  6. package/.scannerwork/scanner-report/changesets-47.pb +1 -0
  7. package/.scannerwork/scanner-report/changesets-49.pb +1 -0
  8. package/.scannerwork/scanner-report/changesets-64.pb +1 -0
  9. package/.scannerwork/scanner-report/changesets-66.pb +1 -0
  10. package/.scannerwork/scanner-report/changesets-68.pb +1 -0
  11. package/.scannerwork/scanner-report/component-1.pb +1 -1
  12. package/.scannerwork/scanner-report/component-19.pb +1 -1
  13. package/.scannerwork/scanner-report/component-2.pb +1 -1
  14. package/.scannerwork/scanner-report/component-20.pb +1 -1
  15. package/.scannerwork/scanner-report/component-21.pb +1 -1
  16. package/.scannerwork/scanner-report/component-22.pb +1 -1
  17. package/.scannerwork/scanner-report/component-23.pb +1 -1
  18. package/.scannerwork/scanner-report/component-24.pb +1 -1
  19. package/.scannerwork/scanner-report/component-25.pb +1 -1
  20. package/.scannerwork/scanner-report/component-26.pb +1 -1
  21. package/.scannerwork/scanner-report/component-27.pb +1 -1
  22. package/.scannerwork/scanner-report/component-28.pb +1 -1
  23. package/.scannerwork/scanner-report/component-29.pb +1 -1
  24. package/.scannerwork/scanner-report/component-3.pb +1 -1
  25. package/.scannerwork/scanner-report/component-30.pb +1 -1
  26. package/.scannerwork/scanner-report/component-31.pb +1 -1
  27. package/.scannerwork/scanner-report/component-32.pb +1 -1
  28. package/.scannerwork/scanner-report/component-33.pb +1 -1
  29. package/.scannerwork/scanner-report/component-34.pb +1 -1
  30. package/.scannerwork/scanner-report/component-35.pb +1 -1
  31. package/.scannerwork/scanner-report/component-36.pb +1 -0
  32. package/.scannerwork/scanner-report/component-37.pb +1 -1
  33. package/.scannerwork/scanner-report/component-38.pb +1 -1
  34. package/.scannerwork/scanner-report/component-39.pb +1 -1
  35. package/.scannerwork/scanner-report/component-4.pb +1 -1
  36. package/.scannerwork/scanner-report/component-40.pb +1 -1
  37. package/.scannerwork/scanner-report/component-45.pb +1 -0
  38. package/.scannerwork/scanner-report/component-47.pb +1 -1
  39. package/.scannerwork/scanner-report/component-49.pb +1 -0
  40. package/.scannerwork/scanner-report/component-50.pb +1 -1
  41. package/.scannerwork/scanner-report/component-52.pb +1 -1
  42. package/.scannerwork/scanner-report/component-56.pb +1 -1
  43. package/.scannerwork/scanner-report/component-57.pb +1 -1
  44. package/.scannerwork/scanner-report/component-58.pb +1 -1
  45. package/.scannerwork/scanner-report/component-59.pb +1 -1
  46. package/.scannerwork/scanner-report/component-60.pb +1 -1
  47. package/.scannerwork/scanner-report/component-61.pb +1 -1
  48. package/.scannerwork/scanner-report/component-62.pb +1 -1
  49. package/.scannerwork/scanner-report/component-63.pb +1 -1
  50. package/.scannerwork/scanner-report/component-64.pb +1 -1
  51. package/.scannerwork/scanner-report/component-65.pb +1 -1
  52. package/.scannerwork/scanner-report/component-66.pb +1 -0
  53. package/.scannerwork/scanner-report/component-67.pb +1 -1
  54. package/.scannerwork/scanner-report/component-68.pb +1 -0
  55. package/.scannerwork/scanner-report/component-69.pb +1 -0
  56. package/.scannerwork/scanner-report/coverages-19.pb +0 -0
  57. package/.scannerwork/scanner-report/coverages-2.pb +0 -0
  58. package/.scannerwork/scanner-report/coverages-20.pb +0 -0
  59. package/.scannerwork/scanner-report/coverages-21.pb +0 -0
  60. package/.scannerwork/scanner-report/coverages-22.pb +0 -0
  61. package/.scannerwork/scanner-report/coverages-23.pb +0 -0
  62. package/.scannerwork/scanner-report/coverages-24.pb +0 -0
  63. package/.scannerwork/scanner-report/coverages-25.pb +0 -0
  64. package/.scannerwork/scanner-report/coverages-26.pb +0 -0
  65. package/.scannerwork/scanner-report/coverages-27.pb +0 -0
  66. package/.scannerwork/scanner-report/coverages-28.pb +0 -0
  67. package/.scannerwork/scanner-report/coverages-29.pb +0 -0
  68. package/.scannerwork/scanner-report/coverages-3.pb +0 -0
  69. package/.scannerwork/scanner-report/coverages-30.pb +0 -0
  70. package/.scannerwork/scanner-report/coverages-31.pb +0 -0
  71. package/.scannerwork/scanner-report/coverages-32.pb +0 -0
  72. package/.scannerwork/scanner-report/coverages-33.pb +0 -0
  73. package/.scannerwork/scanner-report/coverages-34.pb +0 -0
  74. package/.scannerwork/scanner-report/coverages-35.pb +0 -0
  75. package/.scannerwork/scanner-report/coverages-36.pb +0 -0
  76. package/.scannerwork/scanner-report/coverages-37.pb +0 -0
  77. package/.scannerwork/scanner-report/coverages-38.pb +0 -0
  78. package/.scannerwork/scanner-report/coverages-39.pb +0 -0
  79. package/.scannerwork/scanner-report/coverages-45.pb +0 -0
  80. package/.scannerwork/scanner-report/coverages-47.pb +0 -0
  81. package/.scannerwork/scanner-report/coverages-49.pb +0 -0
  82. package/.scannerwork/scanner-report/coverages-52.pb +0 -0
  83. package/.scannerwork/scanner-report/coverages-56.pb +0 -0
  84. package/.scannerwork/scanner-report/coverages-57.pb +0 -0
  85. package/.scannerwork/scanner-report/coverages-58.pb +0 -0
  86. package/.scannerwork/scanner-report/coverages-59.pb +0 -0
  87. package/.scannerwork/scanner-report/coverages-60.pb +0 -0
  88. package/.scannerwork/scanner-report/coverages-61.pb +0 -0
  89. package/.scannerwork/scanner-report/coverages-62.pb +0 -0
  90. package/.scannerwork/scanner-report/coverages-63.pb +0 -0
  91. package/.scannerwork/scanner-report/coverages-64.pb +0 -0
  92. package/.scannerwork/scanner-report/coverages-65.pb +0 -0
  93. package/.scannerwork/scanner-report/coverages-66.pb +0 -0
  94. package/.scannerwork/scanner-report/coverages-67.pb +0 -0
  95. package/.scannerwork/scanner-report/duplications-20.pb +0 -2
  96. package/.scannerwork/scanner-report/duplications-22.pb +3 -0
  97. package/.scannerwork/scanner-report/duplications-28.pb +3 -0
  98. package/.scannerwork/scanner-report/duplications-29.pb +2 -0
  99. package/.scannerwork/scanner-report/duplications-3.pb +0 -2
  100. package/.scannerwork/scanner-report/duplications-30.pb +2 -0
  101. package/.scannerwork/scanner-report/duplications-31.pb +0 -2
  102. package/.scannerwork/scanner-report/duplications-33.pb +0 -3
  103. package/.scannerwork/scanner-report/duplications-34.pb +3 -0
  104. package/.scannerwork/scanner-report/duplications-37.pb +2 -0
  105. package/.scannerwork/scanner-report/duplications-47.pb +2 -0
  106. package/.scannerwork/scanner-report/duplications-49.pb +2 -0
  107. package/.scannerwork/scanner-report/duplications-56.pb +2 -0
  108. package/.scannerwork/scanner-report/duplications-63.pb +2 -0
  109. package/.scannerwork/scanner-report/duplications-65.pb +0 -2
  110. package/.scannerwork/scanner-report/duplications-66.pb +0 -0
  111. package/.scannerwork/scanner-report/duplications-67.pb +0 -2
  112. package/.scannerwork/scanner-report/duplications-68.pb +0 -0
  113. package/.scannerwork/scanner-report/issues-28.pb +4 -0
  114. package/.scannerwork/scanner-report/issues-33.pb +2 -3
  115. package/.scannerwork/scanner-report/measures-19.pb +0 -0
  116. package/.scannerwork/scanner-report/measures-2.pb +0 -0
  117. package/.scannerwork/scanner-report/measures-20.pb +0 -0
  118. package/.scannerwork/scanner-report/measures-21.pb +0 -0
  119. package/.scannerwork/scanner-report/measures-22.pb +0 -0
  120. package/.scannerwork/scanner-report/measures-23.pb +0 -0
  121. package/.scannerwork/scanner-report/measures-24.pb +0 -0
  122. package/.scannerwork/scanner-report/measures-25.pb +0 -0
  123. package/.scannerwork/scanner-report/measures-26.pb +0 -0
  124. package/.scannerwork/scanner-report/measures-27.pb +0 -0
  125. package/.scannerwork/scanner-report/measures-28.pb +0 -0
  126. package/.scannerwork/scanner-report/measures-29.pb +0 -0
  127. package/.scannerwork/scanner-report/measures-3.pb +0 -0
  128. package/.scannerwork/scanner-report/measures-30.pb +0 -0
  129. package/.scannerwork/scanner-report/measures-31.pb +0 -0
  130. package/.scannerwork/scanner-report/measures-32.pb +0 -0
  131. package/.scannerwork/scanner-report/measures-33.pb +0 -0
  132. package/.scannerwork/scanner-report/measures-34.pb +0 -0
  133. package/.scannerwork/scanner-report/measures-35.pb +0 -0
  134. package/.scannerwork/scanner-report/measures-36.pb +0 -0
  135. package/.scannerwork/scanner-report/measures-37.pb +0 -0
  136. package/.scannerwork/scanner-report/measures-38.pb +0 -0
  137. package/.scannerwork/scanner-report/measures-39.pb +0 -0
  138. package/.scannerwork/scanner-report/measures-4.pb +0 -0
  139. package/.scannerwork/scanner-report/measures-40.pb +0 -0
  140. package/.scannerwork/scanner-report/measures-45.pb +0 -0
  141. package/.scannerwork/scanner-report/measures-47.pb +0 -0
  142. package/.scannerwork/scanner-report/measures-49.pb +0 -0
  143. package/.scannerwork/scanner-report/measures-50.pb +0 -0
  144. package/.scannerwork/scanner-report/measures-52.pb +0 -0
  145. package/.scannerwork/scanner-report/measures-56.pb +0 -0
  146. package/.scannerwork/scanner-report/measures-57.pb +0 -0
  147. package/.scannerwork/scanner-report/measures-58.pb +0 -0
  148. package/.scannerwork/scanner-report/measures-59.pb +0 -0
  149. package/.scannerwork/scanner-report/measures-60.pb +0 -0
  150. package/.scannerwork/scanner-report/measures-61.pb +0 -0
  151. package/.scannerwork/scanner-report/measures-62.pb +0 -0
  152. package/.scannerwork/scanner-report/measures-63.pb +0 -0
  153. package/.scannerwork/scanner-report/measures-64.pb +0 -0
  154. package/.scannerwork/scanner-report/measures-65.pb +0 -0
  155. package/.scannerwork/scanner-report/measures-66.pb +0 -0
  156. package/.scannerwork/scanner-report/measures-67.pb +0 -0
  157. package/.scannerwork/scanner-report/measures-68.pb +0 -0
  158. package/.scannerwork/scanner-report/metadata.pb +0 -0
  159. package/.scannerwork/scanner-report/source-19.txt +84 -18
  160. package/.scannerwork/scanner-report/source-2.txt +39 -401
  161. package/.scannerwork/scanner-report/source-20.txt +15 -274
  162. package/.scannerwork/scanner-report/source-21.txt +348 -18
  163. package/.scannerwork/scanner-report/source-22.txt +91 -35
  164. package/.scannerwork/scanner-report/source-23.txt +43 -346
  165. package/.scannerwork/scanner-report/source-24.txt +73 -16
  166. package/.scannerwork/scanner-report/source-25.txt +125 -51
  167. package/.scannerwork/scanner-report/source-26.txt +136 -9
  168. package/.scannerwork/scanner-report/source-27.txt +598 -41
  169. package/.scannerwork/scanner-report/source-28.txt +187 -99
  170. package/.scannerwork/scanner-report/source-29.txt +203 -25
  171. package/.scannerwork/scanner-report/source-3.txt +52 -200
  172. package/.scannerwork/scanner-report/source-30.txt +254 -108
  173. package/.scannerwork/scanner-report/source-31.txt +17 -127
  174. package/.scannerwork/scanner-report/source-32.txt +6 -96
  175. package/.scannerwork/scanner-report/source-33.txt +27 -224
  176. package/.scannerwork/scanner-report/source-34.txt +114 -125
  177. package/.scannerwork/scanner-report/source-35.txt +37 -61
  178. package/.scannerwork/scanner-report/source-36.txt +36 -0
  179. package/.scannerwork/scanner-report/source-37.txt +120 -52
  180. package/.scannerwork/scanner-report/source-38.txt +48 -36
  181. package/.scannerwork/scanner-report/source-39.txt +125 -92
  182. package/.scannerwork/scanner-report/source-4.txt +509 -625
  183. package/.scannerwork/scanner-report/source-40.txt +393 -51
  184. package/.scannerwork/scanner-report/source-45.txt +418 -0
  185. package/.scannerwork/scanner-report/source-47.txt +175 -509
  186. package/.scannerwork/scanner-report/source-49.txt +190 -0
  187. package/.scannerwork/scanner-report/source-50.txt +167 -281
  188. package/.scannerwork/scanner-report/source-52.txt +94 -21
  189. package/.scannerwork/scanner-report/source-56.txt +73 -35
  190. package/.scannerwork/scanner-report/source-57.txt +111 -93
  191. package/.scannerwork/scanner-report/source-58.txt +88 -74
  192. package/.scannerwork/scanner-report/source-59.txt +94 -14
  193. package/.scannerwork/scanner-report/source-60.txt +147 -133
  194. package/.scannerwork/scanner-report/source-61.txt +83 -59
  195. package/.scannerwork/scanner-report/source-62.txt +33 -157
  196. package/.scannerwork/scanner-report/source-63.txt +56 -99
  197. package/.scannerwork/scanner-report/source-64.txt +41 -509
  198. package/.scannerwork/scanner-report/source-65.txt +65 -160
  199. package/.scannerwork/scanner-report/source-66.txt +31 -0
  200. package/.scannerwork/scanner-report/source-67.txt +144 -170
  201. package/.scannerwork/scanner-report/source-68.txt +281 -0
  202. package/{test-19-results.xml → .scannerwork/scanner-report/source-69.txt} +139 -139
  203. package/.scannerwork/scanner-report/symbols-19.pb +68 -9
  204. package/.scannerwork/scanner-report/symbols-2.pb +19 -610
  205. package/.scannerwork/scanner-report/symbols-20.pb +9 -485
  206. package/.scannerwork/scanner-report/symbols-21.pb +494 -11
  207. package/.scannerwork/scanner-report/symbols-22.pb +76 -42
  208. package/.scannerwork/scanner-report/symbols-23.pb +43 -494
  209. package/.scannerwork/scanner-report/symbols-24.pb +60 -17
  210. package/.scannerwork/scanner-report/symbols-25.pb +116 -36
  211. package/.scannerwork/scanner-report/symbols-26.pb +112 -9
  212. package/.scannerwork/scanner-report/symbols-27.pb +1253 -44
  213. package/.scannerwork/scanner-report/symbols-28.pb +385 -103
  214. package/.scannerwork/scanner-report/symbols-29.pb +417 -26
  215. package/.scannerwork/scanner-report/symbols-3.pb +29 -417
  216. package/.scannerwork/scanner-report/symbols-30.pb +486 -85
  217. package/.scannerwork/scanner-report/symbols-31.pb +17 -102
  218. package/.scannerwork/scanner-report/symbols-32.pb +9 -77
  219. package/.scannerwork/scanner-report/symbols-33.pb +26 -393
  220. package/.scannerwork/scanner-report/symbols-34.pb +97 -116
  221. package/.scannerwork/scanner-report/symbols-35.pb +36 -60
  222. package/.scannerwork/scanner-report/symbols-36.pb +11 -0
  223. package/.scannerwork/scanner-report/symbols-37.pb +102 -30
  224. package/.scannerwork/scanner-report/symbols-38.pb +44 -18
  225. package/.scannerwork/scanner-report/symbols-39.pb +85 -28
  226. package/.scannerwork/scanner-report/symbols-45.pb +610 -0
  227. package/.scannerwork/scanner-report/symbols-47.pb +153 -0
  228. package/.scannerwork/scanner-report/symbols-49.pb +180 -0
  229. package/.scannerwork/scanner-report/symbols-52.pb +28 -18
  230. package/.scannerwork/scanner-report/symbols-56.pb +42 -13
  231. package/.scannerwork/scanner-report/symbols-57.pb +33 -59
  232. package/.scannerwork/scanner-report/symbols-58.pb +30 -42
  233. package/.scannerwork/scanner-report/symbols-59.pb +58 -13
  234. package/.scannerwork/scanner-report/symbols-60.pb +129 -111
  235. package/.scannerwork/scanner-report/symbols-61.pb +41 -45
  236. package/.scannerwork/scanner-report/symbols-62.pb +14 -143
  237. package/.scannerwork/scanner-report/symbols-63.pb +42 -30
  238. package/.scannerwork/scanner-report/symbols-64.pb +18 -0
  239. package/.scannerwork/scanner-report/symbols-65.pb +45 -152
  240. package/.scannerwork/scanner-report/symbols-66.pb +14 -0
  241. package/.scannerwork/scanner-report/symbols-67.pb +126 -180
  242. package/.scannerwork/scanner-report/syntax-highlightings-19.pb +70 -15
  243. package/.scannerwork/scanner-report/syntax-highlightings-2.pb +58 -624
  244. package/.scannerwork/scanner-report/syntax-highlightings-20.pb +14 -623
  245. package/.scannerwork/scanner-report/syntax-highlightings-21.pb +596 -25
  246. package/.scannerwork/scanner-report/syntax-highlightings-22.pb +119 -43
  247. package/.scannerwork/scanner-report/syntax-highlightings-23.pb +46 -594
  248. package/.scannerwork/scanner-report/syntax-highlightings-24.pb +74 -27
  249. package/.scannerwork/scanner-report/syntax-highlightings-25.pb +98 -59
  250. package/.scannerwork/scanner-report/syntax-highlightings-26.pb +189 -14
  251. package/.scannerwork/scanner-report/syntax-highlightings-27.pb +843 -66
  252. package/.scannerwork/scanner-report/syntax-highlightings-28.pb +269 -163
  253. package/.scannerwork/scanner-report/syntax-highlightings-29.pb +291 -28
  254. package/.scannerwork/scanner-report/syntax-highlightings-3.pb +76 -304
  255. package/.scannerwork/scanner-report/syntax-highlightings-30.pb +610 -142
  256. package/.scannerwork/scanner-report/syntax-highlightings-31.pb +27 -191
  257. package/.scannerwork/scanner-report/syntax-highlightings-32.pb +13 -123
  258. package/.scannerwork/scanner-report/syntax-highlightings-33.pb +29 -290
  259. package/.scannerwork/scanner-report/syntax-highlightings-34.pb +147 -99
  260. package/.scannerwork/scanner-report/syntax-highlightings-35.pb +55 -70
  261. package/.scannerwork/scanner-report/syntax-highlightings-36.pb +59 -0
  262. package/.scannerwork/scanner-report/syntax-highlightings-37.pb +200 -76
  263. package/.scannerwork/scanner-report/syntax-highlightings-38.pb +85 -57
  264. package/.scannerwork/scanner-report/syntax-highlightings-39.pb +156 -103
  265. package/.scannerwork/scanner-report/syntax-highlightings-4.pb +3396 -536
  266. package/.scannerwork/scanner-report/syntax-highlightings-40.pb +3526 -727
  267. package/.scannerwork/scanner-report/syntax-highlightings-45.pb +648 -0
  268. package/.scannerwork/scanner-report/syntax-highlightings-47.pb +199 -3733
  269. package/.scannerwork/scanner-report/syntax-highlightings-49.pb +225 -0
  270. package/.scannerwork/scanner-report/syntax-highlightings-50.pb +863 -199
  271. package/.scannerwork/scanner-report/syntax-highlightings-52.pb +108 -20
  272. package/.scannerwork/scanner-report/syntax-highlightings-56.pb +57 -21
  273. package/.scannerwork/scanner-report/syntax-highlightings-57.pb +85 -89
  274. package/.scannerwork/scanner-report/syntax-highlightings-58.pb +77 -80
  275. package/.scannerwork/scanner-report/syntax-highlightings-59.pb +103 -15
  276. package/.scannerwork/scanner-report/syntax-highlightings-60.pb +166 -136
  277. package/.scannerwork/scanner-report/syntax-highlightings-61.pb +81 -60
  278. package/.scannerwork/scanner-report/syntax-highlightings-62.pb +17 -206
  279. package/.scannerwork/scanner-report/syntax-highlightings-63.pb +44 -79
  280. package/.scannerwork/scanner-report/syntax-highlightings-64.pb +39 -3736
  281. package/.scannerwork/scanner-report/syntax-highlightings-65.pb +64 -183
  282. package/.scannerwork/scanner-report/syntax-highlightings-66.pb +45 -0
  283. package/.scannerwork/scanner-report/syntax-highlightings-67.pb +154 -166
  284. package/.scannerwork/scanner-report/syntax-highlightings-68.pb +285 -0
  285. package/.scannerwork/scanner-report/{syntax-highlightings-43.pb → syntax-highlightings-69.pb} +98 -99
  286. package/CHANGES.md +4 -0
  287. package/README.md +1 -1
  288. package/package.json +4 -4
  289. package/test-16-results.xml +152 -152
  290. package/test-18-results.xml +156 -156
  291. package/{.scannerwork/scanner-report/source-43.txt → test-20-results.xml} +144 -144
  292. package/test-iam-18-results.xml +50 -50
  293. package/.scannerwork/scanner-report/changesets-4.pb +0 -1
  294. package/.scannerwork/scanner-report/changesets-5.pb +0 -1
  295. package/.scannerwork/scanner-report/changesets-50.pb +0 -1
  296. package/.scannerwork/scanner-report/changesets-51.pb +0 -1
  297. package/.scannerwork/scanner-report/changesets-53.pb +0 -1
  298. package/.scannerwork/scanner-report/changesets-54.pb +0 -1
  299. package/.scannerwork/scanner-report/changesets-6.pb +0 -1
  300. package/.scannerwork/scanner-report/component-42.pb +0 -1
  301. package/.scannerwork/scanner-report/component-43.pb +0 -1
  302. package/.scannerwork/scanner-report/component-5.pb +0 -1
  303. package/.scannerwork/scanner-report/component-51.pb +0 -1
  304. package/.scannerwork/scanner-report/component-53.pb +0 -1
  305. package/.scannerwork/scanner-report/component-54.pb +0 -1
  306. package/.scannerwork/scanner-report/component-6.pb +0 -1
  307. package/.scannerwork/scanner-report/coverages-4.pb +0 -0
  308. package/.scannerwork/scanner-report/coverages-5.pb +0 -0
  309. package/.scannerwork/scanner-report/coverages-51.pb +0 -0
  310. package/.scannerwork/scanner-report/coverages-53.pb +0 -0
  311. package/.scannerwork/scanner-report/coverages-54.pb +0 -0
  312. package/.scannerwork/scanner-report/coverages-6.pb +0 -0
  313. package/.scannerwork/scanner-report/duplications-32.pb +0 -3
  314. package/.scannerwork/scanner-report/duplications-5.pb +0 -3
  315. package/.scannerwork/scanner-report/duplications-51.pb +0 -2
  316. package/.scannerwork/scanner-report/duplications-54.pb +0 -2
  317. package/.scannerwork/scanner-report/issues-29.pb +0 -3
  318. package/.scannerwork/scanner-report/measures-43.pb +0 -0
  319. package/.scannerwork/scanner-report/measures-5.pb +0 -0
  320. package/.scannerwork/scanner-report/measures-51.pb +0 -0
  321. package/.scannerwork/scanner-report/measures-53.pb +0 -0
  322. package/.scannerwork/scanner-report/measures-54.pb +0 -0
  323. package/.scannerwork/scanner-report/measures-6.pb +0 -0
  324. package/.scannerwork/scanner-report/source-42.txt +0 -509
  325. package/.scannerwork/scanner-report/source-5.txt +0 -131
  326. package/.scannerwork/scanner-report/source-51.txt +0 -92
  327. package/.scannerwork/scanner-report/source-53.txt +0 -129
  328. package/.scannerwork/scanner-report/source-54.txt +0 -75
  329. package/.scannerwork/scanner-report/source-6.txt +0 -100
  330. package/.scannerwork/scanner-report/symbols-4.pb +0 -1254
  331. package/.scannerwork/scanner-report/symbols-5.pb +0 -97
  332. package/.scannerwork/scanner-report/symbols-51.pb +0 -44
  333. package/.scannerwork/scanner-report/symbols-53.pb +0 -33
  334. package/.scannerwork/scanner-report/symbols-54.pb +0 -42
  335. package/.scannerwork/scanner-report/symbols-6.pb +0 -69
  336. package/.scannerwork/scanner-report/syntax-highlightings-42.pb +0 -3748
  337. package/.scannerwork/scanner-report/syntax-highlightings-5.pb +0 -182
  338. package/.scannerwork/scanner-report/syntax-highlightings-51.pb +0 -90
  339. package/.scannerwork/scanner-report/syntax-highlightings-53.pb +0 -129
  340. package/.scannerwork/scanner-report/syntax-highlightings-54.pb +0 -78
  341. package/.scannerwork/scanner-report/syntax-highlightings-6.pb +0 -105
  342. package/test-14-results.xml +0 -509
  343. /package/.scannerwork/scanner-report/{coverages-50.pb → coverages-68.pb} +0 -0
  344. /package/.scannerwork/scanner-report/{duplications-4.pb → duplications-26.pb} +0 -0
  345. /package/.scannerwork/scanner-report/{duplications-50.pb → duplications-36.pb} +0 -0
  346. /package/.scannerwork/scanner-report/{duplications-53.pb → duplications-45.pb} +0 -0
  347. /package/.scannerwork/scanner-report/{duplications-6.pb → duplications-64.pb} +0 -0
  348. /package/.scannerwork/scanner-report/{issues-23.pb → issues-21.pb} +0 -0
  349. /package/.scannerwork/scanner-report/{issues-34.pb → issues-25.pb} +0 -0
  350. /package/.scannerwork/scanner-report/{measures-42.pb → measures-69.pb} +0 -0
  351. /package/.scannerwork/scanner-report/{symbols-50.pb → symbols-68.pb} +0 -0
@@ -12,145 +12,233 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
 
15
- /* global describe it */
15
+ /* global describe it beforeEach */
16
16
  'use strict';
17
17
 
18
18
  const assert = require('assert');
19
19
  const nock = require('nock');
20
20
  const request = require('../includes/request.js');
21
- const changes = require('../includes/spoolchanges.js');
21
+ const error = require('../includes/error.js');
22
22
 
23
- const url = 'http://localhost:7777';
24
- const dbName = 'fakenockdb';
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 });
25
26
  const longTestTimeout = 3000;
26
27
 
27
- const db = request.client(`${url}/${dbName}`, { parallelism: 1 });
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);
28
38
 
29
- const seqSuffix = Buffer.alloc(124, 'abc123').toString('base64');
30
- function provideChanges(batchSize, totalChanges, fullResponse = false) {
31
- let pending = totalChanges;
32
- const sparseResultsArray = Array(batchSize).fill({
33
- seq: null,
34
- id: 'doc',
35
- changes: [{ rev: '1-abcdef0123456789abcdef0123456789' }]
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
+ });
36
45
  });
37
- nock(url)
38
- .post(`/${dbName}/_changes`)
39
- .query(true)
40
- .times(totalChanges / batchSize + (totalChanges % batchSize > 0 ? 1 : 0))
41
- .reply(200, (uri, requestBody) => {
42
- pending -= batchSize;
43
- const lastSeq = (totalChanges - pending);
44
- const seq = lastSeq - batchSize;
45
- return {
46
- results: fullResponse
47
- ? Array.from(Array(batchSize), (_, i) => {
48
- return {
49
- seq: `${seq + i}-${seqSuffix}`,
50
- id: `doc${seq + i}`,
51
- changes: [{ rev: '1-abcdef0123456789abcdef0123456789' }]
52
- };
53
- })
54
- : sparseResultsArray,
55
- pending: pending,
56
- last_seq: `${lastSeq}-abc`
57
- };
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);
58
61
  });
59
- }
62
+ });
60
63
 
61
- describe('#unit Check spool changes', function() {
62
- it('should terminate on request error', function(done) {
63
- nock(url)
64
- .post(`/${dbName}/_changes`)
65
- .query(true)
64
+ it('should callback with error after 3 500 responses', function(done) {
65
+ const couch = nock(url)
66
+ .get('/bad')
66
67
  .times(3)
67
- .replyWithError({ code: 'ECONNRESET', message: 'socket hang up' });
68
+ .reply(500, function(uri, requestBody) {
69
+ this.req.response.statusMessage = 'Internal Server Error';
70
+ return { error: 'foo', reason: 'bar' };
71
+ });
68
72
 
69
- changes(db, '/dev/null', 500, null, function(err) {
70
- assert.strictEqual(err.name, 'SpoolChangesError');
71
- assert.strictEqual(err.message, `Failed changes request - socket hang up: post ${url}/${dbName}/_changes`);
72
- assert.ok(nock.isDone());
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());
73
80
  done();
81
+ }).catch(err => {
82
+ // Handle assertion errors
83
+ done(err);
74
84
  });
75
85
  }).timeout(longTestTimeout);
76
86
 
77
- it('should terminate on bad HTTP status code response', function(done) {
78
- nock(url)
79
- .post(`/${dbName}/_changes`)
87
+ it('should callback with error after 3 POST 503 responses', function(done) {
88
+ const couch = nock(url)
89
+ .post('/_bulk_get')
80
90
  .query(true)
81
91
  .times(3)
82
- .reply(500, function(uri, requestBody) {
83
- this.req.response.statusMessage = 'Internal Server Error';
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';
84
117
  return { error: 'foo', reason: 'bar' };
85
118
  });
86
119
 
87
- changes(db, '/dev/null', 500, null, function(err) {
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);
88
124
  assert.strictEqual(err.name, 'HTTPFatalError');
89
- assert.strictEqual(err.message, `500 Internal Server Error: post ${url}/${dbName}/_changes - Error: foo, Reason: bar`);
90
- assert.ok(nock.isDone());
125
+ assert.strictEqual(err.message, `429 Too Many Requests: get ${url}/bad - Error: foo, Reason: bar`);
126
+ assert.ok(couch.isDone());
91
127
  done();
128
+ }).catch(err => {
129
+ // Handle assertion errors
130
+ done(err);
92
131
  });
93
132
  }).timeout(longTestTimeout);
94
133
 
95
- it('should keep collecting changes', function(done) {
96
- // This test validates that spooling will correctly
97
- // continue across multiple requests
98
- // (4 batches of 100000 to be precise).
99
- // This test might take up to 10 seconds
100
- this.timeout(10 * 1000);
101
-
102
- // Use full changes for this test
103
- provideChanges(100000, 400000, true);
104
- changes(db, '/dev/null', 500, null, function(err) {
105
- assert.ok(!err);
106
- assert.ok(nock.isDone());
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());
107
149
  done();
150
+ }).catch(err => {
151
+ // Handle assertion errors
152
+ done(err);
108
153
  });
109
154
  });
110
155
 
111
- it('should keep collecting sparse changes', function(done) {
112
- // This test checks that making thousands of requests doesn't
113
- // make anything bad happen.
114
- // This test might take up to 25 seconds
115
- this.timeout(25 * 1000);
116
- // Use sparse changes for this test and a batch size of 1
117
- provideChanges(1, 2500);
118
- changes(db, '/dev/null', 500, null, function(err) {
119
- assert.ok(!err);
120
- assert.ok(nock.isDone());
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());
121
168
  done();
169
+ }).catch(err => {
170
+ // Handle assertion errors
171
+ done(err);
122
172
  });
123
- });
124
- });
173
+ }).timeout(longTestTimeout);
125
174
 
126
- describe('Longer spool changes checks', function() {
127
- it('#slow should keep collecting changes (25M)', function(done) {
128
- // This test might take up to 5 minutes
129
- this.timeout(5 * 60 * 1000);
130
- // Note changes spooling uses a constant batch size, we are setting
131
- // a test value here and setting the buffer to match
132
- const batch = 100000;
133
- // Use sparse changes for this test
134
- provideChanges(batch, 25000000);
135
- changes(db, '/dev/null', batch, null, function(err) {
136
- assert.ok(!err);
137
- assert.ok(nock.isDone());
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());
138
192
  done();
193
+ }).catch(err => {
194
+ done(err);
139
195
  });
140
196
  });
141
197
 
142
- it('#slower should keep collecting changes (500M)', function(done) {
143
- // This test might take up to 90 minutes
144
- this.timeout(90 * 60 * 1000);
145
- // Note changes spooling uses a constant batch size, we are setting
146
- // a test value here and setting the buffer to match
147
- const batch = 1000000;
148
- // Use full changes for this test to exercise load
149
- provideChanges(batch, 500000000, true);
150
- changes(db, '/dev/null', batch, null, function(err) {
151
- assert.ok(!err);
152
- assert.ok(nock.isDone());
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());
153
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
+ });
154
242
  });
155
243
  });
156
244
  });
@@ -16,32 +16,210 @@
16
16
  'use strict';
17
17
 
18
18
  const assert = require('assert');
19
+ const backup = require('../app.js').backup;
19
20
  const fs = require('fs');
20
- const u = require('./citestutils.js');
21
-
22
- describe('Write error tests', function() {
23
- it('calls callback with error set when stream is not writeable', function(done) {
24
- u.setTimeout(this, 10);
25
- const dirname = fs.mkdtempSync('test_backup_');
26
- // make temp dir read only
27
- fs.chmodSync(dirname, 0o444);
28
- const filename = dirname + '/test.backup';
29
- const backupStream = fs.createWriteStream(filename, { flags: 'w' });
30
- const params = { useApi: true };
31
- // try to do backup and check err was set in callback
32
- u.testBackup(params, 'animaldb', backupStream, function(resultErr) {
33
- let err = null;
34
- try {
35
- // cleanup temp dir
36
- fs.rmdirSync(dirname);
37
- // error should have been set
38
- assert.ok(resultErr);
39
- assert.strictEqual(resultErr.code, 'EACCES');
40
- } catch (thrownErr) {
41
- err = thrownErr;
42
- } finally {
43
- done(err);
21
+ const nock = require('nock');
22
+
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;
44
43
  }
45
- });
44
+ callback(err);
45
+ };
46
+ }
47
+ backup(url, nullStream, opts, cb);
48
+ return true;
49
+ };
50
+
51
+ const stderrWriteFun = process.stderr.write;
52
+ let capturedStderr;
53
+
54
+ function captureStderr() {
55
+ process.stderr.write = function(string, encoding, fd) {
56
+ capturedStderr += string;
57
+ };
58
+ }
59
+
60
+ function releaseStderr() {
61
+ process.stderr.write = stderrWriteFun;
62
+ capturedStderr = null;
63
+ }
64
+
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
+ }
77
+
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
+ }
88
+
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
+ }
46
224
  });
47
225
  });