@cloudant/couchbackup 2.9.16 → 2.9.17-SNAPSHOT.185

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (392) hide show
  1. package/.scannerwork/report-task.txt +2 -2
  2. package/.scannerwork/scanner-report/analysis-cache2.pb +0 -0
  3. package/.scannerwork/scanner-report/analysis-warnings.pb +2 -2
  4. package/.scannerwork/scanner-report/changesets-23.pb +1 -0
  5. package/.scannerwork/scanner-report/changesets-24.pb +1 -0
  6. package/.scannerwork/scanner-report/changesets-26.pb +1 -0
  7. package/.scannerwork/scanner-report/changesets-27.pb +1 -0
  8. package/.scannerwork/scanner-report/changesets-28.pb +1 -0
  9. package/.scannerwork/scanner-report/changesets-29.pb +1 -0
  10. package/.scannerwork/scanner-report/changesets-53.pb +1 -0
  11. package/.scannerwork/scanner-report/changesets-55.pb +1 -0
  12. package/.scannerwork/scanner-report/changesets-56.pb +1 -0
  13. package/.scannerwork/scanner-report/changesets-57.pb +1 -0
  14. package/.scannerwork/scanner-report/changesets-58.pb +1 -0
  15. package/.scannerwork/scanner-report/changesets-59.pb +1 -0
  16. package/.scannerwork/scanner-report/changesets-62.pb +1 -0
  17. package/.scannerwork/scanner-report/changesets-63.pb +1 -0
  18. package/.scannerwork/scanner-report/changesets-67.pb +1 -0
  19. package/.scannerwork/scanner-report/changesets-69.pb +1 -0
  20. package/.scannerwork/scanner-report/component-1.pb +1 -2
  21. package/.scannerwork/scanner-report/component-11.pb +1 -1
  22. package/.scannerwork/scanner-report/component-12.pb +1 -1
  23. package/.scannerwork/scanner-report/component-13.pb +1 -1
  24. package/.scannerwork/scanner-report/component-14.pb +1 -1
  25. package/.scannerwork/scanner-report/component-15.pb +1 -1
  26. package/.scannerwork/scanner-report/component-16.pb +1 -1
  27. package/.scannerwork/scanner-report/component-17.pb +1 -1
  28. package/.scannerwork/scanner-report/component-18.pb +1 -1
  29. package/.scannerwork/scanner-report/component-19.pb +1 -1
  30. package/.scannerwork/scanner-report/component-20.pb +1 -1
  31. package/.scannerwork/scanner-report/component-21.pb +1 -1
  32. package/.scannerwork/scanner-report/component-22.pb +1 -1
  33. package/.scannerwork/scanner-report/component-23.pb +1 -0
  34. package/.scannerwork/scanner-report/component-24.pb +1 -0
  35. package/.scannerwork/scanner-report/component-25.pb +1 -0
  36. package/.scannerwork/scanner-report/component-26.pb +1 -0
  37. package/.scannerwork/scanner-report/component-27.pb +1 -0
  38. package/.scannerwork/scanner-report/component-28.pb +1 -0
  39. package/.scannerwork/scanner-report/component-29.pb +1 -0
  40. package/.scannerwork/scanner-report/component-3.pb +1 -1
  41. package/.scannerwork/scanner-report/component-41.pb +1 -1
  42. package/.scannerwork/scanner-report/component-42.pb +1 -1
  43. package/.scannerwork/scanner-report/component-43.pb +1 -1
  44. package/.scannerwork/scanner-report/component-44.pb +1 -1
  45. package/.scannerwork/scanner-report/component-45.pb +1 -1
  46. package/.scannerwork/scanner-report/component-46.pb +1 -1
  47. package/.scannerwork/scanner-report/component-47.pb +1 -1
  48. package/.scannerwork/scanner-report/component-48.pb +1 -1
  49. package/.scannerwork/scanner-report/component-49.pb +1 -1
  50. package/.scannerwork/scanner-report/component-50.pb +1 -1
  51. package/.scannerwork/scanner-report/component-51.pb +1 -1
  52. package/.scannerwork/scanner-report/component-52.pb +1 -1
  53. package/.scannerwork/scanner-report/component-53.pb +1 -0
  54. package/.scannerwork/scanner-report/component-54.pb +1 -1
  55. package/.scannerwork/scanner-report/component-55.pb +1 -1
  56. package/.scannerwork/scanner-report/component-56.pb +1 -0
  57. package/.scannerwork/scanner-report/component-57.pb +1 -0
  58. package/.scannerwork/scanner-report/component-58.pb +1 -0
  59. package/.scannerwork/scanner-report/component-59.pb +1 -0
  60. package/.scannerwork/scanner-report/component-60.pb +1 -1
  61. package/.scannerwork/scanner-report/component-62.pb +1 -0
  62. package/.scannerwork/scanner-report/component-63.pb +1 -0
  63. package/.scannerwork/scanner-report/component-67.pb +1 -0
  64. package/.scannerwork/scanner-report/component-69.pb +1 -0
  65. package/.scannerwork/scanner-report/component-70.pb +1 -0
  66. package/.scannerwork/scanner-report/component-9.pb +1 -1
  67. package/.scannerwork/scanner-report/coverages-11.pb +0 -0
  68. package/.scannerwork/scanner-report/coverages-12.pb +0 -0
  69. package/.scannerwork/scanner-report/coverages-13.pb +0 -0
  70. package/.scannerwork/scanner-report/coverages-14.pb +0 -0
  71. package/.scannerwork/scanner-report/coverages-15.pb +0 -0
  72. package/.scannerwork/scanner-report/coverages-16.pb +0 -0
  73. package/.scannerwork/scanner-report/coverages-17.pb +0 -0
  74. package/.scannerwork/scanner-report/coverages-18.pb +0 -0
  75. package/.scannerwork/scanner-report/coverages-19.pb +0 -0
  76. package/.scannerwork/scanner-report/coverages-20.pb +0 -0
  77. package/.scannerwork/scanner-report/coverages-21.pb +0 -0
  78. package/.scannerwork/scanner-report/coverages-22.pb +0 -0
  79. package/.scannerwork/scanner-report/coverages-24.pb +0 -0
  80. package/.scannerwork/scanner-report/coverages-27.pb +0 -0
  81. package/.scannerwork/scanner-report/coverages-28.pb +0 -0
  82. package/.scannerwork/scanner-report/coverages-41.pb +0 -0
  83. package/.scannerwork/scanner-report/coverages-42.pb +0 -0
  84. package/.scannerwork/scanner-report/coverages-43.pb +0 -0
  85. package/.scannerwork/scanner-report/coverages-44.pb +0 -0
  86. package/.scannerwork/scanner-report/coverages-45.pb +0 -0
  87. package/.scannerwork/scanner-report/coverages-46.pb +0 -0
  88. package/.scannerwork/scanner-report/coverages-47.pb +0 -0
  89. package/.scannerwork/scanner-report/coverages-48.pb +0 -0
  90. package/.scannerwork/scanner-report/coverages-49.pb +0 -0
  91. package/.scannerwork/scanner-report/coverages-50.pb +0 -0
  92. package/.scannerwork/scanner-report/coverages-51.pb +0 -0
  93. package/.scannerwork/scanner-report/coverages-52.pb +0 -0
  94. package/.scannerwork/scanner-report/coverages-54.pb +0 -0
  95. package/.scannerwork/scanner-report/coverages-56.pb +0 -0
  96. package/.scannerwork/scanner-report/coverages-58.pb +0 -0
  97. package/.scannerwork/scanner-report/coverages-59.pb +0 -0
  98. package/.scannerwork/scanner-report/coverages-60.pb +0 -0
  99. package/.scannerwork/scanner-report/coverages-62.pb +0 -0
  100. package/.scannerwork/scanner-report/coverages-69.pb +0 -0
  101. package/.scannerwork/scanner-report/duplications-12.pb +0 -3
  102. package/.scannerwork/scanner-report/duplications-15.pb +2 -0
  103. package/.scannerwork/scanner-report/duplications-24.pb +2 -0
  104. package/.scannerwork/scanner-report/duplications-43.pb +2 -0
  105. package/.scannerwork/scanner-report/duplications-50.pb +0 -2
  106. package/.scannerwork/scanner-report/duplications-51.pb +3 -2
  107. package/.scannerwork/scanner-report/duplications-66.pb +1 -1
  108. package/.scannerwork/scanner-report/measures-11.pb +0 -0
  109. package/.scannerwork/scanner-report/measures-12.pb +0 -0
  110. package/.scannerwork/scanner-report/measures-13.pb +0 -0
  111. package/.scannerwork/scanner-report/measures-14.pb +0 -0
  112. package/.scannerwork/scanner-report/measures-15.pb +0 -0
  113. package/.scannerwork/scanner-report/measures-16.pb +0 -0
  114. package/.scannerwork/scanner-report/measures-17.pb +0 -0
  115. package/.scannerwork/scanner-report/measures-18.pb +0 -0
  116. package/.scannerwork/scanner-report/measures-19.pb +0 -0
  117. package/.scannerwork/scanner-report/measures-20.pb +0 -0
  118. package/.scannerwork/scanner-report/measures-21.pb +0 -0
  119. package/.scannerwork/scanner-report/measures-22.pb +0 -0
  120. package/.scannerwork/scanner-report/measures-24.pb +0 -0
  121. package/.scannerwork/scanner-report/measures-27.pb +0 -0
  122. package/.scannerwork/scanner-report/measures-28.pb +0 -0
  123. package/.scannerwork/scanner-report/measures-41.pb +0 -0
  124. package/.scannerwork/scanner-report/measures-42.pb +0 -0
  125. package/.scannerwork/scanner-report/measures-43.pb +0 -0
  126. package/.scannerwork/scanner-report/measures-44.pb +0 -0
  127. package/.scannerwork/scanner-report/measures-45.pb +0 -0
  128. package/.scannerwork/scanner-report/measures-46.pb +0 -0
  129. package/.scannerwork/scanner-report/measures-47.pb +0 -0
  130. package/.scannerwork/scanner-report/measures-48.pb +0 -0
  131. package/.scannerwork/scanner-report/measures-49.pb +0 -0
  132. package/.scannerwork/scanner-report/measures-50.pb +0 -0
  133. package/.scannerwork/scanner-report/measures-51.pb +0 -0
  134. package/.scannerwork/scanner-report/measures-52.pb +0 -0
  135. package/.scannerwork/scanner-report/measures-54.pb +0 -0
  136. package/.scannerwork/scanner-report/measures-55.pb +0 -0
  137. package/.scannerwork/scanner-report/measures-56.pb +0 -0
  138. package/.scannerwork/scanner-report/measures-58.pb +0 -0
  139. package/.scannerwork/scanner-report/measures-59.pb +0 -0
  140. package/.scannerwork/scanner-report/measures-60.pb +0 -0
  141. package/.scannerwork/scanner-report/measures-62.pb +0 -0
  142. package/.scannerwork/scanner-report/measures-69.pb +0 -0
  143. package/.scannerwork/scanner-report/measures-9.pb +0 -0
  144. package/.scannerwork/scanner-report/metadata.pb +0 -0
  145. package/.scannerwork/scanner-report/source-11.txt +25 -16
  146. package/.scannerwork/scanner-report/source-12.txt +32 -199
  147. package/.scannerwork/scanner-report/source-13.txt +17 -87
  148. package/.scannerwork/scanner-report/source-14.txt +115 -116
  149. package/.scannerwork/scanner-report/source-15.txt +66 -423
  150. package/.scannerwork/scanner-report/source-16.txt +64 -277
  151. package/.scannerwork/scanner-report/source-17.txt +247 -66
  152. package/.scannerwork/scanner-report/source-18.txt +104 -92
  153. package/.scannerwork/scanner-report/source-19.txt +45 -120
  154. package/.scannerwork/scanner-report/source-20.txt +89 -41
  155. package/.scannerwork/scanner-report/source-21.txt +148 -24
  156. package/.scannerwork/scanner-report/source-22.txt +162 -25
  157. package/.scannerwork/scanner-report/source-24.txt +75 -0
  158. package/.scannerwork/scanner-report/{source-38.txt → source-25.txt} +143 -143
  159. package/.scannerwork/scanner-report/source-27.txt +65 -0
  160. package/.scannerwork/scanner-report/source-28.txt +100 -0
  161. package/.scannerwork/scanner-report/source-3.txt +152 -152
  162. package/.scannerwork/scanner-report/source-41.txt +315 -32
  163. package/.scannerwork/scanner-report/source-42.txt +23 -63
  164. package/.scannerwork/scanner-report/source-43.txt +169 -45
  165. package/.scannerwork/scanner-report/source-44.txt +23 -164
  166. package/.scannerwork/scanner-report/source-45.txt +116 -104
  167. package/.scannerwork/scanner-report/source-46.txt +14 -26
  168. package/.scannerwork/scanner-report/source-47.txt +48 -99
  169. package/.scannerwork/scanner-report/source-48.txt +52 -141
  170. package/.scannerwork/scanner-report/source-49.txt +254 -242
  171. package/.scannerwork/scanner-report/source-50.txt +114 -72
  172. package/.scannerwork/scanner-report/source-51.txt +198 -60
  173. package/.scannerwork/scanner-report/source-52.txt +134 -14
  174. package/.scannerwork/scanner-report/source-54.txt +80 -25
  175. package/.scannerwork/scanner-report/source-55.txt +187 -424
  176. package/.scannerwork/scanner-report/{source-5.txt → source-56.txt} +10 -7
  177. package/.scannerwork/scanner-report/source-58.txt +106 -0
  178. package/.scannerwork/scanner-report/source-59.txt +449 -0
  179. package/.scannerwork/scanner-report/source-60.txt +25 -44
  180. package/.scannerwork/scanner-report/source-62.txt +60 -0
  181. package/.scannerwork/scanner-report/source-69.txt +46 -0
  182. package/.scannerwork/scanner-report/{source-68.txt → source-70.txt} +49 -49
  183. package/.scannerwork/scanner-report/source-9.txt +424 -183
  184. package/.scannerwork/scanner-report/symbols-11.pb +18 -9
  185. package/.scannerwork/scanner-report/symbols-12.pb +20 -264
  186. package/.scannerwork/scanner-report/symbols-13.pb +13 -57
  187. package/.scannerwork/scanner-report/symbols-14.pb +33 -86
  188. package/.scannerwork/scanner-report/symbols-15.pb +43 -789
  189. package/.scannerwork/scanner-report/symbols-16.pb +44 -426
  190. package/.scannerwork/scanner-report/symbols-17.pb +354 -69
  191. package/.scannerwork/scanner-report/symbols-18.pb +30 -59
  192. package/.scannerwork/scanner-report/symbols-19.pb +19 -71
  193. package/.scannerwork/scanner-report/symbols-20.pb +45 -32
  194. package/.scannerwork/scanner-report/symbols-21.pb +126 -23
  195. package/.scannerwork/scanner-report/symbols-22.pb +143 -30
  196. package/.scannerwork/scanner-report/symbols-24.pb +42 -0
  197. package/.scannerwork/scanner-report/symbols-27.pb +33 -0
  198. package/.scannerwork/scanner-report/symbols-28.pb +69 -0
  199. package/.scannerwork/scanner-report/symbols-41.pb +353 -20
  200. package/.scannerwork/scanner-report/symbols-42.pb +23 -46
  201. package/.scannerwork/scanner-report/symbols-43.pb +203 -19
  202. package/.scannerwork/scanner-report/symbols-44.pb +9 -144
  203. package/.scannerwork/scanner-report/symbols-45.pb +86 -30
  204. package/.scannerwork/scanner-report/symbols-46.pb +8 -18
  205. package/.scannerwork/scanner-report/symbols-47.pb +23 -45
  206. package/.scannerwork/scanner-report/symbols-48.pb +39 -126
  207. package/.scannerwork/scanner-report/symbols-49.pb +402 -328
  208. package/.scannerwork/scanner-report/symbols-50.pb +71 -44
  209. package/.scannerwork/scanner-report/symbols-51.pb +264 -42
  210. package/.scannerwork/scanner-report/symbols-52.pb +92 -13
  211. package/.scannerwork/scanner-report/symbols-54.pb +58 -7
  212. package/.scannerwork/scanner-report/symbols-56.pb +9 -0
  213. package/.scannerwork/scanner-report/symbols-58.pb +59 -0
  214. package/.scannerwork/scanner-report/symbols-59.pb +790 -0
  215. package/.scannerwork/scanner-report/symbols-60.pb +31 -21
  216. package/.scannerwork/scanner-report/symbols-62.pb +21 -0
  217. package/.scannerwork/scanner-report/symbols-69.pb +7 -0
  218. package/.scannerwork/scanner-report/syntax-highlightings-11.pb +23 -25
  219. package/.scannerwork/scanner-report/syntax-highlightings-12.pb +33 -266
  220. package/.scannerwork/scanner-report/syntax-highlightings-13.pb +15 -124
  221. package/.scannerwork/scanner-report/syntax-highlightings-14.pb +94 -90
  222. package/.scannerwork/scanner-report/syntax-highlightings-15.pb +57 -591
  223. package/.scannerwork/scanner-report/syntax-highlightings-16.pb +62 -687
  224. package/.scannerwork/scanner-report/syntax-highlightings-17.pb +245 -67
  225. package/.scannerwork/scanner-report/syntax-highlightings-18.pb +83 -148
  226. package/.scannerwork/scanner-report/syntax-highlightings-19.pb +23 -145
  227. package/.scannerwork/scanner-report/syntax-highlightings-20.pb +93 -77
  228. package/.scannerwork/scanner-report/syntax-highlightings-21.pb +177 -20
  229. package/.scannerwork/scanner-report/syntax-highlightings-22.pb +207 -33
  230. package/.scannerwork/scanner-report/syntax-highlightings-24.pb +81 -0
  231. package/.scannerwork/scanner-report/{syntax-highlightings-38.pb → syntax-highlightings-25.pb} +103 -100
  232. package/.scannerwork/scanner-report/syntax-highlightings-27.pb +110 -0
  233. package/.scannerwork/scanner-report/syntax-highlightings-28.pb +107 -0
  234. package/.scannerwork/scanner-report/syntax-highlightings-3.pb +107 -108
  235. package/.scannerwork/scanner-report/syntax-highlightings-41.pb +590 -34
  236. package/.scannerwork/scanner-report/syntax-highlightings-42.pb +22 -61
  237. package/.scannerwork/scanner-report/syntax-highlightings-43.pb +246 -25
  238. package/.scannerwork/scanner-report/syntax-highlightings-44.pb +27 -209
  239. package/.scannerwork/scanner-report/syntax-highlightings-45.pb +95 -83
  240. package/.scannerwork/scanner-report/syntax-highlightings-46.pb +20 -23
  241. package/.scannerwork/scanner-report/syntax-highlightings-47.pb +67 -96
  242. package/.scannerwork/scanner-report/syntax-highlightings-48.pb +64 -176
  243. package/.scannerwork/scanner-report/syntax-highlightings-49.pb +606 -171
  244. package/.scannerwork/scanner-report/syntax-highlightings-50.pb +145 -57
  245. package/.scannerwork/scanner-report/syntax-highlightings-51.pb +263 -47
  246. package/.scannerwork/scanner-report/syntax-highlightings-52.pb +208 -16
  247. package/.scannerwork/scanner-report/syntax-highlightings-54.pb +119 -27
  248. package/.scannerwork/scanner-report/syntax-highlightings-55.pb +289 -3261
  249. package/.scannerwork/scanner-report/syntax-highlightings-56.pb +54 -0
  250. package/.scannerwork/scanner-report/syntax-highlightings-58.pb +178 -0
  251. package/.scannerwork/scanner-report/syntax-highlightings-59.pb +627 -0
  252. package/.scannerwork/scanner-report/syntax-highlightings-60.pb +48 -61
  253. package/.scannerwork/scanner-report/syntax-highlightings-62.pb +82 -0
  254. package/.scannerwork/scanner-report/syntax-highlightings-69.pb +62 -0
  255. package/.scannerwork/scanner-report/{syntax-highlightings-68.pb → syntax-highlightings-70.pb} +14 -13
  256. package/.scannerwork/scanner-report/syntax-highlightings-9.pb +3286 -226
  257. package/package.json +1 -1
  258. package/test-18-results.xml +147 -147
  259. package/test-20-results.xml +141 -141
  260. package/test-21-results.xml +143 -143
  261. package/test-iam-20-results.xml +49 -49
  262. package/.scannerwork/scanner-report/changesets-10.pb +0 -2
  263. package/.scannerwork/scanner-report/changesets-2.pb +0 -1
  264. package/.scannerwork/scanner-report/changesets-34.pb +0 -1
  265. package/.scannerwork/scanner-report/changesets-35.pb +0 -1
  266. package/.scannerwork/scanner-report/changesets-36.pb +0 -1
  267. package/.scannerwork/scanner-report/changesets-37.pb +0 -1
  268. package/.scannerwork/scanner-report/changesets-39.pb +0 -1
  269. package/.scannerwork/scanner-report/changesets-4.pb +0 -1
  270. package/.scannerwork/scanner-report/changesets-40.pb +0 -1
  271. package/.scannerwork/scanner-report/changesets-5.pb +0 -1
  272. package/.scannerwork/scanner-report/changesets-6.pb +0 -1
  273. package/.scannerwork/scanner-report/changesets-61.pb +0 -1
  274. package/.scannerwork/scanner-report/changesets-64.pb +0 -1
  275. package/.scannerwork/scanner-report/changesets-7.pb +0 -1
  276. package/.scannerwork/scanner-report/changesets-8.pb +0 -1
  277. package/.scannerwork/scanner-report/changesets-9.pb +0 -1
  278. package/.scannerwork/scanner-report/component-10.pb +0 -2
  279. package/.scannerwork/scanner-report/component-2.pb +0 -1
  280. package/.scannerwork/scanner-report/component-34.pb +0 -1
  281. package/.scannerwork/scanner-report/component-35.pb +0 -1
  282. package/.scannerwork/scanner-report/component-36.pb +0 -1
  283. package/.scannerwork/scanner-report/component-37.pb +0 -1
  284. package/.scannerwork/scanner-report/component-38.pb +0 -1
  285. package/.scannerwork/scanner-report/component-39.pb +0 -1
  286. package/.scannerwork/scanner-report/component-4.pb +0 -1
  287. package/.scannerwork/scanner-report/component-40.pb +0 -1
  288. package/.scannerwork/scanner-report/component-5.pb +0 -1
  289. package/.scannerwork/scanner-report/component-6.pb +0 -1
  290. package/.scannerwork/scanner-report/component-61.pb +0 -1
  291. package/.scannerwork/scanner-report/component-64.pb +0 -1
  292. package/.scannerwork/scanner-report/component-68.pb +0 -1
  293. package/.scannerwork/scanner-report/component-7.pb +0 -1
  294. package/.scannerwork/scanner-report/component-8.pb +0 -1
  295. package/.scannerwork/scanner-report/coverages-10.pb +0 -0
  296. package/.scannerwork/scanner-report/coverages-36.pb +0 -0
  297. package/.scannerwork/scanner-report/coverages-37.pb +0 -0
  298. package/.scannerwork/scanner-report/coverages-39.pb +0 -0
  299. package/.scannerwork/scanner-report/coverages-5.pb +0 -0
  300. package/.scannerwork/scanner-report/coverages-6.pb +0 -0
  301. package/.scannerwork/scanner-report/coverages-8.pb +0 -0
  302. package/.scannerwork/scanner-report/coverages-9.pb +0 -0
  303. package/.scannerwork/scanner-report/duplications-9.pb +0 -2
  304. package/.scannerwork/scanner-report/measures-10.pb +0 -0
  305. package/.scannerwork/scanner-report/measures-36.pb +0 -15
  306. package/.scannerwork/scanner-report/measures-37.pb +0 -0
  307. package/.scannerwork/scanner-report/measures-39.pb +0 -0
  308. package/.scannerwork/scanner-report/measures-4.pb +0 -0
  309. package/.scannerwork/scanner-report/measures-5.pb +0 -0
  310. package/.scannerwork/scanner-report/measures-6.pb +0 -0
  311. package/.scannerwork/scanner-report/measures-8.pb +0 -0
  312. package/.scannerwork/scanner-report/source-10.txt +0 -37
  313. package/.scannerwork/scanner-report/source-36.txt +0 -151
  314. package/.scannerwork/scanner-report/source-37.txt +0 -75
  315. package/.scannerwork/scanner-report/source-39.txt +0 -129
  316. package/.scannerwork/scanner-report/source-4.txt +0 -187
  317. package/.scannerwork/scanner-report/source-6.txt +0 -329
  318. package/.scannerwork/scanner-report/source-8.txt +0 -62
  319. package/.scannerwork/scanner-report/symbols-10.pb +0 -9
  320. package/.scannerwork/scanner-report/symbols-36.pb +0 -93
  321. package/.scannerwork/scanner-report/symbols-37.pb +0 -39
  322. package/.scannerwork/scanner-report/symbols-39.pb +0 -33
  323. package/.scannerwork/scanner-report/symbols-5.pb +0 -8
  324. package/.scannerwork/scanner-report/symbols-6.pb +0 -353
  325. package/.scannerwork/scanner-report/symbols-8.pb +0 -24
  326. package/.scannerwork/scanner-report/symbols-9.pb +0 -203
  327. package/.scannerwork/scanner-report/syntax-highlightings-10.pb +0 -61
  328. package/.scannerwork/scanner-report/syntax-highlightings-36.pb +0 -237
  329. package/.scannerwork/scanner-report/syntax-highlightings-37.pb +0 -101
  330. package/.scannerwork/scanner-report/syntax-highlightings-39.pb +0 -129
  331. package/.scannerwork/scanner-report/syntax-highlightings-4.pb +0 -368
  332. package/.scannerwork/scanner-report/syntax-highlightings-5.pb +0 -49
  333. package/.scannerwork/scanner-report/syntax-highlightings-6.pb +0 -620
  334. package/.scannerwork/scanner-report/syntax-highlightings-8.pb +0 -97
  335. /package/.scannerwork/scanner-report/{coverages-40.pb → coverages-23.pb} +0 -0
  336. /package/.scannerwork/scanner-report/{coverages-2.pb → coverages-26.pb} +0 -0
  337. /package/.scannerwork/scanner-report/{coverages-34.pb → coverages-29.pb} +0 -0
  338. /package/.scannerwork/scanner-report/{coverages-7.pb → coverages-53.pb} +0 -0
  339. /package/.scannerwork/scanner-report/{coverages-4.pb → coverages-55.pb} +0 -0
  340. /package/.scannerwork/scanner-report/{coverages-35.pb → coverages-57.pb} +0 -0
  341. /package/.scannerwork/scanner-report/{coverages-61.pb → coverages-63.pb} +0 -0
  342. /package/.scannerwork/scanner-report/{coverages-64.pb → coverages-67.pb} +0 -0
  343. /package/.scannerwork/scanner-report/{duplications-10.pb → duplications-23.pb} +0 -0
  344. /package/.scannerwork/scanner-report/{duplications-2.pb → duplications-26.pb} +0 -0
  345. /package/.scannerwork/scanner-report/{duplications-34.pb → duplications-27.pb} +0 -0
  346. /package/.scannerwork/scanner-report/{duplications-35.pb → duplications-28.pb} +0 -0
  347. /package/.scannerwork/scanner-report/{duplications-36.pb → duplications-29.pb} +0 -0
  348. /package/.scannerwork/scanner-report/{duplications-37.pb → duplications-53.pb} +0 -0
  349. /package/.scannerwork/scanner-report/{duplications-4.pb → duplications-55.pb} +0 -0
  350. /package/.scannerwork/scanner-report/{duplications-39.pb → duplications-56.pb} +0 -0
  351. /package/.scannerwork/scanner-report/{duplications-40.pb → duplications-57.pb} +0 -0
  352. /package/.scannerwork/scanner-report/{duplications-46.pb → duplications-58.pb} +0 -0
  353. /package/.scannerwork/scanner-report/{duplications-6.pb → duplications-59.pb} +0 -0
  354. /package/.scannerwork/scanner-report/{duplications-61.pb → duplications-62.pb} +0 -0
  355. /package/.scannerwork/scanner-report/{duplications-7.pb → duplications-63.pb} +0 -0
  356. /package/.scannerwork/scanner-report/{duplications-64.pb → duplications-67.pb} +0 -0
  357. /package/.scannerwork/scanner-report/{duplications-8.pb → duplications-69.pb} +0 -0
  358. /package/.scannerwork/scanner-report/{issues-6.pb → issues-41.pb} +0 -0
  359. /package/.scannerwork/scanner-report/{issues-14.pb → issues-45.pb} +0 -0
  360. /package/.scannerwork/scanner-report/{issues-12.pb → issues-51.pb} +0 -0
  361. /package/.scannerwork/scanner-report/{issues-35.pb → issues-57.pb} +0 -0
  362. /package/.scannerwork/scanner-report/{measures-40.pb → measures-23.pb} +0 -0
  363. /package/.scannerwork/scanner-report/{measures-38.pb → measures-25.pb} +0 -0
  364. /package/.scannerwork/scanner-report/{measures-2.pb → measures-26.pb} +0 -0
  365. /package/.scannerwork/scanner-report/{measures-34.pb → measures-29.pb} +0 -0
  366. /package/.scannerwork/scanner-report/{measures-7.pb → measures-53.pb} +0 -0
  367. /package/.scannerwork/scanner-report/{measures-35.pb → measures-57.pb} +0 -0
  368. /package/.scannerwork/scanner-report/{measures-61.pb → measures-63.pb} +0 -0
  369. /package/.scannerwork/scanner-report/{measures-64.pb → measures-67.pb} +0 -0
  370. /package/.scannerwork/scanner-report/{measures-68.pb → measures-70.pb} +0 -0
  371. /package/.scannerwork/scanner-report/{source-40.txt → source-23.txt} +0 -0
  372. /package/.scannerwork/scanner-report/{source-2.txt → source-26.txt} +0 -0
  373. /package/.scannerwork/scanner-report/{source-34.txt → source-29.txt} +0 -0
  374. /package/.scannerwork/scanner-report/{source-7.txt → source-53.txt} +0 -0
  375. /package/.scannerwork/scanner-report/{source-35.txt → source-57.txt} +0 -0
  376. /package/.scannerwork/scanner-report/{source-61.txt → source-63.txt} +0 -0
  377. /package/.scannerwork/scanner-report/{source-64.txt → source-67.txt} +0 -0
  378. /package/.scannerwork/scanner-report/{symbols-40.pb → symbols-23.pb} +0 -0
  379. /package/.scannerwork/scanner-report/{symbols-2.pb → symbols-26.pb} +0 -0
  380. /package/.scannerwork/scanner-report/{symbols-34.pb → symbols-29.pb} +0 -0
  381. /package/.scannerwork/scanner-report/{symbols-7.pb → symbols-53.pb} +0 -0
  382. /package/.scannerwork/scanner-report/{symbols-4.pb → symbols-55.pb} +0 -0
  383. /package/.scannerwork/scanner-report/{symbols-35.pb → symbols-57.pb} +0 -0
  384. /package/.scannerwork/scanner-report/{symbols-61.pb → symbols-63.pb} +0 -0
  385. /package/.scannerwork/scanner-report/{symbols-64.pb → symbols-67.pb} +0 -0
  386. /package/.scannerwork/scanner-report/{syntax-highlightings-40.pb → syntax-highlightings-23.pb} +0 -0
  387. /package/.scannerwork/scanner-report/{syntax-highlightings-2.pb → syntax-highlightings-26.pb} +0 -0
  388. /package/.scannerwork/scanner-report/{syntax-highlightings-34.pb → syntax-highlightings-29.pb} +0 -0
  389. /package/.scannerwork/scanner-report/{syntax-highlightings-7.pb → syntax-highlightings-53.pb} +0 -0
  390. /package/.scannerwork/scanner-report/{syntax-highlightings-35.pb → syntax-highlightings-57.pb} +0 -0
  391. /package/.scannerwork/scanner-report/{syntax-highlightings-61.pb → syntax-highlightings-63.pb} +0 -0
  392. /package/.scannerwork/scanner-report/{syntax-highlightings-64.pb → syntax-highlightings-67.pb} +0 -0
@@ -1,4 +1,4 @@
1
- // Copyright © 2017 IBM Corp. All rights reserved.
1
+ // Copyright © 2017, 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.
@@ -11,82 +11,124 @@
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
+
15
+ /* global describe it beforeEach */
14
16
  'use strict';
15
17
 
18
+ const assert = require('assert');
16
19
  const fs = require('fs');
17
- const stream = require('stream');
18
- const liner = require('./liner.js');
19
-
20
- const onLine = function(onCommand, getDocs) {
21
- const change = new stream.Transform({ objectMode: true });
22
-
23
- change._transform = function(line, encoding, done) {
24
- if (line && line[0] === ':') {
25
- const obj = {
26
- command: null,
27
- batch: null,
28
- docs: []
29
- };
30
-
31
- let matches;
32
-
33
- // extract command
34
- matches = line.match(/^:([a-z_]+) ?/);
35
- if (matches) {
36
- obj.command = matches[1];
20
+ const nock = require('nock');
21
+ const request = require('../includes/request.js');
22
+ const writer = require('../includes/writer.js');
23
+ const noopEmitter = new (require('events')).EventEmitter();
24
+ const liner = require('../includes/liner.js');
25
+ const { once } = require('node:events');
26
+ const { pipeline } = require('node:stream/promises');
27
+ const longTestTimeout = 3000;
28
+
29
+ describe('#unit Check database restore writer', function() {
30
+ const dbUrl = 'http://localhost:5984/animaldb';
31
+ const db = request.client(dbUrl, { parallelism: 1 });
32
+
33
+ beforeEach('Reset nocks', function() {
34
+ nock.cleanAll();
35
+ });
36
+
37
+ it('should complete successfully', async function() {
38
+ nock(dbUrl)
39
+ .post('/_bulk_docs')
40
+ .reply(200, []); // success
41
+
42
+ const w = writer(db, 500, 1, noopEmitter);
43
+ return Promise.all([pipeline(fs.createReadStream('./test/fixtures/animaldb_expected.json'), liner(), w),
44
+ once(w, 'finished').then((data) => {
45
+ assert.strictEqual(data[0].total, 15);
46
+ assert.ok(nock.isDone());
47
+ })]);
48
+ });
49
+
50
+ it('should terminate on a fatal error', async function() {
51
+ nock(dbUrl)
52
+ .post('/_bulk_docs')
53
+ .reply(401, { error: 'Unauthorized' }); // fatal error
54
+
55
+ const w = writer(db, 500, 1, noopEmitter);
56
+ return assert.rejects(
57
+ pipeline(fs.createReadStream('./test/fixtures/animaldb_expected.json'), liner(), w),
58
+ (err) => {
59
+ assert.strictEqual(err.name, 'Unauthorized');
60
+ assert.strictEqual(err.message, 'Access is denied due to invalid credentials.');
61
+ assert.ok(nock.isDone());
62
+ return true;
37
63
  }
64
+ );
65
+ });
38
66
 
39
- // extract batch
40
- matches = line.match(/ batch([0-9]+)/);
41
- if (matches) {
42
- obj.batch = parseInt(matches[1]);
67
+ it('should retry on transient errors', async function() {
68
+ nock(dbUrl)
69
+ .post('/_bulk_docs')
70
+ .reply(429, { error: 'Too Many Requests' }) // transient error
71
+ .post('/_bulk_docs')
72
+ .reply(500, { error: 'Internal Server Error' }) // transient error
73
+ .post('/_bulk_docs')
74
+ .reply(200, { ok: true }); // third time lucky success
75
+
76
+ const w = writer(db, 500, 1, noopEmitter);
77
+ return Promise.all([pipeline(fs.createReadStream('./test/fixtures/animaldb_expected.json'), liner(), w),
78
+ once(w, 'finished').then((data) => {
79
+ assert.strictEqual(data[0].total, 15);
80
+ assert.ok(nock.isDone());
81
+ })]);
82
+ }).timeout(longTestTimeout);
83
+
84
+ it('should fail after 3 transient errors', async function() {
85
+ nock(dbUrl)
86
+ .post('/_bulk_docs')
87
+ .reply(429, { error: 'Too Many Requests' }) // transient error
88
+ .post('/_bulk_docs')
89
+ .reply(500, { error: 'Internal Server Error' }) // transient error
90
+ .post('/_bulk_docs')
91
+ .reply(503, { error: 'Service Unavailable' }); // Final transient error
92
+
93
+ const w = writer(db, 500, 1, noopEmitter);
94
+ return assert.rejects(
95
+ pipeline(fs.createReadStream('./test/fixtures/animaldb_expected.json'), liner(), w),
96
+ (err) => {
97
+ assert.strictEqual(err.name, 'HTTPFatalError');
98
+ assert.strictEqual(err.message, `503 : post ${dbUrl}/_bulk_docs - Error: Service Unavailable`);
99
+ assert.ok(nock.isDone());
100
+ return true;
43
101
  }
102
+ );
103
+ }).timeout(longTestTimeout);
104
+
105
+ it('should restore shallow backups without rev info successfully', async function() {
106
+ nock(dbUrl)
107
+ .post('/_bulk_docs')
108
+ .reply(200, [{ ok: true, id: 'foo', rev: '1-abc' }]); // success
109
+
110
+ const w = writer(db, 500, 1, noopEmitter);
111
+ return Promise.all([pipeline(fs.createReadStream('./test/fixtures/animaldb_old_shallow.json'), liner(), w),
112
+ once(w, 'finished').then((data) => {
113
+ assert.strictEqual(data[0].total, 11);
114
+ assert.ok(nock.isDone());
115
+ })]);
116
+ });
117
+
118
+ it('should get a batch error for non-empty array response with new_edits false', async function() {
119
+ nock(dbUrl)
120
+ .post('/_bulk_docs')
121
+ .reply(200, [{ id: 'foo', error: 'foo', reason: 'bar' }]);
44
122
 
45
- // extract doc ids
46
- if (getDocs && obj.command === 't') {
47
- const json = line.replace(/^.* batch[0-9]+ /, '').trim();
48
- obj.docs = JSON.parse(json);
123
+ const w = writer(db, 500, 1, noopEmitter);
124
+ return assert.rejects(
125
+ pipeline(fs.createReadStream('./test/fixtures/animaldb_expected.json'), liner(), w),
126
+ (err) => {
127
+ assert.strictEqual(err.name, 'Error');
128
+ assert.strictEqual(err.message, 'Error writing batch with new_edits:false and 1 items');
129
+ assert.ok(nock.isDone());
130
+ return true;
49
131
  }
50
- onCommand(obj);
51
- }
52
- done();
53
- };
54
- return change;
55
- };
56
-
57
- /**
58
- * Generate a list of remaining batches from a download file.
59
- *
60
- * @param {string} log - log file name
61
- * @param {function} callback - callback with err, {changesComplete: N, batches: N}.
62
- * changesComplete signifies whether the log file appeared to
63
- * have completed reading the changes feed (contains :changes_complete).
64
- * batches are remaining batch IDs for download.
65
- */
66
- module.exports = function(log, callback) {
67
- // our sense of state
68
- const state = {
69
-
70
- };
71
- let changesComplete = false;
72
-
73
- // called with each line from the log file
74
- const onCommand = function(obj) {
75
- if (obj.command === 't') {
76
- state[obj.batch] = true;
77
- } else if (obj.command === 'd') {
78
- delete state[obj.batch];
79
- } else if (obj.command === 'changes_complete') {
80
- changesComplete = true;
81
- }
82
- };
83
-
84
- // stream through the previous log file
85
- fs.createReadStream(log)
86
- .pipe(liner())
87
- .pipe(onLine(onCommand, false))
88
- .on('finish', function() {
89
- const obj = { changesComplete: changesComplete, batches: state };
90
- callback(null, obj);
91
- });
92
- };
132
+ );
133
+ });
134
+ });
@@ -1,4 +1,4 @@
1
- // Copyright © 2017 IBM Corp. All rights reserved.
1
+ // Copyright © 2017, 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.
@@ -11,65 +11,203 @@
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
+
15
+ /* global describe it beforeEach */
14
16
  'use strict';
15
17
 
16
- const fs = require('fs');
17
- const stream = require('stream');
18
- const liner = require('./liner.js');
19
-
20
- const onLine = function(onCommand, batches) {
21
- const change = new stream.Transform({ objectMode: true });
22
- change._transform = function(line, encoding, done) {
23
- if (line && line[0] === ':') {
24
- const obj = {
25
- command: null,
26
- batch: null,
27
- docs: []
28
- };
29
-
30
- let matches;
31
-
32
- // extract command
33
- matches = line.match(/^:([a-z_]+) ?/);
34
- if (matches) {
35
- obj.command = matches[1];
36
- }
37
-
38
- // extract batch
39
- matches = line.match(/ batch([0-9]+)/);
40
- if (matches) {
41
- obj.batch = parseInt(matches[1]);
42
- }
43
-
44
- // if this is one we want
45
- if (obj.command === 't' && batches.indexOf(obj.batch) > -1) {
46
- const json = line.replace(/^.* batch[0-9]+ /, '').trim();
47
- obj.docs = JSON.parse(json);
48
- onCommand(obj);
49
- }
50
- }
51
- done();
52
- };
53
- return change;
54
- };
55
-
56
- module.exports = function(log, batches, callback) {
57
- // our sense of state
58
- const retval = { };
59
-
60
- // called with each line from the log file
61
- const onCommand = function(obj) {
62
- retval[obj.batch] = obj;
63
- };
64
-
65
- // stream through the previous log file
66
- fs.createReadStream(log)
67
- .pipe(liner())
68
- .pipe(onLine(onCommand, batches))
69
- .on('error', function(err) {
70
- callback(err);
71
- })
72
- .on('finish', function() {
73
- callback(null, retval);
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
+ });
74
211
  });
75
- };
212
+ });
213
+ });
@@ -1,4 +1,4 @@
1
- // Copyright © 2017, 2018 IBM Corp. All rights reserved.
1
+ // Copyright © 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.
@@ -11,21 +11,141 @@
11
11
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
+
15
+ /* global */
14
16
  'use strict';
15
17
 
16
- module.exports = function(db, options, readstream, ee, callback) {
17
- const liner = require('../includes/liner.js')();
18
- const writer = require('../includes/writer.js')(db, options.bufferSize, options.parallelism, ee);
18
+ const { fork, spawn } = require('node:child_process');
19
+ const { once } = require('node:events');
20
+ const { Duplex } = require('node:stream');
21
+ const debug = require('debug');
22
+ const logProcess = debug('couchbackup:test:process');
23
+
24
+ class TestProcess {
25
+ constructor(cmd, args, mode) {
26
+ this.cmd = cmd;
27
+ // Child process stdio [stdin, stdout, stderr, ...extra channels]
28
+ const childProcessOptions = { stdio: [] };
29
+ switch (mode) {
30
+ case 'readable':
31
+ // Readable only, no writing to stdin so ignore it
32
+ childProcessOptions.stdio = ['ignore', 'pipe', 'inherit'];
33
+ break;
34
+ case 'writable':
35
+ // Writable only, no reading from stdout so ignore it
36
+ childProcessOptions.stdio = ['pipe', 'ignore', 'inherit'];
37
+ break;
38
+ default:
39
+ // Default Duplex mode pipe both stdin and stdout
40
+ childProcessOptions.stdio = ['pipe', 'pipe', 'inherit'];
41
+ break;
42
+ }
43
+ if (cmd.endsWith('.js')) {
44
+ // Add Node fork ipc channel
45
+ childProcessOptions.stdio.push('ipc');
46
+ logProcess(`Forking Node process for ${cmd} with stdio:[${childProcessOptions.stdio}]`);
47
+ this.childProcess = fork(cmd, args, childProcessOptions);
48
+ } else {
49
+ logProcess(`Spawning process for ${cmd} with stdio:[${childProcessOptions.stdio}]`);
50
+ this.childProcess = spawn(cmd, args, childProcessOptions);
51
+ }
52
+
53
+ this.childProcessPromise = once(this.childProcess, 'close').then(() => {
54
+ const code = this.childProcess.exitCode;
55
+ const signal = this.childProcess.signalCode;
56
+ logProcess(`Test process ${cmd} closed with code ${code} and signal ${signal}`);
57
+ if (code === 0) {
58
+ logProcess(`Resolving process promise for ${cmd}`);
59
+ return Promise.resolve(code);
60
+ } else {
61
+ const e = new Error(`Test child process ${cmd} exited with code ${code} and ${signal}. This may be normal for error case testing.`);
62
+ e.code = code;
63
+ e.signal = signal;
64
+ logProcess(`Will reject process promise for ${cmd} with ${e}`);
65
+ return Promise.reject(e);
66
+ }
67
+ });
68
+
69
+ switch (mode) {
70
+ case 'readable':
71
+ this.duplexFrom = this.childProcess.stdout;
72
+ break;
73
+ case 'writable':
74
+ this.duplexFrom = this.childProcess.stdin;
75
+ break;
76
+ default:
77
+ // Default is duplex
78
+ this.duplexFrom = { writable: this.childProcess.stdin, readable: this.childProcess.stdout };
79
+ }
19
80
 
20
- // pipe the input to the output, via transformation functions
21
- readstream
22
- .pipe(liner) // transform the input stream into per-line
23
- .on('error', function(err) {
24
- // Forward the error to the writer event emitter where we already have
25
- // listeners on for handling errors
26
- writer.emit('error', err);
27
- })
28
- .pipe(writer); // transform the data
81
+ this.stream = Duplex.from(this.duplexFrom);
82
+ }
83
+ }
29
84
 
30
- callback(null, writer);
85
+ module.exports = {
86
+ TestProcess,
87
+ cliBackup: function(databaseName, params = {}) {
88
+ const args = ['--db', databaseName];
89
+ if (params.opts) {
90
+ if (params.opts.mode) {
91
+ args.push('--mode');
92
+ args.push(params.opts.mode);
93
+ }
94
+ if (params.opts.output) {
95
+ args.push('--output');
96
+ args.push(params.opts.output);
97
+ }
98
+ if (params.opts.log) {
99
+ args.push('--log');
100
+ args.push(params.opts.log);
101
+ }
102
+ if (params.opts.resume) {
103
+ args.push('--resume');
104
+ args.push(params.opts.resume);
105
+ }
106
+ if (params.opts.bufferSize) {
107
+ args.push('--buffer-size');
108
+ args.push(params.opts.bufferSize);
109
+ }
110
+ if (params.opts.iamApiKey) {
111
+ args.push('--iam-api-key');
112
+ args.push(params.opts.iamApiKey);
113
+ }
114
+ }
115
+ return new TestProcess('./bin/couchbackup.bin.js', args, 'readable');
116
+ },
117
+ cliRestore: function(databaseName, params) {
118
+ const args = ['--db', databaseName];
119
+ if (params.opts) {
120
+ if (params.opts.bufferSize) {
121
+ args.push('--buffer-size');
122
+ args.push(params.opts.bufferSize);
123
+ }
124
+ if (params.opts.parallelism) {
125
+ args.push('--parallelism');
126
+ args.push(params.opts.parallelism);
127
+ }
128
+ if (params.opts.requestTimeout) {
129
+ args.push('--request-timeout');
130
+ args.push(params.opts.requestTimeout);
131
+ }
132
+ if (params.opts.iamApiKey) {
133
+ args.push('--iam-api-key');
134
+ args.push(params.opts.iamApiKey);
135
+ }
136
+ }
137
+ return new TestProcess('./bin/couchrestore.bin.js', args, 'writable');
138
+ },
139
+ cliGzip: function() {
140
+ return new TestProcess('gzip', []);
141
+ },
142
+ cliGunzip: function() {
143
+ return new TestProcess('gunzip', []);
144
+ },
145
+ cliEncrypt: function() {
146
+ return new TestProcess('openssl', ['aes-128-cbc', '-pass', 'pass:12345']);
147
+ },
148
+ cliDecrypt: function() {
149
+ return new TestProcess('openssl', ['aes-128-cbc', '-d', '-pass', 'pass:12345']);
150
+ }
31
151
  };