@rushstack/rush-http-build-cache-plugin 5.97.1 → 5.98.0
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/.heft/build-cache/jest-cache/haste-map-bae913f9b9aa720eb4deeae0a60a4b27-22ae7f4ce9de4306889d8c05e5cc39b9-f6b1af01a3130057bdfe3d86807211f9 +0 -0
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{9d/commons_9d513d1d600f9112f73547da918dcbb7 → 2e/commons_2e52897dfe4222d991674613f5b35882} +356 -314
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/34/PrefixProxyTerminalProvider_34b4603b9c4455de1c3cc05820149fdd +65 -0
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{53/index_53d9d5a344c3984994c801733764f503 → 46/index_46761981528d09d1a0e438f06cd2c548} +6 -2
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{06/ConfigurationFile_06d7f35feb0bd944d9b9a2a4d9e112c8 → 57/ConfigurationFile_57c950e8ef4673e11bff94304a50823c} +10 -4
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{68/rushlib_68c59fa059ba441c9c6883bcfed4a8d2 → 69/rushlib_695f6e29167e91482e2906a8d09b3a5a} +17 -6
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/8a/HttpBuildCacheProvidertest_8a1598e1f1b42d6933964acfb7612893 +116 -0
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/8a/HttpBuildCacheProvidertest_8a1598e1f1b42d6933964acfb7612893.map +1 -0
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/a3/RushHttpBuildCachePlugin_a3e8a9bb172ff361907e770dcf3268be +1551 -0
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/a3/RushHttpBuildCachePlugin_a3e8a9bb172ff361907e770dcf3268be.map +1 -0
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ba/TerminalWritable_ba71b4b7bfe6a26c85f4fd0245057a0a +54 -0
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{5d/Text_5da85b5db9a2f06bbe29cdcd91e6fbca → df/Text_df57ddd200e4237e617fc183dcb5fe67} +7 -1
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ec/HttpBuildCacheProvider_ecceab34e8340fa24dde11b618ffa8a4 +4668 -0
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ec/HttpBuildCacheProvider_ecceab34e8340fa24dde11b618ffa8a4.map +1 -0
- package/.heft/build-cache/jest-cache/perf-cache-bae913f9b9aa720eb4deeae0a60a4b27-da39a3ee5e6b4b0d3255bfef95601890 +1 -1
- package/.rush/temp/operation/_phase_build/state.json +1 -1
- package/.rush/temp/operation/_phase_test/all.log +14 -14
- package/.rush/temp/operation/_phase_test/state.json +1 -1
- package/.rush/temp/package-deps__phase_build.json +3 -3
- package/.rush/temp/package-deps__phase_test.json +3 -3
- package/.rush/temp/{rushstack+rush-http-build-cache-plugin-_phase_build-646439b80a2010050f5b4b8a916e50afae04c3ab.log → rushstack+rush-http-build-cache-plugin-_phase_build-08118e08afc6d454e5623f20498fd64b5e3e9051.log} +2 -2
- package/lib/HttpBuildCacheProvider.d.ts +2 -0
- package/lib/HttpBuildCacheProvider.d.ts.map +1 -1
- package/lib/HttpBuildCacheProvider.js +26 -7
- package/lib/HttpBuildCacheProvider.js.map +1 -1
- package/lib/RushHttpBuildCachePlugin.d.ts.map +1 -1
- package/lib/RushHttpBuildCachePlugin.js +28 -4
- package/lib/RushHttpBuildCachePlugin.js.map +1 -1
- package/lib/test/HttpBuildCacheProvider.test.d.ts.map +1 -0
- package/lib/{HttpBuildCacheProvider.test.js → test/HttpBuildCacheProvider.test.js} +46 -3
- package/lib/test/HttpBuildCacheProvider.test.js.map +1 -0
- package/package.json +6 -6
- package/rush-logs/rush-http-build-cache-plugin._phase_test.log +14 -14
- package/src/HttpBuildCacheProvider.ts +36 -7
- package/src/RushHttpBuildCachePlugin.ts +23 -28
- package/src/test/HttpBuildCacheProvider.test.ts +115 -0
- package/temp/coverage/clover.xml +117 -109
- package/temp/coverage/coverage-final.json +2 -2
- package/temp/coverage/lcov-report/HttpBuildCacheProvider.ts.html +166 -79
- package/temp/coverage/lcov-report/RushHttpBuildCachePlugin.ts.html +29 -44
- package/temp/coverage/lcov-report/index.html +24 -24
- package/temp/coverage/lcov-report/index.ts.html +1 -1
- package/temp/coverage/lcov.info +236 -218
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e5/HttpBuildCacheProvider_e53bd002cf44ae62693f20b8c4682941 +0 -4367
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e5/HttpBuildCacheProvider_e53bd002cf44ae62693f20b8c4682941.map +0 -1
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e6/RushHttpBuildCachePlugin_e69b4b7cd4f95aa49455690c88f00247 +0 -362
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e6/RushHttpBuildCachePlugin_e69b4b7cd4f95aa49455690c88f00247.map +0 -1
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/f7/HttpBuildCacheProvidertest_f710af633835df558cad54cb165c14fa +0 -73
- package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/f7/HttpBuildCacheProvidertest_f710af633835df558cad54cb165c14fa.map +0 -1
- package/lib/HttpBuildCacheProvider.test.d.ts.map +0 -1
- package/lib/HttpBuildCacheProvider.test.js.map +0 -1
- package/src/HttpBuildCacheProvider.test.ts +0 -58
- /package/lib/{HttpBuildCacheProvider.test.d.ts → test/HttpBuildCacheProvider.test.d.ts} +0 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
e6c5bed1f7986cd8ce6fbe3127c3695a
|
|
2
|
+
"use strict";
|
|
3
|
+
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
|
|
4
|
+
// See LICENSE in the project root for license information.
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.PrefixProxyTerminalProvider = void 0;
|
|
7
|
+
const Text_1 = require("../Text");
|
|
8
|
+
/**
|
|
9
|
+
* Wraps an existing {@link ITerminalProvider} that prefixes each line of output with a specified
|
|
10
|
+
* prefix string.
|
|
11
|
+
*
|
|
12
|
+
* @beta
|
|
13
|
+
*/
|
|
14
|
+
class PrefixProxyTerminalProvider {
|
|
15
|
+
constructor(options) {
|
|
16
|
+
const { terminalProvider } = options;
|
|
17
|
+
this._parentTerminalProvider = terminalProvider;
|
|
18
|
+
if (options.prefix !== undefined) {
|
|
19
|
+
const { prefix } = options;
|
|
20
|
+
this._getPrefix = () => prefix;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
const { getPrefix } = options;
|
|
24
|
+
this._getPrefix = getPrefix;
|
|
25
|
+
}
|
|
26
|
+
this._isOnNewline = true;
|
|
27
|
+
// eslint-disable-next-line @rushstack/security/no-unsafe-regexp
|
|
28
|
+
this._newlineRegex = new RegExp(`${Text_1.Text.escapeRegExp(terminalProvider.eolCharacter)}|\\n`, 'g');
|
|
29
|
+
}
|
|
30
|
+
/** @override */
|
|
31
|
+
get supportsColor() {
|
|
32
|
+
return this._parentTerminalProvider.supportsColor;
|
|
33
|
+
}
|
|
34
|
+
/** @override */
|
|
35
|
+
get eolCharacter() {
|
|
36
|
+
return this._parentTerminalProvider.eolCharacter;
|
|
37
|
+
}
|
|
38
|
+
/** @override */
|
|
39
|
+
write(data, severity) {
|
|
40
|
+
// We need to track newlines to ensure that the prefix is added to each line
|
|
41
|
+
let currentIndex = 0;
|
|
42
|
+
// eslint-disable-next-line @rushstack/no-new-null
|
|
43
|
+
let newlineMatch;
|
|
44
|
+
while ((newlineMatch = this._newlineRegex.exec(data))) {
|
|
45
|
+
// Extract the line, add the prefix, and write it out with the newline
|
|
46
|
+
const newlineIndex = newlineMatch.index;
|
|
47
|
+
const newIndex = newlineIndex + newlineMatch[0].length;
|
|
48
|
+
const prefix = this._isOnNewline ? this._getPrefix() : '';
|
|
49
|
+
const dataToWrite = `${prefix}${data.substring(currentIndex, newIndex)}`;
|
|
50
|
+
this._parentTerminalProvider.write(dataToWrite, severity);
|
|
51
|
+
// Update the currentIndex to start the search from the char after the newline
|
|
52
|
+
currentIndex = newIndex;
|
|
53
|
+
this._isOnNewline = true;
|
|
54
|
+
}
|
|
55
|
+
// The remaining data is not postfixed by a newline, so write out the data and set _isNewline to false
|
|
56
|
+
const remainingData = data.substring(currentIndex);
|
|
57
|
+
if (remainingData.length) {
|
|
58
|
+
const prefix = this._isOnNewline ? this._getPrefix() : '';
|
|
59
|
+
this._parentTerminalProvider.write(`${prefix}${remainingData}`, severity);
|
|
60
|
+
this._isOnNewline = false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
exports.PrefixProxyTerminalProvider = PrefixProxyTerminalProvider;
|
|
65
|
+
//# sourceMappingURL=PrefixProxyTerminalProvider.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
f61eba7a5a2c575630864aa4cbd126af
|
|
2
2
|
"use strict";
|
|
3
3
|
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
|
|
4
4
|
// See LICENSE in the project root for license information.
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.TypeUuid = exports.StringBufferTerminalProvider = exports.ConsoleTerminalProvider = exports.TerminalProviderSeverity = exports.TextAttribute = exports.ColorValue = exports.Colors = exports.Terminal = exports.SubprocessTerminator = exports.StringBuilder = exports.LegacyAdapters = exports.FileWriter = exports.FileSystem = exports.AlreadyExistsBehavior = exports.Sort = exports.NewlineKind = exports.Text = exports.Encoding = exports.Path = exports.PackageNameParser = exports.PackageName = exports.PackageJsonLookup = exports.ProtectableMap = exports.PosixModeBits = exports.MapExtensions = exports.LockFile = exports.JsonSchema = exports.JsonFile = exports.JsonSyntax = exports.InternalError = exports.Import = exports.FileError = exports.Executable = exports.EnvironmentMap = exports.Enum = exports.FolderConstants = exports.FileConstants = exports.AsyncQueue = exports.Async = exports.AnsiEscape = exports.AlreadyReportedError = void 0;
|
|
6
|
+
exports.TypeUuid = exports.TerminalWritable = exports.PrefixProxyTerminalProvider = exports.StringBufferTerminalProvider = exports.ConsoleTerminalProvider = exports.TerminalProviderSeverity = exports.TextAttribute = exports.ColorValue = exports.Colors = exports.Terminal = exports.SubprocessTerminator = exports.StringBuilder = exports.LegacyAdapters = exports.FileWriter = exports.FileSystem = exports.AlreadyExistsBehavior = exports.Sort = exports.NewlineKind = exports.Text = exports.Encoding = exports.Path = exports.PackageNameParser = exports.PackageName = exports.PackageJsonLookup = exports.ProtectableMap = exports.PosixModeBits = exports.MapExtensions = exports.LockFile = exports.JsonSchema = exports.JsonFile = exports.JsonSyntax = exports.InternalError = exports.Import = exports.FileError = exports.Executable = exports.EnvironmentMap = exports.Enum = exports.FolderConstants = exports.FileConstants = exports.AsyncQueue = exports.Async = exports.AnsiEscape = exports.AlreadyReportedError = void 0;
|
|
7
7
|
/**
|
|
8
8
|
* Core libraries that every NodeJS toolchain project should use.
|
|
9
9
|
*
|
|
@@ -80,6 +80,10 @@ var ConsoleTerminalProvider_1 = require("./Terminal/ConsoleTerminalProvider");
|
|
|
80
80
|
Object.defineProperty(exports, "ConsoleTerminalProvider", { enumerable: true, get: function () { return ConsoleTerminalProvider_1.ConsoleTerminalProvider; } });
|
|
81
81
|
var StringBufferTerminalProvider_1 = require("./Terminal/StringBufferTerminalProvider");
|
|
82
82
|
Object.defineProperty(exports, "StringBufferTerminalProvider", { enumerable: true, get: function () { return StringBufferTerminalProvider_1.StringBufferTerminalProvider; } });
|
|
83
|
+
var PrefixProxyTerminalProvider_1 = require("./Terminal/PrefixProxyTerminalProvider");
|
|
84
|
+
Object.defineProperty(exports, "PrefixProxyTerminalProvider", { enumerable: true, get: function () { return PrefixProxyTerminalProvider_1.PrefixProxyTerminalProvider; } });
|
|
85
|
+
var TerminalWritable_1 = require("./Terminal/TerminalWritable");
|
|
86
|
+
Object.defineProperty(exports, "TerminalWritable", { enumerable: true, get: function () { return TerminalWritable_1.TerminalWritable; } });
|
|
83
87
|
var TypeUuid_1 = require("./TypeUuid");
|
|
84
88
|
Object.defineProperty(exports, "TypeUuid", { enumerable: true, get: function () { return TypeUuid_1.TypeUuid; } });
|
|
85
89
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
b87edf65543b606c1d04096508b93380
|
|
2
2
|
"use strict";
|
|
3
3
|
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
|
|
4
4
|
// See LICENSE in the project root for license information.
|
|
@@ -217,7 +217,12 @@ class ConfigurationFile {
|
|
|
217
217
|
path: jsonPath,
|
|
218
218
|
json: configurationJson,
|
|
219
219
|
callback: (payload, payloadType, fullPayload) => {
|
|
220
|
-
const resolvedPath = this._resolvePathProperty(
|
|
220
|
+
const resolvedPath = this._resolvePathProperty({
|
|
221
|
+
propertyName: fullPayload.path,
|
|
222
|
+
propertyValue: fullPayload.value,
|
|
223
|
+
configurationFilePath: resolvedConfigurationFilePath,
|
|
224
|
+
configurationFile: configurationJson
|
|
225
|
+
}, metadata);
|
|
221
226
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
222
227
|
fullPayload.parent[fullPayload.parentProperty] = resolvedPath;
|
|
223
228
|
},
|
|
@@ -298,7 +303,8 @@ class ConfigurationFile {
|
|
|
298
303
|
};
|
|
299
304
|
}
|
|
300
305
|
}
|
|
301
|
-
_resolvePathProperty(
|
|
306
|
+
_resolvePathProperty(resolverOptions, metadata) {
|
|
307
|
+
const { propertyValue, configurationFilePath } = resolverOptions;
|
|
302
308
|
const resolutionMethod = metadata.pathResolutionMethod;
|
|
303
309
|
if (resolutionMethod === undefined) {
|
|
304
310
|
return propertyValue;
|
|
@@ -326,7 +332,7 @@ class ConfigurationFile {
|
|
|
326
332
|
throw new Error(`The pathResolutionMethod was set to "${PathResolutionMethod[resolutionMethod]}", but a custom ` +
|
|
327
333
|
'resolver was not provided.');
|
|
328
334
|
}
|
|
329
|
-
return metadata.customResolver(
|
|
335
|
+
return metadata.customResolver(resolverOptions);
|
|
330
336
|
}
|
|
331
337
|
default: {
|
|
332
338
|
throw new Error(`Unsupported PathResolutionMethod: ${PathResolutionMethod[resolutionMethod]} (${resolutionMethod})`);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
565b92bf0e1785f75decd07ff6d5ccea
|
|
2
2
|
/******/ (() => { // webpackBootstrap
|
|
3
3
|
/******/ var __webpack_modules__ = ({
|
|
4
4
|
|
|
@@ -56,14 +56,14 @@ module.exports = require("@rushstack/package-deps-hash");
|
|
|
56
56
|
|
|
57
57
|
/***/ }),
|
|
58
58
|
|
|
59
|
-
/***/
|
|
60
|
-
|
|
61
|
-
!*** external "@rushstack/package-extractor
|
|
62
|
-
|
|
59
|
+
/***/ 297839:
|
|
60
|
+
/*!***********************************************!*\
|
|
61
|
+
!*** external "@rushstack/package-extractor" ***!
|
|
62
|
+
\***********************************************/
|
|
63
63
|
/***/ ((module) => {
|
|
64
64
|
|
|
65
65
|
"use strict";
|
|
66
|
-
module.exports = require("@rushstack/package-extractor
|
|
66
|
+
module.exports = require("@rushstack/package-extractor");
|
|
67
67
|
|
|
68
68
|
/***/ }),
|
|
69
69
|
|
|
@@ -265,6 +265,17 @@ module.exports = require("inquirer/lib/utils/paginator");
|
|
|
265
265
|
|
|
266
266
|
/***/ }),
|
|
267
267
|
|
|
268
|
+
/***/ 546517:
|
|
269
|
+
/*!*************************!*\
|
|
270
|
+
!*** external "lodash" ***!
|
|
271
|
+
\*************************/
|
|
272
|
+
/***/ ((module) => {
|
|
273
|
+
|
|
274
|
+
"use strict";
|
|
275
|
+
module.exports = require("lodash");
|
|
276
|
+
|
|
277
|
+
/***/ }),
|
|
278
|
+
|
|
268
279
|
/***/ 374809:
|
|
269
280
|
/*!*****************************!*\
|
|
270
281
|
!*** external "node-fetch" ***!
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
0519f8790a936bb8ba38492165726378
|
|
2
|
+
"use strict";
|
|
3
|
+
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
|
|
4
|
+
// See LICENSE in the project root for license information.
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
22
|
+
if (mod && mod.__esModule) return mod;
|
|
23
|
+
var result = {};
|
|
24
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
25
|
+
__setModuleDefault(result, mod);
|
|
26
|
+
return result;
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
jest.mock('node-fetch', function () {
|
|
30
|
+
return Object.assign(jest.fn(), jest.requireActual('node-fetch'));
|
|
31
|
+
});
|
|
32
|
+
const node_fetch_1 = __importStar(require("node-fetch"));
|
|
33
|
+
const rush_sdk_1 = require("@rushstack/rush-sdk");
|
|
34
|
+
const node_core_library_1 = require("@rushstack/node-core-library");
|
|
35
|
+
const HttpBuildCacheProvider_1 = require("../HttpBuildCacheProvider");
|
|
36
|
+
const EXAMPLE_OPTIONS = {
|
|
37
|
+
url: 'https://buildcache.example.acme.com',
|
|
38
|
+
tokenHandler: {
|
|
39
|
+
exec: 'node',
|
|
40
|
+
args: ['tokenHandler.js']
|
|
41
|
+
},
|
|
42
|
+
uploadMethod: 'POST',
|
|
43
|
+
isCacheWriteAllowed: false,
|
|
44
|
+
pluginName: 'example-plugin',
|
|
45
|
+
rushProjectRoot: '/repo',
|
|
46
|
+
minHttpRetryDelayMs: 1
|
|
47
|
+
};
|
|
48
|
+
describe('HttpBuildCacheProvider', () => {
|
|
49
|
+
let terminalBuffer;
|
|
50
|
+
let terminal;
|
|
51
|
+
beforeEach(() => {
|
|
52
|
+
terminalBuffer = new node_core_library_1.StringBufferTerminalProvider();
|
|
53
|
+
terminal = new node_core_library_1.Terminal(terminalBuffer);
|
|
54
|
+
});
|
|
55
|
+
describe('tryGetCacheEntryBufferByIdAsync', () => {
|
|
56
|
+
it('prints warning if read credentials are not available', async () => {
|
|
57
|
+
jest.spyOn(rush_sdk_1.EnvironmentConfiguration, 'buildCacheCredential', 'get').mockReturnValue(undefined);
|
|
58
|
+
const session = {};
|
|
59
|
+
const provider = new HttpBuildCacheProvider_1.HttpBuildCacheProvider(EXAMPLE_OPTIONS, session);
|
|
60
|
+
mocked(node_fetch_1.default).mockResolvedValue(new node_fetch_1.Response('Unauthorized', {
|
|
61
|
+
status: 401,
|
|
62
|
+
statusText: 'Unauthorized'
|
|
63
|
+
}));
|
|
64
|
+
const result = await provider.tryGetCacheEntryBufferByIdAsync(terminal, 'some-key');
|
|
65
|
+
expect(result).toBe(undefined);
|
|
66
|
+
expect(node_fetch_1.default).toHaveBeenCalledTimes(1);
|
|
67
|
+
expect(node_fetch_1.default).toHaveBeenNthCalledWith(1, 'https://buildcache.example.acme.com/some-key', {
|
|
68
|
+
body: undefined,
|
|
69
|
+
headers: {},
|
|
70
|
+
method: 'GET',
|
|
71
|
+
redirect: 'follow'
|
|
72
|
+
});
|
|
73
|
+
expect(terminalBuffer.getWarningOutput()).toMatchInlineSnapshot(`"Error getting cache entry: Error: Credentials for https://buildcache.example.acme.com/ have not been provided.[n]In CI, verify that RUSH_BUILD_CACHE_CREDENTIAL contains a valid Authorization header value.[n][n]For local developers, run:[n][n] rush update-cloud-credentials --interactive[n][n]"`);
|
|
74
|
+
});
|
|
75
|
+
it('attempts up to 3 times to download a cache entry', async () => {
|
|
76
|
+
jest.spyOn(rush_sdk_1.EnvironmentConfiguration, 'buildCacheCredential', 'get').mockReturnValue(undefined);
|
|
77
|
+
const session = {};
|
|
78
|
+
const provider = new HttpBuildCacheProvider_1.HttpBuildCacheProvider(EXAMPLE_OPTIONS, session);
|
|
79
|
+
mocked(node_fetch_1.default).mockResolvedValueOnce(new node_fetch_1.Response('InternalServiceError', {
|
|
80
|
+
status: 500,
|
|
81
|
+
statusText: 'InternalServiceError'
|
|
82
|
+
}));
|
|
83
|
+
mocked(node_fetch_1.default).mockResolvedValueOnce(new node_fetch_1.Response('ServiceUnavailable', {
|
|
84
|
+
status: 503,
|
|
85
|
+
statusText: 'ServiceUnavailable'
|
|
86
|
+
}));
|
|
87
|
+
mocked(node_fetch_1.default).mockResolvedValueOnce(new node_fetch_1.Response('BadGateway', {
|
|
88
|
+
status: 504,
|
|
89
|
+
statusText: 'BadGateway'
|
|
90
|
+
}));
|
|
91
|
+
const result = await provider.tryGetCacheEntryBufferByIdAsync(terminal, 'some-key');
|
|
92
|
+
expect(result).toBe(undefined);
|
|
93
|
+
expect(node_fetch_1.default).toHaveBeenCalledTimes(3);
|
|
94
|
+
expect(node_fetch_1.default).toHaveBeenNthCalledWith(1, 'https://buildcache.example.acme.com/some-key', {
|
|
95
|
+
body: undefined,
|
|
96
|
+
headers: {},
|
|
97
|
+
method: 'GET',
|
|
98
|
+
redirect: 'follow'
|
|
99
|
+
});
|
|
100
|
+
expect(node_fetch_1.default).toHaveBeenNthCalledWith(2, 'https://buildcache.example.acme.com/some-key', {
|
|
101
|
+
body: undefined,
|
|
102
|
+
headers: {},
|
|
103
|
+
method: 'GET',
|
|
104
|
+
redirect: 'follow'
|
|
105
|
+
});
|
|
106
|
+
expect(node_fetch_1.default).toHaveBeenNthCalledWith(3, 'https://buildcache.example.acme.com/some-key', {
|
|
107
|
+
body: undefined,
|
|
108
|
+
headers: {},
|
|
109
|
+
method: 'GET',
|
|
110
|
+
redirect: 'follow'
|
|
111
|
+
});
|
|
112
|
+
expect(terminalBuffer.getWarningOutput()).toMatchInlineSnapshot(`"Could not get cache entry: HTTP 504: BadGateway[n]"`);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiL2hvbWUvdnN0cy93b3JrLzEvcy9ydXNoLXBsdWdpbnMvcnVzaC1odHRwLWJ1aWxkLWNhY2hlLXBsdWdpbi9zcmMvdGVzdC9IdHRwQnVpbGRDYWNoZVByb3ZpZGVyLnRlc3QudHMiLCJzb3VyY2VzIjpbIi9ob21lL3ZzdHMvd29yay8xL3MvcnVzaC1wbHVnaW5zL3J1c2gtaHR0cC1idWlsZC1jYWNoZS1wbHVnaW4vc3JjL3Rlc3QvSHR0cEJ1aWxkQ2FjaGVQcm92aWRlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw0RkFBNEY7QUFDNUYsMkRBQTJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTNELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFO0lBQ3RCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLENBQUMsQ0FBQyxDQUFDO0FBRUgseURBQTZDO0FBQzdDLGtEQUE0RTtBQUM1RSxvRUFBc0Y7QUFFdEYsc0VBQW1FO0FBRW5FLE1BQU0sZUFBZSxHQUFHO0lBQ3RCLEdBQUcsRUFBRSxxQ0FBcUM7SUFDMUMsWUFBWSxFQUFFO1FBQ1osSUFBSSxFQUFFLE1BQU07UUFDWixJQUFJLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztLQUMxQjtJQUNELFlBQVksRUFBRSxNQUFNO0lBQ3BCLG1CQUFtQixFQUFFLEtBQUs7SUFDMUIsVUFBVSxFQUFFLGdCQUFnQjtJQUM1QixlQUFlLEVBQUUsT0FBTztJQUN4QixtQkFBbUIsRUFBRSxDQUFDO0NBQ3ZCLENBQUM7QUFFRixRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO0lBQ3RDLElBQUksY0FBNEMsQ0FBQztJQUNqRCxJQUFJLFFBQW1CLENBQUM7SUFFeEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLGNBQWMsR0FBRyxJQUFJLGdEQUE0QixFQUFFLENBQUM7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LDhDQUE4QyxFQUFFO2dCQUN2RixJQUFJLEVBQUUsU0FBUztnQkFDZixPQUFPLEVBQUUsRUFBRTtnQkFDWCxNQUFNLEVBQUUsS0FBSztnQkFDYixRQUFRLEVBQUUsUUFBUTthQUNuQixDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsb0JBQUssQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsRUFBRSw4Q0FBOEMsRUFBRTtnQkFDdkYsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsUUFBUSxFQUFFLFFBQVE7YUFDbkIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLG9CQUFLLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsOENBQThDLEVBQUU7Z0JBQ3ZGLElBQUksRUFBRSxTQUFTO2dCQUNmLE9BQU8sRUFBRSxFQUFFO2dCQUNYLE1BQU0sRUFBRSxLQUFLO2dCQUNiLFFBQVEsRUFBRSxRQUFRO2FBQ25CLENBQUMsQ0FBQztZQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLHFCQUFxQixDQUM3RCxzREFBc0QsQ0FDdkQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4vLyBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5qZXN0Lm1vY2soJ25vZGUtZmV0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGplc3QuZm4oKSwgamVzdC5yZXF1aXJlQWN0dWFsKCdub2RlLWZldGNoJykpO1xufSk7XG5cbmltcG9ydCBmZXRjaCwgeyBSZXNwb25zZSB9IGZyb20gJ25vZGUtZmV0Y2gnO1xuaW1wb3J0IHsgUnVzaFNlc3Npb24sIEVudmlyb25tZW50Q29uZmlndXJhdGlvbiB9IGZyb20gJ0BydXNoc3RhY2svcnVzaC1zZGsnO1xuaW1wb3J0IHsgU3RyaW5nQnVmZmVyVGVybWluYWxQcm92aWRlciwgVGVybWluYWwgfSBmcm9tICdAcnVzaHN0YWNrL25vZGUtY29yZS1saWJyYXJ5JztcblxuaW1wb3J0IHsgSHR0cEJ1aWxkQ2FjaGVQcm92aWRlciB9IGZyb20gJy4uL0h0dHBCdWlsZENhY2hlUHJvdmlkZXInO1xuXG5jb25zdCBFWEFNUExFX09QVElPTlMgPSB7XG4gIHVybDogJ2h0dHBzOi8vYnVpbGRjYWNoZS5leGFtcGxlLmFjbWUuY29tJyxcbiAgdG9rZW5IYW5kbGVyOiB7XG4gICAgZXhlYzogJ25vZGUnLFxuICAgIGFyZ3M6IFsndG9rZW5IYW5kbGVyLmpzJ11cbiAgfSxcbiAgdXBsb2FkTWV0aG9kOiAnUE9TVCcsXG4gIGlzQ2FjaGVXcml0ZUFsbG93ZWQ6IGZhbHNlLFxuICBwbHVnaW5OYW1lOiAnZXhhbXBsZS1wbHVnaW4nLFxuICBydXNoUHJvamVjdFJvb3Q6ICcvcmVwbycsXG4gIG1pbkh0dHBSZXRyeURlbGF5TXM6IDFcbn07XG5cbmRlc2NyaWJlKCdIdHRwQnVpbGRDYWNoZVByb3ZpZGVyJywgKCkgPT4ge1xuICBsZXQgdGVybWluYWxCdWZmZXI6IFN0cmluZ0J1ZmZlclRlcm1pbmFsUHJvdmlkZXI7XG4gIGxldCB0ZXJtaW5hbCE6IFRlcm1pbmFsO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHRlcm1pbmFsQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlclRlcm1pbmFsUHJvdmlkZXIoKTtcbiAgICB0ZXJtaW5hbCA9IG5ldyBUZXJtaW5hbCh0ZXJtaW5hbEJ1ZmZlcik7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd0cnlHZXRDYWNoZUVudHJ5QnVmZmVyQnlJZEFzeW5jJywgKCkgPT4ge1xuICAgIGl0KCdwcmludHMgd2FybmluZyBpZiByZWFkIGNyZWRlbnRpYWxzIGFyZSBub3QgYXZhaWxhYmxlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgamVzdC5zcHlPbihFbnZpcm9ubWVudENvbmZpZ3VyYXRpb24sICdidWlsZENhY2hlQ3JlZGVudGlhbCcsICdnZXQnKS5tb2NrUmV0dXJuVmFsdWUodW5kZWZpbmVkKTtcblxuICAgICAgY29uc3Qgc2Vzc2lvbjogUnVzaFNlc3Npb24gPSB7fSBhcyBSdXNoU2Vzc2lvbjtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gbmV3IEh0dHBCdWlsZENhY2hlUHJvdmlkZXIoRVhBTVBMRV9PUFRJT05TLCBzZXNzaW9uKTtcblxuICAgICAgbW9ja2VkKGZldGNoKS5tb2NrUmVzb2x2ZWRWYWx1ZShcbiAgICAgICAgbmV3IFJlc3BvbnNlKCdVbmF1dGhvcml6ZWQnLCB7XG4gICAgICAgICAgc3RhdHVzOiA0MDEsXG4gICAgICAgICAgc3RhdHVzVGV4dDogJ1VuYXV0aG9yaXplZCdcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLnRyeUdldENhY2hlRW50cnlCdWZmZXJCeUlkQXN5bmModGVybWluYWwsICdzb21lLWtleScpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KGZldGNoKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICBleHBlY3QoZmV0Y2gpLnRvSGF2ZUJlZW5OdGhDYWxsZWRXaXRoKDEsICdodHRwczovL2J1aWxkY2FjaGUuZXhhbXBsZS5hY21lLmNvbS9zb21lLWtleScsIHtcbiAgICAgICAgYm9keTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgcmVkaXJlY3Q6ICdmb2xsb3cnXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdCh0ZXJtaW5hbEJ1ZmZlci5nZXRXYXJuaW5nT3V0cHV0KCkpLnRvTWF0Y2hJbmxpbmVTbmFwc2hvdChcbiAgICAgICAgYFwiRXJyb3IgZ2V0dGluZyBjYWNoZSBlbnRyeTogRXJyb3I6IENyZWRlbnRpYWxzIGZvciBodHRwczovL2J1aWxkY2FjaGUuZXhhbXBsZS5hY21lLmNvbS8gaGF2ZSBub3QgYmVlbiBwcm92aWRlZC5bbl1JbiBDSSwgdmVyaWZ5IHRoYXQgUlVTSF9CVUlMRF9DQUNIRV9DUkVERU5USUFMIGNvbnRhaW5zIGEgdmFsaWQgQXV0aG9yaXphdGlvbiBoZWFkZXIgdmFsdWUuW25dW25dRm9yIGxvY2FsIGRldmVsb3BlcnMsIHJ1bjpbbl1bbl0gICAgcnVzaCB1cGRhdGUtY2xvdWQtY3JlZGVudGlhbHMgLS1pbnRlcmFjdGl2ZVtuXVtuXVwiYFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdhdHRlbXB0cyB1cCB0byAzIHRpbWVzIHRvIGRvd25sb2FkIGEgY2FjaGUgZW50cnknLCBhc3luYyAoKSA9PiB7XG4gICAgICBqZXN0LnNweU9uKEVudmlyb25tZW50Q29uZmlndXJhdGlvbiwgJ2J1aWxkQ2FjaGVDcmVkZW50aWFsJywgJ2dldCcpLm1vY2tSZXR1cm5WYWx1ZSh1bmRlZmluZWQpO1xuXG4gICAgICBjb25zdCBzZXNzaW9uOiBSdXNoU2Vzc2lvbiA9IHt9IGFzIFJ1c2hTZXNzaW9uO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgSHR0cEJ1aWxkQ2FjaGVQcm92aWRlcihFWEFNUExFX09QVElPTlMsIHNlc3Npb24pO1xuXG4gICAgICBtb2NrZWQoZmV0Y2gpLm1vY2tSZXNvbHZlZFZhbHVlT25jZShcbiAgICAgICAgbmV3IFJlc3BvbnNlKCdJbnRlcm5hbFNlcnZpY2VFcnJvcicsIHtcbiAgICAgICAgICBzdGF0dXM6IDUwMCxcbiAgICAgICAgICBzdGF0dXNUZXh0OiAnSW50ZXJuYWxTZXJ2aWNlRXJyb3InXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgbW9ja2VkKGZldGNoKS5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UoXG4gICAgICAgIG5ldyBSZXNwb25zZSgnU2VydmljZVVuYXZhaWxhYmxlJywge1xuICAgICAgICAgIHN0YXR1czogNTAzLFxuICAgICAgICAgIHN0YXR1c1RleHQ6ICdTZXJ2aWNlVW5hdmFpbGFibGUnXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgbW9ja2VkKGZldGNoKS5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UoXG4gICAgICAgIG5ldyBSZXNwb25zZSgnQmFkR2F0ZXdheScsIHtcbiAgICAgICAgICBzdGF0dXM6IDUwNCxcbiAgICAgICAgICBzdGF0dXNUZXh0OiAnQmFkR2F0ZXdheSdcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb3ZpZGVyLnRyeUdldENhY2hlRW50cnlCdWZmZXJCeUlkQXN5bmModGVybWluYWwsICdzb21lLWtleScpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZSh1bmRlZmluZWQpO1xuICAgICAgZXhwZWN0KGZldGNoKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gICAgICBleHBlY3QoZmV0Y2gpLnRvSGF2ZUJlZW5OdGhDYWxsZWRXaXRoKDEsICdodHRwczovL2J1aWxkY2FjaGUuZXhhbXBsZS5hY21lLmNvbS9zb21lLWtleScsIHtcbiAgICAgICAgYm9keTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgcmVkaXJlY3Q6ICdmb2xsb3cnXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChmZXRjaCkudG9IYXZlQmVlbk50aENhbGxlZFdpdGgoMiwgJ2h0dHBzOi8vYnVpbGRjYWNoZS5leGFtcGxlLmFjbWUuY29tL3NvbWUta2V5Jywge1xuICAgICAgICBib2R5OiB1bmRlZmluZWQsXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICByZWRpcmVjdDogJ2ZvbGxvdydcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KGZldGNoKS50b0hhdmVCZWVuTnRoQ2FsbGVkV2l0aCgzLCAnaHR0cHM6Ly9idWlsZGNhY2hlLmV4YW1wbGUuYWNtZS5jb20vc29tZS1rZXknLCB7XG4gICAgICAgIGJvZHk6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIHJlZGlyZWN0OiAnZm9sbG93J1xuICAgICAgfSk7XG4gICAgICBleHBlY3QodGVybWluYWxCdWZmZXIuZ2V0V2FybmluZ091dHB1dCgpKS50b01hdGNoSW5saW5lU25hcHNob3QoXG4gICAgICAgIGBcIkNvdWxkIG5vdCBnZXQgY2FjaGUgZW50cnk6IEhUVFAgNTA0OiBCYWRHYXRld2F5W25dXCJgXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"/home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin/src/test/HttpBuildCacheProvider.test.ts","sources":["/home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin/src/test/HttpBuildCacheProvider.test.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\njest.mock('node-fetch', function () {\n return Object.assign(jest.fn(), jest.requireActual('node-fetch'));\n});\n\nimport fetch, { Response } from 'node-fetch';\nimport { RushSession, EnvironmentConfiguration } from '@rushstack/rush-sdk';\nimport { StringBufferTerminalProvider, Terminal } from '@rushstack/node-core-library';\n\nimport { HttpBuildCacheProvider } from '../HttpBuildCacheProvider';\n\nconst EXAMPLE_OPTIONS = {\n url: 'https://buildcache.example.acme.com',\n tokenHandler: {\n exec: 'node',\n args: ['tokenHandler.js']\n },\n uploadMethod: 'POST',\n isCacheWriteAllowed: false,\n pluginName: 'example-plugin',\n rushProjectRoot: '/repo',\n minHttpRetryDelayMs: 1\n};\n\ndescribe('HttpBuildCacheProvider', () => {\n let terminalBuffer: StringBufferTerminalProvider;\n let terminal!: Terminal;\n\n beforeEach(() => {\n terminalBuffer = new StringBufferTerminalProvider();\n terminal = new Terminal(terminalBuffer);\n });\n\n describe('tryGetCacheEntryBufferByIdAsync', () => {\n it('prints warning if read credentials are not available', async () => {\n jest.spyOn(EnvironmentConfiguration, 'buildCacheCredential', 'get').mockReturnValue(undefined);\n\n const session: RushSession = {} as RushSession;\n const provider = new HttpBuildCacheProvider(EXAMPLE_OPTIONS, session);\n\n mocked(fetch).mockResolvedValue(\n new Response('Unauthorized', {\n status: 401,\n statusText: 'Unauthorized'\n })\n );\n\n const result = await provider.tryGetCacheEntryBufferByIdAsync(terminal, 'some-key');\n expect(result).toBe(undefined);\n expect(fetch).toHaveBeenCalledTimes(1);\n expect(fetch).toHaveBeenNthCalledWith(1, 'https://buildcache.example.acme.com/some-key', {\n body: undefined,\n headers: {},\n method: 'GET',\n redirect: 'follow'\n });\n expect(terminalBuffer.getWarningOutput()).toMatchInlineSnapshot(\n `\"Error getting cache entry: Error: Credentials for https://buildcache.example.acme.com/ have not been provided.[n]In CI, verify that RUSH_BUILD_CACHE_CREDENTIAL contains a valid Authorization header value.[n][n]For local developers, run:[n][n] rush update-cloud-credentials --interactive[n][n]\"`\n );\n });\n\n it('attempts up to 3 times to download a cache entry', async () => {\n jest.spyOn(EnvironmentConfiguration, 'buildCacheCredential', 'get').mockReturnValue(undefined);\n\n const session: RushSession = {} as RushSession;\n const provider = new HttpBuildCacheProvider(EXAMPLE_OPTIONS, session);\n\n mocked(fetch).mockResolvedValueOnce(\n new Response('InternalServiceError', {\n status: 500,\n statusText: 'InternalServiceError'\n })\n );\n mocked(fetch).mockResolvedValueOnce(\n new Response('ServiceUnavailable', {\n status: 503,\n statusText: 'ServiceUnavailable'\n })\n );\n mocked(fetch).mockResolvedValueOnce(\n new Response('BadGateway', {\n status: 504,\n statusText: 'BadGateway'\n })\n );\n\n const result = await provider.tryGetCacheEntryBufferByIdAsync(terminal, 'some-key');\n expect(result).toBe(undefined);\n expect(fetch).toHaveBeenCalledTimes(3);\n expect(fetch).toHaveBeenNthCalledWith(1, 'https://buildcache.example.acme.com/some-key', {\n body: undefined,\n headers: {},\n method: 'GET',\n redirect: 'follow'\n });\n expect(fetch).toHaveBeenNthCalledWith(2, 'https://buildcache.example.acme.com/some-key', {\n body: undefined,\n headers: {},\n method: 'GET',\n redirect: 'follow'\n });\n expect(fetch).toHaveBeenNthCalledWith(3, 'https://buildcache.example.acme.com/some-key', {\n body: undefined,\n headers: {},\n method: 'GET',\n redirect: 'follow'\n });\n expect(terminalBuffer.getWarningOutput()).toMatchInlineSnapshot(\n `\"Could not get cache entry: HTTP 504: BadGateway[n]\"`\n );\n });\n });\n});\n"]}
|