@cloudant/couchbackup 2.9.10 → 2.9.11-SNAPSHOT.115
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-warnings.pb +2 -2
- package/.scannerwork/scanner-report/changesets-36.pb +1 -0
- package/.scannerwork/scanner-report/changesets-39.pb +1 -0
- package/.scannerwork/scanner-report/changesets-42.pb +1 -0
- package/.scannerwork/scanner-report/changesets-45.pb +1 -0
- package/.scannerwork/scanner-report/changesets-53.pb +1 -0
- package/.scannerwork/scanner-report/changesets-54.pb +1 -0
- package/.scannerwork/scanner-report/changesets-55.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-61.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-64.pb +1 -0
- package/.scannerwork/scanner-report/changesets-65.pb +1 -0
- package/.scannerwork/scanner-report/component-1.pb +2 -2
- package/.scannerwork/scanner-report/component-10.pb +1 -1
- 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-2.pb +1 -1
- package/.scannerwork/scanner-report/component-26.pb +1 -1
- package/.scannerwork/scanner-report/component-27.pb +1 -1
- package/.scannerwork/scanner-report/component-28.pb +1 -1
- package/.scannerwork/scanner-report/component-29.pb +1 -1
- package/.scannerwork/scanner-report/component-3.pb +1 -1
- package/.scannerwork/scanner-report/component-30.pb +1 -1
- package/.scannerwork/scanner-report/component-31.pb +1 -1
- package/.scannerwork/scanner-report/component-32.pb +1 -1
- package/.scannerwork/scanner-report/component-33.pb +1 -1
- package/.scannerwork/scanner-report/component-34.pb +1 -1
- package/.scannerwork/scanner-report/component-35.pb +1 -1
- package/.scannerwork/scanner-report/component-36.pb +1 -0
- package/.scannerwork/scanner-report/component-37.pb +1 -0
- package/.scannerwork/scanner-report/component-38.pb +1 -0
- package/.scannerwork/scanner-report/component-39.pb +1 -0
- package/.scannerwork/scanner-report/component-4.pb +1 -1
- package/.scannerwork/scanner-report/component-42.pb +1 -0
- package/.scannerwork/scanner-report/component-45.pb +1 -0
- package/.scannerwork/scanner-report/component-49.pb +1 -1
- package/.scannerwork/scanner-report/component-5.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 -0
- package/.scannerwork/scanner-report/component-56.pb +1 -1
- 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 -1
- package/.scannerwork/scanner-report/component-6.pb +1 -1
- package/.scannerwork/scanner-report/component-60.pb +1 -1
- package/.scannerwork/scanner-report/component-61.pb +1 -0
- package/.scannerwork/scanner-report/component-62.pb +1 -0
- package/.scannerwork/scanner-report/component-63.pb +1 -0
- package/.scannerwork/scanner-report/component-64.pb +1 -0
- package/.scannerwork/scanner-report/component-65.pb +1 -1
- package/.scannerwork/scanner-report/component-67.pb +1 -1
- package/.scannerwork/scanner-report/component-7.pb +1 -1
- package/.scannerwork/scanner-report/component-8.pb +1 -1
- package/.scannerwork/scanner-report/component-9.pb +1 -1
- package/.scannerwork/scanner-report/coverages-10.pb +0 -0
- 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-2.pb +0 -0
- package/.scannerwork/scanner-report/coverages-26.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-29.pb +0 -0
- package/.scannerwork/scanner-report/coverages-3.pb +0 -0
- package/.scannerwork/scanner-report/coverages-30.pb +0 -0
- package/.scannerwork/scanner-report/coverages-31.pb +0 -0
- package/.scannerwork/scanner-report/coverages-32.pb +0 -0
- package/.scannerwork/scanner-report/coverages-33.pb +0 -0
- package/.scannerwork/scanner-report/coverages-34.pb +0 -0
- package/.scannerwork/scanner-report/coverages-35.pb +0 -0
- package/.scannerwork/scanner-report/coverages-39.pb +0 -0
- package/.scannerwork/scanner-report/coverages-4.pb +0 -0
- package/.scannerwork/scanner-report/coverages-42.pb +0 -0
- package/.scannerwork/scanner-report/coverages-45.pb +0 -0
- package/.scannerwork/scanner-report/coverages-49.pb +0 -0
- package/.scannerwork/scanner-report/coverages-5.pb +0 -0
- package/.scannerwork/scanner-report/coverages-52.pb +0 -0
- package/.scannerwork/scanner-report/coverages-53.pb +0 -0
- package/.scannerwork/scanner-report/coverages-54.pb +0 -0
- package/.scannerwork/scanner-report/coverages-55.pb +0 -0
- package/.scannerwork/scanner-report/coverages-56.pb +0 -0
- package/.scannerwork/scanner-report/coverages-57.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-6.pb +0 -0
- package/.scannerwork/scanner-report/coverages-60.pb +0 -0
- package/.scannerwork/scanner-report/coverages-61.pb +0 -0
- package/.scannerwork/scanner-report/coverages-63.pb +0 -0
- package/.scannerwork/scanner-report/coverages-64.pb +0 -0
- package/.scannerwork/scanner-report/coverages-65.pb +0 -0
- package/.scannerwork/scanner-report/coverages-7.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-14.pb +3 -0
- package/.scannerwork/scanner-report/duplications-2.pb +0 -2
- package/.scannerwork/scanner-report/duplications-26.pb +3 -0
- package/.scannerwork/scanner-report/duplications-27.pb +1 -1
- package/.scannerwork/scanner-report/duplications-28.pb +2 -0
- package/.scannerwork/scanner-report/duplications-29.pb +0 -2
- package/.scannerwork/scanner-report/duplications-32.pb +0 -3
- package/.scannerwork/scanner-report/duplications-34.pb +0 -2
- package/.scannerwork/scanner-report/duplications-4.pb +2 -1
- package/.scannerwork/scanner-report/duplications-42.pb +2 -0
- package/.scannerwork/scanner-report/duplications-45.pb +2 -0
- package/.scannerwork/scanner-report/duplications-52.pb +0 -3
- package/.scannerwork/scanner-report/duplications-55.pb +2 -0
- package/.scannerwork/scanner-report/duplications-59.pb +0 -2
- package/.scannerwork/scanner-report/duplications-60.pb +1 -1
- package/.scannerwork/scanner-report/duplications-9.pb +2 -0
- package/.scannerwork/scanner-report/measures-10.pb +0 -0
- 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-2.pb +0 -0
- package/.scannerwork/scanner-report/measures-26.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-29.pb +0 -0
- package/.scannerwork/scanner-report/measures-3.pb +0 -0
- package/.scannerwork/scanner-report/measures-30.pb +0 -0
- package/.scannerwork/scanner-report/measures-31.pb +0 -0
- package/.scannerwork/scanner-report/measures-32.pb +0 -0
- package/.scannerwork/scanner-report/measures-33.pb +0 -0
- package/.scannerwork/scanner-report/measures-34.pb +0 -0
- package/.scannerwork/scanner-report/measures-35.pb +0 -0
- package/.scannerwork/scanner-report/measures-38.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-42.pb +0 -0
- package/.scannerwork/scanner-report/measures-45.pb +0 -0
- package/.scannerwork/scanner-report/measures-49.pb +0 -0
- package/.scannerwork/scanner-report/measures-5.pb +0 -0
- package/.scannerwork/scanner-report/measures-52.pb +0 -0
- package/.scannerwork/scanner-report/measures-53.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-57.pb +0 -0
- package/.scannerwork/scanner-report/measures-58.pb +16 -0
- package/.scannerwork/scanner-report/measures-59.pb +0 -0
- package/.scannerwork/scanner-report/measures-6.pb +0 -0
- package/.scannerwork/scanner-report/measures-60.pb +0 -0
- package/.scannerwork/scanner-report/measures-61.pb +0 -0
- package/.scannerwork/scanner-report/measures-63.pb +0 -0
- package/.scannerwork/scanner-report/measures-64.pb +15 -0
- package/.scannerwork/scanner-report/measures-65.pb +0 -0
- package/.scannerwork/scanner-report/measures-67.pb +0 -0
- package/.scannerwork/scanner-report/measures-7.pb +0 -0
- package/.scannerwork/scanner-report/measures-8.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-10.txt +18 -263
- package/.scannerwork/scanner-report/source-11.txt +127 -103
- package/.scannerwork/scanner-report/source-12.txt +78 -32
- package/.scannerwork/scanner-report/source-13.txt +49 -115
- package/.scannerwork/scanner-report/source-14.txt +229 -89
- package/.scannerwork/scanner-report/source-2.txt +47 -54
- package/.scannerwork/scanner-report/source-26.txt +107 -123
- package/.scannerwork/scanner-report/source-27.txt +194 -114
- package/.scannerwork/scanner-report/source-28.txt +271 -14
- package/.scannerwork/scanner-report/source-29.txt +344 -271
- package/.scannerwork/scanner-report/source-3.txt +32 -163
- package/.scannerwork/scanner-report/source-30.txt +585 -52
- package/.scannerwork/scanner-report/source-31.txt +17 -124
- package/.scannerwork/scanner-report/source-32.txt +13 -108
- package/.scannerwork/scanner-report/source-33.txt +47 -47
- package/.scannerwork/scanner-report/source-34.txt +115 -193
- package/.scannerwork/scanner-report/source-35.txt +61 -31
- package/.scannerwork/scanner-report/{source-66.txt → source-37.txt} +146 -146
- package/.scannerwork/scanner-report/source-38.txt +509 -0
- package/.scannerwork/scanner-report/source-39.txt +418 -0
- package/.scannerwork/scanner-report/source-4.txt +94 -67
- package/.scannerwork/scanner-report/source-42.txt +175 -0
- package/.scannerwork/scanner-report/source-45.txt +190 -0
- package/.scannerwork/scanner-report/source-49.txt +93 -345
- package/.scannerwork/scanner-report/source-5.txt +82 -93
- package/.scannerwork/scanner-report/source-52.txt +17 -105
- package/.scannerwork/scanner-report/source-53.txt +111 -0
- package/.scannerwork/scanner-report/source-54.txt +46 -167
- package/.scannerwork/scanner-report/source-55.txt +92 -0
- package/.scannerwork/scanner-report/source-56.txt +57 -395
- package/.scannerwork/scanner-report/source-57.txt +118 -0
- package/.scannerwork/scanner-report/source-58.txt +178 -0
- package/.scannerwork/scanner-report/source-59.txt +107 -168
- package/.scannerwork/scanner-report/source-6.txt +138 -146
- package/.scannerwork/scanner-report/source-60.txt +52 -152
- package/.scannerwork/scanner-report/source-61.txt +281 -0
- package/.scannerwork/scanner-report/source-63.txt +164 -0
- package/.scannerwork/scanner-report/source-64.txt +104 -0
- package/.scannerwork/scanner-report/source-65.txt +54 -509
- package/.scannerwork/scanner-report/source-67.txt +167 -77
- package/.scannerwork/scanner-report/source-7.txt +19 -65
- package/.scannerwork/scanner-report/source-8.txt +14 -39
- package/.scannerwork/scanner-report/source-9.txt +131 -17
- package/.scannerwork/scanner-report/symbols-10.pb +10 -353
- package/.scannerwork/scanner-report/symbols-11.pb +116 -30
- package/.scannerwork/scanner-report/symbols-12.pb +60 -20
- package/.scannerwork/scanner-report/symbols-13.pb +42 -32
- package/.scannerwork/scanner-report/symbols-14.pb +393 -41
- package/.scannerwork/scanner-report/symbols-2.pb +35 -41
- package/.scannerwork/scanner-report/symbols-26.pb +97 -85
- package/.scannerwork/scanner-report/symbols-27.pb +418 -102
- package/.scannerwork/scanner-report/symbols-28.pb +486 -11
- package/.scannerwork/scanner-report/symbols-29.pb +458 -450
- package/.scannerwork/scanner-report/symbols-3.pb +27 -144
- package/.scannerwork/scanner-report/symbols-30.pb +1254 -60
- package/.scannerwork/scanner-report/symbols-31.pb +17 -116
- package/.scannerwork/scanner-report/symbols-32.pb +13 -96
- package/.scannerwork/scanner-report/symbols-33.pb +44 -35
- package/.scannerwork/scanner-report/symbols-34.pb +81 -414
- package/.scannerwork/scanner-report/symbols-35.pb +30 -27
- package/.scannerwork/scanner-report/symbols-39.pb +610 -0
- package/.scannerwork/scanner-report/symbols-4.pb +76 -43
- package/.scannerwork/scanner-report/symbols-42.pb +153 -0
- package/.scannerwork/scanner-report/symbols-45.pb +180 -0
- package/.scannerwork/scanner-report/symbols-49.pb +27 -493
- package/.scannerwork/scanner-report/symbols-5.pb +68 -58
- package/.scannerwork/scanner-report/symbols-52.pb +13 -76
- package/.scannerwork/scanner-report/symbols-53.pb +59 -0
- package/.scannerwork/scanner-report/symbols-54.pb +20 -0
- package/.scannerwork/scanner-report/symbols-55.pb +44 -0
- package/.scannerwork/scanner-report/symbols-56.pb +46 -610
- package/.scannerwork/scanner-report/symbols-57.pb +30 -0
- package/.scannerwork/scanner-report/symbols-58.pb +144 -0
- package/.scannerwork/scanner-report/symbols-59.pb +33 -180
- package/.scannerwork/scanner-report/symbols-6.pb +100 -114
- package/.scannerwork/scanner-report/symbols-60.pb +41 -152
- package/.scannerwork/scanner-report/symbols-61.pb +354 -0
- package/.scannerwork/scanner-report/symbols-63.pb +126 -0
- package/.scannerwork/scanner-report/symbols-64.pb +42 -0
- package/.scannerwork/scanner-report/symbols-65.pb +15 -0
- package/.scannerwork/scanner-report/symbols-7.pb +9 -45
- package/.scannerwork/scanner-report/symbols-8.pb +9 -15
- package/.scannerwork/scanner-report/symbols-9.pb +102 -14
- package/.scannerwork/scanner-report/syntax-highlightings-10.pb +26 -252
- package/.scannerwork/scanner-report/syntax-highlightings-11.pb +104 -83
- package/.scannerwork/scanner-report/syntax-highlightings-12.pb +78 -32
- package/.scannerwork/scanner-report/syntax-highlightings-13.pb +47 -94
- package/.scannerwork/scanner-report/syntax-highlightings-14.pb +298 -85
- package/.scannerwork/scanner-report/syntax-highlightings-2.pb +63 -46
- package/.scannerwork/scanner-report/syntax-highlightings-26.pb +147 -156
- package/.scannerwork/scanner-report/syntax-highlightings-27.pb +290 -186
- package/.scannerwork/scanner-report/syntax-highlightings-28.pb +625 -25
- package/.scannerwork/scanner-report/syntax-highlightings-29.pb +346 -375
- package/.scannerwork/scanner-report/syntax-highlightings-3.pb +30 -205
- package/.scannerwork/scanner-report/syntax-highlightings-30.pb +840 -63
- package/.scannerwork/scanner-report/syntax-highlightings-31.pb +27 -98
- package/.scannerwork/scanner-report/syntax-highlightings-32.pb +19 -147
- package/.scannerwork/scanner-report/syntax-highlightings-33.pb +74 -59
- package/.scannerwork/scanner-report/syntax-highlightings-34.pb +148 -288
- package/.scannerwork/scanner-report/syntax-highlightings-35.pb +80 -45
- package/.scannerwork/scanner-report/{syntax-highlightings-66.pb → syntax-highlightings-37.pb} +92 -91
- package/.scannerwork/scanner-report/syntax-highlightings-38.pb +3746 -0
- package/.scannerwork/scanner-report/syntax-highlightings-39.pb +648 -0
- package/.scannerwork/scanner-report/syntax-highlightings-4.pb +122 -54
- package/.scannerwork/scanner-report/syntax-highlightings-42.pb +214 -0
- package/.scannerwork/scanner-report/syntax-highlightings-45.pb +225 -0
- package/.scannerwork/scanner-report/syntax-highlightings-49.pb +102 -594
- package/.scannerwork/scanner-report/syntax-highlightings-5.pb +66 -94
- package/.scannerwork/scanner-report/syntax-highlightings-52.pb +16 -129
- package/.scannerwork/scanner-report/syntax-highlightings-53.pb +133 -0
- package/.scannerwork/scanner-report/syntax-highlightings-54.pb +53 -938
- package/.scannerwork/scanner-report/syntax-highlightings-55.pb +90 -0
- package/.scannerwork/scanner-report/syntax-highlightings-56.pb +63 -616
- package/.scannerwork/scanner-report/syntax-highlightings-57.pb +113 -0
- package/.scannerwork/scanner-report/syntax-highlightings-58.pb +243 -0
- package/.scannerwork/scanner-report/syntax-highlightings-59.pb +96 -192
- package/.scannerwork/scanner-report/syntax-highlightings-6.pb +178 -168
- package/.scannerwork/scanner-report/syntax-highlightings-60.pb +47 -183
- package/.scannerwork/scanner-report/syntax-highlightings-61.pb +285 -0
- package/.scannerwork/scanner-report/syntax-highlightings-63.pb +213 -0
- package/.scannerwork/scanner-report/syntax-highlightings-64.pb +116 -0
- package/.scannerwork/scanner-report/syntax-highlightings-65.pb +43 -3737
- package/.scannerwork/scanner-report/syntax-highlightings-67.pb +917 -71
- package/.scannerwork/scanner-report/syntax-highlightings-7.pb +18 -63
- package/.scannerwork/scanner-report/syntax-highlightings-8.pb +19 -25
- package/.scannerwork/scanner-report/syntax-highlightings-9.pb +197 -15
- package/package.json +1 -1
- package/test-16-results.xml +156 -156
- package/test-18-results.xml +153 -153
- package/test-iam-18-results.xml +50 -50
- package/.scannerwork/scanner-report/changesets-15.pb +0 -1
- package/.scannerwork/scanner-report/changesets-19.pb +0 -1
- package/.scannerwork/scanner-report/changesets-20.pb +0 -1
- package/.scannerwork/scanner-report/changesets-21.pb +0 -1
- package/.scannerwork/scanner-report/changesets-22.pb +0 -1
- package/.scannerwork/scanner-report/changesets-23.pb +0 -1
- package/.scannerwork/scanner-report/changesets-24.pb +0 -1
- package/.scannerwork/scanner-report/changesets-25.pb +0 -1
- package/.scannerwork/scanner-report/changesets-47.pb +0 -1
- package/.scannerwork/scanner-report/changesets-48.pb +0 -1
- package/.scannerwork/scanner-report/changesets-50.pb +0 -1
- package/.scannerwork/scanner-report/changesets-51.pb +0 -1
- package/.scannerwork/scanner-report/changesets-67.pb +0 -1
- package/.scannerwork/scanner-report/changesets-68.pb +0 -1
- package/.scannerwork/scanner-report/component-15.pb +0 -1
- package/.scannerwork/scanner-report/component-19.pb +0 -1
- package/.scannerwork/scanner-report/component-20.pb +0 -1
- package/.scannerwork/scanner-report/component-21.pb +0 -1
- package/.scannerwork/scanner-report/component-22.pb +0 -1
- package/.scannerwork/scanner-report/component-23.pb +0 -1
- package/.scannerwork/scanner-report/component-24.pb +0 -1
- package/.scannerwork/scanner-report/component-25.pb +0 -1
- package/.scannerwork/scanner-report/component-47.pb +0 -1
- package/.scannerwork/scanner-report/component-48.pb +0 -1
- package/.scannerwork/scanner-report/component-50.pb +0 -1
- package/.scannerwork/scanner-report/component-51.pb +0 -1
- package/.scannerwork/scanner-report/component-66.pb +0 -1
- package/.scannerwork/scanner-report/component-68.pb +0 -1
- 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-23.pb +0 -0
- package/.scannerwork/scanner-report/coverages-24.pb +0 -0
- package/.scannerwork/scanner-report/coverages-25.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-50.pb +0 -0
- package/.scannerwork/scanner-report/coverages-51.pb +0 -0
- package/.scannerwork/scanner-report/coverages-67.pb +0 -0
- package/.scannerwork/scanner-report/duplications-21.pb +0 -3
- package/.scannerwork/scanner-report/duplications-68.pb +0 -0
- package/.scannerwork/scanner-report/duplications-8.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-23.pb +0 -0
- package/.scannerwork/scanner-report/measures-24.pb +0 -0
- package/.scannerwork/scanner-report/measures-25.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-50.pb +0 -0
- package/.scannerwork/scanner-report/measures-51.pb +0 -0
- package/.scannerwork/scanner-report/source-19.txt +0 -114
- package/.scannerwork/scanner-report/source-20.txt +0 -35
- package/.scannerwork/scanner-report/source-21.txt +0 -244
- package/.scannerwork/scanner-report/source-22.txt +0 -36
- package/.scannerwork/scanner-report/source-23.txt +0 -625
- package/.scannerwork/scanner-report/source-24.txt +0 -34
- package/.scannerwork/scanner-report/source-25.txt +0 -156
- package/.scannerwork/scanner-report/source-47.txt +0 -63
- package/.scannerwork/scanner-report/source-48.txt +0 -68
- package/.scannerwork/scanner-report/source-50.txt +0 -29
- package/.scannerwork/scanner-report/source-51.txt +0 -100
- package/.scannerwork/scanner-report/symbols-19.pb +0 -28
- package/.scannerwork/scanner-report/symbols-20.pb +0 -17
- package/.scannerwork/scanner-report/symbols-21.pb +0 -394
- package/.scannerwork/scanner-report/symbols-22.pb +0 -14
- package/.scannerwork/scanner-report/symbols-23.pb +0 -1254
- package/.scannerwork/scanner-report/symbols-24.pb +0 -10
- package/.scannerwork/scanner-report/symbols-25.pb +0 -112
- package/.scannerwork/scanner-report/symbols-47.pb +0 -43
- package/.scannerwork/scanner-report/symbols-48.pb +0 -45
- package/.scannerwork/scanner-report/symbols-50.pb +0 -9
- package/.scannerwork/scanner-report/symbols-51.pb +0 -69
- package/.scannerwork/scanner-report/symbols-67.pb +0 -30
- package/.scannerwork/scanner-report/syntax-highlightings-19.pb +0 -138
- package/.scannerwork/scanner-report/syntax-highlightings-20.pb +0 -63
- package/.scannerwork/scanner-report/syntax-highlightings-21.pb +0 -329
- package/.scannerwork/scanner-report/syntax-highlightings-22.pb +0 -54
- package/.scannerwork/scanner-report/syntax-highlightings-23.pb +0 -887
- package/.scannerwork/scanner-report/syntax-highlightings-24.pb +0 -50
- package/.scannerwork/scanner-report/syntax-highlightings-25.pb +0 -223
- package/.scannerwork/scanner-report/syntax-highlightings-47.pb +0 -82
- package/.scannerwork/scanner-report/syntax-highlightings-48.pb +0 -110
- package/.scannerwork/scanner-report/syntax-highlightings-50.pb +0 -48
- package/.scannerwork/scanner-report/syntax-highlightings-51.pb +0 -105
- /package/.scannerwork/scanner-report/{coverages-68.pb → coverages-36.pb} +0 -0
- /package/.scannerwork/scanner-report/{coverages-15.pb → coverages-62.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-15.pb → duplications-36.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-19.pb → duplications-39.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-20.pb → duplications-53.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-22.pb → duplications-54.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-23.pb → duplications-57.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-24.pb → duplications-58.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-25.pb → duplications-61.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-47.pb → duplications-62.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-48.pb → duplications-63.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-51.pb → duplications-64.pb} +0 -0
- /package/.scannerwork/scanner-report/{duplications-67.pb → duplications-65.pb} +0 -0
- /package/.scannerwork/scanner-report/{issues-31.pb → issues-11.pb} +0 -0
- /package/.scannerwork/scanner-report/{issues-21.pb → issues-14.pb} +0 -0
- /package/.scannerwork/scanner-report/{issues-49.pb → issues-29.pb} +0 -0
- /package/.scannerwork/scanner-report/{issues-35.pb → issues-3.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-68.pb → measures-36.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-66.pb → measures-37.pb} +0 -0
- /package/.scannerwork/scanner-report/{measures-15.pb → measures-62.pb} +0 -0
- /package/.scannerwork/scanner-report/{source-68.txt → source-36.txt} +0 -0
- /package/.scannerwork/scanner-report/{source-15.txt → source-62.txt} +0 -0
- /package/.scannerwork/scanner-report/{symbols-68.pb → symbols-36.pb} +0 -0
- /package/.scannerwork/scanner-report/{symbols-15.pb → symbols-62.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-68.pb → syntax-highlightings-36.pb} +0 -0
- /package/.scannerwork/scanner-report/{syntax-highlightings-15.pb → syntax-highlightings-62.pb} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright © 2017
|
|
1
|
+
// Copyright © 2017 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,271 +11,26 @@
|
|
|
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 async = require('async');
|
|
17
|
-
const events = require('events');
|
|
18
|
-
const fs = require('fs');
|
|
19
|
-
const error = require('./error.js');
|
|
20
|
-
const spoolchanges = require('./spoolchanges.js');
|
|
21
|
-
const logfilesummary = require('./logfilesummary.js');
|
|
22
|
-
const logfilegetbatches = require('./logfilegetbatches.js');
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* Read documents from a database to be backed up.
|
|
26
|
-
*
|
|
27
|
-
* @param {string} db - `@cloudant/cloudant` DB object for source database.
|
|
28
|
-
* @param {number} blocksize - number of documents to download in single request
|
|
29
|
-
* @param {number} parallelism - number of concurrent downloads
|
|
30
|
-
* @param {string} log - path to log file to use
|
|
31
|
-
* @param {boolean} resume - whether to resume from an existing log file
|
|
32
|
-
* @returns EventEmitter with following events:
|
|
33
|
-
* - `received` - called with a block of documents to write to backup
|
|
34
|
-
* - `error` - on error
|
|
35
|
-
* - `finished` - when backup process is finished (either complete or errored)
|
|
36
|
-
*/
|
|
37
|
-
module.exports = function(db, options) {
|
|
38
|
-
const ee = new events.EventEmitter();
|
|
39
|
-
const start = new Date().getTime(); // backup start time
|
|
40
|
-
const batchesPerDownloadSession = 50; // max batches to read from log file for download at a time (prevent OOM)
|
|
41
|
-
|
|
42
|
-
function proceedWithBackup() {
|
|
43
|
-
if (options.resume) {
|
|
44
|
-
// pick up from existing log file from previous run
|
|
45
|
-
downloadRemainingBatches(options.log, db, ee, start, batchesPerDownloadSession, options.parallelism);
|
|
46
|
-
} else {
|
|
47
|
-
// create new log file and process
|
|
48
|
-
spoolchanges(db, options.log, options.bufferSize, ee, function(err) {
|
|
49
|
-
if (err) {
|
|
50
|
-
ee.emit('error', err);
|
|
51
|
-
} else {
|
|
52
|
-
downloadRemainingBatches(options.log, db, ee, start, batchesPerDownloadSession, options.parallelism);
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
validateBulkGetSupport(db, function(err) {
|
|
59
|
-
if (err) {
|
|
60
|
-
return ee.emit('error', err);
|
|
61
|
-
} else {
|
|
62
|
-
proceedWithBackup();
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
14
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Validate /_bulk_get support for a specified database.
|
|
71
|
-
*
|
|
72
|
-
* @param {string} db - nodejs-cloudant db
|
|
73
|
-
* @param {function} callback - called on completion with signature (err)
|
|
74
|
-
*/
|
|
75
|
-
function validateBulkGetSupport(db, callback) {
|
|
76
|
-
db.service.postBulkGet({ db: db.db, docs: [] }).then(() => { callback(); }).catch(err => {
|
|
77
|
-
err = error.convertResponseError(err, function(err) {
|
|
78
|
-
switch (err.status) {
|
|
79
|
-
case undefined:
|
|
80
|
-
// There was no status code on the error
|
|
81
|
-
return err;
|
|
82
|
-
case 404:
|
|
83
|
-
return new error.BackupError('BulkGetError', 'Database does not support /_bulk_get endpoint');
|
|
84
|
-
default:
|
|
85
|
-
return new error.HTTPError(err);
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
callback(err);
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Download remaining batches in a log file, splitting batches into sets
|
|
94
|
-
* to avoid enqueueing too many in one go.
|
|
95
|
-
*
|
|
96
|
-
* @param {string} log - log file name to maintain download state
|
|
97
|
-
* @param {string} db - nodejs-cloudant db
|
|
98
|
-
* @param {events.EventEmitter} ee - event emitter to emit received events on
|
|
99
|
-
* @param {time} startTime - start time for backup process
|
|
100
|
-
* @param {number} batchesPerDownloadSession - max batches to enqueue for
|
|
101
|
-
* download at a time. As batches contain many doc IDs, this helps avoid
|
|
102
|
-
* exhausting memory.
|
|
103
|
-
* @param {number} parallelism - number of concurrent downloads
|
|
104
|
-
* @returns function to call do download remaining batches with signature
|
|
105
|
-
* (err, {batches: batch, docs: doccount}) {@see spoolchanges}.
|
|
106
|
-
*/
|
|
107
|
-
function downloadRemainingBatches(log, db, ee, startTime, batchesPerDownloadSession, parallelism) {
|
|
108
|
-
let total = 0; // running total of documents downloaded so far
|
|
109
|
-
let noRemainingBatches = false;
|
|
15
|
+
/* global describe it */
|
|
16
|
+
'use strict';
|
|
110
17
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
function downloadSingleBatchSet(done) {
|
|
114
|
-
// Fetch the doc IDs for the batches in the current set to
|
|
115
|
-
// download them.
|
|
116
|
-
function batchSetComplete(err, data) {
|
|
117
|
-
if (!err) {
|
|
118
|
-
total = data.total;
|
|
119
|
-
}
|
|
120
|
-
done(err);
|
|
121
|
-
}
|
|
122
|
-
function processRetrievedBatches(err, batches) {
|
|
123
|
-
if (!err) {
|
|
124
|
-
// process them in parallelised queue
|
|
125
|
-
processBatchSet(db, parallelism, log, batches, ee, startTime, total, batchSetComplete);
|
|
126
|
-
} else {
|
|
127
|
-
batchSetComplete(err);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
18
|
+
delete require.cache[require.resolve('./citestutils.js')];
|
|
19
|
+
const u = require('./citestutils.js');
|
|
130
20
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
} else {
|
|
138
|
-
if (batchSetIds.length === 0) {
|
|
139
|
-
noRemainingBatches = true;
|
|
140
|
-
return done();
|
|
141
|
-
}
|
|
142
|
-
logfilegetbatches(log, batchSetIds, processRetrievedBatches);
|
|
143
|
-
}
|
|
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', function(done) {
|
|
24
|
+
// Allow up to 60 s for backup and restore of animaldb
|
|
25
|
+
u.setTimeout(this, 60);
|
|
26
|
+
u.testDirectBackupAndRestore(params, 'animaldb', this.dbName, done);
|
|
144
27
|
});
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
ee.emit('finished', { total: total });
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
async.doUntil(downloadSingleBatchSet, isFinished, onComplete);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
/**
|
|
158
|
-
* Return a set of uncompleted download batch IDs from the log file.
|
|
159
|
-
*
|
|
160
|
-
* @param {string} log - log file path
|
|
161
|
-
* @param {number} batchesPerDownloadSession - maximum IDs to return
|
|
162
|
-
* @param {function} callback - sign (err, batchSetIds array)
|
|
163
|
-
*/
|
|
164
|
-
function readBatchSetIdsFromLogFile(log, batchesPerDownloadSession, callback) {
|
|
165
|
-
logfilesummary(log, function processSummary(err, summary) {
|
|
166
|
-
if (!err) {
|
|
167
|
-
if (!summary.changesComplete) {
|
|
168
|
-
callback(new error.BackupError('IncompleteChangesInLogFile',
|
|
169
|
-
'WARNING: Changes did not finish spooling'));
|
|
170
|
-
return;
|
|
171
|
-
}
|
|
172
|
-
if (Object.keys(summary.batches).length === 0) {
|
|
173
|
-
return callback(null, []);
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
// batch IDs are the property names of summary.batches
|
|
177
|
-
const batchSetIds = getPropertyNames(summary.batches, batchesPerDownloadSession);
|
|
178
|
-
callback(null, batchSetIds);
|
|
179
|
-
} else {
|
|
180
|
-
callback(err);
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Download a set of batches retrieved from a log file. When a download is
|
|
187
|
-
* complete, add a line to the logfile indicating such.
|
|
188
|
-
*
|
|
189
|
-
* @param {any} db - nodejs-cloudant database
|
|
190
|
-
* @param {any} parallelism - number of concurrent requests to make
|
|
191
|
-
* @param {any} log - log file to drive downloads from
|
|
192
|
-
* @param {any} batches - batches to download
|
|
193
|
-
* @param {any} ee - event emitter for progress. This funciton emits
|
|
194
|
-
* received and error events.
|
|
195
|
-
* @param {any} start - time backup started, to report deltas
|
|
196
|
-
* @param {any} grandtotal - count of documents downloaded prior to this set
|
|
197
|
-
* of batches
|
|
198
|
-
* @param {any} callback - completion callback, (err, {total: number}).
|
|
199
|
-
*/
|
|
200
|
-
function processBatchSet(db, parallelism, log, batches, ee, start, grandtotal, callback) {
|
|
201
|
-
let hasErrored = false;
|
|
202
|
-
let total = grandtotal;
|
|
203
|
-
|
|
204
|
-
// queue to process the fetch requests in an orderly fashion using _bulk_get
|
|
205
|
-
const q = async.queue(function(payload, done) {
|
|
206
|
-
const output = [];
|
|
207
|
-
const thisBatch = payload.batch;
|
|
208
|
-
delete payload.batch;
|
|
209
|
-
delete payload.command;
|
|
210
|
-
|
|
211
|
-
function logCompletedBatch(batch) {
|
|
212
|
-
if (log) {
|
|
213
|
-
fs.appendFile(log, ':d batch' + thisBatch + '\n', done);
|
|
214
|
-
} else {
|
|
215
|
-
done();
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
// do the /db/_bulk_get request
|
|
220
|
-
db.service.postBulkGet({
|
|
221
|
-
db: db.db,
|
|
222
|
-
revs: true,
|
|
223
|
-
docs: payload.docs
|
|
224
|
-
}).then(response => {
|
|
225
|
-
// create an output array with the docs returned
|
|
226
|
-
response.result.results.forEach(function(d) {
|
|
227
|
-
if (d.docs) {
|
|
228
|
-
d.docs.forEach(function(doc) {
|
|
229
|
-
if (doc.ok) {
|
|
230
|
-
output.push(doc.ok);
|
|
231
|
-
}
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
});
|
|
235
|
-
total += output.length;
|
|
236
|
-
const t = (new Date().getTime() - start) / 1000;
|
|
237
|
-
ee.emit('received', {
|
|
238
|
-
batch: thisBatch,
|
|
239
|
-
data: output,
|
|
240
|
-
length: output.length,
|
|
241
|
-
time: t,
|
|
242
|
-
total: total
|
|
243
|
-
}, q, logCompletedBatch);
|
|
244
|
-
}).catch(err => {
|
|
245
|
-
if (!hasErrored) {
|
|
246
|
-
hasErrored = true;
|
|
247
|
-
err = error.convertResponseError(err);
|
|
248
|
-
// Kill the queue for fatal errors
|
|
249
|
-
q.kill();
|
|
250
|
-
ee.emit('error', err);
|
|
251
|
-
}
|
|
252
|
-
done();
|
|
28
|
+
it('should backup and restore largedb1g #slow', function(done) {
|
|
29
|
+
// Allow up to 30 m for backup and restore of largedb1g
|
|
30
|
+
// This is a long time but when many builds run in parallel it can take a
|
|
31
|
+
// while to get this done.
|
|
32
|
+
u.setTimeout(this, 30 * 60);
|
|
33
|
+
u.testDirectBackupAndRestore(params, 'largedb1g', this.dbName, done);
|
|
253
34
|
});
|
|
254
|
-
}, parallelism);
|
|
255
|
-
|
|
256
|
-
for (const i in batches) {
|
|
257
|
-
q.push(batches[i]);
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
q.drain(function() {
|
|
261
|
-
callback(null, { total: total });
|
|
262
35
|
});
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
/**
|
|
266
|
-
* Returns first N properties on an object.
|
|
267
|
-
*
|
|
268
|
-
* @param {object} obj - object with properties
|
|
269
|
-
* @param {number} count - number of properties to return
|
|
270
|
-
*/
|
|
271
|
-
function getPropertyNames(obj, count) {
|
|
272
|
-
// decide which batch numbers to deal with
|
|
273
|
-
const batchestofetch = [];
|
|
274
|
-
let j = 0;
|
|
275
|
-
for (const i in obj) {
|
|
276
|
-
batchestofetch.push(parseInt(i));
|
|
277
|
-
j++;
|
|
278
|
-
if (j >= count) break;
|
|
279
|
-
}
|
|
280
|
-
return batchestofetch;
|
|
281
|
-
}
|
|
36
|
+
});
|
|
@@ -11,108 +11,132 @@
|
|
|
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(done) {
|
|
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
|
+
done();
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('respects the COUCH_DATABASE env variable', function(done) {
|
|
43
|
+
process.env.COUCH_DATABASE = 'mydb';
|
|
44
|
+
const config = {};
|
|
45
|
+
applyEnvVars(config);
|
|
46
|
+
assert.strictEqual(typeof config.db, 'string');
|
|
47
|
+
assert.strictEqual(config.db, process.env.COUCH_DATABASE);
|
|
48
|
+
done();
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('respects the COUCH_BUFFER_SIZE env variable', function(done) {
|
|
52
|
+
process.env.COUCH_BUFFER_SIZE = '1000';
|
|
53
|
+
const config = {};
|
|
54
|
+
applyEnvVars(config);
|
|
55
|
+
assert.strictEqual(typeof config.bufferSize, 'number');
|
|
56
|
+
assert.strictEqual(config.bufferSize, 1000);
|
|
57
|
+
done();
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('respects the COUCH_PARALLELISM env variable', function(done) {
|
|
61
|
+
process.env.COUCH_PARALLELISM = '20';
|
|
62
|
+
const config = {};
|
|
63
|
+
applyEnvVars(config);
|
|
64
|
+
assert.strictEqual(typeof config.parallelism, 'number');
|
|
65
|
+
assert.strictEqual(config.parallelism, 20);
|
|
66
|
+
done();
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('respects the COUCH_REQUEST_TIMEOUT env variable', function(done) {
|
|
70
|
+
process.env.COUCH_REQUEST_TIMEOUT = '10000';
|
|
71
|
+
const config = {};
|
|
72
|
+
applyEnvVars(config);
|
|
73
|
+
assert.strictEqual(typeof config.requestTimeout, 'number');
|
|
74
|
+
assert.strictEqual(config.requestTimeout, 10000);
|
|
75
|
+
done();
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
it('respects the CLOUDANT_IAM_API_KEY env variable', function(done) {
|
|
79
|
+
const key = 'ABC123-ZYX987_cba789-xyz321';
|
|
80
|
+
process.env.CLOUDANT_IAM_API_KEY = key;
|
|
81
|
+
const config = {};
|
|
82
|
+
applyEnvVars(config);
|
|
83
|
+
assert.strictEqual(typeof config.iamApiKey, 'string');
|
|
84
|
+
assert.strictEqual(config.iamApiKey, key);
|
|
85
|
+
done();
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it('respects the CLOUDANT_IAM_TOKEN_URL env variable', function(done) {
|
|
89
|
+
const u = 'https://testhost.example:1234/identity/token';
|
|
90
|
+
process.env.CLOUDANT_IAM_TOKEN_URL = u;
|
|
91
|
+
const config = {};
|
|
92
|
+
applyEnvVars(config);
|
|
93
|
+
assert.strictEqual(typeof config.iamTokenUrl, 'string');
|
|
94
|
+
assert.strictEqual(config.iamTokenUrl, u);
|
|
95
|
+
done();
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
it('respects the COUCH_LOG env variable', function(done) {
|
|
99
|
+
process.env.COUCH_LOG = 'my.log';
|
|
100
|
+
const config = {};
|
|
101
|
+
applyEnvVars(config);
|
|
102
|
+
assert.strictEqual(typeof config.log, 'string');
|
|
103
|
+
assert.strictEqual(config.log, process.env.COUCH_LOG);
|
|
104
|
+
done();
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it('respects the COUCH_RESUME env variable', function(done) {
|
|
108
|
+
process.env.COUCH_RESUME = 'true';
|
|
109
|
+
const config = {};
|
|
110
|
+
applyEnvVars(config);
|
|
111
|
+
assert.strictEqual(typeof config.resume, 'boolean');
|
|
112
|
+
assert.strictEqual(config.resume, true);
|
|
113
|
+
done();
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it('respects the COUCH_OUTPUT env variable', function(done) {
|
|
117
|
+
process.env.COUCH_OUTPUT = 'myfile.txt';
|
|
118
|
+
const config = {};
|
|
119
|
+
applyEnvVars(config);
|
|
120
|
+
assert.strictEqual(typeof config.output, 'string');
|
|
121
|
+
assert.strictEqual(config.output, process.env.COUCH_OUTPUT);
|
|
122
|
+
done();
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it('respects the COUCH_MODE env variable', function(done) {
|
|
126
|
+
process.env.COUCH_MODE = 'shallow';
|
|
127
|
+
const config = {};
|
|
128
|
+
applyEnvVars(config);
|
|
129
|
+
assert.strictEqual(typeof config.mode, 'string');
|
|
130
|
+
assert.strictEqual(config.mode, 'shallow');
|
|
131
|
+
done();
|
|
132
|
+
});
|
|
133
|
+
|
|
134
|
+
it('respects the COUCH_QUIET env variable', function(done) {
|
|
135
|
+
process.env.COUCH_QUIET = 'true';
|
|
136
|
+
const config = {};
|
|
137
|
+
applyEnvVars(config);
|
|
138
|
+
assert.strictEqual(typeof config.quiet, 'boolean');
|
|
139
|
+
assert.strictEqual(config.quiet, true);
|
|
140
|
+
done();
|
|
141
|
+
});
|
|
142
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright ©
|
|
1
|
+
// Copyright © 2018, 2021 IBM Corp. All rights reserved.
|
|
2
2
|
//
|
|
3
3
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
4
|
// you may not use this file except in compliance with the License.
|
|
@@ -11,36 +11,82 @@
|
|
|
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 */
|
|
14
16
|
'use strict';
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
const
|
|
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
|
-
|
|
18
|
+
const fs = require('fs');
|
|
19
|
+
const readline = require('readline');
|
|
20
|
+
const u = require('./citestutils.js');
|
|
21
|
+
const uuid = require('uuid').v4;
|
|
22
|
+
|
|
23
|
+
const params = { useApi: true };
|
|
24
|
+
|
|
25
|
+
describe(u.scenario('Concurrent database backups', params), function() {
|
|
26
|
+
it('should run concurrent API database backups correctly #slower', function(done) {
|
|
27
|
+
// Allow up to 900 s to backup and compare (it should be much faster)!
|
|
28
|
+
u.setTimeout(this, 900);
|
|
29
|
+
|
|
30
|
+
let doneCount = 0;
|
|
31
|
+
let doneErr;
|
|
32
|
+
const finished = function(err) {
|
|
33
|
+
doneCount++;
|
|
34
|
+
if (doneCount === 2) {
|
|
35
|
+
done(doneErr || err);
|
|
36
|
+
}
|
|
37
|
+
doneErr = err;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
const checkForEmptyBatches = function(fileName, cb) {
|
|
41
|
+
let foundEmptyBatch = false;
|
|
42
|
+
|
|
43
|
+
const rd = readline.createInterface({
|
|
44
|
+
input: fs.createReadStream(fileName),
|
|
45
|
+
output: fs.createWriteStream('/dev/null'),
|
|
46
|
+
terminal: false
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
rd.on('line', function(line) {
|
|
50
|
+
if (JSON.parse(line).length === 0) {
|
|
51
|
+
// Note: Empty batch arrays indicate that the running backup is
|
|
52
|
+
// incorrectly sharing a log file with another ongoing backup job.
|
|
53
|
+
foundEmptyBatch = true;
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
rd.on('close', function() {
|
|
58
|
+
if (foundEmptyBatch) {
|
|
59
|
+
cb(new Error(`Log file '${fileName}' contains empty batches`));
|
|
60
|
+
} else {
|
|
61
|
+
cb();
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
// [1] Run 'largedb2g' database backup
|
|
67
|
+
const actualBackup1 = `./${uuid()}`;
|
|
68
|
+
const output1 = fs.createWriteStream(actualBackup1);
|
|
69
|
+
output1.on('open', function() {
|
|
70
|
+
u.testBackup(params, 'largedb2g', output1, function(err) {
|
|
71
|
+
if (err) {
|
|
72
|
+
finished(err);
|
|
73
|
+
} else {
|
|
74
|
+
checkForEmptyBatches(actualBackup1, finished);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
// [2] Run 'largedb1g' database backup
|
|
80
|
+
const actualBackup2 = `./${uuid()}`;
|
|
81
|
+
const output2 = fs.createWriteStream(actualBackup2);
|
|
82
|
+
output2.on('open', function() {
|
|
83
|
+
u.testBackup(params, 'largedb1g', output2, function(err) {
|
|
84
|
+
if (err) {
|
|
85
|
+
finished(err);
|
|
86
|
+
} else {
|
|
87
|
+
checkForEmptyBatches(actualBackup2, finished);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|