Skip to content

Conversation

@chrfwow
Copy link
Contributor

@chrfwow chrfwow commented Nov 20, 2025

Makes some tests more robust

Signed-off-by: christian.lutnik <[email protected]>
@gemini-code-assist
Copy link

Summary of Changes

Hello @chrfwow, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request focuses on improving the stability and diagnostic capabilities of existing tests. It addresses flakiness in a specific test by introducing more precise timing measurements and detailed error reporting. Additionally, it enhances the robustness of end-to-end tests by adopting a thread-safe data structure for event collection, ensuring reliable behavior in concurrent environments.

Highlights

  • Improved Test Robustness: Enhanced the callingInitialize_wakesUpWaitingThread test in FlagdProviderSyncResourcesTest.java by replacing a simple boolean flag with a precise time measurement (AtomicLong waitTime). This change allows for more accurate assessment of the waiting duration and provides a detailed error message upon failure, making the test less flaky and easier to debug.
  • Enhanced Concurrency for E2E Events: Switched the event collection mechanism in end-to-end tests from LinkedList to ConcurrentLinkedQueue in State.java and EventSteps.java. This change improves thread safety and performance for concurrent event handling, making the e2e tests more reliable in multi-threaded scenarios.
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 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 counter productive. 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.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@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 improves test robustness by addressing potential concurrency issues and enhancing assertion messages. The change from LinkedList to ConcurrentLinkedQueue for handling events in E2E tests is a good move to prevent race conditions. The assertion message in FlagdProviderSyncResourcesTest is now more informative. I've added a couple of suggestions: one to improve test performance and readability by using a lazy-evaluated assertion message, and another to remove a redundant and potentially problematic re-initialization of a shared state field, which could itself introduce flakiness.

public EventSteps(State state) {
super(state);
state.events = new LinkedList<>();
state.events = new ConcurrentLinkedQueue<>();

Choose a reason for hiding this comment

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

high

The events field in the State class is already initialized where it's declared. Re-initializing it here in the EventSteps constructor is redundant and can introduce flakiness. If other step definitions in the same scenario modify the events list before this constructor is called, those changes will be lost. It's best to remove this line and rely on the single initialization in the State class.

Comment on lines 103 to 107
Assertions.assertTrue(
waitTime.get() < MAX_TIME_TOLERANCE * 2,
"Wakeup should be almost instant, but took " + waitTime.get()
+ " ms, which is more than the max of"
+ (MAX_TIME_TOLERANCE * 2) + " ms");

Choose a reason for hiding this comment

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

medium

For better performance and readability, it's a good practice to use a lambda for the assertion message in JUnit 5. This enables lazy evaluation, meaning the message string is only constructed if the assertion fails. This avoids unnecessary string concatenation in passing tests.

Suggested change
Assertions.assertTrue(
waitTime.get() < MAX_TIME_TOLERANCE * 2,
"Wakeup should be almost instant, but took " + waitTime.get()
+ " ms, which is more than the max of"
+ (MAX_TIME_TOLERANCE * 2) + " ms");
Assertions.assertTrue(
waitTime.get() < MAX_TIME_TOLERANCE * 2,
() -> "Wakeup should be almost instant, but took " + waitTime.get()
+ " ms, which is more than the max of"
+ (MAX_TIME_TOLERANCE * 2) + " ms");

Signed-off-by: christian.lutnik <[email protected]>
@chrfwow chrfwow enabled auto-merge (squash) November 20, 2025 16:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants