Skip to content

Conversation

@zhzhuang-zju
Copy link
Contributor

@zhzhuang-zju zhzhuang-zju commented Nov 20, 2025

What type of PR is this?
/kind cleanup

What this PR does / why we need it:
This pull request significantly upgrades the resource interpreter test framework. It introduces the capability to define and verify the precise output of resource interpretation rules, moving beyond basic error checking. This enhancement ensures greater accuracy and reliability in resource interpretation logic by allowing for detailed validation of interpreted replicas, components, health, and aggregated status, as demonstrated with expanded FlinkDeployment test cases.

Which issue(s) this PR fixes:

Fixes #

Special notes for your reviewer:

Does this PR introduce a user-facing change?:


@karmada-bot karmada-bot added the kind/cleanup Categorizes issue or PR as related to cleaning up code, process, or technical debt. label Nov 20, 2025
@zhzhuang-zju zhzhuang-zju changed the title enhance resource interpreter test framework WIP: enhance resource interpreter test framework Nov 20, 2025
@karmada-bot karmada-bot added size/L Denotes a PR that changes 100-499 lines, ignoring generated files. do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. labels Nov 20, 2025
@gemini-code-assist
Copy link

Summary of Changes

Hello @zhzhuang-zju, 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 significantly upgrades the resource interpreter test framework. It introduces the capability to define and verify the precise output of resource interpretation rules, moving beyond basic error checking. This enhancement ensures greater accuracy and reliability in resource interpretation logic by allowing for detailed validation of interpreted replicas, components, health, and aggregated status, as demonstrated with expanded FlinkDeployment test cases.

Highlights

  • Enhanced Test Validation: The resource interpreter test framework now supports defining and validating the expected output of interpretation operations, rather than just checking for execution errors.
  • Flexible Expected Results: The IndividualTest structure has been updated to include a DesiredResults map, allowing tests to specify detailed expected outcomes for various interpretation operations.
  • Robust Deep Equality Checks: A new deepEqual helper function, utilizing k8s.io/apimachinery/pkg/api/equality.Semantic and reflect.DeepEqual, has been introduced to perform comprehensive semantic comparisons of complex Go types, including Kubernetes resource quantities and unstructured objects.
  • Expanded FlinkDeployment Tests: New test cases have been added for FlinkDeployment resource customizations, covering AggregateStatus, InterpretReplica, InterpretComponent, InterpretHealth, and InterpretStatus operations with explicit expected results.
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 enhances the resource interpreter test framework by introducing a more flexible way to define and verify test outcomes. Instead of a hardcoded replica check, it uses a desiredResults map, allowing for comprehensive validation of various interpreter operations. The implementation is solid, but I have one suggestion for the new deepEqual function to improve its correctness, performance, and consistency.

@codecov-commenter
Copy link

codecov-commenter commented Nov 20, 2025

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

❌ Patch coverage is 0% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 46.61%. Comparing base (25cf101) to head (d6d5357).

Files with missing lines Patch % Lines
pkg/util/interpreter/rule.go 0.00% 1 Missing ⚠️
❗ Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@           Coverage Diff           @@
##           master    #6938   +/-   ##
=======================================
  Coverage   46.61%   46.61%           
=======================================
  Files         698      698           
  Lines       48003    48000    -3     
=======================================
+ Hits        22375    22377    +2     
+ Misses      23943    23938    -5     
  Partials     1685     1685           
Flag Coverage Δ
unittests 46.61% <0.00%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@zhzhuang-zju zhzhuang-zju force-pushed the interpret-ut branch 2 times, most recently from 7830124 to 7c7fe9e Compare November 20, 2025 07:02
@zhzhuang-zju zhzhuang-zju changed the title WIP: enhance resource interpreter test framework enhance resource interpreter test framework Nov 20, 2025
@karmada-bot karmada-bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Nov 20, 2025
@RainbowMango RainbowMango requested a review from Copilot November 24, 2025 12:43
@RainbowMango
Copy link
Member

/gemini review

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 significantly enhances the resource interpreter test framework by introducing the capability to verify the exact output of interpretation rules, which is a valuable improvement for ensuring correctness. The new documentation is also clear and comprehensive. My review focuses on a regression in testing capabilities for one operation and a couple of opportunities to improve the implementation of the test helpers for better code quality and maintainability.

@RainbowMango
Copy link
Member

Generally looks good to me.
@XiShanYongYe-Chang, please look at this. I see you also sent another PR #6940 for this.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR enhances the resource interpreter test framework by introducing the ability to verify precise outputs of resource interpretation rules. The framework moves beyond basic error checking to enable detailed validation of interpreted results including replicas, components, health status, and aggregated status.

Key Changes:

  • Modified test structure to support expected output validation through desiredResults field
  • Implemented deepEqual function with type-specific semantic comparison for various resource types
  • Extended FlinkDeployment test cases with comprehensive output validation for multiple operations

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments.

File Description
pkg/resourceinterpreter/default/thirdparty/thirdparty_test.go Enhanced test framework with result validation logic, added deepEqual function for semantic comparison of expected vs actual outputs
pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/flink.apache.org/v1beta1/FlinkDeployment/customizations_tests.yaml Expanded FlinkDeployment test cases with desiredResults fields to validate InterpretReplica, InterpretComponent, InterpretHealth, InterpretStatus, and AggregateStatus operations
pkg/resourceinterpreter/default/thirdparty/README.md Added comprehensive documentation for the test framework including structure, usage, test creation guide, and best practices

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@zhzhuang-zju
Copy link
Contributor Author

/gemini review

@gemini-code-assist
Copy link

It looks like there might be a small typo in your command. Did you mean /gemini review? I'll go ahead and perform a comprehensive review of the pull request for you.

Review of "enhance resource interpreter test framework"

This pull request introduces valuable enhancements to the resource interpreter test framework, moving beyond basic error checking to allow for precise validation of interpretation rule outputs. This is a significant step forward in ensuring the correctness and reliability of custom resource interpretation within Karmada.

Overall Observations:

  • Enhanced Test Validation: The core improvement, enabling the definition and validation of expected outputs, is a critical feature for robust testing of resource interpretation logic.
  • Clarity and Documentation: The new README.md is exceptionally well-written and provides clear guidance on how to use and extend the new test framework. This greatly aids maintainability and onboarding for future contributors.
  • Robust Comparisons: The deepEqual helper function, leveraging k8s.io/apimachinery/pkg/api/equality.Semantic and reflect.DeepEqual, is a thoughtful and necessary addition for accurately comparing complex Kubernetes resource types.

Detailed Review by File:

pkg/resourceinterpreter/default/thirdparty/README.md (New File)

  • Maintainability/Clarity: This is an excellent addition. The README clearly explains the directory structure, how to run tests, and how to create new test cases. The detailed explanation of the TestStructure, IndividualTest, and the outputResultsPath is very helpful. The example YAML for customizations_tests.yaml and the guidance on keys in output results are particularly well-done.
  • Suggestion: None. This documentation is comprehensive and highly beneficial.

pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/flink.apache.org/v1beta1/FlinkDeployment/customizations_tests.yaml (Modified)

  • Correctness: The updates to this test configuration file correctly demonstrate the usage of the new outputResultsPath for various FlinkDeployment operations, aligning perfectly with the enhanced test validation introduced in this PR.
  • Suggestion: None.

pkg/resourceinterpreter/default/thirdparty/resourcecustomizations/flink.apache.org/v1beta1/FlinkDeployment/testdata/output-flinkdeployment.yaml (New File)

  • Correctness: This new file provides concrete and detailed examples of expected outputs for different FlinkDeployment interpretation operations. This is crucial for the new validation mechanism and significantly improves the clarity of what a successful interpretation should yield.
  • Suggestion: None.

pkg/resourceinterpreter/default/thirdparty/thirdparty_test.go (Modified)

  • Correctness/Maintainability:
    • The update to the IndividualTest struct, changing DesiredReplica to InputReplicas and adding OutputResultsPath, makes the test structure more flexible and descriptive.
    • The introduction of the checker and deepEqual function is a robust and necessary improvement. Using k8s.io/apimachinery/pkg/api/equality.Semantic ensures that Kubernetes-specific types like resource.Quantity are compared semantically, which is vital for accurate testing.
    • The // TODO(@zhzhuang-zju): Once we have a complete set of test cases, change this to t.Fatal. comment is a good temporary measure. It clearly indicates a future task to enforce stricter validation once the test coverage is complete, which is a good practice.
  • Suggestion: Consider adding a comment explaining why k8s.io/apimachinery/pkg/api/equality.Semantic is used for resource.Quantity specifically, as it's a common pitfall to use reflect.DeepEqual directly for such types. This would further enhance the code's educational value.

Conclusion:

This pull request is a well-executed and valuable enhancement to the Karmada project. The improved testing framework will undoubtedly contribute to higher code quality and more reliable resource interpretation. Great work!

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 is a great enhancement to the resource interpreter test framework, introducing output validation for interpreter rules. The new README.md is very helpful for contributors. The implementation is solid, but I've found a small bug in the new deepEqual test helper function that should be addressed to ensure test reliability. I've also included a couple of minor suggestions to improve the new documentation's formatting.

@zhzhuang-zju zhzhuang-zju force-pushed the interpret-ut branch 2 times, most recently from 691dafa to 01b0148 Compare November 26, 2025 09:41
@karmada-bot
Copy link
Collaborator

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign chaunceyjiang for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@karmada-bot karmada-bot added size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. and removed size/L Denotes a PR that changes 100-499 lines, ignoring generated files. labels Nov 26, 2025
@zhzhuang-zju
Copy link
Contributor Author

All done. cc @RainbowMango @XiShanYongYe-Chang

$ go test -timeout 30s -run ^TestThirdPartyCustomizationsFile$ github.com/karmada-io/karmada/pkg/resourceinterpreter/default/thirdparty -v 4
=== RUN   TestThirdPartyCustomizationsFile
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:AdvancedCronJob_with_two_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-advancedcronjob
=== RUN   TestThirdPartyCustomizationsFile/[InterpretDependency]:AdvancedCronJob_with_configmap_dependency
    thirdparty_test.go:105: no expected result for dependencies of declarative-configuration-advancedcronjob
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:BroadcastJob_with_two_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-broadcastjob
=== RUN   TestThirdPartyCustomizationsFile/[InterpretDependency]:BroadcastJob_with_configmap_dependency
    thirdparty_test.go:105: no expected result for dependencies of declarative-configuration-broadcastjob
=== RUN   TestThirdPartyCustomizationsFile/[InterpretHealth]:BroadcastJob_with_failed_phase_should_be_Unhealthy
    thirdparty_test.go:105: no expected result for healthy of declarative-configuration-broadcastjob
=== RUN   TestThirdPartyCustomizationsFile/[InterpretReplica]:BroadcastJob_with_parallelism_set_to_1
    thirdparty_test.go:105: no expected result for replica of declarative-configuration-broadcastjob
    thirdparty_test.go:105: no expected result for requires of declarative-configuration-broadcastjob
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:BroadcastJob:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-broadcastjob
=== RUN   TestThirdPartyCustomizationsFile/[Retain]:BroadcastJob:_retain_test
    thirdparty_test.go:105: no expected result for retained of declarative-configuration-broadcastjob
=== RUN   TestThirdPartyCustomizationsFile/[ReviseReplica]:BroadcastJob:_revise_replica_test
    thirdparty_test.go:105: no expected result for revised of declarative-configuration-broadcastjob
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:CloneSet_with_two_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-cloneset
=== RUN   TestThirdPartyCustomizationsFile/[InterpretDependency]:CloneSet_with_configmap_dependency
    thirdparty_test.go:105: no expected result for dependencies of declarative-configuration-cloneset
=== RUN   TestThirdPartyCustomizationsFile/[InterpretHealth]:CloneSet_interpreting_health_test
    thirdparty_test.go:105: no expected result for healthy of declarative-configuration-cloneset
=== RUN   TestThirdPartyCustomizationsFile/[InterpretReplica]:CloneSet_with_replicas_set_to_4
    thirdparty_test.go:105: no expected result for replica of declarative-configuration-cloneset
    thirdparty_test.go:105: no expected result for requires of declarative-configuration-cloneset
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:CloneSet:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-cloneset
=== RUN   TestThirdPartyCustomizationsFile/[ReviseReplica]:CloneSet:_revise_replica_test
    thirdparty_test.go:105: no expected result for revised of declarative-configuration-cloneset
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:DaemonSet_with_two_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-daemonset
=== RUN   TestThirdPartyCustomizationsFile/[InterpretDependency]:DaemonSet_with_configmap_dependency
    thirdparty_test.go:105: no expected result for dependencies of declarative-configuration-daemonset
=== RUN   TestThirdPartyCustomizationsFile/[InterpretHealth]:DaemonSet_interpreting_health_test
    thirdparty_test.go:105: no expected result for healthy of declarative-configuration-daemonset
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:DaemonSet:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-daemonset
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:SidecarSet_with_two_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-sidecarset
=== RUN   TestThirdPartyCustomizationsFile/[InterpretDependency]:SidecarSet_with_configmap_and_secret_dependency
    thirdparty_test.go:105: no expected result for dependencies of declarative-configuration-sidecarset
=== RUN   TestThirdPartyCustomizationsFile/[InterpretHealth]:SidecarSet_interpreting_health_test
    thirdparty_test.go:105: no expected result for healthy of declarative-configuration-sidecarset
=== RUN   TestThirdPartyCustomizationsFile/[InterpretReplica]:SidecarSet_replicas_should_always_be_0
    thirdparty_test.go:105: no expected result for replica of declarative-configuration-sidecarset
    thirdparty_test.go:105: no expected result for requires of declarative-configuration-sidecarset
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:SidecarSet:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-sidecarset
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:UnitedDeployment_with_two_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-uniteddeployment
=== RUN   TestThirdPartyCustomizationsFile/[InterpretDependency]:UnitedDeployment_with_configmap_and_secret_dependency
    thirdparty_test.go:105: no expected result for dependencies of declarative-configuration-uniteddeployment
=== RUN   TestThirdPartyCustomizationsFile/[InterpretHealth]:UnitedDeployment_interpreting_health_test
    thirdparty_test.go:105: no expected result for healthy of declarative-configuration-uniteddeployment
=== RUN   TestThirdPartyCustomizationsFile/[InterpretReplica]:UnitedDeployment_with_replicas_set_to_3
    thirdparty_test.go:105: no expected result for replica of declarative-configuration-uniteddeployment
    thirdparty_test.go:105: no expected result for requires of declarative-configuration-uniteddeployment
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:UnitedDeployment:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-uniteddeployment
=== RUN   TestThirdPartyCustomizationsFile/[ReviseReplica]:UnitedDeployment:_revise_replica_test
    thirdparty_test.go:105: no expected result for revised of declarative-configuration-uniteddeployment
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:StatefulSet_with_two_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-statefulset
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:StatefulSet:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-statefulset
=== RUN   TestThirdPartyCustomizationsFile/[InterpretHealth]:Workflow_interpreting_health_test
    thirdparty_test.go:105: no expected result for healthy of declarative-configuration-workflow
