Skip to content

Conversation

@googs1025
Copy link
Collaborator

@googs1025 googs1025 commented Aug 14, 2025

Pull Request Description

[Please provide a clear and concise description of your changes here]

we should build the framework first, which can effectively reduce the cost of integration. Later we can even split different controller tasks.

Related Issues

Resolves: #[Insert issue number(s)]

part of:

#1430

Important: Before submitting, please complete the description above and review the checklist below.


Contribution Guidelines (Expand for Details)

We appreciate your contribution to aibrix! To ensure a smooth review process and maintain high code quality, please adhere to the following guidelines:

Pull Request Title Format

Your PR title should start with one of these prefixes to indicate the nature of the change:

  • [Bug]: Corrections to existing functionality
  • [CI]: Changes to build process or CI pipeline
  • [Docs]: Updates or additions to documentation
  • [API]: Modifications to aibrix's API or interface
  • [CLI]: Changes or additions to the Command Line Interface
  • [Misc]: For changes not covered above (use sparingly)

Note: For changes spanning multiple categories, use multiple prefixes in order of importance.

Submission Checklist

  • PR title includes appropriate prefix(es)
  • Changes are clearly explained in the PR description
  • New and existing tests pass successfully
  • Code adheres to project style and best practices
  • Documentation updated to reflect changes (if applicable)
  • Thorough testing completed, no regressions introduced

By submitting this PR, you confirm that you've read these guidelines and your changes align with the project's contribution standards.

Copy link
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.

Summary of Changes

Hello @googs1025, 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 introduces a foundational integration test framework specifically designed for Kubernetes controllers. The primary goal is to reduce the overhead associated with integration testing by providing a dedicated and isolated environment. This framework also lays the groundwork for future enhancements, such as splitting different controller tasks into separate test suites. Alongside the new framework, the PR refines the build system to support these new test capabilities and optimizes existing controller initialization by removing redundant cache synchronization waits.

Highlights

  • New Controller Integration Test Framework: A new test suite (test/integration/controller/suit_test.go) has been introduced to establish a dedicated integration testing environment for Kubernetes controllers. This framework leverages ginkgo and gomega and sets up a controller-runtime manager with a test envtest environment, allowing for robust and isolated testing of controller logic.
  • Enhanced Makefile for Integration Tests: The Makefile has been updated to provide more granular control over integration test execution. New targets like test-integration (for all integration tests), test-integration-webhook (for webhook-specific tests), and test-integration-controller (for controller-specific tests) have been added, enabling developers to run focused test suites.
  • Removal of Cache Sync Waiting: Explicit WaitForCacheSync calls have been removed from pkg/controller/modeladapter/modeladapter_controller.go and pkg/controller/modelrouter/modelrouter_controller.go. This change likely streamlines controller startup, as controller-runtime typically handles cache synchronization internally, making these explicit waits redundant.
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 in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

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 issue 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.

@googs1025
Copy link
Collaborator Author

support:

make test-integration-controller and make test-integration-webhook makefile cmd

Copy link
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 introduces an integration test framework for controllers, along with Makefile targets to run these tests. The changes are well-structured. I've found a typo in the Makefile that could cause issues and suggested a way to improve the test suite's reliability by replacing a time.Sleep with a more deterministic synchronization mechanism. The removal of explicit cache sync waits in the controllers is a good cleanup.

Comment on lines +171 to +182
time.Sleep(2 * time.Second)

By("tearing down the test environment")
Copy link
Contributor

Choose a reason for hiding this comment

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

medium

Using time.Sleep to wait for the controller manager to shut down can introduce flakiness into the tests. A more deterministic approach is to use a sync.WaitGroup to ensure the manager's goroutine has completed before proceeding with teardown.

Additionally, the By("tearing down the test environment") log on line 173 is a duplicate of the one on line 159.

To fix this, you can:

  1. Define a package-level var wg sync.WaitGroup.
  2. In BeforeSuite, call wg.Add(1) before starting the manager goroutine.
  3. Inside the goroutine in BeforeSuite, add defer wg.Done().
  4. Here, replace these lines with wg.Wait().

@googs1025 googs1025 force-pushed the integration/controller branch 5 times, most recently from d949d3b to a569688 Compare August 15, 2025 00:26
@googs1025 googs1025 marked this pull request as ready for review August 15, 2025 01:33
@googs1025 googs1025 force-pushed the integration/controller branch from a569688 to 9fad5c1 Compare August 15, 2025 01:33
@googs1025 googs1025 added area/testing Issues or PRs related to testing area/stability labels Aug 16, 2025
@Jeffwan
Copy link
Collaborator

Jeffwan commented Aug 19, 2025

so the purpose is to put envtest-based integration (real API server, CRDs, webhooks etc under a single top-level suite, e.g. test/integration/*/suite_test.go? In this case, we should just have test without relying on apiserver etc close to controller.go.

@Jeffwan
Copy link
Collaborator

Jeffwan commented Aug 19, 2025

overall looks good to me. i am not sure the changes to remove the waitforCacheSync, please help take a look

@googs1025
Copy link
Collaborator Author

so the purpose is to put envtest-based integration (real API server, CRDs, webhooks etc under a single top-level suite, e.g. test/integration/*/suite_test.go? In this case, we should just have test without relying on apiserver etc close to controller.go.

yes. My idea is:

  • test/integration/*/suite_test.go initializes envtest.Environment and starts the real control plane components.
  • controller_test.go only uses fake.Client or fake.Informer for lightweight unit testing. This is also closer to the Kubernetes testing method.

unit testing -> integration testing -> e2e testing.

@googs1025 googs1025 force-pushed the integration/controller branch 2 times, most recently from ac252de to 22eccdd Compare August 19, 2025 12:03
@Jeffwan Jeffwan changed the title [Misc]: add controller integration test framework [Test]: add controller integration test framework Aug 19, 2025
@Jeffwan Jeffwan force-pushed the integration/controller branch from 22eccdd to 4a7141b Compare August 19, 2025 12:20
@Jeffwan Jeffwan merged commit 69f0972 into vllm-project:main Aug 19, 2025
20 of 21 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/stability area/testing Issues or PRs related to testing

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants