@cloudant/couchbackup 2.9.13-SNAPSHOT.143 → 2.9.13

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 (377) hide show
  1. package/.scannerwork/report-task.txt +2 -2
  2. package/.scannerwork/scanner-report/analysis-warnings.pb +2 -2
  3. package/.scannerwork/scanner-report/changesets-19.pb +1 -0
  4. package/.scannerwork/scanner-report/changesets-2.pb +1 -0
  5. package/.scannerwork/scanner-report/changesets-20.pb +1 -0
  6. package/.scannerwork/scanner-report/changesets-21.pb +1 -0
  7. package/.scannerwork/scanner-report/changesets-22.pb +1 -0
  8. package/.scannerwork/scanner-report/changesets-23.pb +1 -0
  9. package/.scannerwork/scanner-report/changesets-38.pb +1 -0
  10. package/.scannerwork/scanner-report/changesets-41.pb +1 -0
  11. package/.scannerwork/scanner-report/changesets-57.pb +1 -0
  12. package/.scannerwork/scanner-report/changesets-58.pb +1 -0
  13. package/.scannerwork/scanner-report/changesets-61.pb +1 -0
  14. package/.scannerwork/scanner-report/changesets-62.pb +1 -0
  15. package/.scannerwork/scanner-report/changesets-63.pb +1 -0
  16. package/.scannerwork/scanner-report/component-1.pb +2 -2
  17. package/.scannerwork/scanner-report/component-11.pb +1 -1
  18. package/.scannerwork/scanner-report/component-12.pb +1 -1
  19. package/.scannerwork/scanner-report/component-14.pb +1 -1
  20. package/.scannerwork/scanner-report/component-15.pb +1 -1
  21. package/.scannerwork/scanner-report/component-16.pb +1 -1
  22. package/.scannerwork/scanner-report/component-17.pb +1 -1
  23. package/.scannerwork/scanner-report/component-18.pb +1 -1
  24. package/.scannerwork/scanner-report/component-19.pb +1 -0
  25. package/.scannerwork/scanner-report/component-2.pb +1 -0
  26. package/.scannerwork/scanner-report/component-20.pb +1 -0
  27. package/.scannerwork/scanner-report/component-21.pb +1 -0
  28. package/.scannerwork/scanner-report/component-22.pb +1 -0
  29. package/.scannerwork/scanner-report/component-23.pb +1 -0
  30. package/.scannerwork/scanner-report/component-35.pb +1 -1
  31. package/.scannerwork/scanner-report/component-36.pb +1 -1
  32. package/.scannerwork/scanner-report/component-37.pb +1 -1
  33. package/.scannerwork/scanner-report/component-38.pb +1 -0
  34. package/.scannerwork/scanner-report/component-39.pb +1 -1
  35. package/.scannerwork/scanner-report/component-40.pb +1 -1
  36. package/.scannerwork/scanner-report/component-41.pb +1 -0
  37. package/.scannerwork/scanner-report/component-42.pb +1 -1
  38. package/.scannerwork/scanner-report/component-43.pb +1 -1
  39. package/.scannerwork/scanner-report/component-44.pb +1 -1
  40. package/.scannerwork/scanner-report/component-45.pb +1 -1
  41. package/.scannerwork/scanner-report/component-46.pb +1 -1
  42. package/.scannerwork/scanner-report/component-47.pb +1 -1
  43. package/.scannerwork/scanner-report/component-48.pb +1 -1
  44. package/.scannerwork/scanner-report/component-5.pb +1 -1
  45. package/.scannerwork/scanner-report/component-50.pb +1 -1
  46. package/.scannerwork/scanner-report/component-51.pb +1 -1
  47. package/.scannerwork/scanner-report/component-52.pb +1 -1
  48. package/.scannerwork/scanner-report/component-54.pb +1 -1
  49. package/.scannerwork/scanner-report/component-55.pb +1 -1
  50. package/.scannerwork/scanner-report/component-56.pb +1 -1
  51. package/.scannerwork/scanner-report/component-57.pb +1 -0
  52. package/.scannerwork/scanner-report/component-58.pb +1 -0
  53. package/.scannerwork/scanner-report/component-59.pb +1 -1
  54. package/.scannerwork/scanner-report/component-60.pb +1 -1
  55. package/.scannerwork/scanner-report/component-61.pb +1 -0
  56. package/.scannerwork/scanner-report/component-62.pb +1 -1
  57. package/.scannerwork/scanner-report/component-63.pb +1 -0
  58. package/.scannerwork/scanner-report/component-64.pb +1 -1
  59. package/.scannerwork/scanner-report/component-8.pb +1 -1
  60. package/.scannerwork/scanner-report/coverages-11.pb +0 -0
  61. package/.scannerwork/scanner-report/coverages-12.pb +0 -0
  62. package/.scannerwork/scanner-report/coverages-14.pb +0 -0
  63. package/.scannerwork/scanner-report/coverages-15.pb +0 -0
  64. package/.scannerwork/scanner-report/coverages-16.pb +0 -0
  65. package/.scannerwork/scanner-report/coverages-17.pb +0 -0
  66. package/.scannerwork/scanner-report/coverages-18.pb +0 -0
  67. package/.scannerwork/scanner-report/coverages-2.pb +0 -0
  68. package/.scannerwork/scanner-report/coverages-20.pb +0 -0
  69. package/.scannerwork/scanner-report/coverages-21.pb +0 -0
  70. package/.scannerwork/scanner-report/coverages-35.pb +0 -0
  71. package/.scannerwork/scanner-report/coverages-36.pb +0 -0
  72. package/.scannerwork/scanner-report/coverages-37.pb +0 -0
  73. package/.scannerwork/scanner-report/{coverages-34.pb → coverages-38.pb} +0 -0
  74. package/.scannerwork/scanner-report/coverages-39.pb +0 -0
  75. package/.scannerwork/scanner-report/coverages-40.pb +0 -0
  76. package/.scannerwork/scanner-report/coverages-41.pb +0 -0
  77. package/.scannerwork/scanner-report/coverages-42.pb +0 -0
  78. package/.scannerwork/scanner-report/coverages-43.pb +0 -0
  79. package/.scannerwork/scanner-report/coverages-44.pb +0 -0
  80. package/.scannerwork/scanner-report/coverages-45.pb +0 -0
  81. package/.scannerwork/scanner-report/coverages-46.pb +0 -0
  82. package/.scannerwork/scanner-report/coverages-47.pb +0 -0
  83. package/.scannerwork/scanner-report/coverages-48.pb +0 -0
  84. package/.scannerwork/scanner-report/coverages-5.pb +0 -0
  85. package/.scannerwork/scanner-report/coverages-51.pb +0 -0
  86. package/.scannerwork/scanner-report/coverages-52.pb +0 -0
  87. package/.scannerwork/scanner-report/coverages-54.pb +0 -0
  88. package/.scannerwork/scanner-report/coverages-55.pb +0 -0
  89. package/.scannerwork/scanner-report/coverages-56.pb +0 -0
  90. package/.scannerwork/scanner-report/coverages-57.pb +0 -0
  91. package/.scannerwork/scanner-report/coverages-58.pb +0 -0
  92. package/.scannerwork/scanner-report/coverages-59.pb +0 -0
  93. package/.scannerwork/scanner-report/coverages-60.pb +0 -0
  94. package/.scannerwork/scanner-report/coverages-61.pb +0 -0
  95. package/.scannerwork/scanner-report/coverages-62.pb +0 -0
  96. package/.scannerwork/scanner-report/coverages-63.pb +0 -0
  97. package/.scannerwork/scanner-report/coverages-64.pb +0 -0
  98. package/.scannerwork/scanner-report/duplications-11.pb +2 -0
  99. package/.scannerwork/scanner-report/duplications-12.pb +2 -0
  100. package/.scannerwork/scanner-report/duplications-15.pb +0 -2
  101. package/.scannerwork/scanner-report/duplications-17.pb +0 -3
  102. package/.scannerwork/scanner-report/duplications-21.pb +3 -0
  103. package/.scannerwork/scanner-report/duplications-37.pb +2 -0
  104. package/.scannerwork/scanner-report/duplications-42.pb +3 -0
  105. package/.scannerwork/scanner-report/duplications-43.pb +0 -2
  106. package/.scannerwork/scanner-report/duplications-45.pb +2 -0
  107. package/.scannerwork/scanner-report/duplications-55.pb +0 -2
  108. package/.scannerwork/scanner-report/duplications-59.pb +0 -2
  109. package/.scannerwork/scanner-report/duplications-60.pb +1 -1
  110. package/.scannerwork/scanner-report/duplications-61.pb +2 -0
  111. package/.scannerwork/scanner-report/issues-36.pb +2 -2
  112. package/.scannerwork/scanner-report/issues-39.pb +3 -0
  113. package/.scannerwork/scanner-report/measures-11.pb +0 -0
  114. package/.scannerwork/scanner-report/measures-12.pb +0 -0
  115. package/.scannerwork/scanner-report/measures-14.pb +0 -0
  116. package/.scannerwork/scanner-report/measures-15.pb +0 -0
  117. package/.scannerwork/scanner-report/measures-16.pb +0 -0
  118. package/.scannerwork/scanner-report/measures-17.pb +0 -0
  119. package/.scannerwork/scanner-report/measures-18.pb +0 -0
  120. package/.scannerwork/scanner-report/measures-19.pb +0 -0
  121. package/.scannerwork/scanner-report/measures-2.pb +0 -0
  122. package/.scannerwork/scanner-report/measures-20.pb +0 -0
  123. package/.scannerwork/scanner-report/measures-21.pb +0 -0
  124. package/.scannerwork/scanner-report/measures-35.pb +0 -0
  125. package/.scannerwork/scanner-report/measures-36.pb +0 -0
  126. package/.scannerwork/scanner-report/measures-37.pb +0 -0
  127. package/.scannerwork/scanner-report/measures-38.pb +0 -0
  128. package/.scannerwork/scanner-report/measures-39.pb +0 -0
  129. package/.scannerwork/scanner-report/measures-40.pb +0 -0
  130. package/.scannerwork/scanner-report/measures-41.pb +0 -0
  131. package/.scannerwork/scanner-report/measures-42.pb +0 -0
  132. package/.scannerwork/scanner-report/measures-43.pb +0 -0
  133. package/.scannerwork/scanner-report/measures-44.pb +0 -0
  134. package/.scannerwork/scanner-report/measures-45.pb +0 -0
  135. package/.scannerwork/scanner-report/measures-46.pb +0 -0
  136. package/.scannerwork/scanner-report/measures-47.pb +0 -0
  137. package/.scannerwork/scanner-report/measures-48.pb +0 -0
  138. package/.scannerwork/scanner-report/measures-5.pb +0 -0
  139. package/.scannerwork/scanner-report/measures-50.pb +0 -0
  140. package/.scannerwork/scanner-report/measures-51.pb +0 -0
  141. package/.scannerwork/scanner-report/measures-52.pb +0 -0
  142. package/.scannerwork/scanner-report/measures-54.pb +0 -0
  143. package/.scannerwork/scanner-report/measures-55.pb +0 -0
  144. package/.scannerwork/scanner-report/measures-56.pb +0 -0
  145. package/.scannerwork/scanner-report/measures-57.pb +0 -0
  146. package/.scannerwork/scanner-report/measures-58.pb +15 -0
  147. package/.scannerwork/scanner-report/measures-59.pb +0 -0
  148. package/.scannerwork/scanner-report/measures-60.pb +0 -0
  149. package/.scannerwork/scanner-report/measures-61.pb +0 -0
  150. package/.scannerwork/scanner-report/measures-62.pb +0 -0
  151. package/.scannerwork/scanner-report/measures-63.pb +0 -0
  152. package/.scannerwork/scanner-report/measures-64.pb +0 -0
  153. package/.scannerwork/scanner-report/measures-8.pb +0 -0
  154. package/.scannerwork/scanner-report/metadata.pb +0 -0
  155. package/.scannerwork/scanner-report/source-11.txt +147 -64
  156. package/.scannerwork/scanner-report/source-12.txt +167 -45
  157. package/.scannerwork/scanner-report/source-14.txt +47 -47
  158. package/.scannerwork/scanner-report/source-15.txt +69 -262
  159. package/.scannerwork/scanner-report/source-16.txt +14 -603
  160. package/.scannerwork/scanner-report/source-17.txt +35 -91
  161. package/.scannerwork/scanner-report/source-18.txt +40 -128
  162. package/.scannerwork/scanner-report/source-19.txt +36 -0
  163. package/.scannerwork/scanner-report/source-2.txt +114 -0
  164. package/.scannerwork/scanner-report/source-20.txt +625 -0
  165. package/.scannerwork/scanner-report/source-21.txt +119 -0
  166. package/.scannerwork/scanner-report/source-35.txt +347 -10
  167. package/.scannerwork/scanner-report/source-36.txt +124 -29
  168. package/.scannerwork/scanner-report/source-37.txt +121 -118
  169. package/.scannerwork/scanner-report/{source-34.txt → source-38.txt} +10 -9
  170. package/.scannerwork/scanner-report/source-39.txt +31 -40
  171. package/.scannerwork/scanner-report/source-40.txt +19 -62
  172. package/.scannerwork/scanner-report/{source-13.txt → source-41.txt} +7 -14
  173. package/.scannerwork/scanner-report/source-42.txt +107 -90
  174. package/.scannerwork/scanner-report/source-43.txt +67 -50
  175. package/.scannerwork/scanner-report/source-44.txt +142 -40
  176. package/.scannerwork/scanner-report/source-45.txt +269 -105
  177. package/.scannerwork/scanner-report/source-46.txt +133 -32
  178. package/.scannerwork/scanner-report/source-47.txt +39 -14
  179. package/.scannerwork/scanner-report/source-48.txt +56 -90
  180. package/.scannerwork/scanner-report/source-5.txt +403 -20
  181. package/.scannerwork/scanner-report/source-50.txt +509 -41
  182. package/.scannerwork/scanner-report/source-51.txt +21 -84
  183. package/.scannerwork/scanner-report/source-52.txt +14 -63
  184. package/.scannerwork/scanner-report/source-54.txt +20 -138
  185. package/.scannerwork/scanner-report/source-55.txt +113 -76
  186. package/.scannerwork/scanner-report/source-56.txt +241 -78
  187. package/.scannerwork/scanner-report/source-57.txt +118 -0
  188. package/.scannerwork/scanner-report/source-58.txt +104 -0
  189. package/.scannerwork/scanner-report/source-59.txt +65 -175
  190. package/.scannerwork/scanner-report/source-60.txt +52 -152
  191. package/.scannerwork/scanner-report/source-61.txt +92 -0
  192. package/.scannerwork/scanner-report/source-62.txt +54 -167
  193. package/.scannerwork/scanner-report/source-63.txt +111 -0
  194. package/.scannerwork/scanner-report/source-64.txt +133 -387
  195. package/.scannerwork/scanner-report/source-8.txt +167 -36
  196. package/.scannerwork/scanner-report/symbols-11.pb +153 -60
  197. package/.scannerwork/scanner-report/symbols-12.pb +180 -45
  198. package/.scannerwork/scanner-report/symbols-14.pb +44 -35
  199. package/.scannerwork/scanner-report/symbols-15.pb +68 -485
  200. package/.scannerwork/scanner-report/symbols-16.pb +13 -1253
  201. package/.scannerwork/scanner-report/symbols-17.pb +42 -76
  202. package/.scannerwork/scanner-report/symbols-18.pb +34 -110
  203. package/.scannerwork/scanner-report/symbols-2.pb +28 -0
  204. package/.scannerwork/scanner-report/symbols-20.pb +1254 -0
  205. package/.scannerwork/scanner-report/symbols-21.pb +77 -0
  206. package/.scannerwork/scanner-report/symbols-35.pb +494 -9
  207. package/.scannerwork/scanner-report/symbols-36.pb +116 -27
  208. package/.scannerwork/scanner-report/symbols-37.pb +97 -111
  209. package/.scannerwork/scanner-report/symbols-38.pb +17 -0
  210. package/.scannerwork/scanner-report/symbols-39.pb +27 -19
  211. package/.scannerwork/scanner-report/symbols-40.pb +9 -29
  212. package/.scannerwork/scanner-report/symbols-41.pb +9 -0
  213. package/.scannerwork/scanner-report/symbols-42.pb +97 -28
  214. package/.scannerwork/scanner-report/symbols-43.pb +60 -42
  215. package/.scannerwork/scanner-report/symbols-44.pb +111 -14
  216. package/.scannerwork/scanner-report/symbols-45.pb +486 -33
  217. package/.scannerwork/scanner-report/symbols-46.pb +84 -19
  218. package/.scannerwork/scanner-report/symbols-47.pb +18 -13
  219. package/.scannerwork/scanner-report/symbols-48.pb +29 -58
  220. package/.scannerwork/scanner-report/symbols-5.pb +610 -17
  221. package/.scannerwork/scanner-report/symbols-51.pb +15 -39
  222. package/.scannerwork/scanner-report/symbols-52.pb +13 -45
  223. package/.scannerwork/scanner-report/symbols-54.pb +20 -126
  224. package/.scannerwork/scanner-report/symbols-55.pb +33 -44
  225. package/.scannerwork/scanner-report/symbols-56.pb +354 -30
  226. package/.scannerwork/scanner-report/symbols-57.pb +30 -0
  227. package/.scannerwork/scanner-report/symbols-58.pb +42 -0
  228. package/.scannerwork/scanner-report/symbols-59.pb +46 -180
  229. package/.scannerwork/scanner-report/symbols-60.pb +41 -152
  230. package/.scannerwork/scanner-report/symbols-61.pb +44 -0
  231. package/.scannerwork/scanner-report/symbols-62.pb +15 -0
  232. package/.scannerwork/scanner-report/symbols-63.pb +59 -0
  233. package/.scannerwork/scanner-report/symbols-64.pb +120 -604
  234. package/.scannerwork/scanner-report/syntax-highlightings-11.pb +176 -72
  235. package/.scannerwork/scanner-report/syntax-highlightings-12.pb +180 -65
  236. package/.scannerwork/scanner-report/syntax-highlightings-14.pb +74 -59
  237. package/.scannerwork/scanner-report/syntax-highlightings-15.pb +64 -618
  238. package/.scannerwork/scanner-report/syntax-highlightings-16.pb +21 -854
  239. package/.scannerwork/scanner-report/syntax-highlightings-17.pb +43 -119
  240. package/.scannerwork/scanner-report/syntax-highlightings-18.pb +57 -185
  241. package/.scannerwork/scanner-report/syntax-highlightings-19.pb +59 -0
  242. package/.scannerwork/scanner-report/syntax-highlightings-2.pb +138 -0
  243. package/.scannerwork/scanner-report/syntax-highlightings-20.pb +887 -0
  244. package/.scannerwork/scanner-report/syntax-highlightings-21.pb +158 -0
  245. package/.scannerwork/scanner-report/syntax-highlightings-35.pb +597 -15
  246. package/.scannerwork/scanner-report/syntax-highlightings-36.pb +97 -31
  247. package/.scannerwork/scanner-report/syntax-highlightings-37.pb +189 -96
  248. package/.scannerwork/scanner-report/syntax-highlightings-38.pb +63 -0
  249. package/.scannerwork/scanner-report/syntax-highlightings-39.pb +45 -59
  250. package/.scannerwork/scanner-report/syntax-highlightings-40.pb +29 -82
  251. package/.scannerwork/scanner-report/{syntax-highlightings-34.pb → syntax-highlightings-41.pb} +13 -15
  252. package/.scannerwork/scanner-report/syntax-highlightings-42.pb +146 -102
  253. package/.scannerwork/scanner-report/syntax-highlightings-43.pb +75 -43
  254. package/.scannerwork/scanner-report/syntax-highlightings-44.pb +193 -24
  255. package/.scannerwork/scanner-report/syntax-highlightings-45.pb +621 -91
  256. package/.scannerwork/scanner-report/syntax-highlightings-46.pb +162 -35
  257. package/.scannerwork/scanner-report/syntax-highlightings-47.pb +70 -33
  258. package/.scannerwork/scanner-report/syntax-highlightings-48.pb +78 -108
  259. package/.scannerwork/scanner-report/syntax-highlightings-5.pb +619 -34
  260. package/.scannerwork/scanner-report/syntax-highlightings-50.pb +3736 -39
  261. package/.scannerwork/scanner-report/syntax-highlightings-51.pb +17 -83
  262. package/.scannerwork/scanner-report/syntax-highlightings-52.pb +15 -65
  263. package/.scannerwork/scanner-report/syntax-highlightings-54.pb +29 -178
  264. package/.scannerwork/scanner-report/syntax-highlightings-55.pb +88 -49
  265. package/.scannerwork/scanner-report/syntax-highlightings-56.pb +250 -78
  266. package/.scannerwork/scanner-report/syntax-highlightings-57.pb +113 -0
  267. package/.scannerwork/scanner-report/syntax-highlightings-58.pb +116 -0
  268. package/.scannerwork/scanner-report/syntax-highlightings-59.pb +64 -194
  269. package/.scannerwork/scanner-report/syntax-highlightings-60.pb +47 -183
  270. package/.scannerwork/scanner-report/syntax-highlightings-61.pb +90 -0
  271. package/.scannerwork/scanner-report/syntax-highlightings-62.pb +43 -938
  272. package/.scannerwork/scanner-report/syntax-highlightings-63.pb +133 -0
  273. package/.scannerwork/scanner-report/syntax-highlightings-64.pb +151 -586
  274. package/.scannerwork/scanner-report/syntax-highlightings-8.pb +938 -48
  275. package/CHANGES.md +5 -0
  276. package/package.json +2 -2
  277. package/test-18-results.xml +154 -154
  278. package/test-iam-18-results.xml +50 -50
  279. package/.scannerwork/scanner-report/changesets-10.pb +0 -2
  280. package/.scannerwork/scanner-report/changesets-13.pb +0 -1
  281. package/.scannerwork/scanner-report/changesets-30.pb +0 -1
  282. package/.scannerwork/scanner-report/changesets-31.pb +0 -1
  283. package/.scannerwork/scanner-report/changesets-32.pb +0 -1
  284. package/.scannerwork/scanner-report/changesets-33.pb +0 -1
  285. package/.scannerwork/scanner-report/changesets-34.pb +0 -1
  286. package/.scannerwork/scanner-report/changesets-49.pb +0 -1
  287. package/.scannerwork/scanner-report/changesets-50.pb +0 -1
  288. package/.scannerwork/scanner-report/changesets-6.pb +0 -1
  289. package/.scannerwork/scanner-report/changesets-7.pb +0 -1
  290. package/.scannerwork/scanner-report/changesets-8.pb +0 -1
  291. package/.scannerwork/scanner-report/changesets-9.pb +0 -1
  292. package/.scannerwork/scanner-report/component-10.pb +0 -2
  293. package/.scannerwork/scanner-report/component-13.pb +0 -1
  294. package/.scannerwork/scanner-report/component-30.pb +0 -1
  295. package/.scannerwork/scanner-report/component-31.pb +0 -1
  296. package/.scannerwork/scanner-report/component-32.pb +0 -1
  297. package/.scannerwork/scanner-report/component-33.pb +0 -1
  298. package/.scannerwork/scanner-report/component-34.pb +0 -1
  299. package/.scannerwork/scanner-report/component-4.pb +0 -1
  300. package/.scannerwork/scanner-report/component-49.pb +0 -1
  301. package/.scannerwork/scanner-report/component-6.pb +0 -1
  302. package/.scannerwork/scanner-report/component-7.pb +0 -1
  303. package/.scannerwork/scanner-report/component-9.pb +0 -1
  304. package/.scannerwork/scanner-report/coverages-10.pb +0 -0
  305. package/.scannerwork/scanner-report/coverages-13.pb +0 -0
  306. package/.scannerwork/scanner-report/coverages-30.pb +0 -0
  307. package/.scannerwork/scanner-report/coverages-33.pb +0 -0
  308. package/.scannerwork/scanner-report/coverages-49.pb +0 -0
  309. package/.scannerwork/scanner-report/coverages-50.pb +0 -0
  310. package/.scannerwork/scanner-report/coverages-6.pb +0 -0
  311. package/.scannerwork/scanner-report/coverages-7.pb +0 -0
  312. package/.scannerwork/scanner-report/coverages-9.pb +0 -0
  313. package/.scannerwork/scanner-report/duplications-30.pb +0 -2
  314. package/.scannerwork/scanner-report/duplications-9.pb +0 -3
  315. package/.scannerwork/scanner-report/issues-37.pb +0 -3
  316. package/.scannerwork/scanner-report/measures-10.pb +0 -0
  317. package/.scannerwork/scanner-report/measures-13.pb +0 -0
  318. package/.scannerwork/scanner-report/measures-30.pb +0 -0
  319. package/.scannerwork/scanner-report/measures-33.pb +0 -0
  320. package/.scannerwork/scanner-report/measures-34.pb +0 -0
  321. package/.scannerwork/scanner-report/measures-4.pb +0 -0
  322. package/.scannerwork/scanner-report/measures-49.pb +0 -0
  323. package/.scannerwork/scanner-report/measures-6.pb +0 -0
  324. package/.scannerwork/scanner-report/measures-7.pb +0 -0
  325. package/.scannerwork/scanner-report/measures-9.pb +0 -0
  326. package/.scannerwork/scanner-report/source-10.txt +0 -63
  327. package/.scannerwork/scanner-report/source-30.txt +0 -145
  328. package/.scannerwork/scanner-report/source-33.txt +0 -147
  329. package/.scannerwork/scanner-report/source-4.txt +0 -509
  330. package/.scannerwork/scanner-report/source-49.txt +0 -281
  331. package/.scannerwork/scanner-report/source-6.txt +0 -100
  332. package/.scannerwork/scanner-report/source-7.txt +0 -366
  333. package/.scannerwork/scanner-report/source-9.txt +0 -131
  334. package/.scannerwork/scanner-report/symbols-10.pb +0 -43
  335. package/.scannerwork/scanner-report/symbols-13.pb +0 -14
  336. package/.scannerwork/scanner-report/symbols-30.pb +0 -102
  337. package/.scannerwork/scanner-report/symbols-33.pb +0 -85
  338. package/.scannerwork/scanner-report/symbols-34.pb +0 -10
  339. package/.scannerwork/scanner-report/symbols-49.pb +0 -354
  340. package/.scannerwork/scanner-report/symbols-50.pb +0 -18
  341. package/.scannerwork/scanner-report/symbols-6.pb +0 -69
  342. package/.scannerwork/scanner-report/symbols-7.pb +0 -494
  343. package/.scannerwork/scanner-report/symbols-9.pb +0 -97
  344. package/.scannerwork/scanner-report/syntax-highlightings-10.pb +0 -82
  345. package/.scannerwork/scanner-report/syntax-highlightings-13.pb +0 -54
  346. package/.scannerwork/scanner-report/syntax-highlightings-30.pb +0 -227
  347. package/.scannerwork/scanner-report/syntax-highlightings-33.pb +0 -191
  348. package/.scannerwork/scanner-report/syntax-highlightings-4.pb +0 -3748
  349. package/.scannerwork/scanner-report/syntax-highlightings-49.pb +0 -285
  350. package/.scannerwork/scanner-report/syntax-highlightings-6.pb +0 -105
  351. package/.scannerwork/scanner-report/syntax-highlightings-7.pb +0 -630
  352. package/.scannerwork/scanner-report/syntax-highlightings-9.pb +0 -182
  353. /package/.scannerwork/scanner-report/{coverages-8.pb → coverages-19.pb} +0 -0
  354. /package/.scannerwork/scanner-report/{coverages-31.pb → coverages-22.pb} +0 -0
  355. /package/.scannerwork/scanner-report/{coverages-32.pb → coverages-23.pb} +0 -0
  356. /package/.scannerwork/scanner-report/{duplications-10.pb → duplications-19.pb} +0 -0
  357. /package/.scannerwork/scanner-report/{duplications-13.pb → duplications-2.pb} +0 -0
  358. /package/.scannerwork/scanner-report/{duplications-33.pb → duplications-20.pb} +0 -0
  359. /package/.scannerwork/scanner-report/{duplications-31.pb → duplications-22.pb} +0 -0
  360. /package/.scannerwork/scanner-report/{duplications-32.pb → duplications-23.pb} +0 -0
  361. /package/.scannerwork/scanner-report/{duplications-34.pb → duplications-35.pb} +0 -0
  362. /package/.scannerwork/scanner-report/{duplications-49.pb → duplications-38.pb} +0 -0
  363. /package/.scannerwork/scanner-report/{duplications-50.pb → duplications-57.pb} +0 -0
  364. /package/.scannerwork/scanner-report/{duplications-6.pb → duplications-58.pb} +0 -0
  365. /package/.scannerwork/scanner-report/{duplications-7.pb → duplications-62.pb} +0 -0
  366. /package/.scannerwork/scanner-report/{duplications-8.pb → duplications-63.pb} +0 -0
  367. /package/.scannerwork/scanner-report/{issues-32.pb → issues-23.pb} +0 -0
  368. /package/.scannerwork/scanner-report/{issues-7.pb → issues-35.pb} +0 -0
  369. /package/.scannerwork/scanner-report/{measures-31.pb → measures-22.pb} +0 -0
  370. /package/.scannerwork/scanner-report/{measures-32.pb → measures-23.pb} +0 -0
  371. /package/.scannerwork/scanner-report/{source-31.txt → source-22.txt} +0 -0
  372. /package/.scannerwork/scanner-report/{source-32.txt → source-23.txt} +0 -0
  373. /package/.scannerwork/scanner-report/{symbols-8.pb → symbols-19.pb} +0 -0
  374. /package/.scannerwork/scanner-report/{symbols-31.pb → symbols-22.pb} +0 -0
  375. /package/.scannerwork/scanner-report/{symbols-32.pb → symbols-23.pb} +0 -0
  376. /package/.scannerwork/scanner-report/{syntax-highlightings-31.pb → syntax-highlightings-22.pb} +0 -0
  377. /package/.scannerwork/scanner-report/{syntax-highlightings-32.pb → syntax-highlightings-23.pb} +0 -0
