@azure-rest/load-testing 1.1.0-alpha.20250718.2 → 1.1.0-alpha.20250730.2
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/dist/browser/azureLoadTesting.js +13 -11
- package/dist/browser/azureLoadTesting.js.map +1 -1
- package/dist/browser/getFileValidationPoller.js +8 -10
- package/dist/browser/getFileValidationPoller.js.map +1 -1
- package/dist/browser/getTestProfileRunCompletionPoller.js +8 -10
- package/dist/browser/getTestProfileRunCompletionPoller.js.map +1 -1
- package/dist/browser/getTestRunCompletionPoller.js +8 -10
- package/dist/browser/getTestRunCompletionPoller.js.map +1 -1
- package/dist/browser/isUnexpected.js +4 -5
- package/dist/browser/isUnexpected.js.map +1 -1
- package/dist/browser/paginateHelper.js +43 -73
- package/dist/browser/paginateHelper.js.map +1 -1
- package/dist/commonjs/azureLoadTesting.js +13 -11
- package/dist/commonjs/azureLoadTesting.js.map +1 -1
- package/dist/commonjs/getFileValidationPoller.js +8 -10
- package/dist/commonjs/getFileValidationPoller.js.map +1 -1
- package/dist/commonjs/getTestProfileRunCompletionPoller.js +8 -10
- package/dist/commonjs/getTestProfileRunCompletionPoller.js.map +1 -1
- package/dist/commonjs/getTestRunCompletionPoller.js +8 -10
- package/dist/commonjs/getTestRunCompletionPoller.js.map +1 -1
- package/dist/commonjs/isUnexpected.js +4 -5
- package/dist/commonjs/isUnexpected.js.map +1 -1
- package/dist/commonjs/paginateHelper.js +43 -73
- package/dist/commonjs/paginateHelper.js.map +1 -1
- package/dist/commonjs/tsdoc-metadata.json +11 -11
- package/dist/esm/azureLoadTesting.js +13 -11
- package/dist/esm/azureLoadTesting.js.map +1 -1
- package/dist/esm/getFileValidationPoller.js +8 -10
- package/dist/esm/getFileValidationPoller.js.map +1 -1
- package/dist/esm/getTestProfileRunCompletionPoller.js +8 -10
- package/dist/esm/getTestProfileRunCompletionPoller.js.map +1 -1
- package/dist/esm/getTestRunCompletionPoller.js +8 -10
- package/dist/esm/getTestRunCompletionPoller.js.map +1 -1
- package/dist/esm/isUnexpected.js +4 -5
- package/dist/esm/isUnexpected.js.map +1 -1
- package/dist/esm/paginateHelper.js +43 -73
- package/dist/esm/paginateHelper.js.map +1 -1
- package/dist/react-native/azureLoadTesting.js +13 -11
- package/dist/react-native/azureLoadTesting.js.map +1 -1
- package/dist/react-native/getFileValidationPoller.js +8 -10
- package/dist/react-native/getFileValidationPoller.js.map +1 -1
- package/dist/react-native/getTestProfileRunCompletionPoller.js +8 -10
- package/dist/react-native/getTestProfileRunCompletionPoller.js.map +1 -1
- package/dist/react-native/getTestRunCompletionPoller.js +8 -10
- package/dist/react-native/getTestRunCompletionPoller.js.map +1 -1
- package/dist/react-native/isUnexpected.js +4 -5
- package/dist/react-native/isUnexpected.js.map +1 -1
- package/dist/react-native/paginateHelper.js +43 -73
- package/dist/react-native/paginateHelper.js.map +1 -1
- package/package.json +2 -2
- package/review/load-testing-node.api.md +3110 -3110
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
|
-
import { __rest } from "tslib";
|
|
4
3
|
import { getClient } from "@azure-rest/core-client";
|
|
5
4
|
import { logger } from "./logger.js";
|
|
6
5
|
/**
|
|
@@ -9,21 +8,24 @@ import { logger } from "./logger.js";
|
|
|
9
8
|
* @param credentials - uniquely identify client credential
|
|
10
9
|
* @param options - the parameter for all optional parameters
|
|
11
10
|
*/
|
|
12
|
-
export default function createClient(endpointParam, credentials,
|
|
13
|
-
|
|
14
|
-
var { apiVersion = "2024-12-01-preview" } = _a, options = __rest(_a, ["apiVersion"]);
|
|
15
|
-
const endpointUrl = (_c = (_b = options.endpoint) !== null && _b !== void 0 ? _b : options.baseUrl) !== null && _c !== void 0 ? _c : `https://${endpointParam}`;
|
|
11
|
+
export default function createClient(endpointParam, credentials, { apiVersion = "2024-12-01-preview", ...options } = {}) {
|
|
12
|
+
const endpointUrl = options.endpoint ?? options.baseUrl ?? `https://${endpointParam}`;
|
|
16
13
|
const userAgentInfo = `azsdk-js-load-testing-rest/1.0.1`;
|
|
17
14
|
const userAgentPrefix = options.userAgentOptions && options.userAgentOptions.userAgentPrefix
|
|
18
15
|
? `${options.userAgentOptions.userAgentPrefix} ${userAgentInfo}`
|
|
19
16
|
: `${userAgentInfo}`;
|
|
20
|
-
options =
|
|
17
|
+
options = {
|
|
18
|
+
...options,
|
|
19
|
+
userAgentOptions: {
|
|
21
20
|
userAgentPrefix,
|
|
22
|
-
},
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
},
|
|
22
|
+
loggingOptions: {
|
|
23
|
+
logger: options.loggingOptions?.logger ?? logger.info,
|
|
24
|
+
},
|
|
25
|
+
credentials: {
|
|
26
|
+
scopes: options.credentials?.scopes ?? ["https://cnt-prod.loadtesting.azure.com/.default"],
|
|
27
|
+
},
|
|
28
|
+
};
|
|
27
29
|
const client = getClient(endpointUrl, credentials, options);
|
|
28
30
|
client.pipeline.removePolicy({ name: "ApiVersionPolicy" });
|
|
29
31
|
client.pipeline.addPolicy({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"azureLoadTesting.js","sourceRoot":"","sources":["../../src/azureLoadTesting.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC
|
|
1
|
+
{"version":3,"file":"azureLoadTesting.js","sourceRoot":"","sources":["../../src/azureLoadTesting.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAUrC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,aAAqB,EACrB,WAA4B,EAC5B,EAAE,UAAU,GAAG,oBAAoB,EAAE,GAAG,OAAO,KAAoC,EAAE;IAErF,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,IAAI,WAAW,aAAa,EAAE,CAAC;IACtF,MAAM,aAAa,GAAG,kCAAkC,CAAC;IACzD,MAAM,eAAe,GACnB,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC,eAAe;QAClE,CAAC,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,eAAe,IAAI,aAAa,EAAE;QAChE,CAAC,CAAC,GAAG,aAAa,EAAE,CAAC;IACzB,OAAO,GAAG;QACR,GAAG,OAAO;QACV,gBAAgB,EAAE;YAChB,eAAe;SAChB;QACD,cAAc,EAAE;YACd,MAAM,EAAE,OAAO,CAAC,cAAc,EAAE,MAAM,IAAI,MAAM,CAAC,IAAI;SACtD;QACD,WAAW,EAAE;YACX,MAAM,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,iDAAiD,CAAC;SAC3F;KACF,CAAC;IACF,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAA2B,CAAC;IAEtF,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC3D,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QACxB,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACzB,qDAAqD;YACrD,yEAAyE;YACzE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,UAAU,EAAE,CAAC;gBACvD,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAClB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GACzD,eAAe,UAAU,EAAE,CAAC;YAC9B,CAAC;YAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { ClientOptions } from \"@azure-rest/core-client\";\nimport { getClient } from \"@azure-rest/core-client\";\nimport { logger } from \"./logger.js\";\nimport type { TokenCredential } from \"@azure/core-auth\";\nimport type { AzureLoadTestingClient } from \"./clientDefinitions.js\";\n\n/** The optional parameters for the client */\nexport interface AzureLoadTestingClientOptions extends ClientOptions {\n /** The api version option of the client */\n apiVersion?: string;\n}\n\n/**\n * Initialize a new instance of `AzureLoadTestingClient`\n * @param endpointParam - A sequence of textual characters.\n * @param credentials - uniquely identify client credential\n * @param options - the parameter for all optional parameters\n */\nexport default function createClient(\n endpointParam: string,\n credentials: TokenCredential,\n { apiVersion = \"2024-12-01-preview\", ...options }: AzureLoadTestingClientOptions = {},\n): AzureLoadTestingClient {\n const endpointUrl = options.endpoint ?? options.baseUrl ?? `https://${endpointParam}`;\n const userAgentInfo = `azsdk-js-load-testing-rest/1.0.1`;\n const userAgentPrefix =\n options.userAgentOptions && options.userAgentOptions.userAgentPrefix\n ? `${options.userAgentOptions.userAgentPrefix} ${userAgentInfo}`\n : `${userAgentInfo}`;\n options = {\n ...options,\n userAgentOptions: {\n userAgentPrefix,\n },\n loggingOptions: {\n logger: options.loggingOptions?.logger ?? logger.info,\n },\n credentials: {\n scopes: options.credentials?.scopes ?? [\"https://cnt-prod.loadtesting.azure.com/.default\"],\n },\n };\n const client = getClient(endpointUrl, credentials, options) as AzureLoadTestingClient;\n\n client.pipeline.removePolicy({ name: \"ApiVersionPolicy\" });\n client.pipeline.addPolicy({\n name: \"ClientApiVersionPolicy\",\n sendRequest: (req, next) => {\n // Use the apiVersion defined in request url directly\n // Append one if there is no apiVersion and we have one at client options\n const url = new URL(req.url);\n if (!url.searchParams.get(\"api-version\") && apiVersion) {\n req.url = `${req.url}${\n Array.from(url.searchParams.keys()).length > 0 ? \"&\" : \"?\"\n }api-version=${apiVersion}`;\n }\n\n return next(req);\n },\n });\n\n return client;\n}\n"]}
|
|
@@ -10,7 +10,6 @@ import { sleep } from "./util/LROUtil.js";
|
|
|
10
10
|
* @returns A poller which can be called to poll until completion of the job.
|
|
11
11
|
*/
|
|
12
12
|
export async function getFileValidationPoller(client, fileUploadResult, polledOperationOptions = {}) {
|
|
13
|
-
var _a;
|
|
14
13
|
// get filename and testid from initial response
|
|
15
14
|
const fileName = fileUploadResult.body.fileName;
|
|
16
15
|
const requestUrl = fileUploadResult.request.url;
|
|
@@ -23,11 +22,10 @@ export async function getFileValidationPoller(client, fileUploadResult, polledOp
|
|
|
23
22
|
let resultPromise;
|
|
24
23
|
let cancelJob;
|
|
25
24
|
const abortController = new AbortController();
|
|
26
|
-
const currentPollIntervalInMs =
|
|
25
|
+
const currentPollIntervalInMs = polledOperationOptions.updateIntervalInMs ?? 2000;
|
|
27
26
|
const poller = {
|
|
28
27
|
async poll(options) {
|
|
29
|
-
|
|
30
|
-
if ((_a = options === null || options === void 0 ? void 0 : options.abortSignal) === null || _a === void 0 ? void 0 : _a.aborted) {
|
|
28
|
+
if (options?.abortSignal?.aborted) {
|
|
31
29
|
throw new AbortError("The polling was aborted.");
|
|
32
30
|
}
|
|
33
31
|
if (fileName) {
|
|
@@ -64,18 +62,18 @@ export async function getFileValidationPoller(client, fileUploadResult, polledOp
|
|
|
64
62
|
}
|
|
65
63
|
},
|
|
66
64
|
pollUntilDone(pollOptions) {
|
|
67
|
-
return (resultPromise
|
|
65
|
+
return (resultPromise ??= (async () => {
|
|
68
66
|
const { abortSignal: inputAbortSignal } = pollOptions || {};
|
|
69
67
|
// In the future we can use AbortSignal.any() instead
|
|
70
68
|
function abortListener() {
|
|
71
69
|
abortController.abort();
|
|
72
70
|
}
|
|
73
71
|
const abortSignal = abortController.signal;
|
|
74
|
-
if (inputAbortSignal
|
|
72
|
+
if (inputAbortSignal?.aborted) {
|
|
75
73
|
abortController.abort();
|
|
76
74
|
}
|
|
77
75
|
else if (!abortSignal.aborted) {
|
|
78
|
-
inputAbortSignal
|
|
76
|
+
inputAbortSignal?.addEventListener("abort", abortListener, { once: true });
|
|
79
77
|
}
|
|
80
78
|
try {
|
|
81
79
|
if (!poller.isDone()) {
|
|
@@ -89,7 +87,7 @@ export async function getFileValidationPoller(client, fileUploadResult, polledOp
|
|
|
89
87
|
}
|
|
90
88
|
}
|
|
91
89
|
finally {
|
|
92
|
-
inputAbortSignal
|
|
90
|
+
inputAbortSignal?.removeEventListener("abort", abortListener);
|
|
93
91
|
}
|
|
94
92
|
switch (state.status) {
|
|
95
93
|
case "succeeded":
|
|
@@ -105,7 +103,7 @@ export async function getFileValidationPoller(client, fileUploadResult, polledOp
|
|
|
105
103
|
}
|
|
106
104
|
})().finally(() => {
|
|
107
105
|
resultPromise = undefined;
|
|
108
|
-
}))
|
|
106
|
+
}));
|
|
109
107
|
},
|
|
110
108
|
onProgress(callback) {
|
|
111
109
|
const s = Symbol();
|
|
@@ -117,7 +115,7 @@ export async function getFileValidationPoller(client, fileUploadResult, polledOp
|
|
|
117
115
|
},
|
|
118
116
|
stopPolling() {
|
|
119
117
|
abortController.abort();
|
|
120
|
-
cancelJob
|
|
118
|
+
cancelJob?.();
|
|
121
119
|
},
|
|
122
120
|
isStopped() {
|
|
123
121
|
return resultPromise === undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFileValidationPoller.js","sourceRoot":"","sources":["../../src/getFileValidationPoller.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAQrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,MAA8B,EAC9B,gBAAiE,EACjE,yBAAiD,EAAE;;IAEnD,gDAAgD;IAChD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;IAChD,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CACjC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAChC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CACjC,CAAC;IAGF,MAAM,KAAK,GAAiE;QAC1E,MAAM,EAAE,YAAY;KACrB,CAAC;IAEF,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAmB,CAAC;IACrD,MAAM,wBAAwB,GAAG,KAAK,IAAmB,EAAE,CACzD,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,IAAI,aAAgF,CAAC;IACrF,IAAI,SAAmC,CAAC;IACxC,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,MAAM,uBAAuB,GAAG,MAAA,sBAAsB,CAAC,kBAAkB,mCAAI,IAAI,CAAC;IAElF,MAAM,MAAM,GAGR;QACF,KAAK,CAAC,IAAI,CAAC,OAA2C;;YACpD,IAAI,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,0CAAE,OAAO,EAAE,CAAC;gBAClC,MAAM,IAAI,UAAU,CAAC,0BAA0B,CAAC,CAAC;YACnD,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,sBAAsB,GAAG,MAAM,MAAM;qBACxC,IAAI,CAAC,kCAAkC,EAAE,MAAM,EAAE,QAAQ,CAAC;qBAC1D,GAAG,EAAE,CAAC;gBACT,IAAI,YAAY,CAAC,sBAAsB,CAAC,EAAE,CAAC;oBACzC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;oBACxB,KAAK,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBACnE,OAAO;gBACT,CAAC;gBAED,QAAQ,sBAAsB,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACrD,KAAK,eAAe,CAAC,CAAC,CAAC;wBACrB,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;wBAC3B,MAAM;oBACR,CAAC;oBACD,KAAK,sBAAsB,CAAC,CAAC,CAAC;wBAC5B,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;wBACzB,MAAM;oBACR,CAAC;oBACD,KAAK,oBAAoB,CAAC;oBAC1B,KAAK,yBAAyB,CAAC,CAAC,CAAC;wBAC/B,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC;wBAC3B,MAAM;oBACR,CAAC;oBACD,KAAK,oBAAoB,CAAC,CAAC,CAAC;wBAC1B,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;wBACxB,KAAK,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;wBAC9E,MAAM;oBACR,CAAC;gBACH,CAAC;gBACD,KAAK,CAAC,MAAM,GAAG,sBAAsB,CAAC;gBAEtC,MAAM,wBAAwB,EAAE,CAAC;YACnC,CAAC;QACH,CAAC;QAED,aAAa,CAAC,WAEb;YACC,OAAO,CAAC,aAAa,aAAb,aAAa,cAAb,aAAa,IAAb,aAAa,GAAK,CAAC,KAAK,IAAI,EAAE;gBACpC,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAG,WAAW,IAAI,EAAE,CAAC;gBAC5D,qDAAqD;gBACrD,SAAS,aAAa;oBACpB,eAAe,CAAC,KAAK,EAAE,CAAC;gBAC1B,CAAC;gBACD,MAAM,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC;gBAC3C,IAAI,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,OAAO,EAAE,CAAC;oBAC9B,eAAe,CAAC,KAAK,EAAE,CAAC;gBAC1B,CAAC;qBAAM,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;oBAChC,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7E,CAAC;gBAED,IAAI,CAAC;oBACH,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;wBACrB,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;wBACnC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;4BACxB,MAAM,KAAK,GAAG,KAAK,CAAC,uBAAuB,EAAE,WAAW,CAAC,CAAC;4BAC1D,SAAS,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;4BAC1C,MAAM,KAAK,CAAC;4BACZ,MAAM,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;wBACrC,CAAC;oBACH,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAE,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;gBAChE,CAAC;gBACD,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;oBACrB,KAAK,WAAW,CAAC;oBACjB,KAAK,QAAQ,CAAC;oBACd,KAAK,UAAU,CAAC,CAAC,CAAC;wBAChB,OAAO,MAAM,CAAC,SAAS,EAAkD,CAAC;oBAC5E,CAAC;oBACD,KAAK,YAAY,CAAC;oBAClB,KAAK,SAAS,CAAC,CAAC,CAAC;wBACf,cAAc;wBACd,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;oBACrE,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;gBAChB,aAAa,GAAG,SAAS,CAAC;YAC5B,CAAC,CAAC,EAAC,CAAC;QACN,CAAC;QAED,UAAU,CACR,QAAuF;YAEvF,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC;YACnB,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YAEnC,OAAO,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM;YACJ,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACpE,CAAC;QAED,WAAW;YACT,eAAe,CAAC,KAAK,EAAE,CAAC;YACxB,SAAS,aAAT,SAAS,uBAAT,SAAS,EAAI,CAAC;QAChB,CAAC;QAED,SAAS;YACP,OAAO,aAAa,KAAK,SAAS,CAAC;QACrC,CAAC;QAED,iBAAiB;YACf,OAAO,KAAK,CAAC;QACf,CAAC;QAED,SAAS;YACP,OAAO,KAAK,CAAC,MAAM,CAAC;QACtB,CAAC;QAED,QAAQ;YACN,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACnC,CAAC;KACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { AbortError } from \"@azure/abort-controller\";\nimport type { CancelOnProgress, OperationState, SimplePollerLike } from \"@azure/core-lro\";\nimport type { FileUploadAndValidatePoller, PolledOperationOptions } from \"./models.js\";\nimport type { AzureLoadTestingClient } from \"./clientDefinitions.js\";\nimport type {\n LoadTestAdministrationGetTestFile200Response,\n LoadTestAdministrationUploadTestFile201Response,\n} from \"./responses.js\";\nimport { isUnexpected } from \"./isUnexpected.js\";\nimport { sleep } from \"./util/LROUtil.js\";\n\n/**\n * Uploads a file and creates a poller to poll for validation.\n * @param client - The Load Testing client.\n * @param options - The operation options.\n * @returns A poller which can be called to poll until completion of the job.\n */\nexport async function getFileValidationPoller(\n client: AzureLoadTestingClient,\n fileUploadResult: LoadTestAdministrationUploadTestFile201Response,\n polledOperationOptions: PolledOperationOptions = {},\n): Promise<FileUploadAndValidatePoller> {\n // get filename and testid from initial response\n const fileName = fileUploadResult.body.fileName;\n const requestUrl = fileUploadResult.request.url;\n const testId = requestUrl.substring(\n requestUrl.indexOf(\"tests/\") + 6,\n requestUrl.lastIndexOf(\"/files\"),\n );\n type Handler = (state: OperationState<LoadTestAdministrationGetTestFile200Response>) => void;\n\n const state: OperationState<LoadTestAdministrationGetTestFile200Response> = {\n status: \"notStarted\",\n };\n\n const progressCallbacks = new Map<symbol, Handler>();\n const processProgressCallbacks = async (): Promise<void> =>\n progressCallbacks.forEach((h) => h(state));\n let resultPromise: Promise<LoadTestAdministrationGetTestFile200Response> | undefined;\n let cancelJob: (() => void) | undefined;\n const abortController = new AbortController();\n const currentPollIntervalInMs = polledOperationOptions.updateIntervalInMs ?? 2000;\n\n const poller: SimplePollerLike<\n OperationState<LoadTestAdministrationGetTestFile200Response>,\n LoadTestAdministrationGetTestFile200Response\n > = {\n async poll(options?: { abortSignal?: AbortSignalLike }): Promise<void> {\n if (options?.abortSignal?.aborted) {\n throw new AbortError(\"The polling was aborted.\");\n }\n\n if (fileName) {\n const fileValidationResponse = await client\n .path(\"/tests/{testId}/files/{fileName}\", testId, fileName)\n .get();\n if (isUnexpected(fileValidationResponse)) {\n state.status = \"failed\";\n state.error = new Error(fileValidationResponse.body.error.message);\n return;\n }\n\n switch (fileValidationResponse.body.validationStatus) {\n case \"NOT_VALIDATED\": {\n state.status = \"succeeded\";\n break;\n }\n case \"VALIDATION_INITIATED\": {\n state.status = \"running\";\n break;\n }\n case \"VALIDATION_SUCCESS\":\n case \"VALIDATION_NOT_REQUIRED\": {\n state.status = \"succeeded\";\n break;\n }\n case \"VALIDATION_FAILURE\": {\n state.status = \"failed\";\n state.error = new Error(fileValidationResponse.body.validationFailureDetails);\n break;\n }\n }\n state.result = fileValidationResponse;\n\n await processProgressCallbacks();\n }\n },\n\n pollUntilDone(pollOptions?: {\n abortSignal?: AbortSignalLike;\n }): Promise<LoadTestAdministrationGetTestFile200Response> {\n return (resultPromise ??= (async () => {\n const { abortSignal: inputAbortSignal } = pollOptions || {};\n // In the future we can use AbortSignal.any() instead\n function abortListener(): void {\n abortController.abort();\n }\n const abortSignal = abortController.signal;\n if (inputAbortSignal?.aborted) {\n abortController.abort();\n } else if (!abortSignal.aborted) {\n inputAbortSignal?.addEventListener(\"abort\", abortListener, { once: true });\n }\n\n try {\n if (!poller.isDone()) {\n await poller.poll({ abortSignal });\n while (!poller.isDone()) {\n const delay = sleep(currentPollIntervalInMs, abortSignal);\n cancelJob = () => abortController.abort();\n await delay;\n await poller.poll({ abortSignal });\n }\n }\n } finally {\n inputAbortSignal?.removeEventListener(\"abort\", abortListener);\n }\n switch (state.status) {\n case \"succeeded\":\n case \"failed\":\n case \"canceled\": {\n return poller.getResult() as LoadTestAdministrationGetTestFile200Response;\n }\n case \"notStarted\":\n case \"running\": {\n // Unreachable\n throw new Error(`polling completed without succeeding or failing`);\n }\n }\n })().finally(() => {\n resultPromise = undefined;\n }));\n },\n\n onProgress(\n callback: (state: OperationState<LoadTestAdministrationGetTestFile200Response>) => void,\n ): CancelOnProgress {\n const s = Symbol();\n progressCallbacks.set(s, callback);\n\n return () => progressCallbacks.delete(s);\n },\n\n isDone(): boolean {\n return [\"succeeded\", \"failed\", \"canceled\"].includes(state.status);\n },\n\n stopPolling(): void {\n abortController.abort();\n cancelJob?.();\n },\n\n isStopped(): boolean {\n return resultPromise === undefined;\n },\n\n getOperationState(): OperationState<LoadTestAdministrationGetTestFile200Response> {\n return state;\n },\n\n getResult(): LoadTestAdministrationGetTestFile200Response | undefined {\n return state.result;\n },\n\n toString() {\n return JSON.stringify({ state });\n },\n };\n\n return poller;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"getFileValidationPoller.js","sourceRoot":"","sources":["../../src/getFileValidationPoller.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { AbortError } from \"@azure/abort-controller\";\nimport type { CancelOnProgress, OperationState, SimplePollerLike } from \"@azure/core-lro\";\nimport type { FileUploadAndValidatePoller, PolledOperationOptions } from \"./models.js\";\nimport type { AzureLoadTestingClient } from \"./clientDefinitions.js\";\nimport type {\n LoadTestAdministrationGetTestFile200Response,\n LoadTestAdministrationUploadTestFile201Response,\n} from \"./responses.js\";\nimport { isUnexpected } from \"./isUnexpected.js\";\nimport { sleep } from \"./util/LROUtil.js\";\n\n/**\n * Uploads a file and creates a poller to poll for validation.\n * @param client - The Load Testing client.\n * @param options - The operation options.\n * @returns A poller which can be called to poll until completion of the job.\n */\nexport async function getFileValidationPoller(\n client: AzureLoadTestingClient,\n fileUploadResult: LoadTestAdministrationUploadTestFile201Response,\n polledOperationOptions: PolledOperationOptions = {},\n): Promise<FileUploadAndValidatePoller> {\n // get filename and testid from initial response\n const fileName = fileUploadResult.body.fileName;\n const requestUrl = fileUploadResult.request.url;\n const testId = requestUrl.substring(\n requestUrl.indexOf(\"tests/\") + 6,\n requestUrl.lastIndexOf(\"/files\"),\n );\n type Handler = (state: OperationState<LoadTestAdministrationGetTestFile200Response>) => void;\n\n const state: OperationState<LoadTestAdministrationGetTestFile200Response> = {\n status: \"notStarted\",\n };\n\n const progressCallbacks = new Map<symbol, Handler>();\n const processProgressCallbacks = async (): Promise<void> =>\n progressCallbacks.forEach((h) => h(state));\n let resultPromise: Promise<LoadTestAdministrationGetTestFile200Response> | undefined;\n let cancelJob: (() => void) | undefined;\n const abortController = new AbortController();\n const currentPollIntervalInMs = polledOperationOptions.updateIntervalInMs ?? 2000;\n\n const poller: SimplePollerLike<\n OperationState<LoadTestAdministrationGetTestFile200Response>,\n LoadTestAdministrationGetTestFile200Response\n > = {\n async poll(options?: { abortSignal?: AbortSignalLike }): Promise<void> {\n if (options?.abortSignal?.aborted) {\n throw new AbortError(\"The polling was aborted.\");\n }\n\n if (fileName) {\n const fileValidationResponse = await client\n .path(\"/tests/{testId}/files/{fileName}\", testId, fileName)\n .get();\n if (isUnexpected(fileValidationResponse)) {\n state.status = \"failed\";\n state.error = new Error(fileValidationResponse.body.error.message);\n return;\n }\n\n switch (fileValidationResponse.body.validationStatus) {\n case \"NOT_VALIDATED\": {\n state.status = \"succeeded\";\n break;\n }\n case \"VALIDATION_INITIATED\": {\n state.status = \"running\";\n break;\n }\n case \"VALIDATION_SUCCESS\":\n case \"VALIDATION_NOT_REQUIRED\": {\n state.status = \"succeeded\";\n break;\n }\n case \"VALIDATION_FAILURE\": {\n state.status = \"failed\";\n state.error = new Error(fileValidationResponse.body.validationFailureDetails);\n break;\n }\n }\n state.result = fileValidationResponse;\n\n await processProgressCallbacks();\n }\n },\n\n pollUntilDone(pollOptions?: {\n abortSignal?: AbortSignalLike;\n }): Promise<LoadTestAdministrationGetTestFile200Response> {\n return (resultPromise ??= (async () => {\n const { abortSignal: inputAbortSignal } = pollOptions || {};\n // In the future we can use AbortSignal.any() instead\n function abortListener(): void {\n abortController.abort();\n }\n const abortSignal = abortController.signal;\n if (inputAbortSignal?.aborted) {\n abortController.abort();\n } else if (!abortSignal.aborted) {\n inputAbortSignal?.addEventListener(\"abort\", abortListener, { once: true });\n }\n\n try {\n if (!poller.isDone()) {\n await poller.poll({ abortSignal });\n while (!poller.isDone()) {\n const delay = sleep(currentPollIntervalInMs, abortSignal);\n cancelJob = () => abortController.abort();\n await delay;\n await poller.poll({ abortSignal });\n }\n }\n } finally {\n inputAbortSignal?.removeEventListener(\"abort\", abortListener);\n }\n switch (state.status) {\n case \"succeeded\":\n case \"failed\":\n case \"canceled\": {\n return poller.getResult() as LoadTestAdministrationGetTestFile200Response;\n }\n case \"notStarted\":\n case \"running\": {\n // Unreachable\n throw new Error(`polling completed without succeeding or failing`);\n }\n }\n })().finally(() => {\n resultPromise = undefined;\n }));\n },\n\n onProgress(\n callback: (state: OperationState<LoadTestAdministrationGetTestFile200Response>) => void,\n ): CancelOnProgress {\n const s = Symbol();\n progressCallbacks.set(s, callback);\n\n return () => progressCallbacks.delete(s);\n },\n\n isDone(): boolean {\n return [\"succeeded\", \"failed\", \"canceled\"].includes(state.status);\n },\n\n stopPolling(): void {\n abortController.abort();\n cancelJob?.();\n },\n\n isStopped(): boolean {\n return resultPromise === undefined;\n },\n\n getOperationState(): OperationState<LoadTestAdministrationGetTestFile200Response> {\n return state;\n },\n\n getResult(): LoadTestAdministrationGetTestFile200Response | undefined {\n return state.result;\n },\n\n toString() {\n return JSON.stringify({ state });\n },\n };\n\n return poller;\n}\n"]}
|
|
@@ -10,7 +10,6 @@ import { sleep, isTestProfileRunInProgress } from "./util/LROUtil.js";
|
|
|
10
10
|
* @returns A poller which can be called to poll until completion of the job.
|
|
11
11
|
*/
|
|
12
12
|
export async function getTestProfileRunCompletionPoller(client, createTestProfileRunResponse, polledOperationOptions = {}) {
|
|
13
|
-
var _a;
|
|
14
13
|
const state = {
|
|
15
14
|
status: "notStarted",
|
|
16
15
|
};
|
|
@@ -19,12 +18,11 @@ export async function getTestProfileRunCompletionPoller(client, createTestProfil
|
|
|
19
18
|
let resultPromise;
|
|
20
19
|
let cancelJob;
|
|
21
20
|
const abortController = new AbortController();
|
|
22
|
-
const currentPollIntervalInMs =
|
|
21
|
+
const currentPollIntervalInMs = polledOperationOptions.updateIntervalInMs ?? 10000;
|
|
23
22
|
const testProfileRunId = createTestProfileRunResponse.body.testProfileRunId;
|
|
24
23
|
const poller = {
|
|
25
24
|
async poll(options) {
|
|
26
|
-
|
|
27
|
-
if ((_a = options === null || options === void 0 ? void 0 : options.abortSignal) === null || _a === void 0 ? void 0 : _a.aborted) {
|
|
25
|
+
if (options?.abortSignal?.aborted) {
|
|
28
26
|
throw new AbortError("The polling was aborted.");
|
|
29
27
|
}
|
|
30
28
|
if (testProfileRunId) {
|
|
@@ -54,18 +52,18 @@ export async function getTestProfileRunCompletionPoller(client, createTestProfil
|
|
|
54
52
|
}
|
|
55
53
|
},
|
|
56
54
|
pollUntilDone(pollOptions) {
|
|
57
|
-
return (resultPromise
|
|
55
|
+
return (resultPromise ??= (async () => {
|
|
58
56
|
const { abortSignal: inputAbortSignal } = pollOptions || {};
|
|
59
57
|
// In the future we can use AbortSignal.any() instead
|
|
60
58
|
function abortListener() {
|
|
61
59
|
abortController.abort();
|
|
62
60
|
}
|
|
63
61
|
const abortSignal = abortController.signal;
|
|
64
|
-
if (inputAbortSignal
|
|
62
|
+
if (inputAbortSignal?.aborted) {
|
|
65
63
|
abortController.abort();
|
|
66
64
|
}
|
|
67
65
|
else if (!abortSignal.aborted) {
|
|
68
|
-
inputAbortSignal
|
|
66
|
+
inputAbortSignal?.addEventListener("abort", abortListener, { once: true });
|
|
69
67
|
}
|
|
70
68
|
try {
|
|
71
69
|
if (!poller.isDone()) {
|
|
@@ -79,7 +77,7 @@ export async function getTestProfileRunCompletionPoller(client, createTestProfil
|
|
|
79
77
|
}
|
|
80
78
|
}
|
|
81
79
|
finally {
|
|
82
|
-
inputAbortSignal
|
|
80
|
+
inputAbortSignal?.removeEventListener("abort", abortListener);
|
|
83
81
|
}
|
|
84
82
|
switch (state.status) {
|
|
85
83
|
case "succeeded":
|
|
@@ -95,7 +93,7 @@ export async function getTestProfileRunCompletionPoller(client, createTestProfil
|
|
|
95
93
|
}
|
|
96
94
|
})().finally(() => {
|
|
97
95
|
resultPromise = undefined;
|
|
98
|
-
}))
|
|
96
|
+
}));
|
|
99
97
|
},
|
|
100
98
|
onProgress(callback) {
|
|
101
99
|
const s = Symbol();
|
|
@@ -107,7 +105,7 @@ export async function getTestProfileRunCompletionPoller(client, createTestProfil
|
|
|
107
105
|
},
|
|
108
106
|
stopPolling() {
|
|
109
107
|
abortController.abort();
|
|
110
|
-
cancelJob
|
|
108
|
+
cancelJob?.();
|
|
111
109
|
},
|
|
112
110
|
isStopped() {
|
|
113
111
|
return resultPromise === undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTestProfileRunCompletionPoller.js","sourceRoot":"","sources":["../../src/getTestProfileRunCompletionPoller.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { AbortError } from \"@azure/abort-controller\";\nimport type { CancelOnProgress, OperationState, SimplePollerLike } from \"@azure/core-lro\";\nimport type { PolledOperationOptions, TestProfileRunCompletionPoller } from \"./models.js\";\nimport type { AzureLoadTestingClient } from \"./clientDefinitions.js\";\nimport type {\n TestProfileRunAdministrationCreateOrUpdateTestProfileRun200Response,\n TestProfileRunAdministrationCreateOrUpdateTestProfileRun201Response,\n TestProfileRunAdministrationGetTestProfileRun200Response,\n} from \"./responses.js\";\nimport { isUnexpected } from \"./isUnexpected.js\";\nimport { sleep, isTestProfileRunInProgress } from \"./util/LROUtil.js\";\n\n/**\n * Creates a poller to poll for test run status.\n * @param client - The Load Testing client.\n * @param options - The operation options.\n * @returns A poller which can be called to poll until completion of the job.\n */\nexport async function getTestProfileRunCompletionPoller(\n client: AzureLoadTestingClient,\n createTestProfileRunResponse:\n | TestProfileRunAdministrationCreateOrUpdateTestProfileRun200Response\n | TestProfileRunAdministrationCreateOrUpdateTestProfileRun201Response,\n polledOperationOptions: PolledOperationOptions = {},\n): Promise<TestProfileRunCompletionPoller> {\n type Handler = (\n state: OperationState<TestProfileRunAdministrationGetTestProfileRun200Response>,\n ) => void;\n\n const state: OperationState<TestProfileRunAdministrationGetTestProfileRun200Response> = {\n status: \"notStarted\",\n };\n\n const progressCallbacks = new Map<symbol, Handler>();\n const processProgressCallbacks = async (): Promise<void> =>\n progressCallbacks.forEach((h) => h(state));\n let resultPromise: Promise<TestProfileRunAdministrationGetTestProfileRun200Response> | undefined;\n let cancelJob: (() => void) | undefined;\n const abortController = new AbortController();\n const currentPollIntervalInMs = polledOperationOptions.updateIntervalInMs ?? 10000;\n const testProfileRunId = createTestProfileRunResponse.body.testProfileRunId;\n\n const poller: SimplePollerLike<\n OperationState<TestProfileRunAdministrationGetTestProfileRun200Response>,\n TestProfileRunAdministrationGetTestProfileRun200Response\n > = {\n async poll(options?: { abortSignal?: AbortSignalLike }): Promise<void> {\n if (options?.abortSignal?.aborted) {\n throw new AbortError(\"The polling was aborted.\");\n }\n\n if (testProfileRunId) {\n const getTestProfileRunResult = await client\n .path(\"/test-profile-runs/{testProfileRunId}\", testProfileRunId)\n .get();\n if (isUnexpected(getTestProfileRunResult)) {\n state.status = \"failed\";\n state.error = new Error(getTestProfileRunResult.body.error.message);\n return;\n }\n\n if (getTestProfileRunResult.body.status === \"FAILED\") {\n state.status = \"failed\";\n state.error = new Error(getTestProfileRunResult.body.status);\n }\n\n if (getTestProfileRunResult.body.status === \"CANCELLED\") {\n state.status = \"canceled\";\n }\n\n if (getTestProfileRunResult.body.status === \"DONE\") {\n state.status = \"succeeded\";\n }\n\n if (isTestProfileRunInProgress(getTestProfileRunResult.body)) {\n state.status = \"running\";\n }\n state.result = getTestProfileRunResult;\n await processProgressCallbacks();\n }\n },\n\n pollUntilDone(pollOptions?: {\n abortSignal?: AbortSignalLike;\n }): Promise<TestProfileRunAdministrationGetTestProfileRun200Response> {\n return (resultPromise ??= (async () => {\n const { abortSignal: inputAbortSignal } = pollOptions || {};\n // In the future we can use AbortSignal.any() instead\n function abortListener(): void {\n abortController.abort();\n }\n const abortSignal = abortController.signal;\n if (inputAbortSignal?.aborted) {\n abortController.abort();\n } else if (!abortSignal.aborted) {\n inputAbortSignal?.addEventListener(\"abort\", abortListener, { once: true });\n }\n\n try {\n if (!poller.isDone()) {\n await poller.poll({ abortSignal });\n while (!poller.isDone()) {\n const delay = sleep(currentPollIntervalInMs, abortSignal);\n cancelJob = () => abortController.abort();\n await delay;\n await poller.poll({ abortSignal });\n }\n }\n } finally {\n inputAbortSignal?.removeEventListener(\"abort\", abortListener);\n }\n switch (state.status) {\n case \"succeeded\":\n case \"failed\":\n case \"canceled\": {\n return poller.getResult() as TestProfileRunAdministrationGetTestProfileRun200Response;\n }\n case \"notStarted\":\n case \"running\": {\n // Unreachable\n throw new Error(`polling completed without succeeding or failing`);\n }\n }\n })().finally(() => {\n resultPromise = undefined;\n }));\n },\n\n onProgress(\n callback: (\n state: OperationState<TestProfileRunAdministrationGetTestProfileRun200Response>,\n ) => void,\n ): CancelOnProgress {\n const s = Symbol();\n progressCallbacks.set(s, callback);\n\n return () => progressCallbacks.delete(s);\n },\n\n isDone(): boolean {\n return [\"succeeded\", \"failed\", \"canceled\"].includes(state.status);\n },\n\n stopPolling(): void {\n abortController.abort();\n cancelJob?.();\n },\n\n isStopped(): boolean {\n return resultPromise === undefined;\n },\n\n getOperationState(): OperationState<TestProfileRunAdministrationGetTestProfileRun200Response> {\n return state;\n },\n\n getResult(): TestProfileRunAdministrationGetTestProfileRun200Response | undefined {\n return state.result;\n },\n\n toString() {\n return JSON.stringify({ state });\n },\n };\n\n return poller;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"getTestProfileRunCompletionPoller.js","sourceRoot":"","sources":["../../src/getTestProfileRunCompletionPoller.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { AbortError } from \"@azure/abort-controller\";\nimport type { CancelOnProgress, OperationState, SimplePollerLike } from \"@azure/core-lro\";\nimport type { PolledOperationOptions, TestProfileRunCompletionPoller } from \"./models.js\";\nimport type { AzureLoadTestingClient } from \"./clientDefinitions.js\";\nimport type {\n TestProfileRunAdministrationCreateOrUpdateTestProfileRun200Response,\n TestProfileRunAdministrationCreateOrUpdateTestProfileRun201Response,\n TestProfileRunAdministrationGetTestProfileRun200Response,\n} from \"./responses.js\";\nimport { isUnexpected } from \"./isUnexpected.js\";\nimport { sleep, isTestProfileRunInProgress } from \"./util/LROUtil.js\";\n\n/**\n * Creates a poller to poll for test run status.\n * @param client - The Load Testing client.\n * @param options - The operation options.\n * @returns A poller which can be called to poll until completion of the job.\n */\nexport async function getTestProfileRunCompletionPoller(\n client: AzureLoadTestingClient,\n createTestProfileRunResponse:\n | TestProfileRunAdministrationCreateOrUpdateTestProfileRun200Response\n | TestProfileRunAdministrationCreateOrUpdateTestProfileRun201Response,\n polledOperationOptions: PolledOperationOptions = {},\n): Promise<TestProfileRunCompletionPoller> {\n type Handler = (\n state: OperationState<TestProfileRunAdministrationGetTestProfileRun200Response>,\n ) => void;\n\n const state: OperationState<TestProfileRunAdministrationGetTestProfileRun200Response> = {\n status: \"notStarted\",\n };\n\n const progressCallbacks = new Map<symbol, Handler>();\n const processProgressCallbacks = async (): Promise<void> =>\n progressCallbacks.forEach((h) => h(state));\n let resultPromise: Promise<TestProfileRunAdministrationGetTestProfileRun200Response> | undefined;\n let cancelJob: (() => void) | undefined;\n const abortController = new AbortController();\n const currentPollIntervalInMs = polledOperationOptions.updateIntervalInMs ?? 10000;\n const testProfileRunId = createTestProfileRunResponse.body.testProfileRunId;\n\n const poller: SimplePollerLike<\n OperationState<TestProfileRunAdministrationGetTestProfileRun200Response>,\n TestProfileRunAdministrationGetTestProfileRun200Response\n > = {\n async poll(options?: { abortSignal?: AbortSignalLike }): Promise<void> {\n if (options?.abortSignal?.aborted) {\n throw new AbortError(\"The polling was aborted.\");\n }\n\n if (testProfileRunId) {\n const getTestProfileRunResult = await client\n .path(\"/test-profile-runs/{testProfileRunId}\", testProfileRunId)\n .get();\n if (isUnexpected(getTestProfileRunResult)) {\n state.status = \"failed\";\n state.error = new Error(getTestProfileRunResult.body.error.message);\n return;\n }\n\n if (getTestProfileRunResult.body.status === \"FAILED\") {\n state.status = \"failed\";\n state.error = new Error(getTestProfileRunResult.body.status);\n }\n\n if (getTestProfileRunResult.body.status === \"CANCELLED\") {\n state.status = \"canceled\";\n }\n\n if (getTestProfileRunResult.body.status === \"DONE\") {\n state.status = \"succeeded\";\n }\n\n if (isTestProfileRunInProgress(getTestProfileRunResult.body)) {\n state.status = \"running\";\n }\n state.result = getTestProfileRunResult;\n await processProgressCallbacks();\n }\n },\n\n pollUntilDone(pollOptions?: {\n abortSignal?: AbortSignalLike;\n }): Promise<TestProfileRunAdministrationGetTestProfileRun200Response> {\n return (resultPromise ??= (async () => {\n const { abortSignal: inputAbortSignal } = pollOptions || {};\n // In the future we can use AbortSignal.any() instead\n function abortListener(): void {\n abortController.abort();\n }\n const abortSignal = abortController.signal;\n if (inputAbortSignal?.aborted) {\n abortController.abort();\n } else if (!abortSignal.aborted) {\n inputAbortSignal?.addEventListener(\"abort\", abortListener, { once: true });\n }\n\n try {\n if (!poller.isDone()) {\n await poller.poll({ abortSignal });\n while (!poller.isDone()) {\n const delay = sleep(currentPollIntervalInMs, abortSignal);\n cancelJob = () => abortController.abort();\n await delay;\n await poller.poll({ abortSignal });\n }\n }\n } finally {\n inputAbortSignal?.removeEventListener(\"abort\", abortListener);\n }\n switch (state.status) {\n case \"succeeded\":\n case \"failed\":\n case \"canceled\": {\n return poller.getResult() as TestProfileRunAdministrationGetTestProfileRun200Response;\n }\n case \"notStarted\":\n case \"running\": {\n // Unreachable\n throw new Error(`polling completed without succeeding or failing`);\n }\n }\n })().finally(() => {\n resultPromise = undefined;\n }));\n },\n\n onProgress(\n callback: (\n state: OperationState<TestProfileRunAdministrationGetTestProfileRun200Response>,\n ) => void,\n ): CancelOnProgress {\n const s = Symbol();\n progressCallbacks.set(s, callback);\n\n return () => progressCallbacks.delete(s);\n },\n\n isDone(): boolean {\n return [\"succeeded\", \"failed\", \"canceled\"].includes(state.status);\n },\n\n stopPolling(): void {\n abortController.abort();\n cancelJob?.();\n },\n\n isStopped(): boolean {\n return resultPromise === undefined;\n },\n\n getOperationState(): OperationState<TestProfileRunAdministrationGetTestProfileRun200Response> {\n return state;\n },\n\n getResult(): TestProfileRunAdministrationGetTestProfileRun200Response | undefined {\n return state.result;\n },\n\n toString() {\n return JSON.stringify({ state });\n },\n };\n\n return poller;\n}\n"]}
|
|
@@ -10,7 +10,6 @@ import { sleep, isTestRunInProgress } from "./util/LROUtil.js";
|
|
|
10
10
|
* @returns A poller which can be called to poll until completion of the job.
|
|
11
11
|
*/
|
|
12
12
|
export async function getTestRunCompletionPoller(client, createTestRunResponse, polledOperationOptions = {}) {
|
|
13
|
-
var _a;
|
|
14
13
|
const state = {
|
|
15
14
|
status: "notStarted",
|
|
16
15
|
};
|
|
@@ -19,12 +18,11 @@ export async function getTestRunCompletionPoller(client, createTestRunResponse,
|
|
|
19
18
|
let resultPromise;
|
|
20
19
|
let cancelJob;
|
|
21
20
|
const abortController = new AbortController();
|
|
22
|
-
const currentPollIntervalInMs =
|
|
21
|
+
const currentPollIntervalInMs = polledOperationOptions.updateIntervalInMs ?? 2000;
|
|
23
22
|
const testRunId = createTestRunResponse.body.testRunId;
|
|
24
23
|
const poller = {
|
|
25
24
|
async poll(options) {
|
|
26
|
-
|
|
27
|
-
if ((_a = options === null || options === void 0 ? void 0 : options.abortSignal) === null || _a === void 0 ? void 0 : _a.aborted) {
|
|
25
|
+
if (options?.abortSignal?.aborted) {
|
|
28
26
|
throw new AbortError("The polling was aborted.");
|
|
29
27
|
}
|
|
30
28
|
if (testRunId) {
|
|
@@ -52,18 +50,18 @@ export async function getTestRunCompletionPoller(client, createTestRunResponse,
|
|
|
52
50
|
}
|
|
53
51
|
},
|
|
54
52
|
pollUntilDone(pollOptions) {
|
|
55
|
-
return (resultPromise
|
|
53
|
+
return (resultPromise ??= (async () => {
|
|
56
54
|
const { abortSignal: inputAbortSignal } = pollOptions || {};
|
|
57
55
|
// In the future we can use AbortSignal.any() instead
|
|
58
56
|
function abortListener() {
|
|
59
57
|
abortController.abort();
|
|
60
58
|
}
|
|
61
59
|
const abortSignal = abortController.signal;
|
|
62
|
-
if (inputAbortSignal
|
|
60
|
+
if (inputAbortSignal?.aborted) {
|
|
63
61
|
abortController.abort();
|
|
64
62
|
}
|
|
65
63
|
else if (!abortSignal.aborted) {
|
|
66
|
-
inputAbortSignal
|
|
64
|
+
inputAbortSignal?.addEventListener("abort", abortListener, { once: true });
|
|
67
65
|
}
|
|
68
66
|
try {
|
|
69
67
|
if (!poller.isDone()) {
|
|
@@ -77,7 +75,7 @@ export async function getTestRunCompletionPoller(client, createTestRunResponse,
|
|
|
77
75
|
}
|
|
78
76
|
}
|
|
79
77
|
finally {
|
|
80
|
-
inputAbortSignal
|
|
78
|
+
inputAbortSignal?.removeEventListener("abort", abortListener);
|
|
81
79
|
}
|
|
82
80
|
switch (state.status) {
|
|
83
81
|
case "succeeded":
|
|
@@ -93,7 +91,7 @@ export async function getTestRunCompletionPoller(client, createTestRunResponse,
|
|
|
93
91
|
}
|
|
94
92
|
})().finally(() => {
|
|
95
93
|
resultPromise = undefined;
|
|
96
|
-
}))
|
|
94
|
+
}));
|
|
97
95
|
},
|
|
98
96
|
onProgress(callback) {
|
|
99
97
|
const s = Symbol();
|
|
@@ -105,7 +103,7 @@ export async function getTestRunCompletionPoller(client, createTestRunResponse,
|
|
|
105
103
|
},
|
|
106
104
|
stopPolling() {
|
|
107
105
|
abortController.abort();
|
|
108
|
-
cancelJob
|
|
106
|
+
cancelJob?.();
|
|
109
107
|
},
|
|
110
108
|
isStopped() {
|
|
111
109
|
return resultPromise === undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getTestRunCompletionPoller.js","sourceRoot":"","sources":["../../src/getTestRunCompletionPoller.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AASrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAA8B,EAC9B,qBAE+C,EAC/C,yBAAiD,EAAE
|
|
1
|
+
{"version":3,"file":"getTestRunCompletionPoller.js","sourceRoot":"","sources":["../../src/getTestRunCompletionPoller.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AbortSignalLike } from \"@azure/abort-controller\";\nimport { AbortError } from \"@azure/abort-controller\";\nimport type { CancelOnProgress, OperationState, SimplePollerLike } from \"@azure/core-lro\";\nimport type { TestRunCompletionPoller, PolledOperationOptions } from \"./models.js\";\nimport type { AzureLoadTestingClient } from \"./clientDefinitions.js\";\nimport type {\n LoadTestRunCreateOrUpdateTestRun200Response,\n LoadTestRunCreateOrUpdateTestRun201Response,\n LoadTestRunGetTestRun200Response,\n} from \"./responses.js\";\nimport { isUnexpected } from \"./isUnexpected.js\";\nimport { sleep, isTestRunInProgress } from \"./util/LROUtil.js\";\n\n/**\n * Creates a poller to poll for test run status.\n * @param client - The Load Testing client.\n * @param options - The operation options.\n * @returns A poller which can be called to poll until completion of the job.\n */\nexport async function getTestRunCompletionPoller(\n client: AzureLoadTestingClient,\n createTestRunResponse:\n | LoadTestRunCreateOrUpdateTestRun200Response\n | LoadTestRunCreateOrUpdateTestRun201Response,\n polledOperationOptions: PolledOperationOptions = {},\n): Promise<TestRunCompletionPoller> {\n type Handler = (state: OperationState<LoadTestRunGetTestRun200Response>) => void;\n\n const state: OperationState<LoadTestRunGetTestRun200Response> = {\n status: \"notStarted\",\n };\n\n const progressCallbacks = new Map<symbol, Handler>();\n const processProgressCallbacks = async (): Promise<void> =>\n progressCallbacks.forEach((h) => h(state));\n let resultPromise: Promise<LoadTestRunGetTestRun200Response> | undefined;\n let cancelJob: (() => void) | undefined;\n const abortController = new AbortController();\n const currentPollIntervalInMs = polledOperationOptions.updateIntervalInMs ?? 2000;\n const testRunId = createTestRunResponse.body.testRunId;\n\n const poller: SimplePollerLike<\n OperationState<LoadTestRunGetTestRun200Response>,\n LoadTestRunGetTestRun200Response\n > = {\n async poll(options?: { abortSignal?: AbortSignalLike }): Promise<void> {\n if (options?.abortSignal?.aborted) {\n throw new AbortError(\"The polling was aborted.\");\n }\n\n if (testRunId) {\n const getTestRunResult = await client.path(\"/test-runs/{testRunId}\", testRunId).get();\n if (isUnexpected(getTestRunResult)) {\n state.status = \"failed\";\n state.error = new Error(getTestRunResult.body.error.message);\n return;\n }\n\n if (getTestRunResult.body.status === \"FAILED\") {\n state.status = \"failed\";\n state.error = new Error(getTestRunResult.body.status);\n }\n\n if (getTestRunResult.body.status === \"CANCELLED\") {\n state.status = \"canceled\";\n }\n\n if (getTestRunResult.body.status === \"DONE\") {\n state.status = \"succeeded\";\n }\n\n if (isTestRunInProgress(getTestRunResult.body)) {\n state.status = \"running\";\n }\n state.result = getTestRunResult;\n await processProgressCallbacks();\n }\n },\n\n pollUntilDone(pollOptions?: {\n abortSignal?: AbortSignalLike;\n }): Promise<LoadTestRunGetTestRun200Response> {\n return (resultPromise ??= (async () => {\n const { abortSignal: inputAbortSignal } = pollOptions || {};\n // In the future we can use AbortSignal.any() instead\n function abortListener(): void {\n abortController.abort();\n }\n const abortSignal = abortController.signal;\n if (inputAbortSignal?.aborted) {\n abortController.abort();\n } else if (!abortSignal.aborted) {\n inputAbortSignal?.addEventListener(\"abort\", abortListener, { once: true });\n }\n\n try {\n if (!poller.isDone()) {\n await poller.poll({ abortSignal });\n while (!poller.isDone()) {\n const delay = sleep(currentPollIntervalInMs, abortSignal);\n cancelJob = () => abortController.abort();\n await delay;\n await poller.poll({ abortSignal });\n }\n }\n } finally {\n inputAbortSignal?.removeEventListener(\"abort\", abortListener);\n }\n switch (state.status) {\n case \"succeeded\":\n case \"failed\":\n case \"canceled\": {\n return poller.getResult() as LoadTestRunGetTestRun200Response;\n }\n case \"notStarted\":\n case \"running\": {\n // Unreachable\n throw new Error(`polling completed without succeeding or failing`);\n }\n }\n })().finally(() => {\n resultPromise = undefined;\n }));\n },\n\n onProgress(\n callback: (state: OperationState<LoadTestRunGetTestRun200Response>) => void,\n ): CancelOnProgress {\n const s = Symbol();\n progressCallbacks.set(s, callback);\n\n return () => progressCallbacks.delete(s);\n },\n\n isDone(): boolean {\n return [\"succeeded\", \"failed\", \"canceled\"].includes(state.status);\n },\n\n stopPolling(): void {\n abortController.abort();\n cancelJob?.();\n },\n\n isStopped(): boolean {\n return resultPromise === undefined;\n },\n\n getOperationState(): OperationState<LoadTestRunGetTestRun200Response> {\n return state;\n },\n\n getResult(): LoadTestRunGetTestRun200Response | undefined {\n return state.result;\n },\n\n toString() {\n return JSON.stringify({ state });\n },\n };\n\n return poller;\n}\n"]}
|
|
@@ -47,7 +47,7 @@ const responseMap = {
|
|
|
47
47
|
};
|
|
48
48
|
export function isUnexpected(response) {
|
|
49
49
|
const lroOriginal = response.headers["x-ms-original-url"];
|
|
50
|
-
const url = new URL(lroOriginal
|
|
50
|
+
const url = new URL(lroOriginal ?? response.request.url);
|
|
51
51
|
const method = response.request.method;
|
|
52
52
|
let pathDetails = responseMap[`${method} ${url.pathname}`];
|
|
53
53
|
if (!pathDetails) {
|
|
@@ -56,7 +56,6 @@ export function isUnexpected(response) {
|
|
|
56
56
|
return !pathDetails.includes(response.status);
|
|
57
57
|
}
|
|
58
58
|
function getParametrizedPathSuccess(method, path) {
|
|
59
|
-
var _a, _b, _c, _d;
|
|
60
59
|
const pathParts = path.split("/");
|
|
61
60
|
// Traverse list to match the longest candidate
|
|
62
61
|
// matchedLen: the length of candidate path
|
|
@@ -75,13 +74,13 @@ function getParametrizedPathSuccess(method, path) {
|
|
|
75
74
|
// track if we have found a match to return the values found.
|
|
76
75
|
let found = true;
|
|
77
76
|
for (let i = candidateParts.length - 1, j = pathParts.length - 1; i >= 1 && j >= 1; i--, j--) {
|
|
78
|
-
if (
|
|
79
|
-
const start = candidateParts[i].indexOf("}") + 1, end =
|
|
77
|
+
if (candidateParts[i]?.startsWith("{") && candidateParts[i]?.indexOf("}") !== -1) {
|
|
78
|
+
const start = candidateParts[i].indexOf("}") + 1, end = candidateParts[i]?.length;
|
|
80
79
|
// If the current part of the candidate is a "template" part
|
|
81
80
|
// Try to use the suffix of pattern to match the path
|
|
82
81
|
// {guid} ==> $
|
|
83
82
|
// {guid}:export ==> :export$
|
|
84
|
-
const isMatched = new RegExp(`${
|
|
83
|
+
const isMatched = new RegExp(`${candidateParts[i]?.slice(start, end)}`).test(pathParts[j] || "");
|
|
85
84
|
if (!isMatched) {
|
|
86
85
|
found = false;
|
|
87
86
|
break;
|