-
Notifications
You must be signed in to change notification settings - Fork 8.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Improve logging in API integration test and replace pRetry with a met…
…hod from retryService (#178515) Related to #176401, #175776 ## Summary This PR: - Improves logging (I've added debug logs to the helpers that does an API request such as creating a data view) - Uses retryService instead of pRetry - In case of throwing an error in pRetry, when we have 10 retries, it does not log the retry attempts and we end up in the situation that is mentioned in this [comment, item 3](#176401 (comment)) |Before|After| |---|---| |![image](https://github.com/elastic/kibana/assets/12370520/576146f2-09da-4221-a570-6d47e047f229)|![image](https://github.com/elastic/kibana/assets/12370520/0a0897a3-0bd3-4d44-9b79-8f99fb580b4a)| - Attempts to fix flakiness in rate reason message due to having different data ![image](https://github.com/elastic/kibana/assets/12370520/dff48ac1-a9bf-4b93-addb-fd40acae382e) ### Flaky test runner #### Current (after adding refresh index and adjusting timeout) - [25] https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5463 ✅ - [200] https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5465 ✅ #### Old - [25] https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5452 ✅ - [200] https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5454 [1 Failed : 25 Canceled: 174 Passed ] ##### After checking data is generated in metric threshold - [25] https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5460 ✅ - [200] https://buildkite.com/elastic/kibana-flaky-test-suite-runner/builds/5462 [1 Failed : 199 Canceled ] Inspired by #173998, special thanks to @jpdjere and @dmlemeshko for their support and knowledge sharing.
- Loading branch information
1 parent
28c9753
commit 57522d6
Showing
15 changed files
with
378 additions
and
45 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
/* | ||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one | ||
* or more contributor license agreements. Licensed under the Elastic License | ||
* 2.0; you may not use this file except in compliance with the Elastic License | ||
* 2.0. | ||
*/ | ||
|
||
import { RetryService } from '@kbn/ftr-common-functional-services'; | ||
import type { ToolingLog } from '@kbn/tooling-log'; | ||
|
||
/** | ||
* Copied from x-pack/test/security_solution_api_integration/test_suites/detections_response/utils/retry.ts | ||
* | ||
* Retry wrapper for async supertests, with a maximum number of retries. | ||
* You can pass in a function that executes a supertest test, and make assertions | ||
* on the response. If the test fails, it will retry the test the number of retries | ||
* that are passed in. | ||
* | ||
* Example usage: | ||
* ```ts | ||
const fleetResponse = await retry<InstallPackageResponse>({ | ||
test: async () => { | ||
const testResponse = await supertest | ||
.post(`/api/fleet/epm/packages/security_detection_engine`) | ||
.set('kbn-xsrf', 'xxxx') | ||
.set('elastic-api-version', '2023-10-31') | ||
.type('application/json') | ||
.send({ force: true }) | ||
.expect(200); | ||
expect((testResponse.body as InstallPackageResponse).items).toBeDefined(); | ||
expect((testResponse.body as InstallPackageResponse).items.length).toBeGreaterThan(0); | ||
return testResponse.body; | ||
}, | ||
retryService, | ||
retries: MAX_RETRIES, | ||
timeout: ATTEMPT_TIMEOUT, | ||
}); | ||
* ``` | ||
* @param test The function containing a test to run | ||
* @param retryService The retry service to use | ||
* @param retries The maximum number of retries | ||
* @param timeout The timeout for each retry | ||
* @param retryDelay The delay between each retry | ||
* @returns The response from the test | ||
*/ | ||
export const retry = async <T>({ | ||
test, | ||
retryService, | ||
utilityName, | ||
retries = 3, | ||
timeout = 30000, | ||
retryDelay = 200, | ||
logger, | ||
}: { | ||
test: () => Promise<T>; | ||
utilityName: string; | ||
retryService: RetryService; | ||
retries?: number; | ||
timeout?: number; | ||
retryDelay?: number; | ||
logger: ToolingLog; | ||
}): Promise<T> => { | ||
let retryAttempt = 0; | ||
const response = await retryService.tryForTime( | ||
timeout, | ||
async () => { | ||
if (retryAttempt > retries) { | ||
// Log error message if we reached the maximum number of retries | ||
// but don't throw an error, return it to break the retry loop. | ||
const errorMessage = `Reached maximum number of retries for test ${utilityName}: ${ | ||
retryAttempt - 1 | ||
}/${retries}`; | ||
logger.error(errorMessage); | ||
return new Error(errorMessage); | ||
} | ||
|
||
retryAttempt = retryAttempt + 1; | ||
|
||
return await test(); | ||
}, | ||
undefined, | ||
retryDelay | ||
); | ||
|
||
// Now throw the error in order to fail the test. | ||
if (response instanceof Error) { | ||
throw response; | ||
} | ||
|
||
return response; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.