@@ -1,4 +1,4 @@
1
- // Copyright © 2018, 2021 IBM Corp. All rights reserved.
1
+ // Copyright © 2017, 2018 IBM Corp. All rights reserved.
2
2
  //
3
3
  // Licensed under the Apache License, Version 2.0 (the "License");
4
4
  // you may not use this file except in compliance with the License.
@@ -12,81 +12,164 @@
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
+ // Small script which backs up a Cloudant or CouchDB database to an S3
16
+ // bucket via a stream rather than on-disk file.
17
+ //
18
+ // The script generates the backup object name by combining together the path
19
+ // part of the database URL and the current time.
20
+
16
21
  'use strict';
17
22
 
18
- const fs = require('fs');
19
- const readline = require('readline');
20
- const u = require('./citestutils.js');
21
- const uuid = require('uuid').v4;
23
+ const stream = require('stream');
24
+ const url = require('url');
22
25
 
23
- const params = { useApi: true };
26
+ const AWS = require('aws-sdk');
27
+ const couchbackup = require('@cloudant/couchbackup');
28
+ const debug = require('debug')('s3-backup');
29
+ const VError = require('verror').VError;
24
30
 
25
- describe(u.scenario('Concurrent database backups', params), function() {
26
- it('should run concurrent API database backups correctly #slower', function(done) {
27
- // Allow up to 900 s to backup and compare (it should be much faster)!
28
- u.setTimeout(this, 900);
31
+ /*
32
+ Main function, run from base of file.
33
+ */
34
+ function main() {
35
+ const argv = require('yargs')
36
+ .usage('Usage: $0 [options]')
37
+ .example('$0 -s https://user:pass@host/db -b <bucket>', 'Backup db to bucket')
38
+ .options({
39
+ source: { alias: 's', nargs: 1, demandOption: true, describe: 'Source database URL' },
40
+ bucket: { alias: 'b', nargs: 1, demandOption: true, describe: 'Destination bucket' },
41
+ prefix: { alias: 'p', nargs: 1, describe: 'Prefix for backup object key', default: 'couchbackup' },
42
+ s3url: { nargs: 1, describe: 'S3 endpoint URL' },
43
+ awsprofile: { nargs: 1, describe: 'The profile section to use in the ~/.aws/credentials file', default: 'default' }
44
+ })
45
+ .help('h').alias('h', 'help')
46
+ .epilog('Copyright (C) IBM 2017')
47
+ .argv;
29
48
 
30
- let doneCount = 0;
31
- let doneErr;
32
- const finished = function(err) {
33
- doneCount++;
34
- if (doneCount === 2) {
35
- done(doneErr || err);
36
- }
37
- doneErr = err;
38
- };
49
+ const sourceUrl = argv.source;
50
+ const backupName = new url.URL(sourceUrl).pathname.split('/').filter(function(x) { return x; }).join('-');
51
+ const backupBucket = argv.bucket;
52
+ const backupKeyPrefix = `${argv.prefix}-${backupName}`;
53
+ const shallow = argv.shallow;
39
54
 
40
- const checkForEmptyBatches = function(fileName, cb) {
41
- let foundEmptyBatch = false;
55
+ const backupKey = `${backupKeyPrefix}-${new Date().toISOString()}`;
42
56
 
43
- const rd = readline.createInterface({
44
- input: fs.createReadStream(fileName),
45
- output: fs.createWriteStream('/dev/null'),
46
- terminal: false
47
- });
57
+ const s3Endpoint = argv.s3url;
58
+ const awsProfile = argv.awsprofile;
48
59
 
49
- rd.on('line', function(line) {
50
- if (JSON.parse(line).length === 0) {
51
- // Note: Empty batch arrays indicate that the running backup is
52
- // incorrectly sharing a log file with another ongoing backup job.
53
- foundEmptyBatch = true;
54
- }
55
- });
60
+ // Creds are from ~/.aws/credentials, environment etc. (see S3 docs).
61
+ const awsOpts = {
62
+ signatureVersion: 'v4',
63
+ credentials: new AWS.SharedIniFileCredentials({ profile: awsProfile })
64
+ };
65
+ if (typeof s3Endpoint !== 'undefined') {
66
+ awsOpts.endpoint = new AWS.Endpoint(s3Endpoint);
67
+ }
68
+ const s3 = new AWS.S3(awsOpts);
56
69
 
57
- rd.on('close', function() {
58
- if (foundEmptyBatch) {
59
- cb(new Error(`Log file '${fileName}' contains empty batches`));
60
- } else {
61
- cb();
62
- }
63
- });
64
- };
70
+ debug(`Creating a new backup of ${s(sourceUrl)} at ${backupBucket}/${backupKey}...`);
71
+ bucketAccessible(s3, backupBucket)
72
+ .then(() => {
73
+ return backupToS3(sourceUrl, s3, backupBucket, backupKey, shallow);
74
+ })
75
+ .then(() => {
76
+ debug('done.');
77
+ })
78
+ .catch((reason) => {
79
+ debug(`Error: ${reason}`);
80
+ process.exit(1);
81
+ });
82
+ }
65
83
 
66
- // [1] Run 'largedb2g' database backup
67
- const actualBackup1 = `./${uuid()}`;
68
- const output1 = fs.createWriteStream(actualBackup1);
69
- output1.on('open', function() {
70
- u.testBackup(params, 'largedb2g', output1, function(err) {
71
- if (err) {
72
- finished(err);
73
- } else {
74
- checkForEmptyBatches(actualBackup1, finished);
75
- }
76
- });
84
+ /**
85
+ * Return a promise that resolves if the bucket is available and
86
+ * rejects if not.
87
+ *
88
+ * @param {any} s3 S3 client object
89
+ * @param {any} bucketName Bucket name
90
+ * @returns Promise
91
+ */
92
+ function bucketAccessible(s3, bucketName) {
93
+ return new Promise(function(resolve, reject) {
94
+ const params = {
95
+ Bucket: bucketName
96
+ };
97
+ s3.headBucket(params, function(err, data) {
98
+ if (err) {
99
+ reject(new VError(err, 'S3 bucket not accessible'));
100
+ } else {
101
+ resolve();
102
+ }
77
103
  });
104
+ });
105
+ }
106
+
107
+ /**
108
+ * Backup directly from Cloudant to an object store object via a stream.
109
+ *
110
+ * @param {any} sourceUrl URL of database
111
+ * @param {any} s3Client Object store client
112
+ * @param {any} s3Bucket Backup destination bucket
113
+ * @param {any} s3Key Backup destination key name (shouldn't exist)
114
+ * @param {any} shallow Whether to use the couchbackup `shallow` mode
115
+ * @returns Promise
116
+ */
117
+ function backupToS3(sourceUrl, s3Client, s3Bucket, s3Key, shallow) {
118
+ return new Promise((resolve, reject) => {
119
+ debug(`Setting up S3 upload to ${s3Bucket}/${s3Key}`);
120
+
121
+ // A pass through stream that has couchbackup's output
122
+ // written to it and it then read by the S3 upload client.
123
+ // It has a 64MB highwater mark to allow for fairly
124
+ // uneven network connectivity.
125
+ const streamToUpload = new stream.PassThrough({ highWaterMark: 67108864 });
78
126
 
79
- // [2] Run 'largedb1g' database backup
80
- const actualBackup2 = `./${uuid()}`;
81
- const output2 = fs.createWriteStream(actualBackup2);
82
- output2.on('open', function() {
83
- u.testBackup(params, 'largedb1g', output2, function(err) {
127
+ // Set up S3 upload.
128
+ const params = {
129
+ Bucket: s3Bucket,
130
+ Key: s3Key,
131
+ Body: streamToUpload
132
+ };
133
+ s3Client.upload(params, function(err, data) {
134
+ debug('Object store upload done');
135
+ if (err) {
136
+ debug(err);
137
+ reject(new VError(err, 'Object store upload failed'));
138
+ return;
139
+ }
140
+ debug('Object store upload succeeded');
141
+ debug(data);
142
+ resolve();
143
+ }).httpUploadProgress = (progress) => {
144
+ debug(`Object store upload progress: ${progress}`);
145
+ };
146
+
147
+ debug(`Starting streaming data from ${s(sourceUrl)}`);
148
+ couchbackup.backup(
149
+ sourceUrl,
150
+ streamToUpload,
151
+ (err, obj) => {
84
152
  if (err) {
85
- finished(err);
86
- } else {
87
- checkForEmptyBatches(actualBackup2, finished);
153
+ debug(err);
154
+ reject(new VError(err, 'CouchBackup failed with an error'));
155
+ return;
88
156
  }
89
- });
90
- });
157
+ debug(`Download from ${s(sourceUrl)} complete.`);
158
+ streamToUpload.end(); // must call end() to complete upload.
159
+ // resolve() is called by the upload
160
+ }
161
+ );
91
162
  });
92
- });
163
+ }
164
+
165
+ /**
166
+ * Remove creds from a URL, e.g., before logging
167
+ *
168
+ * @param {string} url URL to safen
169
+ */
170
+ function s(originalUrl) {
171
+ const parts = new url.URL(originalUrl);
172
+ return url.format(parts, { auth: false });
173
+ }
174
+
175
+ main();
@@ -1,4 +1,4 @@
1
- // Copyright © 2017, 2021 IBM Corp. All rights reserved.
1
+ // Copyright © 2017, 2018 IBM Corp. All rights reserved.
2
2
  //
3
3
  // Licensed under the Apache License, Version 2.0 (the "License");
4
4
  // you may not use this file except in compliance with the License.
@@ -12,57 +12,179 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
 
15
- /* global beforeEach afterEach */
15
+ // Small script which backs up a Cloudant or CouchDB database to an S3
16
+ // bucket, using an intermediary file on disk.
17
+ //
18
+ // The script generates the backup object name by combining together the path
19
+ // part of the database URL and the current time.
20
+
16
21
  'use strict';
17
22
 
18
- const { CloudantV1 } = require('@ibm-cloud/cloudant');
19
- const url = new URL((process.env.COUCH_BACKEND_URL) ? process.env.COUCH_BACKEND_URL : 'https://no-couch-backend-url-set.test');
20
- const { BasicAuthenticator, NoAuthAuthenticator } = require('ibm-cloud-sdk-core');
21
- const authenticator = (url.username) ? new BasicAuthenticator({ username: url.username, password: decodeURIComponent(url.password) }) : new NoAuthAuthenticator();
22
- const serviceOpts = {
23
- authenticator: authenticator
24
- };
25
- const cloudant = new CloudantV1(serviceOpts);
26
- // Remove auth from URL before using for service
27
- cloudant.setServiceUrl(new URL(url.pathname, url.origin).toString());
28
- const uuid = require('uuid').v4;
23
+ const stream = require('stream');
29
24
  const fs = require('fs');
25
+ const url = require('url');
30
26
 
31
- // Mocha hooks that will be at the root context so run for all tests
32
-
33
- beforeEach('Create test database', function(done) {
34
- // Don't run hook for unit tests, just for CI
35
- if (!this.currentTest.fullTitle().includes('#unit')) {
36
- // Allow 10 seconds to create the DB
37
- this.timeout(10 * 1000);
38
- const unique = uuid();
39
- this.fileName = `${unique}`;
40
- this.dbName = 'couchbackup_test_' + unique;
41
- cloudant.putDatabase({ db: this.dbName }).then(() => { done(); }).catch((err) => { done(err); });
42
- } else {
43
- done();
44
- }
45
- });
46
-
47
- afterEach('Delete test database', function(done) {
48
- // Don't run hook for unit tests, just for CI
49
- if (!this.currentTest.fullTitle().includes('#unit')) {
50
- // Allow 10 seconds to delete the DB
51
- this.timeout(10 * 1000);
52
- deleteIfExists(this.fileName);
53
- deleteIfExists(`${this.fileName}.log`);
54
- cloudant.deleteDatabase({ db: this.dbName }).then(() => { done(); }).catch((err) => { done(err); });
55
- } else {
56
- done();
27
+ const AWS = require('aws-sdk');
28
+ const couchbackup = require('@cloudant/couchbackup');
29
+ const debug = require('debug')('s3-backup');
30
+ const tmp = require('tmp');
31
+ const VError = require('verror').VError;
32
+
33
+ /*
34
+ Main function, run from base of file.
35
+ */
36
+ function main() {
37
+ const argv = require('yargs')
38
+ .usage('Usage: $0 [options]')
39
+ .example('$0 -s https://user:pass@host/db -b <bucket>', 'Backup db to bucket')
40
+ .options({
41
+ source: { alias: 's', nargs: 1, demandOption: true, describe: 'Source database URL' },
42
+ bucket: { alias: 'b', nargs: 1, demandOption: true, describe: 'Destination bucket' },
43
+ prefix: { alias: 'p', nargs: 1, describe: 'Prefix for backup object key', default: 'couchbackup' },
44
+ s3url: { nargs: 1, describe: 'S3 endpoint URL' },
45
+ awsprofile: { nargs: 1, describe: 'The profile section to use in the ~/.aws/credentials file', default: 'default' }
46
+ })
47
+ .help('h').alias('h', 'help')
48
+ .epilog('Copyright (C) IBM 2017')
49
+ .argv;
50
+
51
+ const sourceUrl = argv.source;
52
+ const backupBucket = argv.bucket;
53
+ const backupName = new url.URL(sourceUrl).pathname.split('/').filter(function(x) { return x; }).join('-');
54
+ const backupKeyPrefix = `${argv.prefix}-${backupName}`;
55
+
56
+ const backupKey = `${backupKeyPrefix}-${new Date().toISOString()}`;
57
+ const backupTmpFile = tmp.fileSync();
58
+
59
+ const s3Endpoint = argv.s3url;
60
+ const awsProfile = argv.awsprofile;
61
+
62
+ // Creds are from ~/.aws/credentials, environment etc. (see S3 docs).
63
+ const awsOpts = {
64
+ signatureVersion: 'v4',
65
+ credentials: new AWS.SharedIniFileCredentials({ profile: awsProfile })
66
+ };
67
+ if (typeof s3Endpoint !== 'undefined') {
68
+ awsOpts.endpoint = new AWS.Endpoint(s3Endpoint);
57
69
  }
58
- });
70
+ const s3 = new AWS.S3(awsOpts);
71
+
72
+ debug(`Creating a new backup of ${s(sourceUrl)} at ${backupBucket}/${backupKey}...`);
73
+ bucketAccessible(s3, backupBucket)
74
+ .then(() => {
75
+ return createBackupFile(sourceUrl, backupTmpFile.name);
76
+ })
77
+ .then(() => {
78
+ return uploadNewBackup(s3, backupTmpFile.name, backupBucket, backupKey);
79
+ })
80
+ .then(() => {
81
+ debug('Backup successful!');
82
+ backupTmpFile.removeCallback();
83
+ debug('done.');
84
+ })
85
+ .catch((reason) => {
86
+ debug(`Error: ${reason}`);
87
+ });
88
+ }
89
+
90
+ /**
91
+ * Return a promise that resolves if the bucket is available and
92
+ * rejects if not.
93
+ *
94
+ * @param {any} s3 S3 client object
95
+ * @param {any} bucketName Bucket name
96
+ * @returns Promise
97
+ */
98
+ function bucketAccessible(s3, bucketName) {
99
+ return new Promise(function(resolve, reject) {
100
+ const params = {
101
+ Bucket: bucketName
102
+ };
103
+ s3.headBucket(params, function(err, data) {
104
+ if (err) {
105
+ reject(new VError(err, 'S3 bucket not accessible'));
106
+ } else {
107
+ resolve();
108
+ }
109
+ });
110
+ });
111
+ }
59
112
 
60
- function deleteIfExists(fileName) {
61
- fs.unlink(fileName, function(err) {
62
- if (err) {
63
- if (err.code !== 'ENOENT') {
64
- console.error(`${err.code} ${err.message}`);
113
+ /**
114
+ * Use couchbackup to create a backup of the specified database to a file path.
115
+ *
116
+ * @param {any} sourceUrl Database URL
117
+ * @param {any} backupTmpFilePath Path to write file
118
+ * @returns Promise
119
+ */
120
+ function createBackupFile(sourceUrl, backupTmpFilePath) {
121
+ return new Promise((resolve, reject) => {
122
+ couchbackup.backup(
123
+ sourceUrl,
124
+ fs.createWriteStream(backupTmpFilePath),
125
+ (err) => {
126
+ if (err) {
127
+ return reject(new VError(err, 'CouchBackup process failed'));
128
+ }
129
+ debug('couchbackup to file done; uploading to S3');
130
+ resolve('creating backup file complete');
65
131
  }
132
+ );
133
+ });
134
+ }
135
+
136
+ /**
137
+ * Upload a backup file to an S3 bucket.
138
+ *
139
+ * @param {any} s3 Object store client
140
+ * @param {any} backupTmpFilePath Path of backup file to write.
141
+ * @param {any} bucket Object store bucket name
142
+ * @param {any} key Object store key name
143
+ * @returns Promise
144
+ */
145
+ function uploadNewBackup(s3, backupTmpFilePath, bucket, key) {
146
+ return new Promise((resolve, reject) => {
147
+ debug(`Uploading from ${backupTmpFilePath} to ${bucket}/${key}`);
148
+
149
+ function uploadFromStream(s3, bucket, key) {
150
+ const pass = new stream.PassThrough();
151
+
152
+ const params = {
153
+ Bucket: bucket,
154
+ Key: key,
155
+ Body: pass
156
+ };
157
+ s3.upload(params, function(err, data) {
158
+ debug('S3 upload done');
159
+ if (err) {
160
+ debug(err);
161
+ reject(new VError(err, 'Upload failed'));
162
+ return;
163
+ }
164
+ debug('Upload succeeded');
165
+ debug(data);
166
+ resolve();
167
+ }).httpUploadProgress = (progress) => {
168
+ debug(`S3 upload progress: ${progress}`);
169
+ };
170
+
171
+ return pass;
66
172
  }
173
+
174
+ const inputStream = fs.createReadStream(backupTmpFilePath);
175
+ const s3Stream = uploadFromStream(s3, bucket, key);
176
+ inputStream.pipe(s3Stream);
67
177
  });
68
178
  }
179
+
180
+ /**
181
+ * Remove creds from a URL, e.g., before logging
182
+ *
183
+ * @param {string} url URL to safen
184
+ */
185
+ function s(originalUrl) {
186
+ const parts = new url.URL(originalUrl);
187
+ return url.format(parts, { auth: false });
188
+ }
189
+
190
+ main();
@@ -1,4 +1,4 @@
1
- // Copyright © 2017, 2018 IBM Corp. All rights reserved.
1
+ // Copyright © 2017, 2021 IBM Corp. All rights reserved.
2
2
  //
3
3
  // Licensed under the Apache License, Version 2.0 (the "License");
4
4
  // you may not use this file except in compliance with the License.
@@ -12,57 +12,57 @@
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 beforeEach afterEach */
16
16
  'use strict';
17
17
 
18
+ const { CloudantV1 } = require('@ibm-cloud/cloudant');
19
+ const url = new URL((process.env.COUCH_BACKEND_URL) ? process.env.COUCH_BACKEND_URL : 'https://no-couch-backend-url-set.test');
20
+ const { BasicAuthenticator, NoAuthAuthenticator } = require('ibm-cloud-sdk-core');
21
+ const authenticator = (url.username) ? new BasicAuthenticator({ username: url.username, password: decodeURIComponent(url.password) }) : new NoAuthAuthenticator();
22
+ const serviceOpts = {
23
+ authenticator: authenticator
24
+ };
25
+ const cloudant = new CloudantV1(serviceOpts);
26
+ // Remove auth from URL before using for service
27
+ cloudant.setServiceUrl(new URL(url.pathname, url.origin).toString());
28
+ const uuid = require('uuid').v4;
18
29
  const fs = require('fs');
19
- const u = require('./citestutils.js');
20
30
 
21
- [{ useApi: true }, { useApi: false }].forEach(function(params) {
22
- describe(u.scenario('Compression tests', params), function() {
23
- const p = u.p(params, { compression: true });
31
+ // Mocha hooks that will be at the root context so run for all tests
24
32
 
25
- it('should backup animaldb to a compressed file', function(done) {
26
- // Allow up to 60 s for backup of animaldb
27
- u.setTimeout(this, 60);
28
- const compressedBackup = `./${this.fileName}`;
29
- const output = fs.createWriteStream(compressedBackup);
30
- output.on('open', function() {
31
- u.testBackup(p, 'animaldb', output, function(err) {
32
- if (err) {
33
- done(err);
34
- } else {
35
- u.assertGzipFile(compressedBackup, done);
36
- }
37
- });
38
- });
39
- });
40
-
41
- it('should backup and restore animaldb via a compressed file', function(done) {
42
- // Allow up to 60 s for backup and restore of animaldb
43
- u.setTimeout(this, 60);
44
- const compressedBackup = `./${this.fileName}`;
45
- u.testBackupAndRestoreViaFile(p, 'animaldb', compressedBackup, this.dbName, function(err) {
46
- if (err) {
47
- done(err);
48
- } else {
49
- u.assertGzipFile(compressedBackup, done);
50
- }
51
- });
52
- });
33
+ beforeEach('Create test database', function(done) {
34
+ // Don't run hook for unit tests, just for CI
35
+ if (!this.currentTest.fullTitle().includes('#unit')) {
36
+ // Allow 10 seconds to create the DB
37
+ this.timeout(10 * 1000);
38
+ const unique = uuid();
39
+ this.fileName = `${unique}`;
40
+ this.dbName = 'couchbackup_test_' + unique;
41
+ cloudant.putDatabase({ db: this.dbName }).then(() => { done(); }).catch((err) => { done(err); });
42
+ } else {
43
+ done();
44
+ }
45
+ });
53
46
 
54
- it('should backup and restore animaldb via a compressed stream', function(done) {
55
- // Allow up to 60 s for backup and restore of animaldb
56
- u.setTimeout(this, 60);
57
- u.testDirectBackupAndRestore(p, 'animaldb', this.dbName, done);
58
- });
47
+ afterEach('Delete test database', function(done) {
48
+ // Don't run hook for unit tests, just for CI
49
+ if (!this.currentTest.fullTitle().includes('#unit')) {
50
+ // Allow 10 seconds to delete the DB
51
+ this.timeout(10 * 1000);
52
+ deleteIfExists(this.fileName);
53
+ deleteIfExists(`${this.fileName}.log`);
54
+ cloudant.deleteDatabase({ db: this.dbName }).then(() => { done(); }).catch((err) => { done(err); });
55
+ } else {
56
+ done();
57
+ }
58
+ });
59
59
 
60
- it('should backup and restore largedb2g via a compressed file #slower', function(done) {
61
- // Takes ~ 25 min using CLI, but sometimes over an hour with API
62
- u.setTimeout(this, 180 * 60);
63
- const compressedBackup = `./${this.fileName}`;
64
- params.compression = true;
65
- u.testBackupAndRestoreViaFile(p, 'largedb2g', compressedBackup, this.dbName, done);
66
- });
60
+ function deleteIfExists(fileName) {
61
+ fs.unlink(fileName, function(err) {
62
+ if (err) {
63
+ if (err.code !== 'ENOENT') {
64
+ console.error(`${err.code} ${err.message}`);
65
+ }
66
+ }
67
67
  });
68
- });
68
+ }