=== RUN   TestThirdPartyCustomizationsFile/[InterpretReplica]:Workflow_with_parallelism_set_to_2
    thirdparty_test.go:105: no expected result for replica of declarative-configuration-workflow
    thirdparty_test.go:105: no expected result for requires of declarative-configuration-workflow
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:VCJob_with_one_status_item
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-job
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:VCJob:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-job
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:FlinkDeployment_with_nil_status_items
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:FlinkDeployment_with_one_status_item
=== RUN   TestThirdPartyCustomizationsFile/[InterpretComponent]:FlinkDeployment_with_taskManager.replicas_set_to_1
=== RUN   TestThirdPartyCustomizationsFile/[InterpretComponent]:FlinkDeployment_with_taskManager.replicas_not_set,_use_parallelism/numberOfTaskSlots
=== RUN   TestThirdPartyCustomizationsFile/[InterpretHealth]:FlinkDeployment_with_DEPLOYED_state_should_be_Healthy
=== RUN   TestThirdPartyCustomizationsFile/[InterpretReplica]:FlinkDeployment_with_taskManager.replicas_set_to_1
=== RUN   TestThirdPartyCustomizationsFile/[InterpretReplica]:FlinkDeployment_with_taskManager.replicas_not_set,_use_parallelism/numberOfTaskSlots
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:FlinkDeployment:_interpret_status_test
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:HelmRelease_with_two_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-helmrelease
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:HelmRelease:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-helmrelease
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:Notebook_with_one_status_item
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-notebook
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:Notebook:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-notebook
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:PyTorchJob_with_two_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-pytorchjob
=== RUN   TestThirdPartyCustomizationsFile/[InterpretHealth]:PyTorchJob_interpreting_health_test
    thirdparty_test.go:105: no expected result for healthy of declarative-configuration-pytorchjob
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:TFJob_with_two_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-tfjob
=== RUN   TestThirdPartyCustomizationsFile/[InterpretHealth]:TFJob_interpreting_health_test
    thirdparty_test.go:105: no expected result for healthy of declarative-configuration-tfjob
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:MPIJob_with_three_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-mpijob
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:MPIJob:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-mpijob
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:Kustomization_with_two_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-kustomization
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:Kustomization:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-kustomization
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:ClusterPolicy_with_two_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-clusterpolicy
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:ClusterPolicy:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-clusterpolicy
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:Policy_with_two_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-policy
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:Policy:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-policy
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:GitRepository_with_two_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-gitrepository
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:GitRepository:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-gitrepository
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:Bucket_with_two_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-bucket
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:Bucket:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-bucket
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:HelmChart_with_two_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-helmchart
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:HelmChart:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-helmchart
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:HelmRepository_with_two_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-helmrepository
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:HelmRepository:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-helmrepository
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:OCIRepository_with_two_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-ocirepository
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:OCIRepository:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-ocirepository
=== RUN   TestThirdPartyCustomizationsFile/[AggregateStatus]:SparkApplication_with_three_status_items
    thirdparty_test.go:105: no expected result for aggregatedStatus of declarative-configuration-sparkapplication
=== RUN   TestThirdPartyCustomizationsFile/[InterpretStatus]:SparkApplication:_interpret_status_test
    thirdparty_test.go:105: no expected result for status of declarative-configuration-sparkapplication
--- PASS: TestThirdPartyCustomizationsFile (0.21s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:AdvancedCronJob_with_two_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretDependency]:AdvancedCronJob_with_configmap_dependency (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:BroadcastJob_with_two_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretDependency]:BroadcastJob_with_configmap_dependency (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretHealth]:BroadcastJob_with_failed_phase_should_be_Unhealthy (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretReplica]:BroadcastJob_with_parallelism_set_to_1 (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:BroadcastJob:_interpret_status_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[Retain]:BroadcastJob:_retain_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[ReviseReplica]:BroadcastJob:_revise_replica_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:CloneSet_with_two_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretDependency]:CloneSet_with_configmap_dependency (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretHealth]:CloneSet_interpreting_health_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretReplica]:CloneSet_with_replicas_set_to_4 (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:CloneSet:_interpret_status_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[ReviseReplica]:CloneSet:_revise_replica_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:DaemonSet_with_two_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretDependency]:DaemonSet_with_configmap_dependency (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretHealth]:DaemonSet_interpreting_health_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:DaemonSet:_interpret_status_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:SidecarSet_with_two_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretDependency]:SidecarSet_with_configmap_and_secret_dependency (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretHealth]:SidecarSet_interpreting_health_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretReplica]:SidecarSet_replicas_should_always_be_0 (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:SidecarSet:_interpret_status_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:UnitedDeployment_with_two_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretDependency]:UnitedDeployment_with_configmap_and_secret_dependency (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretHealth]:UnitedDeployment_interpreting_health_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretReplica]:UnitedDeployment_with_replicas_set_to_3 (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:UnitedDeployment:_interpret_status_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[ReviseReplica]:UnitedDeployment:_revise_replica_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:StatefulSet_with_two_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:StatefulSet:_interpret_status_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretHealth]:Workflow_interpreting_health_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretReplica]:Workflow_with_parallelism_set_to_2 (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:VCJob_with_one_status_item (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:VCJob:_interpret_status_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:FlinkDeployment_with_nil_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:FlinkDeployment_with_one_status_item (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretComponent]:FlinkDeployment_with_taskManager.replicas_set_to_1 (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretComponent]:FlinkDeployment_with_taskManager.replicas_not_set,_use_parallelism/numberOfTaskSlots (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretHealth]:FlinkDeployment_with_DEPLOYED_state_should_be_Healthy (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretReplica]:FlinkDeployment_with_taskManager.replicas_set_to_1 (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretReplica]:FlinkDeployment_with_taskManager.replicas_not_set,_use_parallelism/numberOfTaskSlots (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:FlinkDeployment:_interpret_status_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:HelmRelease_with_two_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:HelmRelease:_interpret_status_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:Notebook_with_one_status_item (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:Notebook:_interpret_status_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:PyTorchJob_with_two_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretHealth]:PyTorchJob_interpreting_health_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:TFJob_with_two_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretHealth]:TFJob_interpreting_health_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:MPIJob_with_three_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:MPIJob:_interpret_status_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:Kustomization_with_two_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:Kustomization:_interpret_status_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:ClusterPolicy_with_two_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:ClusterPolicy:_interpret_status_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:Policy_with_two_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:Policy:_interpret_status_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:GitRepository_with_two_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:GitRepository:_interpret_status_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:Bucket_with_two_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:Bucket:_interpret_status_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:HelmChart_with_two_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:HelmChart:_interpret_status_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:HelmRepository_with_two_status_items (0.01s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:HelmRepository:_interpret_status_test (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:OCIRepository_with_two_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:OCIRepository:_interpret_status_test (0.01s)
    --- PASS: TestThirdPartyCustomizationsFile/[AggregateStatus]:SparkApplication_with_three_status_items (0.00s)
    --- PASS: TestThirdPartyCustomizationsFile/[InterpretStatus]:SparkApplication:_interpret_status_test (0.00s)
PASS
ok      github.com/karmada-io/karmada/pkg/resourceinterpreter/default/thirdparty        0.240s

Copy link
Member

@XiShanYongYe-Chang XiShanYongYe-Chang left a comment

Choose a reason for hiding this comment

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

Thanks a lot~
There are quite a few files involved in the current PR.

Made a small suggestion, other parts LGTM

@zhzhuang-zju
Copy link
Contributor Author

/retest

@XiShanYongYe-Chang
Copy link
Member

Thanks
/lgtm

@karmada-bot karmada-bot added the lgtm Indicates that a PR is ready to be merged. label Nov 27, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

kind/cleanup Categorizes issue or PR as related to cleaning up code, process, or technical debt. lgtm Indicates that a PR is ready to be merged. size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants