@cloudant/couchbackup 2.9.15-SNAPSHOT.176 → 2.9.15

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 (424) hide show
  1. package/.scannerwork/report-task.txt +2 -2
  2. package/.scannerwork/scanner-report/analysis-cache2.pb +0 -0
  3. package/.scannerwork/scanner-report/analysis-warnings.pb +2 -2
  4. package/.scannerwork/scanner-report/analysis.log +1 -1
  5. package/.scannerwork/scanner-report/changesets-19.pb +1 -0
  6. package/.scannerwork/scanner-report/changesets-20.pb +1 -0
  7. package/.scannerwork/scanner-report/changesets-21.pb +1 -0
  8. package/.scannerwork/scanner-report/changesets-22.pb +1 -0
  9. package/.scannerwork/scanner-report/changesets-23.pb +1 -0
  10. package/.scannerwork/scanner-report/changesets-24.pb +1 -0
  11. package/.scannerwork/scanner-report/changesets-26.pb +1 -0
  12. package/.scannerwork/scanner-report/changesets-29.pb +1 -0
  13. package/.scannerwork/scanner-report/changesets-30.pb +1 -0
  14. package/.scannerwork/scanner-report/changesets-31.pb +1 -0
  15. package/.scannerwork/scanner-report/changesets-33.pb +1 -0
  16. package/.scannerwork/scanner-report/changesets-34.pb +1 -0
  17. package/.scannerwork/scanner-report/changesets-35.pb +1 -0
  18. package/.scannerwork/scanner-report/changesets-36.pb +1 -0
  19. package/.scannerwork/scanner-report/changesets-37.pb +1 -0
  20. package/.scannerwork/scanner-report/changesets-38.pb +1 -0
  21. package/.scannerwork/scanner-report/changesets-39.pb +1 -0
  22. package/.scannerwork/scanner-report/changesets-66.pb +1 -0
  23. package/.scannerwork/scanner-report/changesets-67.pb +1 -0
  24. package/.scannerwork/scanner-report/component-1.pb +2 -2
  25. package/.scannerwork/scanner-report/component-10.pb +1 -1
  26. package/.scannerwork/scanner-report/component-12.pb +1 -1
  27. package/.scannerwork/scanner-report/component-14.pb +1 -1
  28. package/.scannerwork/scanner-report/component-16.pb +1 -1
  29. package/.scannerwork/scanner-report/component-17.pb +1 -1
  30. package/.scannerwork/scanner-report/component-18.pb +1 -1
  31. package/.scannerwork/scanner-report/component-19.pb +1 -0
  32. package/.scannerwork/scanner-report/component-20.pb +1 -0
  33. package/.scannerwork/scanner-report/component-21.pb +1 -0
  34. package/.scannerwork/scanner-report/component-22.pb +1 -0
  35. package/.scannerwork/scanner-report/component-23.pb +1 -0
  36. package/.scannerwork/scanner-report/component-24.pb +1 -1
  37. package/.scannerwork/scanner-report/component-25.pb +1 -1
  38. package/.scannerwork/scanner-report/component-26.pb +1 -0
  39. package/.scannerwork/scanner-report/component-27.pb +1 -1
  40. package/.scannerwork/scanner-report/component-28.pb +1 -1
  41. package/.scannerwork/scanner-report/component-29.pb +1 -0
  42. package/.scannerwork/scanner-report/component-3.pb +1 -0
  43. package/.scannerwork/scanner-report/component-30.pb +1 -1
  44. package/.scannerwork/scanner-report/component-31.pb +1 -1
  45. package/.scannerwork/scanner-report/component-32.pb +1 -1
  46. package/.scannerwork/scanner-report/component-33.pb +1 -0
  47. package/.scannerwork/scanner-report/component-34.pb +1 -0
  48. package/.scannerwork/scanner-report/component-35.pb +1 -0
  49. package/.scannerwork/scanner-report/component-36.pb +1 -0
  50. package/.scannerwork/scanner-report/component-37.pb +1 -0
  51. package/.scannerwork/scanner-report/component-38.pb +1 -0
  52. package/.scannerwork/scanner-report/component-39.pb +1 -0
  53. package/.scannerwork/scanner-report/component-53.pb +1 -1
  54. package/.scannerwork/scanner-report/component-54.pb +1 -1
  55. package/.scannerwork/scanner-report/component-55.pb +1 -1
  56. package/.scannerwork/scanner-report/component-56.pb +1 -1
  57. package/.scannerwork/scanner-report/component-57.pb +1 -1
  58. package/.scannerwork/scanner-report/component-58.pb +1 -1
  59. package/.scannerwork/scanner-report/component-59.pb +1 -1
  60. package/.scannerwork/scanner-report/component-6.pb +1 -1
  61. package/.scannerwork/scanner-report/component-60.pb +1 -1
  62. package/.scannerwork/scanner-report/component-61.pb +1 -1
  63. package/.scannerwork/scanner-report/component-62.pb +1 -1
  64. package/.scannerwork/scanner-report/component-63.pb +1 -1
  65. package/.scannerwork/scanner-report/component-64.pb +1 -1
  66. package/.scannerwork/scanner-report/component-65.pb +1 -1
  67. package/.scannerwork/scanner-report/component-66.pb +1 -0
  68. package/.scannerwork/scanner-report/component-67.pb +1 -0
  69. package/.scannerwork/scanner-report/component-68.pb +1 -1
  70. package/.scannerwork/scanner-report/component-69.pb +1 -1
  71. package/.scannerwork/scanner-report/component-70.pb +1 -1
  72. package/.scannerwork/scanner-report/coverages-12.pb +0 -0
  73. package/.scannerwork/scanner-report/coverages-14.pb +0 -0
  74. package/.scannerwork/scanner-report/coverages-16.pb +0 -0
  75. package/.scannerwork/scanner-report/coverages-17.pb +0 -0
  76. package/.scannerwork/scanner-report/coverages-18.pb +0 -0
  77. package/.scannerwork/scanner-report/coverages-19.pb +0 -0
  78. package/.scannerwork/scanner-report/coverages-21.pb +0 -0
  79. package/.scannerwork/scanner-report/coverages-22.pb +0 -0
  80. package/.scannerwork/scanner-report/coverages-24.pb +0 -0
  81. package/.scannerwork/scanner-report/coverages-25.pb +0 -0
  82. package/.scannerwork/scanner-report/coverages-27.pb +0 -0
  83. package/.scannerwork/scanner-report/coverages-28.pb +0 -0
  84. package/.scannerwork/scanner-report/coverages-29.pb +0 -0
  85. package/.scannerwork/scanner-report/coverages-30.pb +0 -0
  86. package/.scannerwork/scanner-report/coverages-31.pb +0 -0
  87. package/.scannerwork/scanner-report/coverages-32.pb +0 -0
  88. package/.scannerwork/scanner-report/coverages-34.pb +0 -0
  89. package/.scannerwork/scanner-report/coverages-35.pb +0 -0
  90. package/.scannerwork/scanner-report/coverages-37.pb +0 -0
  91. package/.scannerwork/scanner-report/coverages-53.pb +0 -0
  92. package/.scannerwork/scanner-report/coverages-54.pb +0 -0
  93. package/.scannerwork/scanner-report/coverages-55.pb +0 -0
  94. package/.scannerwork/scanner-report/coverages-56.pb +0 -0
  95. package/.scannerwork/scanner-report/coverages-57.pb +0 -0
  96. package/.scannerwork/scanner-report/coverages-58.pb +0 -0
  97. package/.scannerwork/scanner-report/coverages-59.pb +0 -0
  98. package/.scannerwork/scanner-report/coverages-60.pb +0 -0
  99. package/.scannerwork/scanner-report/coverages-61.pb +0 -0
  100. package/.scannerwork/scanner-report/coverages-62.pb +0 -0
  101. package/.scannerwork/scanner-report/coverages-63.pb +0 -0
  102. package/.scannerwork/scanner-report/coverages-64.pb +0 -0
  103. package/.scannerwork/scanner-report/coverages-65.pb +0 -0
  104. package/.scannerwork/scanner-report/coverages-67.pb +0 -0
  105. package/.scannerwork/scanner-report/coverages-68.pb +0 -0
  106. package/.scannerwork/scanner-report/coverages-69.pb +0 -0
  107. package/.scannerwork/scanner-report/duplications-12.pb +2 -0
  108. package/.scannerwork/scanner-report/duplications-14.pb +2 -0
  109. package/.scannerwork/scanner-report/duplications-25.pb +2 -0
  110. package/.scannerwork/scanner-report/duplications-54.pb +0 -0
  111. package/.scannerwork/scanner-report/duplications-56.pb +2 -0
  112. package/.scannerwork/scanner-report/duplications-66.pb +2 -0
  113. package/.scannerwork/scanner-report/duplications-67.pb +0 -0
  114. package/.scannerwork/scanner-report/duplications-68.pb +0 -2
  115. package/.scannerwork/scanner-report/duplications-69.pb +0 -2
  116. package/.scannerwork/scanner-report/issues-17.pb +3 -0
  117. package/.scannerwork/scanner-report/issues-32.pb +4 -1
  118. package/.scannerwork/scanner-report/measures-10.pb +0 -0
  119. package/.scannerwork/scanner-report/measures-12.pb +0 -0
  120. package/.scannerwork/scanner-report/measures-14.pb +0 -0
  121. package/.scannerwork/scanner-report/measures-16.pb +0 -0
  122. package/.scannerwork/scanner-report/measures-17.pb +0 -0
  123. package/.scannerwork/scanner-report/measures-18.pb +0 -0
  124. package/.scannerwork/scanner-report/measures-19.pb +0 -0
  125. package/.scannerwork/scanner-report/measures-21.pb +0 -0
  126. package/.scannerwork/scanner-report/measures-22.pb +16 -0
  127. package/.scannerwork/scanner-report/measures-24.pb +0 -0
  128. package/.scannerwork/scanner-report/measures-25.pb +0 -0
  129. package/.scannerwork/scanner-report/measures-27.pb +0 -0
  130. package/.scannerwork/scanner-report/measures-28.pb +0 -0
  131. package/.scannerwork/scanner-report/measures-29.pb +0 -0
  132. package/.scannerwork/scanner-report/measures-3.pb +0 -0
  133. package/.scannerwork/scanner-report/measures-30.pb +0 -0
  134. package/.scannerwork/scanner-report/measures-31.pb +0 -0
  135. package/.scannerwork/scanner-report/measures-32.pb +0 -0
  136. package/.scannerwork/scanner-report/measures-34.pb +0 -0
  137. package/.scannerwork/scanner-report/measures-35.pb +0 -0
  138. package/.scannerwork/scanner-report/measures-37.pb +0 -0
  139. package/.scannerwork/scanner-report/measures-53.pb +0 -0
  140. package/.scannerwork/scanner-report/measures-54.pb +0 -0
  141. package/.scannerwork/scanner-report/measures-55.pb +0 -0
  142. package/.scannerwork/scanner-report/measures-56.pb +0 -0
  143. package/.scannerwork/scanner-report/measures-57.pb +0 -0
  144. package/.scannerwork/scanner-report/measures-58.pb +0 -0
  145. package/.scannerwork/scanner-report/measures-59.pb +0 -0
  146. package/.scannerwork/scanner-report/measures-6.pb +0 -0
  147. package/.scannerwork/scanner-report/measures-60.pb +0 -0
  148. package/.scannerwork/scanner-report/measures-61.pb +0 -0
  149. package/.scannerwork/scanner-report/measures-62.pb +0 -0
  150. package/.scannerwork/scanner-report/measures-63.pb +0 -0
  151. package/.scannerwork/scanner-report/measures-64.pb +0 -0
  152. package/.scannerwork/scanner-report/measures-65.pb +0 -0
  153. package/.scannerwork/scanner-report/measures-66.pb +0 -0
  154. package/.scannerwork/scanner-report/measures-67.pb +0 -0
  155. package/.scannerwork/scanner-report/measures-68.pb +0 -0
  156. package/.scannerwork/scanner-report/measures-69.pb +0 -0
  157. package/.scannerwork/scanner-report/metadata.pb +0 -0
  158. package/.scannerwork/scanner-report/source-10.txt +424 -92
  159. package/.scannerwork/scanner-report/source-12.txt +173 -14
  160. package/.scannerwork/scanner-report/source-14.txt +156 -145
  161. package/.scannerwork/scanner-report/source-16.txt +32 -99
  162. package/.scannerwork/scanner-report/source-17.txt +116 -115
  163. package/.scannerwork/scanner-report/source-18.txt +117 -29
  164. package/.scannerwork/scanner-report/source-19.txt +37 -0
  165. package/.scannerwork/scanner-report/source-21.txt +41 -0
  166. package/.scannerwork/scanner-report/source-22.txt +293 -0
  167. package/.scannerwork/scanner-report/source-24.txt +32 -424
  168. package/.scannerwork/scanner-report/source-25.txt +155 -386
  169. package/.scannerwork/scanner-report/source-27.txt +84 -65
  170. package/.scannerwork/scanner-report/source-28.txt +432 -43
  171. package/.scannerwork/scanner-report/source-29.txt +42 -0
  172. package/.scannerwork/scanner-report/source-3.txt +424 -0
  173. package/.scannerwork/scanner-report/source-30.txt +29 -424
  174. package/.scannerwork/scanner-report/source-31.txt +37 -102
  175. package/.scannerwork/scanner-report/source-32.txt +288 -89
  176. package/.scannerwork/scanner-report/source-34.txt +106 -0
  177. package/.scannerwork/scanner-report/source-35.txt +75 -0
  178. package/.scannerwork/scanner-report/source-37.txt +191 -0
  179. package/.scannerwork/scanner-report/source-53.txt +104 -61
  180. package/.scannerwork/scanner-report/source-54.txt +31 -14
  181. package/.scannerwork/scanner-report/source-55.txt +150 -23
  182. package/.scannerwork/scanner-report/source-56.txt +51 -167
  183. package/.scannerwork/scanner-report/source-57.txt +255 -80
  184. package/.scannerwork/scanner-report/source-58.txt +58 -427
  185. package/.scannerwork/scanner-report/source-59.txt +162 -118
  186. package/.scannerwork/scanner-report/source-6.txt +102 -41
  187. package/.scannerwork/scanner-report/source-60.txt +99 -27
  188. package/.scannerwork/scanner-report/source-61.txt +43 -16
  189. package/.scannerwork/scanner-report/source-62.txt +115 -315
  190. package/.scannerwork/scanner-report/source-63.txt +16 -27
  191. package/.scannerwork/scanner-report/source-64.txt +25 -21
  192. package/.scannerwork/scanner-report/source-65.txt +92 -274
  193. package/.scannerwork/scanner-report/{source-15.txt → source-66.txt} +29 -12
  194. package/.scannerwork/scanner-report/source-67.txt +414 -0
  195. package/.scannerwork/scanner-report/source-68.txt +42 -157
  196. package/.scannerwork/scanner-report/source-69.txt +57 -166
  197. package/.scannerwork/scanner-report/source-70.txt +155 -155
  198. package/.scannerwork/scanner-report/symbols-12.pb +180 -14
  199. package/.scannerwork/scanner-report/symbols-14.pb +147 -120
  200. package/.scannerwork/scanner-report/symbols-16.pb +7 -46
  201. package/.scannerwork/scanner-report/symbols-17.pb +86 -33
  202. package/.scannerwork/scanner-report/symbols-18.pb +71 -7
  203. package/.scannerwork/scanner-report/symbols-19.pb +9 -0
  204. package/.scannerwork/scanner-report/symbols-21.pb +31 -0
  205. package/.scannerwork/scanner-report/symbols-22.pb +428 -0
  206. package/.scannerwork/scanner-report/symbols-24.pb +9 -0
  207. package/.scannerwork/scanner-report/symbols-25.pb +179 -580
  208. package/.scannerwork/scanner-report/symbols-27.pb +69 -32
  209. package/.scannerwork/scanner-report/symbols-28.pb +790 -21
  210. package/.scannerwork/scanner-report/symbols-29.pb +19 -0
  211. package/.scannerwork/scanner-report/symbols-30.pb +8 -0
  212. package/.scannerwork/scanner-report/symbols-31.pb +13 -0
  213. package/.scannerwork/scanner-report/symbols-32.pb +353 -86
  214. package/.scannerwork/scanner-report/symbols-34.pb +59 -0
  215. package/.scannerwork/scanner-report/symbols-35.pb +39 -0
  216. package/.scannerwork/scanner-report/symbols-37.pb +209 -0
  217. package/.scannerwork/scanner-report/symbols-53.pb +30 -39
  218. package/.scannerwork/scanner-report/symbols-54.pb +20 -8
  219. package/.scannerwork/scanner-report/symbols-55.pb +126 -9
  220. package/.scannerwork/scanner-report/symbols-56.pb +41 -208
  221. package/.scannerwork/scanner-report/symbols-57.pb +354 -59
  222. package/.scannerwork/scanner-report/symbols-58.pb +43 -787
  223. package/.scannerwork/scanner-report/symbols-59.pb +143 -70
  224. package/.scannerwork/scanner-report/symbols-60.pb +46 -31
  225. package/.scannerwork/scanner-report/symbols-61.pb +19 -9
  226. package/.scannerwork/scanner-report/symbols-62.pb +33 -353
  227. package/.scannerwork/scanner-report/symbols-63.pb +14 -19
  228. package/.scannerwork/scanner-report/symbols-64.pb +18 -13
  229. package/.scannerwork/scanner-report/symbols-65.pb +57 -426
  230. package/.scannerwork/scanner-report/symbols-67.pb +604 -0
  231. package/.scannerwork/scanner-report/symbols-68.pb +21 -153
  232. package/.scannerwork/scanner-report/symbols-69.pb +32 -180
  233. package/.scannerwork/scanner-report/syntax-highlightings-10.pb +3329 -82
  234. package/.scannerwork/scanner-report/syntax-highlightings-12.pb +195 -15
  235. package/.scannerwork/scanner-report/syntax-highlightings-14.pb +156 -155
  236. package/.scannerwork/scanner-report/syntax-highlightings-16.pb +32 -96
  237. package/.scannerwork/scanner-report/syntax-highlightings-17.pb +90 -94
  238. package/.scannerwork/scanner-report/syntax-highlightings-18.pb +145 -26
  239. package/.scannerwork/scanner-report/syntax-highlightings-19.pb +61 -0
  240. package/.scannerwork/scanner-report/syntax-highlightings-21.pb +69 -0
  241. package/.scannerwork/scanner-report/syntax-highlightings-22.pb +720 -0
  242. package/.scannerwork/scanner-report/syntax-highlightings-24.pb +43 -3329
  243. package/.scannerwork/scanner-report/syntax-highlightings-25.pb +187 -548
  244. package/.scannerwork/scanner-report/syntax-highlightings-27.pb +77 -70
  245. package/.scannerwork/scanner-report/syntax-highlightings-28.pb +598 -53
  246. package/.scannerwork/scanner-report/syntax-highlightings-29.pb +66 -0
  247. package/.scannerwork/scanner-report/syntax-highlightings-3.pb +3342 -0
  248. package/.scannerwork/scanner-report/syntax-highlightings-30.pb +32 -3323
  249. package/.scannerwork/scanner-report/syntax-highlightings-31.pb +44 -674
  250. package/.scannerwork/scanner-report/syntax-highlightings-32.pb +582 -87
  251. package/.scannerwork/scanner-report/syntax-highlightings-34.pb +178 -0
  252. package/.scannerwork/scanner-report/syntax-highlightings-35.pb +101 -0
  253. package/.scannerwork/scanner-report/syntax-highlightings-37.pb +290 -0
  254. package/.scannerwork/scanner-report/syntax-highlightings-53.pb +83 -71
  255. package/.scannerwork/scanner-report/syntax-highlightings-54.pb +35 -20
  256. package/.scannerwork/scanner-report/syntax-highlightings-55.pb +179 -27
  257. package/.scannerwork/scanner-report/syntax-highlightings-56.pb +47 -256
  258. package/.scannerwork/scanner-report/syntax-highlightings-57.pb +244 -137
  259. package/.scannerwork/scanner-report/syntax-highlightings-58.pb +58 -590
  260. package/.scannerwork/scanner-report/syntax-highlightings-59.pb +196 -134
  261. package/.scannerwork/scanner-report/syntax-highlightings-6.pb +673 -34
  262. package/.scannerwork/scanner-report/syntax-highlightings-60.pb +95 -38
  263. package/.scannerwork/scanner-report/syntax-highlightings-61.pb +28 -23
  264. package/.scannerwork/scanner-report/syntax-highlightings-62.pb +93 -584
  265. package/.scannerwork/scanner-report/syntax-highlightings-63.pb +15 -36
  266. package/.scannerwork/scanner-report/syntax-highlightings-64.pb +23 -33
  267. package/.scannerwork/scanner-report/syntax-highlightings-65.pb +96 -683
  268. package/.scannerwork/scanner-report/syntax-highlightings-66.pb +93 -0
  269. package/.scannerwork/scanner-report/syntax-highlightings-67.pb +641 -0
  270. package/.scannerwork/scanner-report/syntax-highlightings-68.pb +58 -190
  271. package/.scannerwork/scanner-report/syntax-highlightings-69.pb +75 -200
  272. package/.scannerwork/scanner-report/syntax-highlightings-70.pb +94 -96
  273. package/CHANGES.md +4 -0
  274. package/package.json +1 -1
  275. package/test-18-results.xml +157 -157
  276. package/test-20-results.xml +153 -153
  277. package/test-21-results.xml +145 -145
  278. package/test-iam-20-results.xml +50 -50
  279. package/.scannerwork/scanner-report/changesets-10.pb +0 -2
  280. package/.scannerwork/scanner-report/changesets-11.pb +0 -1
  281. package/.scannerwork/scanner-report/changesets-13.pb +0 -1
  282. package/.scannerwork/scanner-report/changesets-15.pb +0 -1
  283. package/.scannerwork/scanner-report/changesets-4.pb +0 -1
  284. package/.scannerwork/scanner-report/changesets-44.pb +0 -1
  285. package/.scannerwork/scanner-report/changesets-45.pb +0 -1
  286. package/.scannerwork/scanner-report/changesets-46.pb +0 -1
  287. package/.scannerwork/scanner-report/changesets-47.pb +0 -1
  288. package/.scannerwork/scanner-report/changesets-48.pb +0 -1
  289. package/.scannerwork/scanner-report/changesets-49.pb +0 -1
  290. package/.scannerwork/scanner-report/changesets-5.pb +0 -1
  291. package/.scannerwork/scanner-report/changesets-50.pb +0 -1
  292. package/.scannerwork/scanner-report/changesets-51.pb +0 -1
  293. package/.scannerwork/scanner-report/changesets-52.pb +0 -1
  294. package/.scannerwork/scanner-report/changesets-6.pb +0 -1
  295. package/.scannerwork/scanner-report/changesets-7.pb +0 -1
  296. package/.scannerwork/scanner-report/changesets-8.pb +0 -1
  297. package/.scannerwork/scanner-report/changesets-9.pb +0 -1
  298. package/.scannerwork/scanner-report/component-11.pb +0 -1
  299. package/.scannerwork/scanner-report/component-13.pb +0 -1
  300. package/.scannerwork/scanner-report/component-15.pb +0 -1
  301. package/.scannerwork/scanner-report/component-4.pb +0 -1
  302. package/.scannerwork/scanner-report/component-44.pb +0 -1
  303. package/.scannerwork/scanner-report/component-45.pb +0 -1
  304. package/.scannerwork/scanner-report/component-46.pb +0 -1
  305. package/.scannerwork/scanner-report/component-47.pb +0 -1
  306. package/.scannerwork/scanner-report/component-48.pb +0 -1
  307. package/.scannerwork/scanner-report/component-49.pb +0 -1
  308. package/.scannerwork/scanner-report/component-5.pb +0 -1
  309. package/.scannerwork/scanner-report/component-50.pb +0 -1
  310. package/.scannerwork/scanner-report/component-51.pb +0 -1
  311. package/.scannerwork/scanner-report/component-52.pb +0 -1
  312. package/.scannerwork/scanner-report/component-7.pb +0 -1
  313. package/.scannerwork/scanner-report/component-8.pb +0 -1
  314. package/.scannerwork/scanner-report/component-9.pb +0 -1
  315. package/.scannerwork/scanner-report/coverages-11.pb +0 -0
  316. package/.scannerwork/scanner-report/coverages-13.pb +0 -0
  317. package/.scannerwork/scanner-report/coverages-15.pb +0 -0
  318. package/.scannerwork/scanner-report/coverages-4.pb +0 -0
  319. package/.scannerwork/scanner-report/coverages-44.pb +0 -0
  320. package/.scannerwork/scanner-report/coverages-47.pb +0 -0
  321. package/.scannerwork/scanner-report/coverages-5.pb +0 -0
  322. package/.scannerwork/scanner-report/coverages-6.pb +0 -0
  323. package/.scannerwork/scanner-report/coverages-7.pb +0 -0
  324. package/.scannerwork/scanner-report/coverages-8.pb +0 -0
  325. package/.scannerwork/scanner-report/coverages-9.pb +0 -0
  326. package/.scannerwork/scanner-report/duplications-10.pb +0 -2
  327. package/.scannerwork/scanner-report/duplications-15.pb +0 -3
  328. package/.scannerwork/scanner-report/duplications-44.pb +0 -2
  329. package/.scannerwork/scanner-report/issues-62.pb +0 -6
  330. package/.scannerwork/scanner-report/measures-11.pb +0 -0
  331. package/.scannerwork/scanner-report/measures-13.pb +0 -0
  332. package/.scannerwork/scanner-report/measures-15.pb +0 -0
  333. package/.scannerwork/scanner-report/measures-4.pb +0 -0
  334. package/.scannerwork/scanner-report/measures-44.pb +0 -0
  335. package/.scannerwork/scanner-report/measures-47.pb +0 -0
  336. package/.scannerwork/scanner-report/measures-5.pb +0 -0
  337. package/.scannerwork/scanner-report/measures-7.pb +0 -16
  338. package/.scannerwork/scanner-report/measures-8.pb +0 -0
  339. package/.scannerwork/scanner-report/measures-9.pb +0 -0
  340. package/.scannerwork/scanner-report/source-11.txt +0 -46
  341. package/.scannerwork/scanner-report/source-13.txt +0 -111
  342. package/.scannerwork/scanner-report/source-4.txt +0 -118
  343. package/.scannerwork/scanner-report/source-44.txt +0 -183
  344. package/.scannerwork/scanner-report/source-47.txt +0 -100
  345. package/.scannerwork/scanner-report/source-5.txt +0 -80
  346. package/.scannerwork/scanner-report/source-7.txt +0 -178
  347. package/.scannerwork/scanner-report/source-8.txt +0 -281
  348. package/.scannerwork/scanner-report/source-9.txt +0 -59
  349. package/.scannerwork/scanner-report/symbols-11.pb +0 -20
  350. package/.scannerwork/scanner-report/symbols-13.pb +0 -59
  351. package/.scannerwork/scanner-report/symbols-15.pb +0 -42
  352. package/.scannerwork/scanner-report/symbols-4.pb +0 -30
  353. package/.scannerwork/scanner-report/symbols-44.pb +0 -203
  354. package/.scannerwork/scanner-report/symbols-47.pb +0 -69
  355. package/.scannerwork/scanner-report/symbols-5.pb +0 -46
  356. package/.scannerwork/scanner-report/symbols-6.pb +0 -18
  357. package/.scannerwork/scanner-report/symbols-7.pb +0 -144
  358. package/.scannerwork/scanner-report/symbols-8.pb +0 -354
  359. package/.scannerwork/scanner-report/symbols-9.pb +0 -19
  360. package/.scannerwork/scanner-report/syntax-highlightings-11.pb +0 -64
  361. package/.scannerwork/scanner-report/syntax-highlightings-13.pb +0 -133
  362. package/.scannerwork/scanner-report/syntax-highlightings-15.pb +0 -81
  363. package/.scannerwork/scanner-report/syntax-highlightings-4.pb +0 -113
  364. package/.scannerwork/scanner-report/syntax-highlightings-44.pb +0 -280
  365. package/.scannerwork/scanner-report/syntax-highlightings-47.pb +0 -107
  366. package/.scannerwork/scanner-report/syntax-highlightings-5.pb +0 -95
  367. package/.scannerwork/scanner-report/syntax-highlightings-7.pb +0 -243
  368. package/.scannerwork/scanner-report/syntax-highlightings-8.pb +0 -285
  369. package/.scannerwork/scanner-report/syntax-highlightings-9.pb +0 -59
  370. /package/.scannerwork/scanner-report/{coverages-50.pb → coverages-20.pb} +0 -0
  371. /package/.scannerwork/scanner-report/{coverages-48.pb → coverages-23.pb} +0 -0
  372. /package/.scannerwork/scanner-report/{coverages-51.pb → coverages-26.pb} +0 -0
  373. /package/.scannerwork/scanner-report/{coverages-45.pb → coverages-33.pb} +0 -0
  374. /package/.scannerwork/scanner-report/{coverages-46.pb → coverages-36.pb} +0 -0
  375. /package/.scannerwork/scanner-report/{coverages-52.pb → coverages-38.pb} +0 -0
  376. /package/.scannerwork/scanner-report/{coverages-49.pb → coverages-39.pb} +0 -0
  377. /package/.scannerwork/scanner-report/{coverages-10.pb → coverages-66.pb} +0 -0
  378. /package/.scannerwork/scanner-report/{duplications-11.pb → duplications-19.pb} +0 -0
  379. /package/.scannerwork/scanner-report/{duplications-13.pb → duplications-20.pb} +0 -0
  380. /package/.scannerwork/scanner-report/{duplications-4.pb → duplications-21.pb} +0 -0
  381. /package/.scannerwork/scanner-report/{duplications-45.pb → duplications-22.pb} +0 -0
  382. /package/.scannerwork/scanner-report/{duplications-46.pb → duplications-23.pb} +0 -0
  383. /package/.scannerwork/scanner-report/{duplications-47.pb → duplications-24.pb} +0 -0
  384. /package/.scannerwork/scanner-report/{duplications-51.pb → duplications-26.pb} +0 -0
  385. /package/.scannerwork/scanner-report/{duplications-48.pb → duplications-29.pb} +0 -0
  386. /package/.scannerwork/scanner-report/{duplications-5.pb → duplications-31.pb} +0 -0
  387. /package/.scannerwork/scanner-report/{duplications-50.pb → duplications-33.pb} +0 -0
  388. /package/.scannerwork/scanner-report/{duplications-52.pb → duplications-34.pb} +0 -0
  389. /package/.scannerwork/scanner-report/{duplications-6.pb → duplications-35.pb} +0 -0
  390. /package/.scannerwork/scanner-report/{duplications-7.pb → duplications-36.pb} +0 -0
  391. /package/.scannerwork/scanner-report/{duplications-8.pb → duplications-37.pb} +0 -0
  392. /package/.scannerwork/scanner-report/{duplications-9.pb → duplications-38.pb} +0 -0
  393. /package/.scannerwork/scanner-report/{duplications-49.pb → duplications-39.pb} +0 -0
  394. /package/.scannerwork/scanner-report/{issues-51.pb → issues-26.pb} +0 -0
  395. /package/.scannerwork/scanner-report/{issues-63.pb → issues-29.pb} +0 -0
  396. /package/.scannerwork/scanner-report/{measures-50.pb → measures-20.pb} +0 -0
  397. /package/.scannerwork/scanner-report/{measures-48.pb → measures-23.pb} +0 -0
  398. /package/.scannerwork/scanner-report/{measures-51.pb → measures-26.pb} +0 -0
  399. /package/.scannerwork/scanner-report/{measures-45.pb → measures-33.pb} +0 -0
  400. /package/.scannerwork/scanner-report/{measures-46.pb → measures-36.pb} +0 -0
  401. /package/.scannerwork/scanner-report/{measures-52.pb → measures-38.pb} +0 -0
  402. /package/.scannerwork/scanner-report/{measures-49.pb → measures-39.pb} +0 -0
  403. /package/.scannerwork/scanner-report/{source-50.txt → source-20.txt} +0 -0
  404. /package/.scannerwork/scanner-report/{source-48.txt → source-23.txt} +0 -0
  405. /package/.scannerwork/scanner-report/{source-51.txt → source-26.txt} +0 -0
  406. /package/.scannerwork/scanner-report/{source-45.txt → source-33.txt} +0 -0
  407. /package/.scannerwork/scanner-report/{source-46.txt → source-36.txt} +0 -0
  408. /package/.scannerwork/scanner-report/{source-52.txt → source-38.txt} +0 -0
  409. /package/.scannerwork/scanner-report/{source-49.txt → source-39.txt} +0 -0
  410. /package/.scannerwork/scanner-report/{symbols-50.pb → symbols-20.pb} +0 -0
  411. /package/.scannerwork/scanner-report/{symbols-48.pb → symbols-23.pb} +0 -0
  412. /package/.scannerwork/scanner-report/{symbols-51.pb → symbols-26.pb} +0 -0
  413. /package/.scannerwork/scanner-report/{symbols-45.pb → symbols-33.pb} +0 -0
  414. /package/.scannerwork/scanner-report/{symbols-46.pb → symbols-36.pb} +0 -0
  415. /package/.scannerwork/scanner-report/{symbols-52.pb → symbols-38.pb} +0 -0
  416. /package/.scannerwork/scanner-report/{symbols-49.pb → symbols-39.pb} +0 -0
  417. /package/.scannerwork/scanner-report/{symbols-10.pb → symbols-66.pb} +0 -0
  418. /package/.scannerwork/scanner-report/{syntax-highlightings-50.pb → syntax-highlightings-20.pb} +0 -0
  419. /package/.scannerwork/scanner-report/{syntax-highlightings-48.pb → syntax-highlightings-23.pb} +0 -0
  420. /package/.scannerwork/scanner-report/{syntax-highlightings-51.pb → syntax-highlightings-26.pb} +0 -0
  421. /package/.scannerwork/scanner-report/{syntax-highlightings-45.pb → syntax-highlightings-33.pb} +0 -0
  422. /package/.scannerwork/scanner-report/{syntax-highlightings-46.pb → syntax-highlightings-36.pb} +0 -0
  423. /package/.scannerwork/scanner-report/{syntax-highlightings-52.pb → syntax-highlightings-38.pb} +0 -0
  424. /package/.scannerwork/scanner-report/{syntax-highlightings-49.pb → syntax-highlightings-39.pb} +0 -0
@@ -1,4 +1,4 @@
1
- // Copyright © 2017, 2023 IBM Corp. All rights reserved.
1
+ // Copyright © 2017, 2022 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.
@@ -11,439 +11,70 @@
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
-
15
- /* global */
16
14
  'use strict';
17
15
 
18
- const assert = require('node:assert');
19
- const { once } = require('node:events');
20
- const fs = require('node:fs');
21
- const { PassThrough } = require('node:stream');
22
- const { pipeline } = require('node:stream/promises');
23
- const { createGzip, createGunzip } = require('node:zlib');
24
- const debug = require('debug');
25
- const { Tail } = require('tail');
26
- const app = require('../app.js');
27
- const dbUrl = require('../includes/cliutils.js').databaseUrl;
28
- const compare = require('./compare.js');
29
- const request = require('../includes/request.js');
30
- const { cliBackup, cliDecrypt, cliEncrypt, cliGzip, cliGunzip, cliRestore } = require('./test_process.js');
31
- const testLogger = debug('couchbackup:test:utils');
32
-
33
- function scenario(test, params) {
34
- return `${test} ${(params.useApi) ? 'using API' : 'using CLI'}`;
35
- }
36
-
37
- function params() {
38
- const p = {};
39
- for (let i = 0; i < arguments.length; i++) {
40
- Object.assign(p, arguments[i]);
41
- }
42
- return p;
43
- }
44
-
45
- // Returns the event emitter for API calls, or the child process for CLI calls
46
- async function testBackup(params, databaseName, outputStream) {
47
- const pipelineStreams = [];
48
- const promises = [];
49
-
50
- // Configure API key if needed
51
- augmentParamsWithApiKey(params);
52
-
53
- let backup;
54
- let backupStream;
55
- let backupPromise;
56
- let tail;
57
- if (params.useApi) {
58
- if (params.useStdOut) {
59
- backupStream = outputStream;
60
- } else {
61
- backupStream = new PassThrough();
62
- }
63
- const backupCallbackPromise = new Promise((resolve, reject) => {
64
- backup = app.backup(
65
- dbUrl(process.env.COUCH_URL, databaseName),
66
- backupStream,
67
- params.opts,
68
- (err, data) => {
69
- if (err) {
70
- testLogger(`API backup callback with ${JSON.stringify(err)}, will reject.`);
71
- reject(err);
16
+ const async = require('async');
17
+ const error = require('./error.js');
18
+ const events = require('events');
19
+
20
+ module.exports = function(db, options) {
21
+ const ee = new events.EventEmitter();
22
+ const start = new Date().getTime();
23
+ let batch = 0;
24
+ let hasErrored = false;
25
+ let startKey = null;
26
+ let total = 0;
27
+
28
+ async.doUntil(
29
+ function(callback) {
30
+ // Note, include_docs: true is set automatically when using the
31
+ // fetch function.
32
+ const opts = { db: db.db, limit: options.bufferSize, includeDocs: true };
33
+
34
+ // To avoid double fetching a document solely for the purposes of getting
35
+ // the next ID to use as a startKey for the next page we instead use the
36
+ // last ID of the current page and append the lowest unicode sort
37
+ // character.
38
+ if (startKey) opts.startKey = `${startKey}\0`;
39
+ db.service.postAllDocs(opts).then(response => {
40
+ const body = response.result;
41
+ if (!body.rows) {
42
+ ee.emit('error', new error.BackupError(
43
+ 'AllDocsError', 'ERROR: Invalid all docs response'));
44
+ callback();
45
+ } else {
46
+ if (body.rows.length < opts.limit) {
47
+ startKey = null; // last batch
72
48
  } else {
73
- testLogger(`API backup callback with ${JSON.stringify(data)}, will resolve.`);
74
- resolve(data);
49
+ startKey = body.rows[opts.limit - 1].id;
75
50
  }
76
- });
77
- });
78
- const backupFinshedPromise = once(backup, 'finished')
79
- .then((summary) => {
80
- testLogger(`Resolving API backup event promise with ${JSON.stringify(summary)}`);
81
- if (params.resume) {
82
- assertWrittenFewerThan(summary.total, params.exclusiveMaxExpected);
83
- }
84
- })
85
- .catch((err) => {
86
- testLogger(`Rejecting API backup event promise with error ${JSON.stringify(err)}`);
87
- throw err;
88
- });
89
- backupPromise = Promise.all([backupCallbackPromise, backupFinshedPromise])
90
- .then(() => {
91
- testLogger('Both API backup promises resolved.');
92
- });
93
- } else {
94
- backup = cliBackup(databaseName, params);
95
- backupStream = backup.stream;
96
- backupPromise = backup.childProcessPromise;
97
- if (params.abort) {
98
- // Create the log file for abort tests so we can tail it, other tests assert
99
- // the log file is usually created normally by the backup process.
100
- const f = fs.openSync(params.opts.log, 'w');
101
- fs.closeSync(f);
102
51
 
103
- // Use tail to watch the log file for a batch to be completed then abort
104
- tail = new Tail(params.opts.log, { useWatchFile: true, fsWatchOptions: { interval: 500 }, follow: false });
105
- tail.on('line', function(data) {
106
- const matches = data.match(/:d batch\d+/);
107
- if (matches !== null) {
108
- // Turn off the tail.
109
- tail.unwatch();
110
- // Abort the backup
111
- backup.childProcess.kill();
112
- }
113
- });
114
- }
115
- if (params.resume) {
116
- const listenerPromise = new Promise((resolve, reject) => {
117
- const listener = function(data) {
118
- const matches = data.toString().match(/.*Finished - Total document revisions written: (\d+).*/);
119
- if (matches !== null) {
120
- try {
121
- assertWrittenFewerThan(matches[1], params.exclusiveMaxExpected);
122
- resolve();
123
- } catch (err) {
124
- reject(err);
125
- }
126
- process.stderr.removeListener('data', listener);
127
- }
128
- };
129
- backup.childProcess.stderr.on('data', listener);
130
- });
131
- promises.push(listenerPromise);
132
- }
133
- }
134
-
135
- promises.push(backupPromise);
136
- if (!params.useStdOut) {
137
- pipelineStreams.push(backupStream);
138
- }
139
-
140
- if (params.compression) {
141
- if (params.useApi) {
142
- pipelineStreams.push(createGzip());
143
- } else {
144
- const gzipProcess = cliGzip();
145
- pipelineStreams.push(gzipProcess.stream);
146
- promises.push(gzipProcess.childProcessPromise);
147
- }
148
- }
149
-
150
- // Pipe via encryption if requested
151
- if (params.encryption) {
152
- if (params.useApi) {
153
- // Currently only CLI support for testing encryption
154
- return Promise.reject(new Error('Not implemented: cannot test encrypted API backups at this time.'));
155
- } else {
156
- const encryptProcess = cliEncrypt();
157
- pipelineStreams.push(encryptProcess.stream);
158
- promises.push(encryptProcess.childProcessPromise);
159
- }
160
- }
161
-
162
- if (!params.useStdOut) {
163
- // Finally add the outputStream to the list we want to pipeline
164
- pipelineStreams.push(outputStream);
165
-
166
- // Create the promisified pipeline and add it to the array of promises we'll wait for
167
- promises.unshift(pipeline(pipelineStreams));
168
- }
169
-
170
- // Wait for the promises and then assert
171
- return Promise.all(promises)
172
- .then(() => testLogger('All backup promises resolved.'))
173
- .then(() => {
174
- if (params.expectedBackupError) {
175
- return Promise.reject(new Error('Backup passed when it should have failed.'));
176
- }
177
- })
178
- .catch((err) => {
179
- if (params.expectedBackupError || params.abort) {
180
- if (params.useApi) {
181
- assert.strictEqual(err.name, params.expectedBackupError.name, 'The backup should receive the expected error.');
182
- } else {
183
- if (params.abort) {
184
- // The tail should be stopped when we match a line and abort, but if
185
- // something didn't work we need to make sure the tail is stopped
186
- tail.unwatch();
187
- // Assert that the process was aborted as expected
188
- assert.strictEqual(err.signal, 'SIGTERM', `The backup should have terminated with SIGTERM, but was ${err.signal}.`);
189
- } else if (params.expectedBackupError) {
190
- assert.strictEqual(err.code, params.expectedBackupError.code, `The backup exited with unexpected code ${err.code} and signal ${err.signal}.`);
52
+ const docs = [];
53
+ body.rows.forEach(function(doc) {
54
+ docs.push(doc.doc);
55
+ });
56
+
57
+ if (docs.length > 0) {
58
+ ee.emit('received', {
59
+ batch: batch++,
60
+ data: docs,
61
+ length: docs.length,
62
+ time: (new Date().getTime() - start) / 1000,
63
+ total: total += docs.length
64
+ });
191
65
  }
66
+ callback();
192
67
  }
193
- } else {
194
- return Promise.reject(err);
195
- }
196
- });
197
- }
198
-
199
- async function testRestore(params, inputStream, databaseName) {
200
- const pipelineStreams = [inputStream];
201
- const promises = [];
202
-
203
- // Configure API key if needed
204
- augmentParamsWithApiKey(params);
205
-
206
- let restore;
207
- let restoreStream;
208
- let restorePromise;
209
-
210
- if (params.useApi) {
211
- restoreStream = new PassThrough();
212
- const restoreCallbackPromise = new Promise((resolve, reject) => {
213
- restore = app.restore(
214
- restoreStream,
215
- dbUrl(process.env.COUCH_URL, databaseName),
216
- params.opts,
217
- (err, data) => {
218
- if (err) {
219
- testLogger(`API restore callback with ${err}, will reject.`);
220
- reject(err);
221
- } else {
222
- resolve(data);
223
- }
224
- });
225
- });
226
- const restoreFinshedPromise = once(restore, 'finished')
227
- .then((summary) => {
228
- testLogger(`Resolving API restore promise with ${summary}`);
229
- })
230
- .catch((err) => {
231
- testLogger(`Handling API restore error event ${JSON.stringify(err)}`);
232
- if (params.expectedRestoreErrorRecoverable) {
233
- testLogger(`Expecting restore error ${params.expectedRestoreErrorRecoverable.name}`);
234
- assert.strictEqual(err.name, params.expectedRestoreErrorRecoverable.name, 'The restore should receive the expected recoverable error.');
235
- } else {
236
- testLogger(`API restore will reject by throwing error event ${JSON.stringify(err)}`);
237
- return Promise.reject(err);
238
- }
68
+ }).catch(err => {
69
+ err = error.convertResponseError(err);
70
+ ee.emit('error', err);
71
+ hasErrored = true;
72
+ callback();
239
73
  });
240
- restorePromise = Promise.all([restoreCallbackPromise, restoreFinshedPromise]);
241
- } else {
242
- restore = cliRestore(databaseName, params);
243
- restoreStream = restore.stream;
244
- restorePromise = restore.childProcessPromise;
245
- }
246
- promises.push(restorePromise);
247
-
248
- // Pipe via decompression if requested
249
- if (params.compression) {
250
- if (params.useApi) {
251
- pipelineStreams.push(createGunzip());
252
- } else {
253
- const gunzipProcess = cliGunzip();
254
- pipelineStreams.push(gunzipProcess.stream);
255
- promises.push(gunzipProcess.childProcessPromise);
256
- }
257
- }
258
-
259
- // Pipe via decryption if requested
260
- if (params.encryption) {
261
- if (params.useApi) {
262
- // Currently only CLI support for testing encryption
263
- return Promise.reject(new Error('Not implemented: cannot test encrypted API backups at this time.'));
264
- } else {
265
- const decryptProcess = cliDecrypt();
266
- pipelineStreams.push(decryptProcess.stream);
267
- promises.push(decryptProcess.childProcessPromise);
268
- }
269
- }
270
-
271
- // pipeline everything into the restoreStream
272
- pipelineStreams.push(restoreStream);
273
-
274
- // Create the promisified pipeline and add it to the array of promises we'll wait for
275
- promises.unshift(pipeline(pipelineStreams));
276
-
277
- // Wait for the all the promises to settle and then assert based on the process promise
278
- return Promise.allSettled(promises)
279
- .then(() => { return restorePromise; })
280
- .then((summary) => {
281
- testLogger(`Restore promise resolved with ${summary}.`);
282
- if (params.expectedRestoreError) {
283
- return Promise.reject(new Error('Restore passed when it should have failed.'));
284
- }
285
- })
286
- .catch((err) => {
287
- testLogger(`Restore promise rejected with ${err}.`);
288
- if (params.expectedRestoreError) {
289
- if (params.useApi) {
290
- assert.strictEqual(err.name, params.expectedRestoreError.name, 'The restore should receive the expected error.');
291
- } else {
292
- assert.strictEqual(err.code, params.expectedRestoreError.code, `The restore exited with unexpected code ${err.code} and signal ${err.signal}.`);
293
- }
294
- } else {
295
- return Promise.reject(err);
296
- }
297
- });
298
- }
299
-
300
- // Serial backup and restore via a file on disk
301
- async function testBackupAndRestoreViaFile(params, srcDb, backupFile, targetDb) {
302
- return testBackupToFile(params, srcDb, backupFile).then(() => {
303
- return testRestoreFromFile(params, backupFile, targetDb);
304
- });
305
- }
306
-
307
- async function testBackupToFile(params, srcDb, backupFile) {
308
- // Open the file for appending if this is a resume
309
- const output = fs.createWriteStream(backupFile, { flags: (params.opts && params.opts.resume) ? 'a' : 'w' });
310
- return once(output, 'open')
311
- .then(() => {
312
- return testBackup(params, srcDb, output);
313
- });
314
- }
315
-
316
- async function testRestoreFromFile(params, backupFile, targetDb) {
317
- const input = fs.createReadStream(backupFile);
318
- return once(input, 'open')
319
- .then(() => {
320
- return testRestore(params, input, targetDb);
321
- });
322
- }
323
-
324
- async function testDirectBackupAndRestore(params, srcDb, targetDb) {
325
- // Allow a 64 MB highWaterMark for the passthrough during testing
326
- const passthrough = new PassThrough({ highWaterMark: 67108864 });
327
- const backup = testBackup(params, srcDb, passthrough);
328
- const restore = testRestore(params, passthrough, targetDb);
329
- return Promise.all([backup, restore]).then(() => {
330
- return dbCompare(srcDb, targetDb);
331
- });
332
- }
333
-
334
- async function testBackupAbortResumeRestore(params, srcDb, backupFile, targetDb) {
335
- return Promise.resolve()
336
- .then(() => {
337
- // First backup with an abort
338
- if (params.opts && params.opts.output) {
339
- return testBackup(params, srcDb, new PassThrough());
340
- } else {
341
- return testBackupToFile(params, srcDb, backupFile);
342
- }
343
- }).then(() => {
344
- // Remove the abort parameter and add the resume parameter
345
- delete params.abort;
346
- params.opts.resume = true;
347
- // Resume the backup
348
- if (params.opts && params.opts.output) {
349
- return testBackup(params, srcDb, new PassThrough());
350
- } else {
351
- return testBackupToFile(params, srcDb, backupFile);
352
- }
353
- }).then(() => {
354
- // Restore the backup
355
- return testRestoreFromFile(params, backupFile, targetDb);
356
- }).then(() => {
357
- // Now compare the restored to the original for validation
358
- return dbCompare(srcDb, targetDb);
359
- });
360
- }
361
-
362
- async function dbCompare(db1Name, db2Name) {
363
- const client = request.client(process.env.COUCH_BACKEND_URL, {});
364
- return compare.compare(db1Name, db2Name, client.service)
365
- .then(result => {
366
- return assert.strictEqual(result, true, 'The database comparison should succeed, but failed');
367
- });
368
- }
369
-
370
- function sortByIdThenRev(o1, o2) {
371
- if (o1._id < o2._id) return -1;
372
- if (o1._id > o2._id) return 1;
373
- if (o1._rev < o2._rev) return -1;
374
- if (o1._rev > o2._rev) return 1;
375
- return 0;
376
- }
377
-
378
- function readSortAndDeepEqual(actualContentPath, expectedContentPath) {
379
- const backupContent = JSON.parse(fs.readFileSync(actualContentPath, 'utf8'));
380
- const expectedContent = JSON.parse(fs.readFileSync(expectedContentPath, 'utf8'));
381
- // Array order of the docs is important for equality, but not for backup
382
- backupContent.sort(sortByIdThenRev);
383
- expectedContent.sort(sortByIdThenRev);
384
- // Assert that the backup matches the expected
385
- assert.deepStrictEqual(backupContent, expectedContent);
386
- }
387
-
388
- function setTimeout(context, timeout) {
389
- // Increase timeout using TEST_TIMEOUT_MULTIPLIER
390
- const multiplier = (typeof process.env.TEST_TIMEOUT_MULTIPLIER !== 'undefined') ? parseInt(process.env.TEST_TIMEOUT_MULTIPLIER) : 1;
391
- timeout *= multiplier;
392
- // Set the mocha timeout
393
- context.timeout(timeout * 1000);
394
- }
395
-
396
- function assertGzipFile(path) {
397
- // 1f 8b is the gzip magic number
398
- const expectedBytes = Buffer.from([0x1f, 0x8b]);
399
- const buffer = Buffer.alloc(2);
400
- const fd = fs.openSync(path, 'r');
401
- // Read the first two bytes
402
- fs.readSync(fd, buffer, 0, 2, 0);
403
- fs.closeSync(fd);
404
- // Assert the magic number corresponds to gz extension
405
- assert.deepStrictEqual(buffer, expectedBytes, 'The backup file should be gz compressed.');
406
- }
407
-
408
- function assertEncryptedFile(path) {
409
- // Openssl encrypted files start with Salted
410
- const expectedBytes = Buffer.from('Salted');
411
- const buffer = Buffer.alloc(6);
412
- const fd = fs.openSync(path, 'r');
413
- // Read the first six bytes
414
- fs.readSync(fd, buffer, 0, 6, 0);
415
- fs.closeSync(fd);
416
- // Assert first 6 characters of the file are "Salted"
417
- assert.deepStrictEqual(buffer, expectedBytes, 'The backup file should be encrypted.');
418
- }
419
-
420
- function assertWrittenFewerThan(total, number) {
421
- assert(total < number && total > 0, `Saw ${total} but expected between 1 and ${number - 1} documents for the resumed backup.`);
422
- }
423
-
424
- function augmentParamsWithApiKey(params) {
425
- if (process.env.COUCHBACKUP_TEST_IAM_API_KEY) {
426
- if (!params.opts) {
427
- params.opts = {};
428
- }
429
- params.opts.iamApiKey = process.env.COUCHBACKUP_TEST_IAM_API_KEY;
430
- params.opts.iamTokenUrl = process.env.CLOUDANT_IAM_TOKEN_URL;
431
- }
432
- }
74
+ },
75
+ function(callback) { callback(null, hasErrored || startKey == null); },
76
+ function() { ee.emit('finished', { total: total }); }
77
+ );
433
78
 
434
- module.exports = {
435
- scenario,
436
- p: params,
437
- setTimeout,
438
- dbCompare,
439
- readSortAndDeepEqual,
440
- assertGzipFile,
441
- assertEncryptedFile,
442
- testBackup,
443
- testRestore,
444
- testDirectBackupAndRestore,
445
- testBackupToFile,
446
- testRestoreFromFile,
447
- testBackupAndRestoreViaFile,
448
- testBackupAbortResumeRestore
79
+ return ee;
449
80
  };