Skip to content

dataconnect(test): DataConnectGrpcClientUnitTest.kt: fix flaky tests for retry on UNAUTHENTICATED#8129

Merged
dconeybe merged 3 commits into
mainfrom
dconeybe/dataconnect/DataConnectGrpcClientUnitTestUnauthenticatedTestFlakeFix
May 11, 2026
Merged

dataconnect(test): DataConnectGrpcClientUnitTest.kt: fix flaky tests for retry on UNAUTHENTICATED#8129
dconeybe merged 3 commits into
mainfrom
dconeybe/dataconnect/DataConnectGrpcClientUnitTestUnauthenticatedTestFlakeFix

Conversation

@dconeybe
Copy link
Copy Markdown
Contributor

@dconeybe dconeybe commented May 9, 2026

Fixes flaky tests in DataConnectGrpcClientUnitTest.kt by ensuring predictable mock behavior and strict call order verification for gRPC retries on UNAUTHENTICATED errors.

Highlights

  • Predictable Mocking: Replaced multiple coEvery stubs with sequential .throws().andThen() chains to eliminate ambiguity in mock responses.
  • Strict Verification: Replaced coVerify with coVerifyOrder to ensure that tokens are refreshed and applied in the correct sequence during retry logic.
  • Improved Test Stability: Resolved potential race conditions and stubbing overlaps in executeQuery and executeMutation unit tests.

Changelog

Details
  • DataConnectGrpcClientUnitTest.kt: Refactored retry tests for UNAUTHENTICATED status to use sequential stubs and ordered verification.

Flakiness in the following two tests is fixed:
* `executeQuery() should retry with fresh auth and app check tokens on UNAUTHENTICATED`
* `executeMutation() should retry with fresh auth and app check tokens on UNAUTHENTICATED`

The tests were flaky because if both `authTokenPairArb().next(rs)` and
`appCheckTokenPairArb().next(rs)` produced the _same value_ for both of its
elements then the test would erroneously fail because both the first and
second invocation of `mockDataConnectGrpcRPCs.executeMutation()` or
`mockDataConnectGrpcRPCs.executeQuery()`, respectively, would be the same
and, therefore, both would throw UNAUTHENTICATED exception, when the second
invocation should have returned a successful result.
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

@dconeybe
Copy link
Copy Markdown
Contributor Author

dconeybe commented May 9, 2026

/gemini review

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 9, 2026

📝 PRs merging into main branch

Our main branch should always be in a releasable state. If you are working on a larger change, or if you don't want this change to see the light of the day just yet, consider using a feature branch first, and only merge into the main branch when the code complete and ready to be released.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request refactors unit tests in DataConnectGrpcClientUnitTest.kt to enhance the verification of retry mechanisms for queries and mutations. The changes replace multiple coEvery blocks with chained .throws().andThen() calls and adopt coVerifyOrder to strictly validate the sequence of calls and the specific tokens used in each attempt. I have no feedback to provide.

@dconeybe dconeybe marked this pull request as ready for review May 9, 2026 20:01
@dconeybe dconeybe changed the title firestore(test): DataConnectGrpcClientUnitTest.kt: fix flaky tests for retry on UNAUTHENTICATED dataconnect(test): DataConnectGrpcClientUnitTest.kt: fix flaky tests for retry on UNAUTHENTICATED May 10, 2026
aashishpatil-g
aashishpatil-g previously approved these changes May 11, 2026
@dconeybe dconeybe merged commit ced2ffc into main May 11, 2026
48 checks passed
@dconeybe dconeybe deleted the dconeybe/dataconnect/DataConnectGrpcClientUnitTestUnauthenticatedTestFlakeFix branch May 11, 2026 21:08
@github-actions github-actions Bot mentioned this pull request May 12, 2026
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