Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[grid] enable the httpclient to perform async requests #14403 #14409

Merged
merged 3 commits into from
Oct 29, 2024

Conversation

joerg1985
Copy link
Member

@joerg1985 joerg1985 commented Aug 19, 2024

User description

Description

This change will allow enable the httpclient to perform async requests.

Motivation and Context

see #14403

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist

  • I have read the contributing document.
  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I have added tests to cover my changes.
  • All new and existing tests passed.

PR Type

Enhancement, Tests


Description

  • Added asynchronous HTTP request capability to the HttpClient interface using CompletableFuture.
  • Implemented executeAsync method in JdkHttpClient with proper timeout handling and error management.
  • Replaced asynchronous request handling in execute0 with synchronous execution to avoid known JDK issues.
  • Added a test case to ensure HTTP requests are stopped after a timeout, verifying the new async functionality.

Changes walkthrough 📝

Relevant files
Enhancement
HttpClient.java
Add asynchronous HTTP request capability to HttpClient     

java/src/org/openqa/selenium/remote/http/HttpClient.java

  • Added executeAsync method to perform asynchronous HTTP requests.
  • Utilized CompletableFuture for async operations.
  • +5/-0     
    JdkHttpClient.java
    Implement async execution and improve error handling in JdkHttpClient

    java/src/org/openqa/selenium/remote/http/jdk/JdkHttpClient.java

  • Implemented executeAsync method with timeout handling.
  • Replaced sendAsync with synchronous send in execute0.
  • Improved error handling for timeouts and interruptions.
  • +64/-27 
    Tests
    HttpClientTestBase.java
    Add test for request timeout handling in HttpClient           

    java/test/org/openqa/selenium/remote/internal/HttpClientTestBase.java

  • Added test to verify request stops after timeout.
  • Utilized AtomicInteger to track request attempts.
  • +30/-0   

    💡 PR-Agent usage:
    Comment /help on the PR to get a list of all available PR-Agent tools and their descriptions

    Copy link
    Contributor

    PR Reviewer Guide 🔍

    ⏱️ Estimated effort to review: 3 🔵🔵🔵⚪⚪
    🧪 PR contains tests
    🔒 No security concerns identified
    ⚡ Key issues to review

    Error Handling
    The executeAsync method catches all Throwable instances. This might mask important errors or exceptions that should be handled differently.

    Resource Management
    The execute method now relies on executeAsync, which may lead to potential resource leaks if not managed properly, especially in case of exceptions.

    Copy link
    Contributor

    PR Code Suggestions ✨

    CategorySuggestion                                                                                                                                    Score
    Enhancement
    Use a more specific exception type for timeout-related errors

    Consider using a more specific exception type for the timeout case instead of
    WebDriverException. This would provide clearer information about the nature of the
    error.

    java/src/org/openqa/selenium/remote/http/jdk/JdkHttpClient.java [413-414]

     } catch (CancellationException e) {
    -  throw new WebDriverException(e.getMessage(), e);
    +  throw new TimeoutException("Request was cancelled, possibly due to a timeout", e);
     
    • Apply this suggestion
    Suggestion importance[1-10]: 9

    Why: Using TimeoutException instead of WebDriverException for timeout-related errors provides clearer error information, which is crucial for understanding and debugging issues.

    9
    Add a timeout parameter to the executeAsync method for more flexible timeout handling

    Consider adding a timeout parameter to the executeAsync method to allow for custom
    timeout values. This would provide more flexibility than using a fixed readTimeout
    value.

    java/src/org/openqa/selenium/remote/http/jdk/JdkHttpClient.java [405]

    -return cf.orTimeout(readTimeout.toMillis(), TimeUnit.MILLISECONDS);
    +return cf.orTimeout(timeout != null ? timeout.toMillis() : readTimeout.toMillis(), TimeUnit.MILLISECONDS);
     
    • Apply this suggestion
    Suggestion importance[1-10]: 7

    Why: Adding a timeout parameter increases flexibility by allowing custom timeout values, which can be beneficial in different usage scenarios, although it's not critical for functionality.

    7
    Best practice
    Use a more specific exception type in the catch block for better error handling

    Consider using a more specific exception type instead of Throwable in the catch
    block. This would allow for more precise error handling and avoid catching errors
    that should be allowed to propagate.

    java/src/org/openqa/selenium/remote/http/jdk/JdkHttpClient.java [386-388]

    -} catch (Throwable t) {
    -  cf.completeExceptionally(t);
    +} catch (Exception e) {
    +  cf.completeExceptionally(e);
     }
     
    • Apply this suggestion
    Suggestion importance[1-10]: 8

    Why: Using a more specific exception type like Exception instead of Throwable improves error handling by avoiding the capture of errors that should propagate, enhancing code robustness.

    8
    Maintainability
    Add logging statements to track request execution and errors

    Consider adding logging statements to track the progress of the request execution
    and any errors that occur. This would aid in debugging and monitoring the
    application's behavior.

    java/src/org/openqa/selenium/remote/http/jdk/JdkHttpClient.java [373-376]

     @Override
     public CompletableFuture<HttpResponse> executeAsync(HttpRequest request) {
    +  LOG.fine("Executing async request: " + request);
       // the facade for this http request
       CompletableFuture<HttpResponse> cf = new CompletableFuture<>();
     
    • Apply this suggestion
    Suggestion importance[1-10]: 6

    Why: Adding logging statements enhances maintainability by aiding in debugging and monitoring, but it is not essential for the core functionality of the code.

    6

    Copy link
    Contributor

    qodo-merge-pro bot commented Aug 19, 2024

    CI Failure Feedback 🧐

    (Checks updated until commit f83ad29)

    Action: Ruby / Remote Tests (edge, windows) / Remote Tests (edge, windows)

    Failed stage: Run Bazel [❌]

    Failed test name: Selenium::WebDriver::Remote::Driver errors when not set

    Failure summary:

    The action failed because the test Selenium::WebDriver::Remote::Driver errors when not set did not
    pass. The test expected a Selenium::WebDriver::Error::WebDriverError to be raised with the message
    "You must enable downloads in order to work with downloadable files." However, it received a
    Selenium::WebDriver::Error::UnknownError instead, indicating that the downloads file system could
    not be found for the session id.

    Relevant error logs:
    1:  ##[group]Operating System
    2:  Microsoft Windows Server 2022
    ...
    
    620:  �[32mAnalyzing:�[0m 29 targets (697 packages loaded, 15340 targets configured)
    621:  �[32m[1 / 1]�[0m checking cached actions
    622:  �[32mAnalyzing:�[0m 29 targets (697 packages loaded, 49911 targets configured)
    623:  �[32m[1 / 20]�[0m [Prepa] Writing repo mapping manifest for //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote
    624:  �[32mAnalyzing:�[0m 29 targets (697 packages loaded, 49911 targets configured)
    625:  �[32m[6 / 30]�[0m Creating source manifest for //rb/spec/integration/selenium/webdriver:virtual_authenticator-edge-remote; 0s local ... (3 actions running)
    626:  �[32mINFO: �[0mAnalyzed 29 targets (697 packages loaded, 49911 targets configured).
    627:  �[32m[61 / 1,087]�[0m [Prepa] Creating source manifest for //rb/spec/integration/selenium/webdriver:bidi-edge-remote ... (3 actions, 2 running)
    628:  �[32m[192 / 1,846]�[0m Creating source manifest for //rb/spec/integration/selenium/webdriver:error-edge-remote; 0s local ... (3 actions running)
    ...
    
    706:  �[32m[2,953 / 3,098]�[0m Running bundle install (@bundle//:bundle); 40s local, disk-cache ... (4 actions, 3 running)
    707:  �[32m[2,953 / 3,098]�[0m Running bundle install (@bundle//:bundle); 41s local, disk-cache ... (4 actions, 3 running)
    708:  �[32m[2,959 / 3,098]�[0m Running bundle install (@bundle//:bundle); 42s local, disk-cache ... (4 actions running)
    709:  �[32m[2,964 / 3,098]�[0m Running bundle install (@bundle//:bundle); 44s local, disk-cache ... (4 actions, 3 running)
    710:  �[32m[2,968 / 3,098]�[0m Running bundle install (@bundle//:bundle); 45s local, disk-cache ... (4 actions, 3 running)
    711:  �[32m[2,972 / 3,098]�[0m Running bundle install (@bundle//:bundle); 46s local, disk-cache ... (4 actions running)
    712:  �[32m[2,974 / 3,098]�[0m Running bundle install (@bundle//:bundle); 47s local, disk-cache ... (4 actions, 3 running)
    713:  �[32mINFO: �[0mFrom Building java/src/org/openqa/selenium/remote/libapi-class.jar (71 source files):
    714:  java\src\org\openqa\selenium\remote\ErrorHandler.java:46: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    715:  private final ErrorCodes errorCodes;
    716:  ^
    717:  java\src\org\openqa\selenium\remote\ErrorHandler.java:60: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    718:  this.errorCodes = new ErrorCodes();
    719:  ^
    720:  java\src\org\openqa\selenium\remote\ErrorHandler.java:68: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    721:  public ErrorHandler(ErrorCodes codes, boolean includeServerErrors) {
    722:  ^
    723:  java\src\org\openqa\selenium\remote\Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    724:  ErrorCodes errorCodes = new ErrorCodes();
    725:  ^
    726:  java\src\org\openqa\selenium\remote\Response.java:97: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    727:  ErrorCodes errorCodes = new ErrorCodes();
    728:  ^
    729:  java\src\org\openqa\selenium\remote\ProtocolHandshake.java:181: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    730:  response.setStatus(ErrorCodes.SUCCESS);
    731:  ^
    732:  java\src\org\openqa\selenium\remote\ProtocolHandshake.java:182: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    733:  response.setState(ErrorCodes.SUCCESS_STRING);
    734:  ^
    735:  java\src\org\openqa\selenium\remote\W3CHandshakeResponse.java:53: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    736:  new ErrorCodes().toStatus((String) rawError, Optional.of(tuple.getStatusCode())));
    737:  ^
    738:  java\src\org\openqa\selenium\remote\W3CHandshakeResponse.java:56: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    739:  new ErrorCodes().getExceptionType((String) rawError);
    740:  ^
    741:  java\src\org\openqa\selenium\remote\codec\AbstractHttpResponseCodec.java:44: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    742:  private final ErrorCodes errorCodes = new ErrorCodes();
    743:  ^
    744:  java\src\org\openqa\selenium\remote\codec\AbstractHttpResponseCodec.java:44: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    745:  private final ErrorCodes errorCodes = new ErrorCodes();
    746:  ^
    747:  java\src\org\openqa\selenium\remote\codec\AbstractHttpResponseCodec.java:55: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    748:  int status = response.getStatus() == ErrorCodes.SUCCESS ? HTTP_OK : HTTP_INTERNAL_ERROR;
    749:  ^
    750:  java\src\org\openqa\selenium\remote\codec\AbstractHttpResponseCodec.java:101: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    751:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    752:  ^
    753:  java\src\org\openqa\selenium\remote\codec\AbstractHttpResponseCodec.java:103: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    754:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    755:  ^
    756:  java\src\org\openqa\selenium\remote\codec\AbstractHttpResponseCodec.java:117: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    757:  response.setStatus(ErrorCodes.SUCCESS);
    758:  ^
    759:  java\src\org\openqa\selenium\remote\codec\AbstractHttpResponseCodec.java:118: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    760:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    761:  ^
    762:  java\src\org\openqa\selenium\remote\codec\AbstractHttpResponseCodec.java:124: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    763:  response.setState(errorCodes.toState(ErrorCodes.SUCCESS));
    764:  ^
    765:  java\src\org\openqa\selenium\remote\codec\w3c\W3CHttpResponseCodec.java:70: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    766:  private final ErrorCodes errorCodes = new ErrorCodes();
    767:  ^
    768:  java\src\org\openqa\selenium\remote\codec\w3c\W3CHttpResponseCodec.java:70: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    769:  private final ErrorCodes errorCodes = new ErrorCodes();
    770:  ^
    771:  java\src\org\openqa\selenium\remote\codec\w3c\W3CHttpResponseCodec.java:93: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    772:  response.setStatus(ErrorCodes.UNKNOWN_COMMAND);
    773:  ^
    774:  java\src\org\openqa\selenium\remote\codec\w3c\W3CHttpResponseCodec.java:98: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    775:  response.setStatus(ErrorCodes.UNHANDLED_ERROR);
    776:  ^
    777:  java\src\org\openqa\selenium\remote\codec\w3c\W3CHttpResponseCodec.java:145: warning: [removal] ErrorCodes in org.openqa.selenium.remote has been deprecated and marked for removal
    778:  response.setStatus(ErrorCodes.SUCCESS);
    ...
    
    957:  �[32m[3,104 / 3,122]�[0m 6 / 29 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:driver-edge-remote; 164s local, disk-cache ... (4 actions, 2 running)
    958:  �[32m[3,104 / 3,122]�[0m 6 / 29 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:driver-edge-remote; 166s local, disk-cache ... (4 actions, 2 running)
    959:  �[32m[3,104 / 3,122]�[0m 6 / 29 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:driver-edge-remote; 170s local, disk-cache ... (4 actions, 2 running)
    960:  �[32m[3,105 / 3,122]�[0m 7 / 29 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:driver-edge-remote; 172s local, disk-cache ... (4 actions, 1 running)
    961:  �[32m[3,105 / 3,122]�[0m 7 / 29 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:driver-edge-remote; 182s local, disk-cache ... (4 actions, 1 running)
    962:  �[32m[3,105 / 3,122]�[0m 7 / 29 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:driver-edge-remote; 185s local, disk-cache ... (4 actions, 1 running)
    963:  �[32m[3,105 / 3,122]�[0m 7 / 29 tests;�[0m Testing //rb/spec/integration/selenium/webdriver/remote:driver-edge-remote; 197s local, disk-cache ... (4 actions, 2 running)
    964:  �[31m�[1mFAIL: �[0m//rb/spec/integration/selenium/webdriver/remote:driver-edge-remote (see D:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/remote/driver-edge-remote/test.log)
    965:  �[31m�[1mFAILED: �[0m//rb/spec/integration/selenium/webdriver/remote:driver-edge-remote (Summary)
    ...
    
    980:  Selenium::WebDriver::Remote::Driver
    981:  exposes session_id
    982:  exposes remote status
    983:  Request#[] is deprecated and will be removed in a future version of Rack. Please use request.params[] instead
    984:  uses a default file detector
    985:  lists downloads
    986:  downloads a file
    987:  deletes downloadable files
    988:  errors when not set (FAILED - 1)
    989:  Failures:
    990:  1) Selenium::WebDriver::Remote::Driver errors when not set
    991:  Failure/Error:
    992:  expect {
    993:  driver.downloadable_files
    994:  }.to raise_exception(Error::WebDriverError,
    995:  'You must enable downloads in order to work with downloadable files.')
    996:  expected Selenium::WebDriver::Error::WebDriverError with "You must enable downloads in order to work with downloadable files.", got #<Selenium::WebDriver::Error::UnknownError: Cannot find downloads file system for session id: c0b0bde... os.arch: 'amd64', os.version: '10.0', java.version: '17.0.11'
    997:  Driver info: driver.version: unknown> with backtrace:
    998:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
    999:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
    ...
    
    1005:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:67:in `call'
    1006:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:685:in `execute'
    1007:  # ./rb/lib/selenium/webdriver/remote/features.rb:62:in `downloadable_files'
    1008:  # ./rb/lib/selenium/webdriver/common/driver_extensions/has_file_downloads.rb:27:in `downloadable_files'
    1009:  # ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:87:in `block (3 levels) in <module:Remote>'
    1010:  # ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:86:in `block (2 levels) in <module:Remote>'
    1011:  # ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:86:in `block (2 levels) in <module:Remote>'
    1012:  Finished in 22.74 seconds (files took 0.72705 seconds to load)
    1013:  7 examples, 1 failure
    1014:  Failed examples:
    1015:  rspec ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:84 # Selenium::WebDriver::Remote::Driver errors when not set
    ...
    
    1027:  Selenium::WebDriver::Remote::Driver
    1028:  exposes session_id
    1029:  exposes remote status
    1030:  Request#[] is deprecated and will be removed in a future version of Rack. Please use request.params[] instead
    1031:  uses a default file detector
    1032:  lists downloads
    1033:  downloads a file
    1034:  deletes downloadable files
    1035:  errors when not set (FAILED - 1)
    1036:  Failures:
    1037:  1) Selenium::WebDriver::Remote::Driver errors when not set
    1038:  Failure/Error:
    1039:  expect {
    1040:  driver.downloadable_files
    1041:  }.to raise_exception(Error::WebDriverError,
    1042:  'You must enable downloads in order to work with downloadable files.')
    1043:  expected Selenium::WebDriver::Error::WebDriverError with "You must enable downloads in order to work with downloadable files.", got #<Selenium::WebDriver::Error::UnknownError: Cannot find downloads file system for session id: 480530e... os.arch: 'amd64', os.version: '10.0', java.version: '17.0.11'
    1044:  Driver info: driver.version: unknown> with backtrace:
    1045:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
    1046:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
    ...
    
    1052:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:67:in `call'
    1053:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:685:in `execute'
    1054:  # ./rb/lib/selenium/webdriver/remote/features.rb:62:in `downloadable_files'
    1055:  # ./rb/lib/selenium/webdriver/common/driver_extensions/has_file_downloads.rb:27:in `downloadable_files'
    1056:  # ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:87:in `block (3 levels) in <module:Remote>'
    1057:  # ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:86:in `block (2 levels) in <module:Remote>'
    1058:  # ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:86:in `block (2 levels) in <module:Remote>'
    1059:  Finished in 21.19 seconds (files took 0.75494 seconds to load)
    1060:  7 examples, 1 failure
    1061:  Failed examples:
    1062:  rspec ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:84 # Selenium::WebDriver::Remote::Driver errors when not set
    ...
    
    1074:  Selenium::WebDriver::Remote::Driver
    1075:  exposes session_id
    1076:  exposes remote status
    1077:  Request#[] is deprecated and will be removed in a future version of Rack. Please use request.params[] instead
    1078:  uses a default file detector
    1079:  lists downloads
    1080:  downloads a file
    1081:  deletes downloadable files
    1082:  errors when not set (FAILED - 1)
    1083:  Failures:
    1084:  1) Selenium::WebDriver::Remote::Driver errors when not set
    1085:  Failure/Error:
    1086:  expect {
    1087:  driver.downloadable_files
    1088:  }.to raise_exception(Error::WebDriverError,
    1089:  'You must enable downloads in order to work with downloadable files.')
    1090:  expected Selenium::WebDriver::Error::WebDriverError with "You must enable downloads in order to work with downloadable files.", got #<Selenium::WebDriver::Error::UnknownError: Cannot find downloads file system for session id: 1d50d78... os.arch: 'amd64', os.version: '10.0', java.version: '17.0.11'
    1091:  Driver info: driver.version: unknown> with backtrace:
    1092:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
    1093:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
    ...
    
    1099:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:67:in `call'
    1100:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:685:in `execute'
    1101:  # ./rb/lib/selenium/webdriver/remote/features.rb:62:in `downloadable_files'
    1102:  # ./rb/lib/selenium/webdriver/common/driver_extensions/has_file_downloads.rb:27:in `downloadable_files'
    1103:  # ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:87:in `block (3 levels) in <module:Remote>'
    1104:  # ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:86:in `block (2 levels) in <module:Remote>'
    1105:  # ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:86:in `block (2 levels) in <module:Remote>'
    1106:  Finished in 20.66 seconds (files took 0.6571 seconds to load)
    1107:  7 examples, 1 failure
    1108:  Failed examples:
    1109:  rspec ./rb/spec/integration/selenium/webdriver/remote/driver_spec.rb:84 # Selenium::WebDriver::Remote::Driver errors when not set
    1110:  ================================================================================
    1111:  �[32m[3,106 / 3,122]�[0m 8 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:timeout-edge-remote; 32s ... (4 actions, 1 running)
    1112:  �[32m[3,106 / 3,122]�[0m 8 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:timeout-edge-remote; 42s ... (4 actions, 1 running)
    1113:  �[32m[3,106 / 3,122]�[0m 8 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:timeout-edge-remote; 45s ... (4 actions, 1 running)
    1114:  �[32m[3,106 / 3,122]�[0m 8 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:action_builder-edge-remote; 29s ... (4 actions, 2 running)
    1115:  �[32m[3,107 / 3,122]�[0m 9 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:action_builder-edge-remote; 30s ... (4 actions, 1 running)
    1116:  �[32m[3,107 / 3,122]�[0m 9 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:action_builder-edge-remote; 40s ... (4 actions, 1 running)
    1117:  �[32m[3,107 / 3,122]�[0m 9 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:action_builder-edge-remote; 43s ... (4 actions, 1 running)
    1118:  �[32m[3,107 / 3,122]�[0m 9 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:takes_screenshot-edge-remote; 26s ... (4 actions, 2 running)
    1119:  �[32m[3,108 / 3,122]�[0m 10 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:takes_screenshot-edge-remote; 27s ... (4 actions, 1 running)
    1120:  �[32m[3,108 / 3,122]�[0m 10 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:takes_screenshot-edge-remote; 38s ... (4 actions, 1 running)
    1121:  �[32m[3,108 / 3,122]�[0m 10 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:takes_screenshot-edge-remote; 41s ... (4 actions, 1 running)
    1122:  �[32m[3,108 / 3,122]�[0m 10 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 37s ... (4 actions, 2 running)
    1123:  �[32m[3,109 / 3,122]�[0m 11 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 39s ... (4 actions, 1 running)
    1124:  �[32m[3,109 / 3,122]�[0m 11 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 49s ... (4 actions, 1 running)
    1125:  �[32m[3,109 / 3,122]�[0m 11 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:navigation-edge-remote; 52s ... (4 actions, 1 running)
    1126:  �[32m[3,109 / 3,122]�[0m 11 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:options-edge-remote; 29s ... (4 actions, 2 running)
    1127:  �[32m[3,110 / 3,122]�[0m 12 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:options-edge-remote; 31s ... (4 actions, 1 running)
    1128:  �[32m[3,110 / 3,122]�[0m 12 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:options-edge-remote; 41s ... (4 actions, 1 running)
    1129:  �[32m[3,110 / 3,122]�[0m 12 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/edge:options-edge-remote; 44s ... (4 actions, 1 running)
    1130:  �[32m[3,110 / 3,122]�[0m 12 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/remote:element-edge-remote; 18s ... (4 actions, 2 running)
    1131:  �[32m[3,111 / 3,122]�[0m 13 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/remote:element-edge-remote; 19s ... (4 actions, 1 running)
    1132:  �[32m[3,111 / 3,122]�[0m 13 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/remote:element-edge-remote; 29s ... (4 actions, 1 running)
    1133:  �[32m[3,111 / 3,122]�[0m 13 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/remote:element-edge-remote; 33s ... (4 actions, 1 running)
    1134:  �[32m[3,111 / 3,122]�[0m 13 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:driver-edge-remote; 23s ... (4 actions, 2 running)
    1135:  �[32m[3,112 / 3,122]�[0m 14 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:driver-edge-remote; 25s ... (4 actions, 1 running)
    1136:  �[32m[3,112 / 3,122]�[0m 14 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:driver-edge-remote; 35s ... (4 actions, 1 running)
    1137:  �[32m[3,112 / 3,122]�[0m 14 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:driver-edge-remote; 37s ... (4 actions, 1 running)
    1138:  �[32m[3,112 / 3,122]�[0m 14 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:window-edge-remote; 22s ... (4 actions, 2 running)
    1139:  �[32m[3,113 / 3,122]�[0m 15 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:window-edge-remote; 24s ... (4 actions, 1 running)
    1140:  �[32m[3,113 / 3,122]�[0m 15 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:window-edge-remote; 34s ... (4 actions, 1 running)
    1141:  �[32m[3,113 / 3,122]�[0m 15 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:window-edge-remote; 37s ... (4 actions, 1 running)
    1142:  �[32m[3,113 / 3,122]�[0m 15 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-edge-remote; 36s ... (4 actions, 2 running)
    1143:  �[32m[3,114 / 3,122]�[0m 16 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-edge-remote; 37s ... (4 actions, 1 running)
    1144:  �[32m[3,114 / 3,122]�[0m 16 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-edge-remote; 47s ... (4 actions, 1 running)
    1145:  �[32m[3,114 / 3,122]�[0m 16 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:virtual_authenticator-edge-remote; 50s ... (4 actions, 1 running)
    1146:  �[32m[3,114 / 3,122]�[0m 16 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:fedcm-edge-remote; 36s ... (4 actions, 2 running)
    1147:  �[32m[3,115 / 3,122]�[0m 17 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:fedcm-edge-remote; 38s ... (4 actions, 1 running)
    1148:  �[32m[3,115 / 3,122]�[0m 17 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:fedcm-edge-remote; 48s ... (4 actions, 1 running)
    1149:  �[32m[3,115 / 3,122]�[0m 17 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:fedcm-edge-remote; 51s ... (4 actions, 1 running)
    1150:  �[32m[3,115 / 3,122]�[0m 17 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:target_locator-edge-remote; 20s ... (4 actions, 2 running)
    1151:  �[32m[3,116 / 3,122]�[0m 18 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:target_locator-edge-remote; 21s ... (4 actions, 1 running)
    1152:  �[32m[3,116 / 3,122]�[0m 18 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:target_locator-edge-remote; 32s ... (4 actions, 1 running)
    1153:  �[32m[3,116 / 3,122]�[0m 18 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:target_locator-edge-remote; 35s ... (4 actions, 1 running)
    1154:  �[32m[3,116 / 3,122]�[0m 18 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:zipper-edge-remote; 20s ... (4 actions, 2 running)
    1155:  �[32m[3,117 / 3,122]�[0m 19 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:zipper-edge-remote; 21s ... (4 actions, 1 running)
    1156:  �[32m[3,117 / 3,122]�[0m 19 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:zipper-edge-remote; 22s ... (4 actions, 1 running)
    1157:  �[32m[3,117 / 3,122]�[0m 19 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:zipper-edge-remote; 33s ... (4 actions, 1 running)
    1158:  �[32m[3,117 / 3,122]�[0m 19 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:zipper-edge-remote; 37s ... (4 actions, 1 running)
    1159:  �[32m[3,117 / 3,122]�[0m 19 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:shadow_root-edge-remote; 31s ... (4 actions, 2 running)
    1160:  �[32m[3,118 / 3,122]�[0m 20 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:shadow_root-edge-remote; 32s ... (4 actions, 1 running)
    1161:  �[32m[3,118 / 3,122]�[0m 20 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:shadow_root-edge-remote; 42s ... (4 actions, 1 running)
    1162:  �[32m[3,118 / 3,122]�[0m 20 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:shadow_root-edge-remote; 44s ... (4 actions, 1 running)
    1163:  �[32m[3,118 / 3,122]�[0m 20 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:element-edge-remote; 26s ... (4 actions, 2 running)
    1164:  �[32m[3,119 / 3,122]�[0m 21 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:element-edge-remote; 27s ... (3 actions, 1 running)
    1165:  �[32m[3,119 / 3,122]�[0m 21 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:element-edge-remote; 37s ... (3 actions, 1 running)
    1166:  �[32m[3,119 / 3,122]�[0m 21 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:guard-edge-remote; 31s ... (3 actions, 2 running)
    1167:  �[32m[3,120 / 3,122]�[0m 22 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:guard-edge-remote; 32s ... (2 actions, 1 running)
    1168:  �[32m[3,120 / 3,122]�[0m 22 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:guard-edge-remote; 42s ... (2 actions, 1 running)
    1169:  �[32m[3,120 / 3,122]�[0m 22 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:element-edge-remote; 29s local, disk-cache ... (2 actions running)
    1170:  �[32m[3,121 / 3,122]�[0m 23 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:guard-edge-remote; 1s local, disk-cache
    1171:  �[32m[3,121 / 3,122]�[0m 23 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:guard-edge-remote; 11s local, disk-cache
    1172:  �[32m[3,121 / 3,122]�[0m 23 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:guard-edge-remote; 14s local, disk-cache
    1173:  �[32m[3,122 / 3,123]�[0m 24 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote; 0s disk-cache
    1174:  �[32m[3,122 / 3,123]�[0m 24 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote
    1175:  �[32m[3,122 / 3,123]�[0m 24 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote; 1s local, disk-cache
    1176:  �[32m[3,122 / 3,123]�[0m 24 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote; 14s local, disk-cache
    1177:  �[32m[3,123 / 3,124]�[0m 25 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:devtools-edge-remote; 1s disk-cache
    1178:  �[32m[3,123 / 3,124]�[0m 25 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:devtools-edge-remote
    1179:  �[32m[3,123 / 3,124]�[0m 25 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:devtools-edge-remote; 1s local, disk-cache
    1180:  �[32m[3,123 / 3,124]�[0m 25 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:devtools-edge-remote; 87s local, disk-cache
    1181:  �[32m[3,124 / 3,125]�[0m 26 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote; 1s disk-cache
    1182:  �[32m[3,124 / 3,125]�[0m 26 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote
    1183:  �[32m[3,124 / 3,125]�[0m 26 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote; 1s local, disk-cache
    1184:  �[32m[3,124 / 3,125]�[0m 26 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote; 14s local, disk-cache
    1185:  �[32m[3,125 / 3,126]�[0m 27 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote; 0s disk-cache
    1186:  �[32m[3,125 / 3,126]�[0m 27 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote
    1187:  �[32m[3,125 / 3,126]�[0m 27 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote; 1s local, disk-cache
    1188:  �[32m[3,125 / 3,126]�[0m 27 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote; 14s local, disk-cache
    1189:  �[32m[3,126 / 3,127]�[0m 28 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:bidi-edge-remote; 0s disk-cache
    1190:  �[32m[3,126 / 3,127]�[0m 28 / 29 tests, �[31m�[1m1 failed�[0m;�[0m [Sched] Testing //rb/spec/integration/selenium/webdriver:bidi-edge-remote
    1191:  �[32m[3,126 / 3,127]�[0m 28 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:bidi-edge-remote; 1s local, disk-cache
    1192:  �[32m[3,126 / 3,127]�[0m 28 / 29 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:bidi-edge-remote; 14s local, disk-cache
    1193:  �[32mINFO: �[0mFound 29 test targets...
    1194:  �[32mINFO: �[0mElapsed time: 1511.953s, Critical Path: 797.97s
    1195:  �[32mINFO: �[0m2866 processes: 1407 disk cache hit, 1168 internal, 222 local, 69 worker.
    1196:  �[32mINFO: �[0mBuild completed, 1 test FAILED, 2866 total actions
    1197:  //rb/spec/integration/selenium/webdriver:action_builder-edge-remote      �[0m�[32mPASSED�[0m in 28.6s
    1198:  //rb/spec/integration/selenium/webdriver:bidi-edge-remote                �[0m�[32mPASSED�[0m in 14.6s
    1199:  //rb/spec/integration/selenium/webdriver:devtools-edge-remote            �[0m�[32mPASSED�[0m in 88.0s
    1200:  //rb/spec/integration/selenium/webdriver:driver-edge-remote              �[0m�[32mPASSED�[0m in 33.7s
    1201:  //rb/spec/integration/selenium/webdriver:element-edge-remote             �[0m�[32mPASSED�[0m in 29.6s
    1202:  //rb/spec/integration/selenium/webdriver:error-edge-remote               �[0m�[32mPASSED�[0m in 14.7s
    ...
    
    1217:  //rb/spec/integration/selenium/webdriver/bidi:browsing_context-edge-remote �[0m�[32mPASSED�[0m in 14.6s
    1218:  //rb/spec/integration/selenium/webdriver/bidi:log_inspector-edge-remote  �[0m�[32mPASSED�[0m in 14.5s
    1219:  //rb/spec/integration/selenium/webdriver/bidi:script-edge-remote         �[0m�[32mPASSED�[0m in 14.5s
    1220:  //rb/spec/integration/selenium/webdriver/edge:driver-edge-remote         �[0m�[32mPASSED�[0m in 46.8s
    1221:  //rb/spec/integration/selenium/webdriver/edge:options-edge-remote        �[0m�[32mPASSED�[0m in 21.5s
    1222:  //rb/spec/integration/selenium/webdriver/edge:profile-edge-remote        �[0m�[32mPASSED�[0m in 14.9s
    1223:  //rb/spec/integration/selenium/webdriver/edge:service-edge-remote        �[0m�[32mPASSED�[0m in 21.3s
    1224:  //rb/spec/integration/selenium/webdriver/remote:element-edge-remote      �[0m�[32mPASSED�[0m in 16.7s
    1225:  //rb/spec/integration/selenium/webdriver/remote:driver-edge-remote       �[0m�[31m�[1mFAILED�[0m in 3 out of 3 in 29.8s
    1226:  Stats over 3 runs: max = 29.8s, min = 27.6s, avg = 28.5s, dev = 0.9s
    1227:  D:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/remote/driver-edge-remote/test.log
    1228:  D:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/remote/driver-edge-remote/test_attempts/attempt_1.log
    1229:  D:/_bazel/execroot/_main/bazel-out/x64_windows-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/remote/driver-edge-remote/test_attempts/attempt_2.log
    1230:  Executed 29 out of 29 tests: 28 tests pass and �[0m�[31m�[1m1 fails locally�[0m.
    1231:  There were tests whose specified size is too big. Use the --test_verbose_timeout_warnings command line option to see which ones these are.
    1232:  �[0m
    1233:  ##[error]Process completed with exit code 1.
    

    ✨ CI feedback usage guide:

    The CI feedback tool (/checks) automatically triggers when a PR has a failed check.
    The tool analyzes the failed checks and provides several feedbacks:

    • Failed stage
    • Failed test name
    • Failure summary
    • Relevant error logs

    In addition to being automatically triggered, the tool can also be invoked manually by commenting on a PR:

    /checks "https://github.com/{repo_name}/actions/runs/{run_number}/job/{job_number}"
    

    where {repo_name} is the name of the repository, {run_number} is the run number of the failed check, and {job_number} is the job number of the failed check.

    Configuration options

    • enable_auto_checks_feedback - if set to true, the tool will automatically provide feedback when a check is failed. Default is true.
    • excluded_checks_list - a list of checks to exclude from the feedback, for example: ["check1", "check2"]. Default is an empty list.
    • enable_help_text - if set to true, the tool will provide a help message with the feedback. Default is true.
    • persistent_comment - if set to true, the tool will overwrite a previous checks comment with the new feedback. Default is true.
    • final_update_message - if persistent_comment is true and updating a previous checks message, the tool will also create a new message: "Persistent checks updated to latest commit". Default is true.

    See more information about the checks tool in the docs.

    @joerg1985
    Copy link
    Member Author

    I just stumbled into another usecase for this, the org.openqa.selenium.netty.server.SeleniumHandler does not cancel the currently running http request after the client has gone away. This usually happens in case of a client timeout and will keep the socket open, usually a socket is closed in this case.

    e.g. a open Socket is ---> and a close Socket ===

    Before the client timeout: Client ---> Hub ---> Node ---> Driver
    Current state after the client timeout: Client === Hub ---> Node ---> Driver
    Expected state after the client timeout: Client === Hub === Node === Driver

    And while looking into this another usecase inside the org.openqa.selenium.netty.server.SeleniumHandler, it should keep the session alive while waiting for a response, this might happen when the client read timeout and the page load timeout are bigger than the session timeout. I think i should look deeper into this before implementing, but from my current knowlege of the code this could happen.

    @joerg1985
    Copy link
    Member Author

    Okay, there is no need to keep the session alive, the read timeout of the node is identical to the session timeout.
    And the driver blocks concurrent command execution until the last command of a session has completed.

    @VietND96 VietND96 self-requested a review October 29, 2024 22:31
    Copy link
    Member

    @VietND96 VietND96 left a comment

    Choose a reason for hiding this comment

    The reason will be displayed to describe this comment to others. Learn more.

    LGTM!
    CI passed, so I would like to merge and include this in release 4.26.0

    @VietND96 VietND96 merged commit e7c09a2 into trunk Oct 29, 2024
    29 of 30 checks passed
    @VietND96 VietND96 deleted the async-http-client branch October 29, 2024 22:36
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Projects
    None yet
    Development

    Successfully merging this pull request may close these issues.

    2 participants