@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.
- package/.scannerwork/report-task.txt +2 -2
- package/.scannerwork/scanner-report/analysis-cache2.pb +0 -0
- package/.scannerwork/scanner-report/analysis-warnings.pb +2 -2
- package/.scannerwork/scanner-report/changesets-23.pb +1 -0
- package/.scannerwork/scanner-report/changesets-24.pb +1 -0
- package/.scannerwork/scanner-report/changesets-26.pb +1 -0
- package/.scannerwork/scanner-report/changesets-27.pb +1 -0
- package/.scannerwork/scanner-report/changesets-28.pb +1 -0
- package/.scannerwork/scanner-report/changesets-29.pb +1 -0
- package/.scannerwork/scanner-report/changesets-53.pb +1 -0
- package/.scannerwork/scanner-report/changesets-55.pb +1 -0
- package/.scannerwork/scanner-report/changesets-56.pb +1 -0
- package/.scannerwork/scanner-report/changesets-57.pb +1 -0
- package/.scannerwork/scanner-report/changesets-58.pb +1 -0
- package/.scannerwork/scanner-report/changesets-59.pb +1 -0
- package/.scannerwork/scanner-report/changesets-62.pb +1 -0
- package/.scannerwork/scanner-report/changesets-63.pb +1 -0
- package/.scannerwork/scanner-report/changesets-67.pb +1 -0
- package/.scannerwork/scanner-report/changesets-69.pb +1 -0
- package/.scannerwork/scanner-report/component-1.pb +1 -2
- package/.scannerwork/scanner-report/component-11.pb +1 -1
- package/.scannerwork/scanner-report/component-12.pb +1 -1
- package/.scannerwork/scanner-report/component-13.pb +1 -1
- package/.scannerwork/scanner-report/component-14.pb +1 -1
- package/.scannerwork/scanner-report/component-15.pb +1 -1
- package/.scannerwork/scanner-report/component-16.pb +1 -1
- package/.scannerwork/scanner-report/component-17.pb +1 -1
- package/.scannerwork/scanner-report/component-18.pb +1 -1
- package/.scannerwork/scanner-report/component-19.pb +1 -1
- package/.scannerwork/scanner-report/component-20.pb +1 -1
- package/.scannerwork/scanner-report/component-21.pb +1 -1
- package/.scannerwork/scanner-report/component-22.pb +1 -1
- package/.scannerwork/scanner-report/component-23.pb +1 -0
- package/.scannerwork/scanner-report/component-24.pb +1 -0
- package/.scannerwork/scanner-report/component-25.pb +1 -0
- package/.scannerwork/scanner-report/component-26.pb +1 -0
- package/.scannerwork/scanner-report/component-27.pb +1 -0
- package/.scannerwork/scanner-report/component-28.pb +1 -0
- package/.scannerwork/scanner-report/component-29.pb +1 -0
- package/.scannerwork/scanner-report/component-3.pb +1 -1
- package/.scannerwork/scanner-report/component-41.pb +1 -1
- package/.scannerwork/scanner-report/component-42.pb +1 -1
- package/.scannerwork/scanner-report/component-43.pb +1 -1
- package/.scannerwork/scanner-report/component-44.pb +1 -1
- package/.scannerwork/scanner-report/component-45.pb +1 -1
- package/.scannerwork/scanner-report/component-46.pb +1 -1
- package/.scannerwork/scanner-report/component-47.pb +1 -1
- package/.scannerwork/scanner-report/component-48.pb +1 -1
- package/.scannerwork/scanner-report/component-49.pb +1 -1
- package/.scannerwork/scanner-report/component-50.pb +1 -1
- package/.scannerwork/scanner-report/component-51.pb +1 -1
- package/.scannerwork/scanner-report/component-52.pb +1 -1
- package/.scannerwork/scanner-report/component-53.pb +1 -0
- package/.scannerwork/scanner-report/component-54.pb +1 -1
- package/.scannerwork/scanner-report/component-55.pb +1 -1
- package/.scannerwork/scanner-report/component-56.pb +1 -0
- package/.scannerwork/scanner-report/component-57.pb +1 -0
- package/.scannerwork/scanner-report/component-58.pb +1 -0
- package/.scannerwork/scanner-report/component-59.pb +1 -0
- package/.scannerwork/scanner-report/component-60.pb +1 -1
- package/.scannerwork/scanner-report/component-62.pb +1 -0
- package/.scannerwork/scanner-report/component-63.pb +1 -0
- package/.scannerwork/scanner-report/component-67.pb +1 -0
- package/.scannerwork/scanner-report/component-69.pb +1 -0
- package/.scannerwork/scanner-report/component-70.pb +1 -0
- package/.scannerwork/scanner-report/component-9.pb +1 -1
- package/.scannerwork/scanner-report/coverages-11.pb +0 -0
- package/.scannerwork/scanner-report/coverages-12.pb +0 -0
- package/.scannerwork/scanner-report/coverages-13.pb +0 -0
- package/.scannerwork/scanner-report/coverages-14.pb +0 -0
- package/.scannerwork/scanner-report/coverages-15.pb +0 -0
- package/.scannerwork/scanner-report/coverages-16.pb +0 -0
- package/.scannerwork/scanner-report/coverages-17.pb +0 -0
- package/.scannerwork/scanner-report/coverages-18.pb +0 -0
- package/.scannerwork/scanner-report/coverages-19.pb +0 -0
- package/.scannerwork/scanner-report/coverages-20.pb +0 -0
- package/.scannerwork/scanner-report/coverages-21.pb +0 -0
- package/.scannerwork/scanner-report/coverages-22.pb +0 -0
- package/.scannerwork/scanner-report/coverages-24.pb +0 -0
- package/.scannerwork/scanner-report/coverages-27.pb +0 -0
- package/.scannerwork/scanner-report/coverages-28.pb +0 -0
- package/.scannerwork/scanner-report/coverages-41.pb +0 -0
- package/.scannerwork/scanner-report/coverages-42.pb +0 -0
- package/.scannerwork/scanner-report/coverages-43.pb +0 -0
- package/.scannerwork/scanner-report/coverages-44.pb +0 -0
- package/.scannerwork/scanner-report/coverages-45.pb +0 -0
- package/.scannerwork/scanner-report/coverages-46.pb +0 -0
- package/.scannerwork/scanner-report/coverages-47.pb +0 -0
- package/.scannerwork/scanner-report/coverages-48.pb +0 -0
- package/.scannerwork/scanner-report/coverages-49.pb +0 -0
- package/.scannerwork/scanner-report/coverages-50.pb +0 -0
- package/.scannerwork/scanner-report/coverages-51.pb +0 -0
- package/.scannerwork/scanner-report/coverages-52.pb +0 -0
- package/.scannerwork/scanner-report/coverages-54.pb +0 -0
- package/.scannerwork/scanner-report/coverages-56.pb +0 -0
- package/.scannerwork/scanner-report/coverages-58.pb +0 -0
- package/.scannerwork/scanner-report/coverages-59.pb +0 -0
- package/.scannerwork/scanner-report/coverages-60.pb +0 -0
- package/.scannerwork/scanner-report/coverages-62.pb +0 -0
- package/.scannerwork/scanner-report/coverages-69.pb +0 -0
- package/.scannerwork/scanner-report/duplications-12.pb +0 -3
- package/.scannerwork/scanner-report/duplications-15.pb +2 -0
- package/.scannerwork/scanner-report/duplications-24.pb +2 -0
- package/.scannerwork/scanner-report/duplications-43.pb +2 -0
- package/.scannerwork/scanner-report/duplications-50.pb +0 -2
- package/.scannerwork/scanner-report/duplications-51.pb +3 -2
- package/.scannerwork/scanner-report/duplications-66.pb +1 -1
- package/.scannerwork/scanner-report/measures-11.pb +0 -0
- package/.scannerwork/scanner-report/measures-12.pb +0 -0
- package/.scannerwork/scanner-report/measures-13.pb +0 -0
- package/.scannerwork/scanner-report/measures-14.pb +0 -0
- package/.scannerwork/scanner-report/measures-15.pb +0 -0
- package/.scannerwork/scanner-report/measures-16.pb +0 -0
- package/.scannerwork/scanner-report/measures-17.pb +0 -0
- package/.scannerwork/scanner-report/measures-18.pb +0 -0
- package/.scannerwork/scanner-report/measures-19.pb +0 -0
- package/.scannerwork/scanner-report/measures-20.pb +0 -0
- package/.scannerwork/scanner-report/measures-21.pb +0 -0
- package/.scannerwork/scanner-report/measures-22.pb +0 -0
- package/.scannerwork/scanner-report/measures-24.pb +0 -0
- package/.scannerwork/scanner-report/measures-27.pb +0 -0
- package/.scannerwork/scanner-report/measures-28.pb +0 -0
- package/.scannerwork/scanner-report/measures-41.pb +0 -0
- package/.scannerwork/scanner-report/measures-42.pb +0 -0
- package/.scannerwork/scanner-report/measures-43.pb +0 -0
- package/.scannerwork/scanner-report/measures-44.pb +0 -0
- package/.scannerwork/scanner-report/measures-45.pb +0 -0
- package/.scannerwork/scanner-report/measures-46.pb +0 -0
- package/.scannerwork/scanner-report/measures-47.pb +0 -0
- package/.scannerwork/scanner-report/measures-48.pb +0 -0
- package/.scannerwork/scanner-report/measures-49.pb +0 -0
- package/.scannerwork/scanner-report/measures-50.pb +0 -0
- package/.scannerwork/scanner-report/measures-51.pb +0 -0
- package/.scannerwork/scanner-report/measures-52.pb +0 -0
- package/.scannerwork/scanner-report/measures-54.pb +0 -0
- package/.scannerwork/scanner-report/measures-55.pb +0 -0
- package/.scannerwork/scanner-report/measures-56.pb +0 -0
- package/.scannerwork/scanner-report/measures-58.pb +0 -0
- package/.scannerwork/scanner-report/measures-59.pb +0 -0
- package/.scannerwork/scanner-report/measures-60.pb +0 -0
- package/.scannerwork/scanner-report/measures-62.pb +0 -0
- package/.scannerwork/scanner-report/measures-69.pb +0 -0
- package/.scannerwork/scanner-report/measures-9.pb +0 -0
- package/.scannerwork/scanner-report/metadata.pb +0 -0
- package/.scannerwork/scanner-report/source-11.txt +25 -16
- package/.scannerwork/scanner-report/source-12.txt +32 -199
- package/.scannerwork/scanner-report/source-13.txt +17 -87
- package/.scannerwork/scanner-report/source-14.txt +115 -116
- package/.scannerwork/scanner-report/source-15.txt +66 -423
- package/.scannerwork/scanner-report/source-16.txt +64 -277
- package/.scannerwork/scanner-report/source-17.txt +247 -66
- package/.scannerwork/scanner-report/source-18.txt +104 -92
- package/.scannerwork/scanner-report/source-19.txt +45 -120
- package/.scannerwork/scanner-report/source-20.txt +89 -41
- package/.scannerwork/scanner-report/source-21.txt +148 -24
- package/.scannerwork/scanner-report/source-22.txt +162 -25
- package/.scannerwork/scanner-report/source-24.txt +75 -0
- package/.scannerwork/scanner-report/{source-38.txt → source-25.txt} +143 -143
- package/.scannerwork/scanner-report/source-27.txt +65 -0
- package/.scannerwork/scanner-report/source-28.txt +100 -0
- package/.scannerwork/scanner-report/source-3.txt +152 -152
- package/.scannerwork/scanner-report/source-41.txt +315 -32
- package/.scannerwork/scanner-report/source-42.txt +23 -63
- package/.scannerwork/scanner-report/source-43.txt +169 -45
- package/.scannerwork/scanner-report/source-44.txt +23 -164
- package/.scannerwork/scanner-report/source-45.txt +116 -104
- package/.scannerwork/scanner-report/source-46.txt +14 -26
- package/.scannerwork/scanner-report/source-47.txt +48 -99
- package/.scannerwork/scanner-report/source-48.txt +52 -141
- package/.scannerwork/scanner-report/source-49.txt +254 -242
- package/.scannerwork/scanner-report/source-50.txt +114 -72
- package/.scannerwork/scanner-report/source-51.txt +198 -60
- package/.scannerwork/scanner-report/source-52.txt +134 -14
- package/.scannerwork/scanner-report/source-54.txt +80 -25
- package/.scannerwork/scanner-report/source-55.txt +187 -424
- package/.scannerwork/scanner-report/{source-5.txt → source-56.txt} +10 -7
- package/.scannerwork/scanner-report/source-58.txt +106 -0
- package/.scannerwork/scanner-report/source-59.txt +449 -0
- package/.scannerwork/scanner-report/source-60.txt +25 -44
- package/.scannerwork/scanner-report/source-62.txt +60 -0
- package/.scannerwork/scanner-report/source-69.txt +46 -0
- package/.scannerwork/scanner-report/{source-68.txt → source-70.txt} +49 -49
- package/.scannerwork/scanner-report/source-9.txt +424 -183
- package/.scannerwork/scanner-report/symbols-11.pb +18 -9
- package/.scannerwork/scanner-report/symbols-12.pb +20 -264
- package/.scannerwork/scanner-report/symbols-13.pb +13 -57
- package/.scannerwork/scanner-report/symbols-14.pb +33 -86
- package/.scannerwork/scanner-report/symbols-15.pb +43 -789
- package/.scannerwork/scanner-report/symbols-16.pb +44 -426
- package/.scannerwork/scanner-report/symbols-17.pb +354 -69
- package/.scannerwork/scanner-report/symbols-18.pb +30 -59
- package/.scannerwork/scanner-report/symbols-19.pb +19 -71
- package/.scannerwork/scanner-report/symbols-20.pb +45 -32
- package/.scannerwork/scanner-report/symbols-21.pb +126 -23
- package/.scannerwork/scanner-report/symbols-22.pb +143 -30
- package/.scannerwork/scanner-report/symbols-24.pb +42 -0
- package/.scannerwork/scanner-report/symbols-27.pb +33 -0
- package/.scannerwork/scanner-report/symbols-28.pb +69 -0
- package/.scannerwork/scanner-report/symbols-41.pb +353 -20
- package/.scannerwork/scanner-report/symbols-42.pb +23 -46
- package/.scannerwork/scanner-report/symbols-43.pb +203 -19
- package/.scannerwork/scanner-report/symbols-44.pb +9 -144
- package/.scannerwork/scanner-report/symbols-45.pb +86 -30
- package/.scannerwork/scanner-report/symbols-46.pb +8 -18
- package/.scannerwork/scanner-report/symbols-47.pb +23 -45
- package/.scannerwork/scanner-report/symbols-48.pb +39 -126
- package/.scannerwork/scanner-report/symbols-49.pb +402 -328
- package/.scannerwork/scanner-report/symbols-50.pb +71 -44
- package/.scannerwork/scanner-report/symbols-51.pb +264 -42
- package/.scannerwork/scanner-report/symbols-52.pb +92 -13
- package/.scannerwork/scanner-report/symbols-54.pb +58 -7
- package/.scannerwork/scanner-report/symbols-56.pb +9 -0
- package/.scannerwork/scanner-report/symbols-58.pb +59 -0
- package/.scannerwork/scanner-report/symbols-59.pb +790 -0
- package/.scannerwork/scanner-report/symbols-60.pb +31 -21
- package/.scannerwork/scanner-report/symbols-62.pb +21 -0
- package/.scannerwork/scanner-report/symbols-69.pb +7 -0
- package/.scannerwork/scanner-report/syntax-highlightings-11.pb +23 -25
- package/.scannerwork/scanner-report/syntax-highlightings-12.pb +33 -266
- package/.scannerwork/scanner-report/syntax-highlightings-13.pb +15 -124
- package/.scannerwork/scanner-report/syntax-highlightings-14.pb +94 -90
- package/.scannerwork/scanner-report/syntax-highlightings-15.pb +57 -591
- package/.scannerwork/scanner-report/syntax-highlightings-16.pb +62 -687
- package/.scannerwork/scanner-report/syntax-highlightings-17.pb +245 -67
- package/.scannerwork/scanner-report/syntax-highlightings-18.pb +83 -148
- package/.scannerwork/scanner-report/syntax-highlightings-19.pb +23 -145
- package/.scannerwork/scanner-report/syntax-highlightings-20.pb +93 -77
- package/.scannerwork/scanner-report/syntax-highlightings-21.pb +177 -20
- package/.scannerwork/scanner-report/syntax-highlightings-22.pb +207 -33
- package/.scannerwork/scanner-report/syntax-highlightings-24.pb +81 -0
- package/.scannerwork/scanner-report/{syntax-highlightings-38.pb → syntax-highlightings-25.pb} +103 -100
- package/.scannerwork/scanner-report/syntax-highlightings-27.pb +110 -0
- package/.scannerwork/scanner-report/syntax-highlightings-28.pb +107 -0
- package/.scannerwork/scanner-report/syntax-highlightings-3.pb +107 -108
- package/.scannerwork/scanner-report/syntax-highlightings-41.pb +590 -34
- package/.scannerwork/scanner-report/syntax-highlightings-42.pb +22 -61
- package/.scannerwork/scanner-report/syntax-highlightings-43.pb +246 -25
- package/.scannerwork/scanner-report/syntax-highlightings-44.pb +27 -209
- package/.scannerwork/scanner-report/syntax-highlightings-45.pb +95 -83
- package/.scannerwork/scanner-report/syntax-highlightings-46.pb +20 -23
- package/.scannerwork/scanner-report/syntax-highlightings-47.pb +67 -96
- package/.scannerwork/scanner-report/syntax-highlightings-48.pb +64 -176
- package/.scannerwork/scanner-report/syntax-highlightings-49.pb +606 -171
- package/.scannerwork/scanner-report/syntax-highlightings-50.pb +145 -57
- package/.scannerwork/scanner-report/syntax-highlightings-51.pb +263 -47
- package/.scannerwork/scanner-report/syntax-highlightings-52.pb +208 -16
- package/.scannerwork/scanner-report/syntax-highlightings-54.pb +119 -27
- package/.scannerwork/scanner-report/syntax-highlightings-55.pb +289 -3261
- package/.scannerwork/scanner-report/syntax-highlightings-56.pb +54 -0
- package/.scannerwork/scanner-report/syntax-highlightings-58.pb +178 -0
- package/.scannerwork/scanner-report/syntax-highlightings-59.pb +627 -0
- package/.scannerwork/scanner-report/syntax-highlightings-60.pb +48 -61
- package/.scannerwork/scanner-report/syntax-highlightings-62.pb +82 -0
- package/.scannerwork/scanner-report/syntax-highlightings-69.pb +62 -0
- package/.scannerwork/scanner-report/{syntax-highlightings-68.pb → syntax-highlightings-70.pb} +14 -13
- package/.scannerwork/scanner-report/syntax-highlightings-9.pb +3286 -226
- package/package.json +1 -1
- package/test-18-results.xml +147 -147
- package/test-20-results.xml +141 -141
- package/test-21-results.xml +143 -143
- package/test-iam-20-results.xml +49 -49
- package/.scannerwork/scanner-report/changesets-10.pb +0 -2
- package/.scannerwork/scanner-report/changesets-2.pb +0 -1
- package/.scannerwork/scanner-report/changesets-34.pb +0 -1
- package/.scannerwork/scanner-report/changesets-35.pb +0 -1
- package/.scannerwork/scanner-report/changesets-36.pb +0 -1
- package/.scannerwork/scanner-report/changesets-37.pb +0 -1
- package/.scannerwork/scanner-report/changesets-39.pb +0 -1
- package/.scannerwork/scanner-report/changesets-4.pb +0 -1
- package/.scannerwork/scanner-report/changesets-40.pb +0 -1
- package/.scannerwork/scanner-report/changesets-5.pb +0 -1
- package/.scannerwork/scanner-report/changesets-6.pb +0 -1
- package/.scannerwork/scanner-report/changesets-61.pb +0 -1
- package/.scannerwork/scanner-report/changesets-64.pb +0 -1
- package/.scannerwork/scanner-report/changesets-7.pb +0 -1
- package/.scannerwork/scanner-report/changesets-8.pb +0 -1
- package/.scannerwork/scanner-report/changesets-9.pb +0 -1
- package/.scannerwork/scanner-report/component-10.pb +0 -2
- package/.scannerwork/scanner-report/component-2.pb +0 -1
- package/.scannerwork/scanner-report/component-34.pb +0 -1
- package/.scannerwork/scanner-report/component-35.pb +0 -1
- package/.scannerwork/scanner-report/component-36.pb +0 -1
- package/.scannerwork/scanner-report/component-37.pb +0 -1
- package/.scannerwork/scanner-report/component-38.pb +0 -1
- package/.scannerwork/scanner-report/component-39.pb +0 -1
- package/.scannerwork/scanner-report/component-4.pb +0 -1
- package/.scannerwork/scanner-report/component-40.pb +0 -1
- package/.scannerwork/scanner-report/component-5.pb +0 -1
- package/.scannerwork/scanner-report/component-6.pb +0 -1
- package/.scannerwork/scanner-report/component-61.pb +0 -1
- package/.scannerwork/scanner-report/component-64.pb +0 -1
- package/.scannerwork/scanner-report/component-68.pb +0 -1
- package/.scannerwork/scanner-report/component-7.pb +0 -1
- package/.scannerwork/scanner-report/component-8.pb +0 -1
- package/.scannerwork/scanner-report/coverages-10.pb +0 -0
- package/.scannerwork/scanner-report/coverages-36.pb +0 -0
- package/.scannerwork/scanner-report/coverages-37.pb +0 -0
- package/.scannerwork/scanner-report/coverages-39.pb +0 -0
- package/.scannerwork/scanner-report/coverages-5.pb +0 -0
- package/.scannerwork/scanner-report/coverages-6.pb +0 -0
- package/.scannerwork/scanner-report/coverages-8.pb +0 -0
- package/.scannerwork/scanner-report/coverages-9.pb +0 -0
- package/.scannerwork/scanner-report/duplications-9.pb +0 -2
- package/.scannerwork/scanner-report/measures-10.pb +0 -0
- package/.scannerwork/scanner-report/measures-36.pb +0 -15
- package/.scannerwork/scanner-report/measures-37.pb +0 -0
- package/.scannerwork/scanner-report/measures-39.pb +0 -0
- package/.scannerwork/scanner-report/measures-4.pb +0 -0
- package/.scannerwork/scanner-report/measures-5.pb +0 -0
- package/.scannerwork/scanner-report/measures-6.pb +0 -0
- package/.scannerwork/scanner-report/measures-8.pb +0 -0
- package/.scannerwork/scanner-report/source-10.txt +0 -37
- package/.scannerwork/scanner-report/source-36.txt +0 -151
- package/.scannerwork/scanner-report/source-37.txt +0 -75
- package/.scannerwork/scanner-report/source-39.txt +0 -129
- package/.scannerwork/scanner-report/source-4.txt +0 -187
- package/.scannerwork/scanner-report/source-6.txt +0 -329
- package/.scannerwork/scanner-report/source-8.txt +0 -62
- package/.scannerwork/scanner-report/symbols-10.pb +0 -9
- package/.scannerwork/scanner-report/symbols-36.pb +0 -93
- package/.scannerwork/scanner-report/symbols-37.pb +0 -39
- package/.scannerwork/scanner-report/symbols-39.pb +0 -33
- package/.scannerwork/scanner-report/symbols-5.pb +0 -8
- package/.scannerwork/scanner-report/symbols-6.pb +0 -353
- package/.scannerwork/scanner-report/symbols-8.pb +0 -24
- package/.scannerwork/scanner-report/symbols-9.pb +0 -203
- package/.scannerwork/scanner-report/syntax-highlightings-10.pb +0 -61
- package/.scannerwork/scanner-report/syntax-highlightings-36.pb +0 -237
- package/.scannerwork/scanner-report/syntax-highlightings-37.pb +0 -101
- package/.scannerwork/scanner-report/syntax-highlightings-39.pb +0 -129
- package/.scannerwork/scanner-report/syntax-highlightings-4.pb +0 -368
- package/.scannerwork/scanner-report/syntax-highlightings-5.pb +0 -49
- package/.scannerwork/scanner-report/syntax-highlightings-6.pb +0 -620
- package/.scannerwork/scanner-report/syntax-highlightings-8.pb +0 -97
- /package/.scannerwork/scanner-report/{coverages-40.pb → coverages-23.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-2.pb → coverages-26.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-34.pb → coverages-29.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-7.pb → coverages-53.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-4.pb → coverages-55.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-35.pb → coverages-57.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-61.pb → coverages-63.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-64.pb → coverages-67.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-10.pb → duplications-23.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-2.pb → duplications-26.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-34.pb → duplications-27.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-35.pb → duplications-28.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-36.pb → duplications-29.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-37.pb → duplications-53.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-4.pb → duplications-55.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-39.pb → duplications-56.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-40.pb → duplications-57.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-46.pb → duplications-58.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-6.pb → duplications-59.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-61.pb → duplications-62.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-7.pb → duplications-63.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-64.pb → duplications-67.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-8.pb → duplications-69.pb} +0 -0
- /package/.scannerwork/scanner-report/{issues-6.pb → issues-41.pb} +0 -0
- /package/.scannerwork/scanner-report/{issues-14.pb → issues-45.pb} +0 -0
- /package/.scannerwork/scanner-report/{issues-12.pb → issues-51.pb} +0 -0
- /package/.scannerwork/scanner-report/{issues-35.pb → issues-57.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-40.pb → measures-23.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-38.pb → measures-25.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-2.pb → measures-26.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-34.pb → measures-29.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-7.pb → measures-53.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-35.pb → measures-57.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-61.pb → measures-63.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-64.pb → measures-67.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-68.pb → measures-70.pb} +0 -0
- /package/.scannerwork/scanner-report/{source-40.txt → source-23.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-2.txt → source-26.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-34.txt → source-29.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-7.txt → source-53.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-35.txt → source-57.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-61.txt → source-63.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-64.txt → source-67.txt} +0 -0
- /package/.scannerwork/scanner-report/{symbols-40.pb → symbols-23.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-2.pb → symbols-26.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-34.pb → symbols-29.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-7.pb → symbols-53.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-4.pb → symbols-55.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-35.pb → symbols-57.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-61.pb → symbols-63.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-64.pb → symbols-67.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-40.pb → syntax-highlightings-23.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-2.pb → syntax-highlightings-26.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-34.pb → syntax-highlightings-29.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-7.pb → syntax-highlightings-53.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-35.pb → syntax-highlightings-57.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-61.pb → syntax-highlightings-63.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-64.pb → syntax-highlightings-67.pb} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright © 2017,
|
|
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,49 +11,173 @@
|
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
18
|
+
const assert = require('assert');
|
|
19
|
+
const backup = require('../includes/shallowbackup.js');
|
|
20
|
+
const request = require('../includes/request.js');
|
|
21
|
+
const fs = require('fs');
|
|
22
|
+
const nock = require('nock');
|
|
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
|
+
}
|
|
32
|
+
|
|
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';
|
|
42
|
+
|
|
43
|
+
beforeEach('Reset nocks', function() {
|
|
44
|
+
nock.cleanAll();
|
|
45
|
+
});
|
|
46
|
+
|
|
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')));
|
|
61
|
+
|
|
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
|
+
});
|
|
89
|
+
|
|
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')));
|
|
107
|
+
|
|
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
|
+
});
|
|
139
|
+
|
|
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' });
|
|
151
|
+
|
|
152
|
+
let errCount = 0;
|
|
153
|
+
|
|
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
|
+
});
|
|
182
|
+
});
|
|
183
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright © 2017,
|
|
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,168 +11,27 @@
|
|
|
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
|
-
'use strict';
|
|
15
|
-
|
|
16
|
-
const pkg = require('../package.json');
|
|
17
|
-
const stream = require('stream');
|
|
18
|
-
const { CloudantV1, CouchdbSessionAuthenticator } = require('@ibm-cloud/cloudant');
|
|
19
|
-
const { IamAuthenticator, NoAuthAuthenticator } = require('ibm-cloud-sdk-core');
|
|
20
|
-
const retryPlugin = require('retry-axios');
|
|
21
|
-
|
|
22
|
-
const userAgent = 'couchbackup-cloudant/' + pkg.version + ' (Node.js ' +
|
|
23
|
-
process.version + ')';
|
|
24
|
-
|
|
25
|
-
// Class for streaming _changes error responses into
|
|
26
|
-
// In general the response is a small error/reason JSON object
|
|
27
|
-
// so it is OK to have this in memory.
|
|
28
|
-
class ResponseWriteable extends stream.Writable {
|
|
29
|
-
constructor(options) {
|
|
30
|
-
super(options);
|
|
31
|
-
this.data = [];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
_write(chunk, encoding, callback) {
|
|
35
|
-
this.data.push(chunk);
|
|
36
|
-
callback();
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
stringBody() {
|
|
40
|
-
return Buffer.concat(this.data).toString();
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
14
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
// after the ugprade to @ibm-cloud/cloudant
|
|
47
|
-
const errorHelper = async function(err) {
|
|
48
|
-
let method;
|
|
49
|
-
let requestUrl;
|
|
50
|
-
if (err.response) {
|
|
51
|
-
if (err.response.config.url) {
|
|
52
|
-
requestUrl = err.response.config.url;
|
|
53
|
-
method = err.response.config.method;
|
|
54
|
-
}
|
|
55
|
-
// Override the status text with an improved message
|
|
56
|
-
let errorMsg = `${err.response.status} ${err.response.statusText || ''}: ` +
|
|
57
|
-
`${method} ${requestUrl}`;
|
|
58
|
-
if (err.response.data) {
|
|
59
|
-
// Check if we have a JSON response and try to get the error/reason
|
|
60
|
-
if (err.response.headers['content-type'] === 'application/json') {
|
|
61
|
-
if (!err.response.data.error && err.response.data.pipe) {
|
|
62
|
-
// If we didn't find a JSON object with `error` then we might have a stream response.
|
|
63
|
-
// Detect the stream by the presence of `pipe` and use it to get the body and parse
|
|
64
|
-
// the error information.
|
|
65
|
-
const p = new Promise((resolve, reject) => {
|
|
66
|
-
const errorBody = new ResponseWriteable();
|
|
67
|
-
err.response.data.pipe(errorBody)
|
|
68
|
-
.on('finish', () => { resolve(JSON.parse(errorBody.stringBody())); })
|
|
69
|
-
.on('error', () => { reject(err); });
|
|
70
|
-
});
|
|
71
|
-
// Replace the stream on the response with the parsed object
|
|
72
|
-
err.response.data = await p;
|
|
73
|
-
}
|
|
74
|
-
// Append the error/reason if available
|
|
75
|
-
if (err.response.data.error) {
|
|
76
|
-
// Override the status text with our more complete message
|
|
77
|
-
errorMsg += ` - Error: ${err.response.data.error}`;
|
|
78
|
-
if (err.response.data.reason) {
|
|
79
|
-
errorMsg += `, Reason: ${err.response.data.reason}`;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
} else {
|
|
83
|
-
errorMsg += err.response.data;
|
|
84
|
-
}
|
|
85
|
-
// Set a new message for use by the node-sdk-core
|
|
86
|
-
// We use the errors array because it gets processed
|
|
87
|
-
// ahead of all other service errors.
|
|
88
|
-
err.response.data.errors = [{ message: errorMsg }];
|
|
89
|
-
}
|
|
90
|
-
} else if (err.request) {
|
|
91
|
-
if (!err.message.includes(err.config.url)) {
|
|
92
|
-
// Augment the message with the URL and method
|
|
93
|
-
// but don't do it again if we already have the URL.
|
|
94
|
-
err.message = `${err.message}: ${err.config.method} ${err.config.url}`;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
return Promise.reject(err);
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
module.exports = {
|
|
101
|
-
client: function(rawUrl, opts) {
|
|
102
|
-
const url = new URL(rawUrl);
|
|
103
|
-
// Split the URL to separate service from database
|
|
104
|
-
// Use origin as the "base" to remove auth elements
|
|
105
|
-
const actUrl = new URL(url.pathname.substring(0, url.pathname.lastIndexOf('/')), url.origin);
|
|
106
|
-
const dbName = url.pathname.substring(url.pathname.lastIndexOf('/') + 1);
|
|
107
|
-
let authenticator;
|
|
108
|
-
// Default to cookieauth unless an IAM key is provided
|
|
109
|
-
if (opts.iamApiKey) {
|
|
110
|
-
const iamAuthOpts = { apikey: opts.iamApiKey };
|
|
111
|
-
if (opts.iamTokenUrl) {
|
|
112
|
-
iamAuthOpts.url = opts.iamTokenUrl;
|
|
113
|
-
}
|
|
114
|
-
authenticator = new IamAuthenticator(iamAuthOpts);
|
|
115
|
-
} else if (url.username) {
|
|
116
|
-
authenticator = new CouchdbSessionAuthenticator({
|
|
117
|
-
username: decodeURIComponent(url.username),
|
|
118
|
-
password: decodeURIComponent(url.password)
|
|
119
|
-
});
|
|
120
|
-
} else {
|
|
121
|
-
authenticator = new NoAuthAuthenticator();
|
|
122
|
-
}
|
|
123
|
-
const serviceOpts = {
|
|
124
|
-
authenticator: authenticator,
|
|
125
|
-
timeout: opts.requestTimeout,
|
|
126
|
-
// Axios performance options
|
|
127
|
-
maxContentLength: -1
|
|
128
|
-
};
|
|
129
|
-
|
|
130
|
-
const service = new CloudantV1(serviceOpts);
|
|
131
|
-
// Configure retries
|
|
132
|
-
const maxRetries = 2; // for 3 total attempts
|
|
133
|
-
service.getHttpClient().defaults.raxConfig = {
|
|
134
|
-
// retries for status codes
|
|
135
|
-
retry: maxRetries,
|
|
136
|
-
// retries for non-response e.g. ETIMEDOUT
|
|
137
|
-
noResponseRetries: maxRetries,
|
|
138
|
-
backoffType: 'exponential',
|
|
139
|
-
httpMethodsToRetry: ['GET', 'HEAD', 'POST'],
|
|
140
|
-
statusCodesToRetry: [
|
|
141
|
-
[429, 429],
|
|
142
|
-
[500, 599]
|
|
143
|
-
],
|
|
144
|
-
shouldRetry: err => {
|
|
145
|
-
const cfg = retryPlugin.getConfig(err);
|
|
146
|
-
// cap at max retries regardless of response/non-response type
|
|
147
|
-
if (cfg.currentRetryAttempt >= maxRetries) {
|
|
148
|
-
return false;
|
|
149
|
-
} else {
|
|
150
|
-
return retryPlugin.shouldRetryRequest(err);
|
|
151
|
-
}
|
|
152
|
-
},
|
|
153
|
-
instance: service.getHttpClient()
|
|
154
|
-
};
|
|
155
|
-
retryPlugin.attach(service.getHttpClient());
|
|
156
|
-
|
|
157
|
-
service.setServiceUrl(actUrl.toString());
|
|
158
|
-
if (authenticator instanceof CouchdbSessionAuthenticator) {
|
|
159
|
-
// Awkward workaround for known Couch issue with compression on _session requests
|
|
160
|
-
// It is not feasible to disable compression on all requests with the amount of
|
|
161
|
-
// data this lib needs to move, so override the property in the tokenManager instance.
|
|
162
|
-
authenticator.tokenManager.requestWrapperInstance.compressRequestData = false;
|
|
163
|
-
}
|
|
164
|
-
if (authenticator.tokenManager && authenticator.tokenManager.requestWrapperInstance) {
|
|
165
|
-
authenticator.tokenManager.requestWrapperInstance.axiosInstance.interceptors.response.use(null, errorHelper);
|
|
166
|
-
}
|
|
167
|
-
// Add error interceptors to put URLs in error messages
|
|
168
|
-
service.getHttpClient().interceptors.response.use(null, errorHelper);
|
|
169
|
-
|
|
170
|
-
// Add request interceptor to add user-agent (adding it with custom request headers gets overwritten)
|
|
171
|
-
service.getHttpClient().interceptors.request.use(function(requestConfig) {
|
|
172
|
-
requestConfig.headers['User-Agent'] = userAgent;
|
|
173
|
-
return requestConfig;
|
|
174
|
-
}, null);
|
|
15
|
+
/* global describe it */
|
|
16
|
+
'use strict';
|
|
175
17
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
18
|
+
delete require.cache[require.resolve('./citestutils.js')];
|
|
19
|
+
const u = require('./citestutils.js');
|
|
20
|
+
|
|
21
|
+
[{ useApi: true }, { useApi: false }].forEach(function(params) {
|
|
22
|
+
describe(u.scenario('End to end backup and restore', params), function() {
|
|
23
|
+
it('should backup and restore animaldb', async function() {
|
|
24
|
+
// Allow up to 60 s for backup and restore of animaldb
|
|
25
|
+
u.setTimeout(this, 60);
|
|
26
|
+
return u.testDirectBackupAndRestore(params, 'animaldb', this.dbName);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('should backup and restore largedb1g #slow', async function() {
|
|
30
|
+
// Allow up to 30 m for backup and restore of largedb1g
|
|
31
|
+
// This is a long time but when many builds run in parallel it can take a
|
|
32
|
+
// while to get this done.
|
|
33
|
+
u.setTimeout(this, 30 * 60);
|
|
34
|
+
return u.testDirectBackupAndRestore(params, 'largedb1g', this.dbName);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright © 2017,
|
|
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,108 +11,120 @@
|
|
|
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 before after */
|
|
14
16
|
'use strict';
|
|
15
17
|
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
function
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
18
|
+
const assert = require('assert');
|
|
19
|
+
const applyEnvVars = require('../includes/config.js').applyEnvironmentVariables;
|
|
20
|
+
|
|
21
|
+
describe('#unit Configuration', function() {
|
|
22
|
+
let processEnvCopy;
|
|
23
|
+
|
|
24
|
+
before('Save env', function() {
|
|
25
|
+
// Copy env so we can reset it after the tests
|
|
26
|
+
processEnvCopy = JSON.parse(JSON.stringify(process.env));
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
after('Reset env', function() {
|
|
30
|
+
process.env = processEnvCopy;
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('respects the COUCH_URL env variable', function() {
|
|
34
|
+
process.env.COUCH_URL = 'http://user:pass@myurl.com';
|
|
35
|
+
const config = {};
|
|
36
|
+
applyEnvVars(config);
|
|
37
|
+
assert.strictEqual(typeof config.url, 'string');
|
|
38
|
+
assert.strictEqual(config.url, process.env.COUCH_URL);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it('respects the COUCH_DATABASE env variable', function() {
|
|
42
|
+
process.env.COUCH_DATABASE = 'mydb';
|
|
43
|
+
const config = {};
|
|
44
|
+
applyEnvVars(config);
|
|
45
|
+
assert.strictEqual(typeof config.db, 'string');
|
|
46
|
+
assert.strictEqual(config.db, process.env.COUCH_DATABASE);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('respects the COUCH_BUFFER_SIZE env variable', function() {
|
|
50
|
+
process.env.COUCH_BUFFER_SIZE = '1000';
|
|
51
|
+
const config = {};
|
|
52
|
+
applyEnvVars(config);
|
|
53
|
+
assert.strictEqual(typeof config.bufferSize, 'number');
|
|
54
|
+
assert.strictEqual(config.bufferSize, 1000);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('respects the COUCH_PARALLELISM env variable', function() {
|
|
58
|
+
process.env.COUCH_PARALLELISM = '20';
|
|
59
|
+
const config = {};
|
|
60
|
+
applyEnvVars(config);
|
|
61
|
+
assert.strictEqual(typeof config.parallelism, 'number');
|
|
62
|
+
assert.strictEqual(config.parallelism, 20);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it('respects the COUCH_REQUEST_TIMEOUT env variable', function() {
|
|
66
|
+
process.env.COUCH_REQUEST_TIMEOUT = '10000';
|
|
67
|
+
const config = {};
|
|
68
|
+
applyEnvVars(config);
|
|
69
|
+
assert.strictEqual(typeof config.requestTimeout, 'number');
|
|
70
|
+
assert.strictEqual(config.requestTimeout, 10000);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it('respects the CLOUDANT_IAM_API_KEY env variable', function() {
|
|
74
|
+
const key = 'ABC123-ZYX987_cba789-xyz321';
|
|
75
|
+
process.env.CLOUDANT_IAM_API_KEY = key;
|
|
76
|
+
const config = {};
|
|
77
|
+
applyEnvVars(config);
|
|
78
|
+
assert.strictEqual(typeof config.iamApiKey, 'string');
|
|
79
|
+
assert.strictEqual(config.iamApiKey, key);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it('respects the CLOUDANT_IAM_TOKEN_URL env variable', function() {
|
|
83
|
+
const u = 'https://testhost.example:1234/identity/token';
|
|
84
|
+
process.env.CLOUDANT_IAM_TOKEN_URL = u;
|
|
85
|
+
const config = {};
|
|
86
|
+
applyEnvVars(config);
|
|
87
|
+
assert.strictEqual(typeof config.iamTokenUrl, 'string');
|
|
88
|
+
assert.strictEqual(config.iamTokenUrl, u);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
it('respects the COUCH_LOG env variable', function() {
|
|
92
|
+
process.env.COUCH_LOG = 'my.log';
|
|
93
|
+
const config = {};
|
|
94
|
+
applyEnvVars(config);
|
|
95
|
+
assert.strictEqual(typeof config.log, 'string');
|
|
96
|
+
assert.strictEqual(config.log, process.env.COUCH_LOG);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
it('respects the COUCH_RESUME env variable', function() {
|
|
100
|
+
process.env.COUCH_RESUME = 'true';
|
|
101
|
+
const config = {};
|
|
102
|
+
applyEnvVars(config);
|
|
103
|
+
assert.strictEqual(typeof config.resume, 'boolean');
|
|
104
|
+
assert.strictEqual(config.resume, true);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it('respects the COUCH_OUTPUT env variable', function() {
|
|
108
|
+
process.env.COUCH_OUTPUT = 'myfile.txt';
|
|
109
|
+
const config = {};
|
|
110
|
+
applyEnvVars(config);
|
|
111
|
+
assert.strictEqual(typeof config.output, 'string');
|
|
112
|
+
assert.strictEqual(config.output, process.env.COUCH_OUTPUT);
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it('respects the COUCH_MODE env variable', function() {
|
|
116
|
+
process.env.COUCH_MODE = 'shallow';
|
|
117
|
+
const config = {};
|
|
118
|
+
applyEnvVars(config);
|
|
119
|
+
assert.strictEqual(typeof config.mode, 'string');
|
|
120
|
+
assert.strictEqual(config.mode, 'shallow');
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it('respects the COUCH_QUIET env variable', function() {
|
|
124
|
+
process.env.COUCH_QUIET = 'true';
|
|
125
|
+
const config = {};
|
|
126
|
+
applyEnvVars(config);
|
|
127
|
+
assert.strictEqual(typeof config.quiet, 'boolean');
|
|
128
|
+
assert.strictEqual(config.quiet, true);
|
|
129
|
+
});
|
|
130
|
+
});
|