@cloudant/couchbackup 2.9.14-SNAPSHOT.159 → 2.9.14

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 (395) 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-18.pb +1 -0
  4. package/.scannerwork/scanner-report/changesets-21.pb +1 -0
  5. package/.scannerwork/scanner-report/changesets-23.pb +1 -0
  6. package/.scannerwork/scanner-report/changesets-24.pb +1 -0
  7. package/.scannerwork/scanner-report/changesets-25.pb +1 -0
  8. package/.scannerwork/scanner-report/changesets-49.pb +1 -0
  9. package/.scannerwork/scanner-report/changesets-50.pb +1 -0
  10. package/.scannerwork/scanner-report/changesets-51.pb +1 -0
  11. package/.scannerwork/scanner-report/changesets-52.pb +1 -0
  12. package/.scannerwork/scanner-report/changesets-53.pb +1 -0
  13. package/.scannerwork/scanner-report/changesets-54.pb +1 -0
  14. package/.scannerwork/scanner-report/changesets-55.pb +1 -0
  15. package/.scannerwork/scanner-report/changesets-56.pb +1 -0
  16. package/.scannerwork/scanner-report/component-1.pb +3 -2
  17. package/.scannerwork/scanner-report/component-10.pb +1 -1
  18. package/.scannerwork/scanner-report/component-11.pb +1 -1
  19. package/.scannerwork/scanner-report/component-12.pb +1 -1
  20. package/.scannerwork/scanner-report/component-13.pb +1 -1
  21. package/.scannerwork/scanner-report/component-14.pb +1 -1
  22. package/.scannerwork/scanner-report/component-15.pb +1 -1
  23. package/.scannerwork/scanner-report/component-16.pb +1 -1
  24. package/.scannerwork/scanner-report/component-17.pb +1 -1
  25. package/.scannerwork/scanner-report/component-18.pb +1 -1
  26. package/.scannerwork/scanner-report/component-19.pb +1 -1
  27. package/.scannerwork/scanner-report/component-2.pb +1 -0
  28. package/.scannerwork/scanner-report/component-20.pb +1 -1
  29. package/.scannerwork/scanner-report/component-21.pb +1 -0
  30. package/.scannerwork/scanner-report/component-22.pb +1 -1
  31. package/.scannerwork/scanner-report/component-23.pb +1 -0
  32. package/.scannerwork/scanner-report/component-24.pb +1 -0
  33. package/.scannerwork/scanner-report/component-25.pb +1 -0
  34. package/.scannerwork/scanner-report/component-37.pb +1 -1
  35. package/.scannerwork/scanner-report/component-38.pb +1 -1
  36. package/.scannerwork/scanner-report/component-39.pb +1 -1
  37. package/.scannerwork/scanner-report/component-40.pb +1 -1
  38. package/.scannerwork/scanner-report/component-41.pb +1 -1
  39. package/.scannerwork/scanner-report/component-42.pb +1 -1
  40. package/.scannerwork/scanner-report/component-43.pb +1 -1
  41. package/.scannerwork/scanner-report/component-44.pb +1 -1
  42. package/.scannerwork/scanner-report/component-49.pb +1 -0
  43. package/.scannerwork/scanner-report/component-5.pb +1 -1
  44. package/.scannerwork/scanner-report/component-50.pb +1 -0
  45. package/.scannerwork/scanner-report/component-51.pb +1 -0
  46. package/.scannerwork/scanner-report/component-52.pb +1 -0
  47. package/.scannerwork/scanner-report/component-53.pb +1 -0
  48. package/.scannerwork/scanner-report/component-54.pb +1 -0
  49. package/.scannerwork/scanner-report/component-55.pb +1 -0
  50. package/.scannerwork/scanner-report/component-56.pb +1 -0
  51. package/.scannerwork/scanner-report/component-57.pb +1 -1
  52. package/.scannerwork/scanner-report/component-58.pb +1 -1
  53. package/.scannerwork/scanner-report/component-59.pb +1 -1
  54. package/.scannerwork/scanner-report/component-6.pb +1 -1
  55. package/.scannerwork/scanner-report/component-60.pb +1 -1
  56. package/.scannerwork/scanner-report/component-61.pb +1 -1
  57. package/.scannerwork/scanner-report/component-62.pb +1 -1
  58. package/.scannerwork/scanner-report/component-67.pb +1 -1
  59. package/.scannerwork/scanner-report/component-7.pb +1 -1
  60. package/.scannerwork/scanner-report/component-8.pb +1 -1
  61. package/.scannerwork/scanner-report/component-9.pb +1 -1
  62. package/.scannerwork/scanner-report/coverages-10.pb +0 -0
  63. package/.scannerwork/scanner-report/coverages-11.pb +0 -0
  64. package/.scannerwork/scanner-report/coverages-12.pb +0 -0
  65. package/.scannerwork/scanner-report/coverages-13.pb +0 -0
  66. package/.scannerwork/scanner-report/coverages-14.pb +0 -0
  67. package/.scannerwork/scanner-report/coverages-15.pb +0 -0
  68. package/.scannerwork/scanner-report/coverages-16.pb +0 -0
  69. package/.scannerwork/scanner-report/coverages-17.pb +0 -0
  70. package/.scannerwork/scanner-report/coverages-18.pb +0 -0
  71. package/.scannerwork/scanner-report/coverages-19.pb +0 -0
  72. package/.scannerwork/scanner-report/coverages-20.pb +0 -0
  73. package/.scannerwork/scanner-report/coverages-21.pb +0 -0
  74. package/.scannerwork/scanner-report/coverages-22.pb +0 -0
  75. package/.scannerwork/scanner-report/coverages-23.pb +0 -0
  76. package/.scannerwork/scanner-report/coverages-25.pb +0 -0
  77. package/.scannerwork/scanner-report/coverages-37.pb +0 -0
  78. package/.scannerwork/scanner-report/coverages-38.pb +0 -0
  79. package/.scannerwork/scanner-report/coverages-39.pb +0 -0
  80. package/.scannerwork/scanner-report/coverages-40.pb +0 -0
  81. package/.scannerwork/scanner-report/coverages-41.pb +0 -0
  82. package/.scannerwork/scanner-report/coverages-42.pb +0 -0
  83. package/.scannerwork/scanner-report/coverages-43.pb +0 -0
  84. package/.scannerwork/scanner-report/coverages-44.pb +0 -0
  85. package/.scannerwork/scanner-report/coverages-49.pb +0 -0
  86. package/.scannerwork/scanner-report/coverages-5.pb +0 -0
  87. package/.scannerwork/scanner-report/coverages-50.pb +0 -0
  88. package/.scannerwork/scanner-report/coverages-51.pb +0 -0
  89. package/.scannerwork/scanner-report/coverages-53.pb +0 -0
  90. package/.scannerwork/scanner-report/coverages-54.pb +0 -0
  91. package/.scannerwork/scanner-report/coverages-55.pb +0 -0
  92. package/.scannerwork/scanner-report/coverages-56.pb +0 -0
  93. package/.scannerwork/scanner-report/coverages-57.pb +0 -0
  94. package/.scannerwork/scanner-report/coverages-58.pb +0 -0
  95. package/.scannerwork/scanner-report/coverages-59.pb +0 -0
  96. package/.scannerwork/scanner-report/coverages-6.pb +0 -0
  97. package/.scannerwork/scanner-report/coverages-60.pb +0 -0
  98. package/.scannerwork/scanner-report/coverages-61.pb +0 -0
  99. package/.scannerwork/scanner-report/coverages-62.pb +0 -0
  100. package/.scannerwork/scanner-report/coverages-7.pb +0 -0
  101. package/.scannerwork/scanner-report/coverages-8.pb +0 -0
  102. package/.scannerwork/scanner-report/coverages-9.pb +0 -0
  103. package/.scannerwork/scanner-report/duplications-14.pb +0 -2
  104. package/.scannerwork/scanner-report/duplications-20.pb +0 -2
  105. package/.scannerwork/scanner-report/duplications-22.pb +0 -2
  106. package/.scannerwork/scanner-report/duplications-23.pb +3 -0
  107. package/.scannerwork/scanner-report/duplications-37.pb +0 -2
  108. package/.scannerwork/scanner-report/duplications-42.pb +2 -0
  109. package/.scannerwork/scanner-report/duplications-43.pb +2 -0
  110. package/.scannerwork/scanner-report/duplications-44.pb +2 -0
  111. package/.scannerwork/scanner-report/duplications-51.pb +2 -0
  112. package/.scannerwork/scanner-report/duplications-53.pb +2 -0
  113. package/.scannerwork/scanner-report/duplications-58.pb +0 -3
  114. package/.scannerwork/scanner-report/duplications-7.pb +0 -2
  115. package/.scannerwork/scanner-report/duplications-9.pb +2 -0
  116. package/.scannerwork/scanner-report/measures-10.pb +0 -0
  117. package/.scannerwork/scanner-report/measures-11.pb +0 -0
  118. package/.scannerwork/scanner-report/measures-12.pb +0 -0
  119. package/.scannerwork/scanner-report/measures-13.pb +0 -0
  120. package/.scannerwork/scanner-report/measures-14.pb +0 -0
  121. package/.scannerwork/scanner-report/measures-15.pb +0 -0
  122. package/.scannerwork/scanner-report/measures-16.pb +0 -0
  123. package/.scannerwork/scanner-report/measures-17.pb +0 -0
  124. package/.scannerwork/scanner-report/measures-18.pb +0 -0
  125. package/.scannerwork/scanner-report/measures-19.pb +0 -0
  126. package/.scannerwork/scanner-report/measures-20.pb +0 -0
  127. package/.scannerwork/scanner-report/measures-21.pb +0 -0
  128. package/.scannerwork/scanner-report/measures-22.pb +0 -0
  129. package/.scannerwork/scanner-report/measures-23.pb +0 -0
  130. package/.scannerwork/scanner-report/measures-25.pb +0 -0
  131. package/.scannerwork/scanner-report/measures-37.pb +0 -0
  132. package/.scannerwork/scanner-report/measures-38.pb +0 -0
  133. package/.scannerwork/scanner-report/measures-39.pb +0 -0
  134. package/.scannerwork/scanner-report/measures-40.pb +0 -0
  135. package/.scannerwork/scanner-report/measures-41.pb +0 -0
  136. package/.scannerwork/scanner-report/measures-42.pb +0 -0
  137. package/.scannerwork/scanner-report/measures-43.pb +0 -0
  138. package/.scannerwork/scanner-report/measures-44.pb +0 -0
  139. package/.scannerwork/scanner-report/measures-49.pb +0 -0
  140. package/.scannerwork/scanner-report/measures-5.pb +0 -0
  141. package/.scannerwork/scanner-report/measures-50.pb +15 -0
  142. package/.scannerwork/scanner-report/measures-51.pb +0 -0
  143. package/.scannerwork/scanner-report/measures-53.pb +0 -0
  144. package/.scannerwork/scanner-report/measures-54.pb +16 -0
  145. package/.scannerwork/scanner-report/measures-55.pb +0 -0
  146. package/.scannerwork/scanner-report/measures-56.pb +0 -0
  147. package/.scannerwork/scanner-report/measures-57.pb +0 -0
  148. package/.scannerwork/scanner-report/measures-58.pb +0 -0
  149. package/.scannerwork/scanner-report/measures-59.pb +0 -0
  150. package/.scannerwork/scanner-report/measures-6.pb +0 -0
  151. package/.scannerwork/scanner-report/measures-60.pb +0 -0
  152. package/.scannerwork/scanner-report/measures-61.pb +0 -0
  153. package/.scannerwork/scanner-report/measures-62.pb +0 -0
  154. package/.scannerwork/scanner-report/measures-67.pb +0 -0
  155. package/.scannerwork/scanner-report/measures-7.pb +0 -0
  156. package/.scannerwork/scanner-report/measures-8.pb +0 -0
  157. package/.scannerwork/scanner-report/measures-9.pb +0 -0
  158. package/.scannerwork/scanner-report/metadata.pb +0 -0
  159. package/.scannerwork/scanner-report/source-10.txt +69 -87
  160. package/.scannerwork/scanner-report/source-11.txt +119 -249
  161. package/.scannerwork/scanner-report/source-12.txt +21 -95
  162. package/.scannerwork/scanner-report/source-13.txt +413 -142
  163. package/.scannerwork/scanner-report/source-14.txt +84 -53
  164. package/.scannerwork/scanner-report/source-15.txt +80 -92
  165. package/.scannerwork/scanner-report/source-16.txt +26 -16
  166. package/.scannerwork/scanner-report/source-17.txt +120 -115
  167. package/.scannerwork/scanner-report/source-18.txt +37 -424
  168. package/.scannerwork/scanner-report/source-19.txt +10 -95
  169. package/.scannerwork/scanner-report/{source-32.txt → source-2.txt} +49 -49
  170. package/.scannerwork/scanner-report/source-20.txt +13 -156
  171. package/.scannerwork/scanner-report/source-21.txt +40 -0
  172. package/.scannerwork/scanner-report/source-22.txt +40 -168
  173. package/.scannerwork/scanner-report/source-23.txt +213 -0
  174. package/.scannerwork/scanner-report/source-25.txt +42 -0
  175. package/.scannerwork/scanner-report/source-37.txt +47 -155
  176. package/.scannerwork/scanner-report/source-38.txt +41 -77
  177. package/.scannerwork/scanner-report/source-39.txt +266 -19
  178. package/.scannerwork/scanner-report/source-40.txt +161 -10
  179. package/.scannerwork/scanner-report/source-41.txt +97 -416
  180. package/.scannerwork/scanner-report/source-42.txt +158 -105
  181. package/.scannerwork/scanner-report/source-43.txt +148 -262
  182. package/.scannerwork/scanner-report/source-44.txt +168 -40
  183. package/.scannerwork/scanner-report/source-49.txt +59 -0
  184. package/.scannerwork/scanner-report/source-5.txt +390 -22
  185. package/.scannerwork/scanner-report/source-50.txt +113 -0
  186. package/.scannerwork/scanner-report/source-51.txt +75 -0
  187. package/.scannerwork/scanner-report/source-53.txt +92 -0
  188. package/.scannerwork/scanner-report/source-54.txt +178 -0
  189. package/.scannerwork/scanner-report/source-55.txt +129 -0
  190. package/.scannerwork/scanner-report/source-56.txt +46 -0
  191. package/.scannerwork/scanner-report/source-57.txt +251 -161
  192. package/.scannerwork/scanner-report/source-58.txt +95 -197
  193. package/.scannerwork/scanner-report/source-59.txt +25 -21
  194. package/.scannerwork/scanner-report/source-6.txt +41 -61
  195. package/.scannerwork/scanner-report/source-60.txt +104 -27
  196. package/.scannerwork/scanner-report/source-61.txt +15 -49
  197. package/.scannerwork/scanner-report/source-62.txt +65 -85
  198. package/.scannerwork/scanner-report/source-67.txt +424 -75
  199. package/.scannerwork/scanner-report/source-7.txt +57 -68
  200. package/.scannerwork/scanner-report/source-8.txt +98 -43
  201. package/.scannerwork/scanner-report/source-9.txt +167 -21
  202. package/.scannerwork/scanner-report/symbols-10.pb +69 -30
  203. package/.scannerwork/scanner-report/symbols-11.pb +91 -352
  204. package/.scannerwork/scanner-report/symbols-12.pb +13 -59
  205. package/.scannerwork/scanner-report/symbols-13.pb +785 -139
  206. package/.scannerwork/scanner-report/symbols-14.pb +59 -42
  207. package/.scannerwork/scanner-report/symbols-15.pb +57 -45
  208. package/.scannerwork/scanner-report/symbols-16.pb +31 -14
  209. package/.scannerwork/scanner-report/symbols-17.pb +71 -33
  210. package/.scannerwork/scanner-report/symbols-18.pb +9 -0
  211. package/.scannerwork/scanner-report/symbols-19.pb +8 -28
  212. package/.scannerwork/scanner-report/symbols-20.pb +9 -153
  213. package/.scannerwork/scanner-report/symbols-21.pb +23 -0
  214. package/.scannerwork/scanner-report/symbols-22.pb +24 -180
  215. package/.scannerwork/scanner-report/symbols-23.pb +264 -0
  216. package/.scannerwork/scanner-report/symbols-25.pb +19 -0
  217. package/.scannerwork/scanner-report/symbols-37.pb +38 -202
  218. package/.scannerwork/scanner-report/symbols-38.pb +32 -57
  219. package/.scannerwork/scanner-report/symbols-39.pb +421 -19
  220. package/.scannerwork/scanner-report/symbols-40.pb +207 -21
  221. package/.scannerwork/scanner-report/symbols-41.pb +85 -789
  222. package/.scannerwork/scanner-report/symbols-42.pb +203 -86
  223. package/.scannerwork/scanner-report/symbols-43.pb +152 -420
  224. package/.scannerwork/scanner-report/symbols-44.pb +180 -24
  225. package/.scannerwork/scanner-report/symbols-49.pb +19 -0
  226. package/.scannerwork/scanner-report/symbols-5.pb +604 -20
  227. package/.scannerwork/scanner-report/symbols-50.pb +46 -0
  228. package/.scannerwork/scanner-report/symbols-51.pb +42 -0
  229. package/.scannerwork/scanner-report/symbols-53.pb +44 -0
  230. package/.scannerwork/scanner-report/symbols-54.pb +144 -0
  231. package/.scannerwork/scanner-report/symbols-55.pb +33 -0
  232. package/.scannerwork/scanner-report/symbols-56.pb +20 -0
  233. package/.scannerwork/scanner-report/symbols-57.pb +336 -191
  234. package/.scannerwork/scanner-report/symbols-58.pb +59 -264
  235. package/.scannerwork/scanner-report/symbols-59.pb +18 -9
  236. package/.scannerwork/scanner-report/symbols-6.pb +21 -46
  237. package/.scannerwork/scanner-report/symbols-60.pb +30 -31
  238. package/.scannerwork/scanner-report/symbols-61.pb +13 -32
  239. package/.scannerwork/scanner-report/symbols-62.pb +45 -68
  240. package/.scannerwork/scanner-report/symbols-7.pb +32 -44
  241. package/.scannerwork/scanner-report/symbols-8.pb +28 -19
  242. package/.scannerwork/scanner-report/symbols-9.pb +226 -17
  243. package/.scannerwork/scanner-report/syntax-highlightings-10.pb +76 -82
  244. package/.scannerwork/scanner-report/syntax-highlightings-11.pb +157 -205
  245. package/.scannerwork/scanner-report/syntax-highlightings-12.pb +27 -98
  246. package/.scannerwork/scanner-report/syntax-highlightings-13.pb +535 -153
  247. package/.scannerwork/scanner-report/syntax-highlightings-14.pb +144 -44
  248. package/.scannerwork/scanner-report/syntax-highlightings-15.pb +122 -94
  249. package/.scannerwork/scanner-report/syntax-highlightings-16.pb +39 -15
  250. package/.scannerwork/scanner-report/syntax-highlightings-17.pb +141 -89
  251. package/.scannerwork/scanner-report/syntax-highlightings-18.pb +50 -3330
  252. package/.scannerwork/scanner-report/syntax-highlightings-19.pb +16 -105
  253. package/.scannerwork/scanner-report/{syntax-highlightings-32.pb → syntax-highlightings-2.pb} +26 -26
  254. package/.scannerwork/scanner-report/syntax-highlightings-20.pb +23 -183
  255. package/.scannerwork/scanner-report/syntax-highlightings-21.pb +56 -0
  256. package/.scannerwork/scanner-report/syntax-highlightings-22.pb +66 -194
  257. package/.scannerwork/scanner-report/syntax-highlightings-23.pb +296 -0
  258. package/.scannerwork/scanner-report/syntax-highlightings-25.pb +66 -0
  259. package/.scannerwork/scanner-report/syntax-highlightings-37.pb +55 -234
  260. package/.scannerwork/scanner-report/syntax-highlightings-38.pb +68 -112
  261. package/.scannerwork/scanner-report/syntax-highlightings-39.pb +668 -26
  262. package/.scannerwork/scanner-report/syntax-highlightings-40.pb +250 -16
  263. package/.scannerwork/scanner-report/syntax-highlightings-41.pb +89 -589
  264. package/.scannerwork/scanner-report/syntax-highlightings-42.pb +243 -88
  265. package/.scannerwork/scanner-report/syntax-highlightings-43.pb +169 -663
  266. package/.scannerwork/scanner-report/syntax-highlightings-44.pb +194 -66
  267. package/.scannerwork/scanner-report/syntax-highlightings-49.pb +59 -0
  268. package/.scannerwork/scanner-report/syntax-highlightings-5.pb +610 -33
  269. package/.scannerwork/scanner-report/syntax-highlightings-50.pb +126 -0
  270. package/.scannerwork/scanner-report/syntax-highlightings-51.pb +78 -0
  271. package/.scannerwork/scanner-report/syntax-highlightings-53.pb +90 -0
  272. package/.scannerwork/scanner-report/syntax-highlightings-54.pb +243 -0
  273. package/.scannerwork/scanner-report/syntax-highlightings-55.pb +129 -0
  274. package/.scannerwork/scanner-report/syntax-highlightings-56.pb +64 -0
  275. package/.scannerwork/scanner-report/syntax-highlightings-57.pb +180 -185
  276. package/.scannerwork/scanner-report/syntax-highlightings-58.pb +93 -256
  277. package/.scannerwork/scanner-report/syntax-highlightings-59.pb +21 -32
  278. package/.scannerwork/scanner-report/syntax-highlightings-6.pb +59 -74
  279. package/.scannerwork/scanner-report/syntax-highlightings-60.pb +83 -39
  280. package/.scannerwork/scanner-report/syntax-highlightings-61.pb +15 -80
  281. package/.scannerwork/scanner-report/syntax-highlightings-62.pb +61 -73
  282. package/.scannerwork/scanner-report/syntax-highlightings-67.pb +3331 -90
  283. package/.scannerwork/scanner-report/syntax-highlightings-7.pb +75 -67
  284. package/.scannerwork/scanner-report/syntax-highlightings-8.pb +108 -29
  285. package/.scannerwork/scanner-report/syntax-highlightings-9.pb +339 -21
  286. package/CHANGES.md +1 -1
  287. package/package.json +1 -1
  288. package/test-18-results.xml +159 -159
  289. package/test-iam-18-results.xml +49 -49
  290. package/.scannerwork/scanner-report/changesets-29.pb +0 -1
  291. package/.scannerwork/scanner-report/changesets-30.pb +0 -1
  292. package/.scannerwork/scanner-report/changesets-34.pb +0 -1
  293. package/.scannerwork/scanner-report/changesets-35.pb +0 -1
  294. package/.scannerwork/scanner-report/changesets-36.pb +0 -1
  295. package/.scannerwork/scanner-report/changesets-4.pb +0 -1
  296. package/.scannerwork/scanner-report/changesets-45.pb +0 -1
  297. package/.scannerwork/scanner-report/changesets-63.pb +0 -1
  298. package/.scannerwork/scanner-report/changesets-64.pb +0 -1
  299. package/.scannerwork/scanner-report/changesets-65.pb +0 -1
  300. package/.scannerwork/scanner-report/changesets-66.pb +0 -1
  301. package/.scannerwork/scanner-report/changesets-67.pb +0 -1
  302. package/.scannerwork/scanner-report/changesets-68.pb +0 -1
  303. package/.scannerwork/scanner-report/component-29.pb +0 -1
  304. package/.scannerwork/scanner-report/component-30.pb +0 -1
  305. package/.scannerwork/scanner-report/component-32.pb +0 -1
  306. package/.scannerwork/scanner-report/component-34.pb +0 -1
  307. package/.scannerwork/scanner-report/component-35.pb +0 -1
  308. package/.scannerwork/scanner-report/component-36.pb +0 -1
  309. package/.scannerwork/scanner-report/component-4.pb +0 -1
  310. package/.scannerwork/scanner-report/component-45.pb +0 -1
  311. package/.scannerwork/scanner-report/component-63.pb +0 -1
  312. package/.scannerwork/scanner-report/component-64.pb +0 -1
  313. package/.scannerwork/scanner-report/component-65.pb +0 -1
  314. package/.scannerwork/scanner-report/component-66.pb +0 -1
  315. package/.scannerwork/scanner-report/component-68.pb +0 -1
  316. package/.scannerwork/scanner-report/coverages-29.pb +0 -0
  317. package/.scannerwork/scanner-report/coverages-30.pb +0 -0
  318. package/.scannerwork/scanner-report/coverages-34.pb +0 -0
  319. package/.scannerwork/scanner-report/coverages-35.pb +0 -0
  320. package/.scannerwork/scanner-report/coverages-36.pb +0 -0
  321. package/.scannerwork/scanner-report/coverages-45.pb +0 -0
  322. package/.scannerwork/scanner-report/coverages-63.pb +0 -0
  323. package/.scannerwork/scanner-report/coverages-64.pb +0 -0
  324. package/.scannerwork/scanner-report/coverages-65.pb +0 -0
  325. package/.scannerwork/scanner-report/coverages-67.pb +0 -0
  326. package/.scannerwork/scanner-report/coverages-68.pb +0 -0
  327. package/.scannerwork/scanner-report/duplications-64.pb +0 -2
  328. package/.scannerwork/scanner-report/duplications-66.pb +0 -0
  329. package/.scannerwork/scanner-report/duplications-67.pb +0 -0
  330. package/.scannerwork/scanner-report/measures-29.pb +0 -0
  331. package/.scannerwork/scanner-report/measures-30.pb +0 -0
  332. package/.scannerwork/scanner-report/measures-34.pb +0 -0
  333. package/.scannerwork/scanner-report/measures-35.pb +0 -0
  334. package/.scannerwork/scanner-report/measures-36.pb +0 -0
  335. package/.scannerwork/scanner-report/measures-45.pb +0 -0
  336. package/.scannerwork/scanner-report/measures-63.pb +0 -15
  337. package/.scannerwork/scanner-report/measures-64.pb +0 -0
  338. package/.scannerwork/scanner-report/measures-65.pb +0 -0
  339. package/.scannerwork/scanner-report/measures-68.pb +0 -0
  340. package/.scannerwork/scanner-report/source-29.txt +0 -81
  341. package/.scannerwork/scanner-report/source-30.txt +0 -60
  342. package/.scannerwork/scanner-report/source-34.txt +0 -414
  343. package/.scannerwork/scanner-report/source-35.txt +0 -134
  344. package/.scannerwork/scanner-report/source-36.txt +0 -106
  345. package/.scannerwork/scanner-report/source-45.txt +0 -37
  346. package/.scannerwork/scanner-report/source-63.txt +0 -151
  347. package/.scannerwork/scanner-report/source-64.txt +0 -187
  348. package/.scannerwork/scanner-report/source-65.txt +0 -32
  349. package/.scannerwork/scanner-report/source-68.txt +0 -29
  350. package/.scannerwork/scanner-report/symbols-29.pb +0 -32
  351. package/.scannerwork/scanner-report/symbols-30.pb +0 -21
  352. package/.scannerwork/scanner-report/symbols-34.pb +0 -604
  353. package/.scannerwork/scanner-report/symbols-35.pb +0 -71
  354. package/.scannerwork/scanner-report/symbols-36.pb +0 -59
  355. package/.scannerwork/scanner-report/symbols-45.pb +0 -13
  356. package/.scannerwork/scanner-report/symbols-63.pb +0 -93
  357. package/.scannerwork/scanner-report/symbols-64.pb +0 -227
  358. package/.scannerwork/scanner-report/symbols-65.pb +0 -9
  359. package/.scannerwork/scanner-report/symbols-67.pb +0 -39
  360. package/.scannerwork/scanner-report/symbols-68.pb +0 -8
  361. package/.scannerwork/scanner-report/syntax-highlightings-29.pb +0 -98
  362. package/.scannerwork/scanner-report/syntax-highlightings-30.pb +0 -80
  363. package/.scannerwork/scanner-report/syntax-highlightings-34.pb +0 -641
  364. package/.scannerwork/scanner-report/syntax-highlightings-35.pb +0 -181
  365. package/.scannerwork/scanner-report/syntax-highlightings-36.pb +0 -178
  366. package/.scannerwork/scanner-report/syntax-highlightings-45.pb +0 -62
  367. package/.scannerwork/scanner-report/syntax-highlightings-63.pb +0 -237
  368. package/.scannerwork/scanner-report/syntax-highlightings-64.pb +0 -368
  369. package/.scannerwork/scanner-report/syntax-highlightings-65.pb +0 -54
  370. package/.scannerwork/scanner-report/syntax-highlightings-68.pb +0 -49
  371. /package/.scannerwork/scanner-report/{coverages-66.pb → coverages-24.pb} +0 -0
  372. /package/.scannerwork/scanner-report/{coverages-4.pb → coverages-52.pb} +0 -0
  373. /package/.scannerwork/scanner-report/{duplications-19.pb → duplications-18.pb} +0 -0
  374. /package/.scannerwork/scanner-report/{duplications-29.pb → duplications-21.pb} +0 -0
  375. /package/.scannerwork/scanner-report/{duplications-30.pb → duplications-24.pb} +0 -0
  376. /package/.scannerwork/scanner-report/{duplications-34.pb → duplications-25.pb} +0 -0
  377. /package/.scannerwork/scanner-report/{duplications-35.pb → duplications-49.pb} +0 -0
  378. /package/.scannerwork/scanner-report/{duplications-36.pb → duplications-50.pb} +0 -0
  379. /package/.scannerwork/scanner-report/{duplications-4.pb → duplications-52.pb} +0 -0
  380. /package/.scannerwork/scanner-report/{duplications-45.pb → duplications-54.pb} +0 -0
  381. /package/.scannerwork/scanner-report/{duplications-63.pb → duplications-55.pb} +0 -0
  382. /package/.scannerwork/scanner-report/{duplications-65.pb → duplications-56.pb} +0 -0
  383. /package/.scannerwork/scanner-report/{issues-58.pb → issues-23.pb} +0 -0
  384. /package/.scannerwork/scanner-report/{issues-66.pb → issues-24.pb} +0 -0
  385. /package/.scannerwork/scanner-report/{issues-39.pb → issues-25.pb} +0 -0
  386. /package/.scannerwork/scanner-report/{issues-42.pb → issues-41.pb} +0 -0
  387. /package/.scannerwork/scanner-report/{measures-32.pb → measures-2.pb} +0 -0
  388. /package/.scannerwork/scanner-report/{measures-66.pb → measures-24.pb} +0 -0
  389. /package/.scannerwork/scanner-report/{measures-4.pb → measures-52.pb} +0 -0
  390. /package/.scannerwork/scanner-report/{source-66.txt → source-24.txt} +0 -0
  391. /package/.scannerwork/scanner-report/{source-4.txt → source-52.txt} +0 -0
  392. /package/.scannerwork/scanner-report/{symbols-66.pb → symbols-24.pb} +0 -0
  393. /package/.scannerwork/scanner-report/{symbols-4.pb → symbols-52.pb} +0 -0
  394. /package/.scannerwork/scanner-report/{syntax-highlightings-66.pb → syntax-highlightings-24.pb} +0 -0
  395. /package/.scannerwork/scanner-report/{syntax-highlightings-4.pb → syntax-highlightings-52.pb} +0 -0
@@ -0,0 +1,213 @@
1
+ // Copyright © 2017, 2023 IBM Corp. All rights reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ /* global describe it beforeEach */
16
+ 'use strict';
17
+
18
+ const assert = require('assert');
19
+ const nock = require('nock');
20
+ const request = require('../includes/request.js');
21
+ const error = require('../includes/error.js');
22
+
23
+ const url = 'http://localhost:7777/testdb';
24
+ const db = request.client(url, { parallelism: 1 });
25
+ const timeoutDb = request.client(url, { parallelism: 1, requestTimeout: 500 });
26
+ const longTestTimeout = 3000;
27
+
28
+ beforeEach('Clean nock', function() {
29
+ nock.cleanAll();
30
+ });
31
+
32
+ describe('#unit Check request headers', function() {
33
+ it('should have a couchbackup user-agent', async function() {
34
+ const couch = nock(url)
35
+ .matchHeader('user-agent', /couchbackup-cloudant\/\d+\.\d+\.\d+(?:-SNAPSHOT)? \(Node.js v\d+\.\d+\.\d+\)/)
36
+ .head('/good')
37
+ .reply(200);
38
+
39
+ return db.service.headDocument({ db: db.db, docId: 'good' }).then(() => {
40
+ assert.ok(couch.isDone());
41
+ });
42
+ });
43
+ });
44
+
45
+ describe('#unit Check request response error callback', function() {
46
+ it('should not callback with error for 200 response', async function() {
47
+ const couch = nock(url)
48
+ .get('/good')
49
+ .reply(200, { ok: true });
50
+
51
+ return db.service.getDocument({ db: db.db, docId: 'good' }).then(response => {
52
+ assert.ok(response.result);
53
+ assert.ok(couch.isDone());
54
+ });
55
+ });
56
+
57
+ it('should callback with error after 3 500 responses', async function() {
58
+ const couch = nock(url)
59
+ .get('/bad')
60
+ .times(3)
61
+ .reply(500, function(uri, requestBody) {
62
+ this.req.response.statusMessage = 'Internal Server Error';
63
+ return { error: 'foo', reason: 'bar' };
64
+ });
65
+
66
+ return assert.rejects(
67
+ db.service.getDocument({ db: db.db, docId: 'bad' }),
68
+ (err) => {
69
+ err = error.convertResponseError(err);
70
+ assert.strictEqual(err.name, 'HTTPFatalError');
71
+ assert.strictEqual(err.message, `500 Internal Server Error: get ${url}/bad - Error: foo, Reason: bar`);
72
+ assert.ok(couch.isDone());
73
+ return true;
74
+ });
75
+ }).timeout(longTestTimeout);
76
+
77
+ it('should callback with error after 3 POST 503 responses', async function() {
78
+ const couch = nock(url)
79
+ .post('/_bulk_get')
80
+ .query(true)
81
+ .times(3)
82
+ .reply(503, function(uri, requestBody) {
83
+ this.req.response.statusMessage = 'Service Unavailable';
84
+ return { error: 'service_unavailable', reason: 'Service unavailable' };
85
+ });
86
+
87
+ return assert.rejects(
88
+ db.service.postBulkGet({ db: db.db, revs: true, docs: [] }),
89
+ (err) => {
90
+ err = error.convertResponseError(err);
91
+ assert.strictEqual(err.name, 'HTTPFatalError');
92
+ assert.strictEqual(err.message, `503 Service Unavailable: post ${url}/_bulk_get - Error: service_unavailable, Reason: Service unavailable`);
93
+ assert.ok(couch.isDone());
94
+ return true;
95
+ });
96
+ }).timeout(longTestTimeout);
97
+
98
+ it('should callback with error after 3 429 responses', async function() {
99
+ const couch = nock(url)
100
+ .get('/bad')
101
+ .times(3)
102
+ .reply(429, function(uri, requestBody) {
103
+ this.req.response.statusMessage = 'Too Many Requests';
104
+ return { error: 'foo', reason: 'bar' };
105
+ });
106
+
107
+ return assert.rejects(
108
+ db.service.getDocument({ db: db.db, docId: 'bad' }),
109
+ (err) => {
110
+ err = error.convertResponseError(err);
111
+ assert.strictEqual(err.name, 'HTTPFatalError');
112
+ assert.strictEqual(err.message, `429 Too Many Requests: get ${url}/bad - Error: foo, Reason: bar`);
113
+ assert.ok(couch.isDone());
114
+ return true;
115
+ });
116
+ }).timeout(longTestTimeout);
117
+
118
+ it('should callback with fatal error for 404 response', async function() {
119
+ const couch = nock(url)
120
+ .get('/bad')
121
+ .reply(404, function(uri, requestBody) {
122
+ this.req.response.statusMessage = 'Not Found';
123
+ return { error: 'foo', reason: 'bar' };
124
+ });
125
+
126
+ return assert.rejects(
127
+ db.service.getDocument({ db: db.db, docId: 'bad' }),
128
+ (err) => {
129
+ err = error.convertResponseError(err);
130
+ assert.strictEqual(err.name, 'HTTPFatalError');
131
+ assert.strictEqual(err.message, `404 Not Found: get ${url}/bad - Error: foo, Reason: bar`);
132
+ assert.ok(couch.isDone());
133
+ return true;
134
+ });
135
+ });
136
+
137
+ it('should callback with same error for no status code error response', async function() {
138
+ const couch = nock(url)
139
+ .get('/bad')
140
+ .times(3)
141
+ .replyWithError('testing badness');
142
+
143
+ return assert.rejects(
144
+ db.service.getDocument({ db: db.db, docId: 'bad' }),
145
+ (err) => {
146
+ const err2 = error.convertResponseError(err);
147
+ assert.strictEqual(err, err2);
148
+ assert.ok(couch.isDone());
149
+ return true;
150
+ });
151
+ }).timeout(longTestTimeout);
152
+
153
+ it('should retry request if HTTP request gets timed out', async function() {
154
+ const couch = nock(url)
155
+ .post('/_bulk_get')
156
+ .query(true)
157
+ .delay(1000)
158
+ .reply(200, { results: { docs: [{ id: '1', ok: { _id: '1' } }] } })
159
+ .post('/_bulk_get')
160
+ .query(true)
161
+ .reply(200, { results: { docs: [{ id: '1', ok: { _id: '1' } }, { id: '2', ok: { _id: '2' } }] } });
162
+
163
+ return timeoutDb.service.postBulkGet({ db: db.db, revs: true, docs: [] }).then((response) => {
164
+ assert.ok(response);
165
+ assert.ok(response.result);
166
+ assert.ok(response.result.results);
167
+ assert.ok(response.result.results.docs);
168
+ assert.strictEqual(response.result.results.docs.length, 2);
169
+ assert.ok(couch.isDone());
170
+ });
171
+ });
172
+
173
+ it('should callback with error code ESOCKETTIMEDOUT if 3 HTTP requests gets timed out', async function() {
174
+ // Increase the timeout for this test to allow for the delays
175
+ this.timeout(3000);
176
+ const couch = nock(url)
177
+ .post('/_bulk_get')
178
+ .query(true)
179
+ .delay(1000)
180
+ .times(3)
181
+ .reply(200, { ok: true });
182
+
183
+ return assert.rejects(
184
+ timeoutDb.service.postBulkGet({ db: db.db, revs: true, docs: [] }),
185
+ (err) => {
186
+ err = error.convertResponseError(err);
187
+ // Note axios returns ECONNABORTED rather than ESOCKETTIMEDOUT
188
+ // See https://github.com/axios/axios/issues/2710 via https://github.com/axios/axios/issues/1543`
189
+ assert.strictEqual(err.statusText, 'ECONNABORTED');
190
+ assert.strictEqual(err.message, `timeout of 500ms exceeded: post ${url}/_bulk_get ECONNABORTED`);
191
+ assert.ok(couch.isDone());
192
+ return true;
193
+ });
194
+ });
195
+ describe('#unit Check credentials', async function() {
196
+ it('should properly decode username and password', async function() {
197
+ const username = 'user%123';
198
+ const password = 'colon:at@321';
199
+ const url = `http://${encodeURIComponent(username)}:${encodeURIComponent(password)}@localhost:7777/testdb`;
200
+ const sessionUrl = 'http://localhost:7777';
201
+ const couch = nock(sessionUrl)
202
+ .post('/_session', { username: username, password: password })
203
+ .reply(200, { ok: true }, { 'Set-Cookie': 'AuthSession=ABC123DEF4356;' })
204
+ .get('/')
205
+ .reply(200);
206
+ const db = request.client(url, { parallelism: 1 });
207
+ return db.service.getServerInformation().then(response => {
208
+ assert.ok(response);
209
+ assert.ok(couch.isDone());
210
+ });
211
+ });
212
+ });
213
+ });
@@ -0,0 +1,42 @@
1
+ // Copyright © 2017, 2023 IBM Corp. All rights reserved.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ /* global describe it */
16
+ 'use strict';
17
+
18
+ const assert = require('assert');
19
+ const fs = require('fs');
20
+ const u = require('./citestutils.js');
21
+
22
+ describe('Write error tests', function() {
23
+ it('calls callback with error set when stream is not writeable', async function() {
24
+ u.setTimeout(this, 10);
25
+ const dirname = fs.mkdtempSync('test_backup_');
26
+ // make temp dir read only
27
+ fs.chmodSync(dirname, 0o444);
28
+ const filename = dirname + '/test.backup';
29
+ const backupStream = fs.createWriteStream(filename, { flags: 'w' });
30
+ const params = { useApi: true };
31
+ // try to do backup and check err was set in callback
32
+ return u.testBackup(params, 'animaldb', backupStream).then(() => {
33
+ assert.fail('Should throw an "EACCES" error');
34
+ }).catch((resultErr) => {
35
+ // cleanup temp dir
36
+ fs.rmdirSync(dirname);
37
+ // error should have been set
38
+ assert.ok(resultErr);
39
+ assert.strictEqual(resultErr.code, 'EACCES');
40
+ });
41
+ });
42
+ });
@@ -1,4 +1,4 @@
1
- // Copyright © 2017, 2023 IBM Corp. All rights reserved.
1
+ // Copyright © 2018, 2023 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,172 +12,64 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
 
15
- /* global describe it beforeEach */
15
+ /* global describe it */
16
16
  'use strict';
17
17
 
18
- const assert = require('assert');
19
- const backup = require('../includes/shallowbackup.js');
20
- const request = require('../includes/request.js');
21
18
  const fs = require('fs');
22
- const nock = require('nock');
19
+ const { once } = require('node:events');
20
+ const readline = require('readline');
21
+ const u = require('./citestutils.js');
22
+ const uuid = require('uuid').v4;
23
23
 
24
- // Function to create a DB object and call the shallow backup function
25
- // This is normally done by app.js
26
- function shallowBackup(dbUrl, opts) {
27
- const db = request.client(dbUrl, opts);
28
- // Disable compression to make body assertions easier
29
- db.service.setEnableGzipCompression(false);
30
- return backup(db, opts);
31
- }
24
+ const params = { useApi: true };
32
25
 
33
- // Note all these tests include a body parameter of include_docs and a query
34
- // string of include_docs because of a quirk of nano that when using the fetch
35
- // method always adds the include_docs query string.
36
- describe('#unit Perform backup using shallow backup', function() {
37
- const dbUrl = 'http://localhost:5984/animaldb';
38
- // Query string keys are stringified by Nano
39
- const badgerKey = 'badger\0';
40
- const kookaburraKey = 'kookaburra\0';
41
- const snipeKey = 'snipe\0';
26
+ describe(u.scenario('Concurrent database backups', params), function() {
27
+ it('should run concurrent API database backups correctly #slower', async function() {
28
+ // Allow up to 900 s to backup and compare (it should be much faster)!
29
+ u.setTimeout(this, 900);
42
30
 
43
- beforeEach('Reset nocks', function() {
44
- nock.cleanAll();
45
- });
31
+ const checkForEmptyBatches = async function(fileName) {
32
+ let foundEmptyBatch = false;
46
33
 
47
- it('should perform a shallow backup', async function() {
48
- const couch = nock(dbUrl)
49
- // batch 1
50
- .post('/_all_docs', { limit: 3, include_docs: true })
51
- .reply(200, JSON.parse(fs.readFileSync('./test/fixtures/animaldb_all_docs_1.json', 'utf8')))
52
- // batch 2
53
- .post('/_all_docs', { limit: 3, start_key: badgerKey, include_docs: true })
54
- .reply(200, JSON.parse(fs.readFileSync('./test/fixtures/animaldb_all_docs_2.json', 'utf8')))
55
- // batch 3
56
- .post('/_all_docs', { limit: 3, start_key: kookaburraKey, include_docs: true })
57
- .reply(200, JSON.parse(fs.readFileSync('./test/fixtures/animaldb_all_docs_3.json', 'utf8')))
58
- // batch 4
59
- .post('/_all_docs', { limit: 3, start_key: snipeKey, include_docs: true })
60
- .reply(200, JSON.parse(fs.readFileSync('./test/fixtures/animaldb_all_docs_4.json', 'utf8')));
34
+ const rd = readline.createInterface({
35
+ input: fs.createReadStream(fileName),
36
+ output: fs.createWriteStream('/dev/null'),
37
+ terminal: false
38
+ });
61
39
 
62
- return new Promise((resolve, reject) => {
63
- shallowBackup(dbUrl, { bufferSize: 3, parallelism: 1 })
64
- .on('error', function(err) {
65
- reject(err);
66
- })
67
- .on('received', function(data) {
68
- try {
69
- if (data.batch === 3) {
70
- assert.strictEqual(data.length, 2); // smaller last batch
71
- } else {
72
- assert.strictEqual(data.length, 3);
73
- }
74
- } catch (err) {
75
- reject(err);
76
- }
77
- })
78
- .on('finished', function(data) {
79
- try {
80
- assert.strictEqual(data.total, 11);
81
- assert.ok(couch.isDone());
82
- resolve();
83
- } catch (err) {
84
- reject(err);
85
- }
86
- });
87
- });
88
- });
40
+ rd.on('line', function(line) {
41
+ if (JSON.parse(line).length === 0) {
42
+ // Note: Empty batch arrays indicate that the running backup is
43
+ // incorrectly sharing a log file with another ongoing backup job.
44
+ foundEmptyBatch = true;
45
+ }
46
+ });
89
47
 
90
- it('should perform a shallow backup with transient error', async function() {
91
- const couch = nock(dbUrl)
92
- // batch 1
93
- .post('/_all_docs', { limit: 3, include_docs: true })
94
- .reply(200, JSON.parse(fs.readFileSync('./test/fixtures/animaldb_all_docs_1.json', 'utf8')))
95
- // batch 2
96
- .post('/_all_docs', { limit: 3, start_key: badgerKey, include_docs: true })
97
- .reply(200, JSON.parse(fs.readFileSync('./test/fixtures/animaldb_all_docs_2.json', 'utf8')))
98
- // batch 3 - transient error
99
- .post('/_all_docs', { limit: 3, start_key: kookaburraKey, include_docs: true })
100
- .reply(500, { error: 'Internal Server Error' })
101
- // batch 3 - retry
102
- .post('/_all_docs', { limit: 3, start_key: kookaburraKey, include_docs: true })
103
- .reply(200, JSON.parse(fs.readFileSync('./test/fixtures/animaldb_all_docs_3.json', 'utf8')))
104
- // batch 4
105
- .post('/_all_docs', { limit: 3, start_key: snipeKey, include_docs: true })
106
- .reply(200, JSON.parse(fs.readFileSync('./test/fixtures/animaldb_all_docs_4.json', 'utf8')));
48
+ rd.on('close', function() {
49
+ if (foundEmptyBatch) {
50
+ return Promise.reject(new Error(`Log file '${fileName}' contains empty batches`));
51
+ } else {
52
+ return Promise.resolve();
53
+ }
54
+ });
55
+ };
107
56
 
108
- return new Promise((resolve, reject) => {
109
- shallowBackup(dbUrl, { bufferSize: 3, parallelism: 1 })
110
- .on('error', function(err) {
111
- try {
112
- assert.strictEqual(err.name, 'HTTPError');
113
- } catch (err) {
114
- reject(err);
115
- }
116
- })
117
- .on('received', function(data) {
118
- try {
119
- if (data.batch === 3) {
120
- assert.strictEqual(data.length, 2); // smaller last batch
121
- } else {
122
- assert.strictEqual(data.length, 3);
123
- }
124
- } catch (err) {
125
- reject(err);
126
- }
127
- })
128
- .on('finished', function(data) {
129
- try {
130
- assert.strictEqual(data.total, 11);
131
- assert.ok(couch.isDone());
132
- resolve();
133
- } catch (err) {
134
- reject(err);
135
- }
136
- });
137
- });
138
- });
57
+ const backupPromise = async function() {
58
+ const actualBackup = `./${uuid()}`;
59
+ const output = fs.createWriteStream(actualBackup);
60
+ return once(output, 'open').then(() => {
61
+ return u.testBackup(params, 'largedb1g', output);
62
+ }).then(() => {
63
+ return checkForEmptyBatches(actualBackup);
64
+ });
65
+ };
139
66
 
140
- it('should fail to perform a shallow backup on fatal error', async function() {
141
- const couch = nock(dbUrl)
142
- // batch 1
143
- .post('/_all_docs', { limit: 3, include_docs: true })
144
- .reply(200, JSON.parse(fs.readFileSync('./test/fixtures/animaldb_all_docs_1.json', 'utf8')))
145
- // batch 2
146
- .post('/_all_docs', { limit: 3, start_key: badgerKey, include_docs: true })
147
- .reply(200, JSON.parse(fs.readFileSync('./test/fixtures/animaldb_all_docs_2.json', 'utf8')))
148
- // batch 3 - fatal error
149
- .post('/_all_docs', { limit: 3, start_key: kookaburraKey, include_docs: true })
150
- .reply(401, { error: 'Unauthorized' });
67
+ // [1] Run 'largedb1g' database backup
68
+ const backup1 = backupPromise();
151
69
 
152
- let errCount = 0;
70
+ // [2] Run 'largedb1g' database backup
71
+ const backup2 = backupPromise();
153
72
 
154
- return new Promise((resolve, reject) => {
155
- shallowBackup(dbUrl, { bufferSize: 3, parallelism: 1 })
156
- .on('error', function(err) {
157
- try {
158
- errCount++;
159
- assert.strictEqual(err.name, 'Unauthorized');
160
- } catch (err) {
161
- reject(err);
162
- }
163
- })
164
- .on('received', function(data) {
165
- try {
166
- assert.strictEqual(data.length, 3);
167
- } catch (err) {
168
- reject(err);
169
- }
170
- })
171
- .on('finished', function(data) {
172
- try {
173
- assert.strictEqual(data.total, 6);
174
- assert.ok(couch.isDone());
175
- assert.strictEqual(errCount, 1);
176
- resolve();
177
- } catch (err) {
178
- reject(err);
179
- }
180
- });
181
- });
73
+ return Promise.all([backup1, backup2]);
182
74
  });
183
75
  });
@@ -12,90 +12,54 @@
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 assert = require('assert');
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;
19
29
  const fs = require('fs');
20
- const { once } = require('node:events');
21
- const u = require('./citestutils.js');
22
30
 
23
- [{ useApi: true }, { useApi: false }].forEach(function(params) {
24
- describe(u.scenario('Resume tests', params), function() {
25
- it('should create a log file', async function() {
26
- // Allow up to 90 s for this test
27
- u.setTimeout(this, 60);
31
+ // Mocha hooks that will be at the root context so run for all tests
28
32
 
29
- const actualBackup = `./${this.fileName}`;
30
- const logFile = `./${this.fileName}` + '.log';
31
- const p = u.p(params, { opts: { log: logFile } });
32
- return u.testBackupToFile(p, 'animaldb', actualBackup).then(() => {
33
- assert.ok(fs.existsSync(logFile), 'The log file should exist.');
34
- });
35
- });
33
+ beforeEach('Create test database', async function() {
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;
36
41
 
37
- it('should restore corrupted animaldb to a database correctly', async function() {
38
- // Allow up to 60 s to restore and compare (again it should be faster)!
39
- u.setTimeout(this, 60);
40
- const input = fs.createReadStream('./test/fixtures/animaldb_corrupted.json');
41
- const dbName = this.dbName;
42
- const p = u.p(params, { expectedRestoreErrorRecoverable: { name: 'BackupFileJsonError' } });
43
- return once(input, 'open')
44
- .then(() => {
45
- return u.testRestore(p, input, dbName);
46
- }).then(() => {
47
- return u.dbCompare('animaldb', dbName);
48
- });
49
- });
50
-
51
- it('should restore resumed animaldb with blank line to a database correctly', async function() {
52
- // Allow up to 60 s to restore and compare (again it should be faster)!
53
- u.setTimeout(this, 60);
54
- const input = fs.createReadStream('./test/fixtures/animaldb_resumed_blank.json');
55
- const dbName = this.dbName;
56
- return once(input, 'open')
57
- .then(() => {
58
- return u.testRestore(params, input, dbName);
59
- }).then(() => {
60
- return u.dbCompare('animaldb', dbName);
61
- });
62
- });
63
- });
42
+ return cloudant.putDatabase({ db: this.dbName });
43
+ }
64
44
  });
65
45
 
66
- describe('Resume tests', function() {
67
- // Currently cannot abort API backups, when we do this test should be run for
68
- // both API and CLI
69
- it('should correctly backup and restore backup10m', async function() {
70
- // Allow up to 90 s for this test
71
- u.setTimeout(this, 90);
72
-
73
- const actualBackup = `./${this.fileName}`;
74
- const logFile = `./${this.fileName}` + '.log';
75
- // Use abort parameter to terminate the backup
76
- const p = u.p(params, { abort: true }, { opts: { log: logFile } });
77
- const restoreDb = this.dbName;
78
- // Set the database doc count as fewer than this should be written during
79
- // resumed backup.
80
- p.exclusiveMaxExpected = 5096;
81
-
82
- return u.testBackupAbortResumeRestore(p, 'backup10m', actualBackup, restoreDb);
83
- });
84
- // Note --output is only valid for CLI usage, this test should only run for CLI
85
- const params = { useApi: false };
86
- it('should correctly backup and restore backup10m using --output', async function() {
87
- // Allow up to 90 s for this test
88
- u.setTimeout(this, 90);
89
-
90
- const actualBackup = `./${this.fileName}`;
91
- const logFile = `./${this.fileName}` + '.log';
92
- // Use abort parameter to terminate the backup
93
- const p = u.p(params, { abort: true }, { opts: { output: actualBackup, log: logFile } });
94
- const restoreDb = this.dbName;
95
- // Set the database doc count as fewer than this should be written during
96
- // resumed backup.
97
- p.exclusiveMaxExpected = 5096;
46
+ afterEach('Delete test database', async function() {
47
+ // Don't run hook for unit tests, just for CI
48
+ if (!this.currentTest.fullTitle().includes('#unit')) {
49
+ // Allow 10 seconds to delete the DB
50
+ this.timeout(10 * 1000);
51
+ deleteIfExists(this.fileName);
52
+ deleteIfExists(`${this.fileName}.log`);
53
+ return cloudant.deleteDatabase({ db: this.dbName });
54
+ }
55
+ });
98
56
 
99
- return await u.testBackupAbortResumeRestore(p, 'backup10m', actualBackup, restoreDb);
57
+ function deleteIfExists(fileName) {
58
+ fs.unlink(fileName, function(err) {
59
+ if (err) {
60
+ if (err.code !== 'ENOENT') {
61
+ console.error(`${err.code} ${err.message}`);
62
+ }
63
+ }
100
64
  });
101
- });
65
+ }