Skip to content

Add first pre/post upgrade skeleton for Model Registry#371

Merged
lugi0 merged 15 commits intoopendatahub-io:mainfrom
lugi0:feat/mr_upg
Jun 25, 2025
Merged

Add first pre/post upgrade skeleton for Model Registry#371
lugi0 merged 15 commits intoopendatahub-io:mainfrom
lugi0:feat/mr_upg

Conversation

@lugi0
Copy link
Copy Markdown
Contributor

@lugi0 lugi0 commented Jun 20, 2025

Description

This draft PR adds a skeleton for pre and post upgrade tests for Model Registry. They currently don't do anything too interesting (register a model in pre-upgrade, retrieve it in post), but they implement the logic needed to keep the environment we set up prior to the upgrade and tear it down after the upgrade.
Due to the current implementation of our fixtures it needed a fair amount of refactoring and additional checks needed to be implemented in order to not try to create duplicate resources; this might not be the best approach overall but it's the only solution I could come up with within our constraints.

How Has This Been Tested?

Tested it locally (without triggering a RHOAI upgrade in between) to check the validity of the setup/teardown logic between the two scenarios.

Merge criteria:

  • The commits are squashed in a cohesive manner and have meaningful messages.
  • Testing instructions have been added in the PR body (for PRs involving changes that are not immediately obvious).
  • The developer has manually tested the changes and verified that the changes work

Signed-off-by: lugi0 <lgiorgi@redhat.com>
@lugi0 lugi0 requested review from dbasunag and fege June 20, 2025 18:32
@lugi0 lugi0 self-assigned this Jun 20, 2025
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Jun 20, 2025

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Added upgrade scenario tests for the model registry, including validation before and after upgrade, API version checks, and spec/status verification.
    • Introduced a utility function to validate registered models against expected attributes.
  • Tests

    • Enhanced test fixtures to support a post-upgrade mode for resource management and cleanup.
    • Added dedicated pre- and post-upgrade fixtures for managing component state during upgrade tests.

Summary by CodeRabbit

  • New Features

    • Introduced upgrade scenario tests for the model registry, including validation of registered models before and after upgrade.
    • Added checks for model registry instance configuration and status post-upgrade.
  • Tests

    • Enhanced test fixtures to support a new post-upgrade mode for resource management during upgrade testing.
    • Added dedicated pre- and post-upgrade fixtures for managing component states and namespaces.
    • Removed obsolete test fixtures and streamlined client creation for improved test clarity.

Walkthrough

This change refactors model registry test fixtures to support a new post-upgrade testing mode, introducing pre/post upgrade fixtures for DataScienceCluster component state management. It also adds a new upgrade test module with pre- and post-upgrade validation tests, updates fixture signatures, and removes an obsolete OAuth-related fixture.

Changes

Files/Paths Change Summary
tests/model_registry/conftest.py Refactored fixtures to support a post_upgrade mode via pytest CLI, altering resource management to reuse and explicitly clean up existing Kubernetes resources. Added pre_upgrade_dsc_patch and post_upgrade_dsc_patch fixtures for DataScienceCluster state management. Updated fixture signatures, removed the obsolete is_model_registry_oauth fixture, and refactored the client fixture.
tests/model_registry/upgrade/test_model_registry_upgrade.py Added a new test module for upgrade scenarios. Introduced TestPreUpgradeModelRegistry and TestPostUpgradeModelRegistry classes with tests that validate registered model attributes and ModelRegistry instance state pre- and post-upgrade, including API version and spec field checks.
tests/model_registry/utils.py Added get_and_validate_registered_model utility function to retrieve and validate registered model attributes against expected values, returning error messages for mismatches.

Possibly related PRs

Suggested labels

size/m

Suggested reviewers

  • fege
  • dbasunag

📜 Recent review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b16e9da and 264460e.

📒 Files selected for processing (1)
  • tests/model_registry/conftest.py (3 hunks)
🧰 Additional context used
🪛 Pylint (3.3.7)
tests/model_registry/conftest.py

[refactor] 155-155: Too many arguments (8/5)

(R0913)


[refactor] 155-155: Too many positional arguments (8/5)

(R0917)


[refactor] 192-192: Too many arguments (6/5)

(R0913)


[refactor] 192-192: Too many positional arguments (6/5)

(R0917)


[refactor] 391-391: Either all return statements in a function should return an expression, or none of them should.

(R1710)

🔇 Additional comments (9)
tests/model_registry/conftest.py (9)

64-99: LGTM! Proper implementation of post-upgrade testing pattern.

The fixture correctly implements the dual-mode pattern for supporting both normal and post-upgrade testing scenarios. The logic appropriately handles resource retrieval vs creation and explicit cleanup in post-upgrade mode.


103-126: Consistent implementation of post-upgrade pattern.

The fixture follows the same correct pattern as the database service fixture, properly handling both modes.


130-151: Consistent dual-mode implementation.

The fixture correctly implements the post-upgrade testing pattern consistent with other database fixtures.


155-188: Implementation is correct despite parameter count.

The fixture properly implements the dual-mode pattern. While static analysis flags the parameter count, all parameters are necessary dependencies for the fixture functionality.


192-231: Proper implementation of model registry instance fixture.

The fixture correctly implements the dual-mode pattern and handles OAuth vs ISTIO configuration appropriately. The previous typo issue appears to have been resolved.


256-256: Good refactoring to use constants for database configuration.

Using constants instead of reading from the secret resource ensures consistent configuration across both normal and post-upgrade modes.

Also applies to: 260-260


340-388: Smart conditional logic for DSC management.

The fixture correctly delegates DataScienceCluster management to specialized pre/post upgrade fixtures when appropriate, while preserving the original behavior for normal test scenarios.


418-441: Proper post-upgrade teardown fixture implementation.

The fixture correctly implements the teardown-only pattern, yielding immediately and handling DataScienceCluster cleanup and namespace deletion during fixture teardown.


445-448: Good formatting improvement for readability.

The multi-line signature formatting improves code readability without any functional changes.

✨ Finishing Touches
  • 📝 Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions
Copy link
Copy Markdown

The following are automatically added/executed:

  • PR size label.
  • Run pre-commit
  • Run tox
  • Add PR author as the PR assignee
  • Build image based on the PR

Available user actions:

  • To mark a PR as WIP, add /wip in a comment. To remove it from the PR comment /wip cancel to the PR.
  • To block merging of a PR, add /hold in a comment. To un-block merging of PR comment /hold cancel.
  • To mark a PR as approved, add /lgtm in a comment. To remove, add /lgtm cancel.
    lgtm label removed on each new commit push.
  • To mark PR as verified comment /verified to the PR, to un-verify comment /verified cancel to the PR.
    verified label removed on each new commit push.
  • To Cherry-pick a merged PR /cherry-pick <target_branch_name> to the PR. If <target_branch_name> is valid,
    and the current PR is merged, a cherry-picked PR would be created and linked to the current PR.
  • To build and push image to quay, add /build-push-pr-image in a comment. This would create an image with tag
    pr-<pr_number> to quay repository. This image tag, however would be deleted on PR merge or close action.
Supported labels

{'/lgtm', '/build-push-pr-image', '/wip', '/hold', '/cherry-pick', '/verified'}

@lugi0
Copy link
Copy Markdown
Contributor Author

lugi0 commented Jun 20, 2025

@CodeRabbit review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Jun 20, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Signed-off-by: lugi0 <lgiorgi@redhat.com>
Signed-off-by: lugi0 <lgiorgi@redhat.com>
@lugi0
Copy link
Copy Markdown
Contributor Author

lugi0 commented Jun 20, 2025

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Jun 20, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (3)
tests/model_registry/upgrade/test_model_registry_upgrade.py (1)

42-44: Consider validating more model attributes.

Currently, only the name attribute is validated. For a comprehensive post-upgrade test, consider validating additional attributes like URI, version, description, etc., to ensure all model data persists correctly across upgrades.

tests/model_registry/conftest.py (2)

402-421: Remove unnecessary else block after return.

The else block is unnecessary since the function returns in the if branch.

 def pre_upgrade_dsc_patch(
     dsc_resource: DataScienceCluster,
     admin_client: DynamicClient,
 ) -> DataScienceCluster:
     original_components = dsc_resource.instance.spec.components
     component_patch = {DscComponents.MODELREGISTRY: {"managementState": DscComponents.ManagementState.MANAGED}}
     if (
         original_components.get(DscComponents.MODELREGISTRY).get("managementState")
         == DscComponents.ManagementState.MANAGED
     ):
         LOGGER.error("Model Registry is already set to Managed before upgrade - was this intentional?")
         return dsc_resource
-    else:
-        editor = ResourceEditor(patches={dsc_resource: {"spec": {"components": component_patch}}})
-        editor.update()
-        dsc_resource.wait_for_condition(condition=DscComponents.COMPONENT_MAPPING["modelregistry"], status="True")
-        namespace = Namespace(
-            name=dsc_resource.instance.spec.components.modelregistry.registriesNamespace, ensure_exists=True
-        )
-        namespace.wait_for_status(status=Namespace.Status.ACTIVE)
-        wait_for_pods_running(
-            admin_client=admin_client,
-            namespace_name=py_config["applications_namespace"],
-            number_of_consecutive_checks=6,
-        )
-        return dsc_resource
+    editor = ResourceEditor(patches={dsc_resource: {"spec": {"components": component_patch}}})
+    editor.update()
+    dsc_resource.wait_for_condition(condition=DscComponents.COMPONENT_MAPPING["modelregistry"], status="True")
+    namespace = Namespace(
+        name=dsc_resource.instance.spec.components.modelregistry.registriesNamespace, ensure_exists=True
+    )
+    namespace.wait_for_status(status=Namespace.Status.ACTIVE)
+    wait_for_pods_running(
+        admin_client=admin_client,
+        namespace_name=py_config["applications_namespace"],
+        number_of_consecutive_checks=6,
+    )
+    return dsc_resource

452-454: Remove commented-out parameters.

These commented parameters should be removed as they add clutter without providing value.

 @pytest.fixture(scope="class")
 def model_registry_client(
-    # pytestconfig: Config,
-    # admin_client: DynamicClient,
-    # dsc_resource: DataScienceCluster,
     current_client_token: str,
     model_registry_instance_rest_endpoint: str,
 ) -> ModelRegistryClient:
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 04a254e and 767a67f.

📒 Files selected for processing (2)
  • tests/model_registry/conftest.py (5 hunks)
  • tests/model_registry/upgrade/test_model_registry_upgrade.py (1 hunks)
🧰 Additional context used
🪛 Pylint (3.3.7)
tests/model_registry/upgrade/test_model_registry_upgrade.py

[refactor] 21-21: Too few public methods (1/2)

(R0903)


[refactor] 35-35: Too few public methods (1/2)

(R0903)

tests/model_registry/conftest.py

[refactor] 166-166: Too many arguments (7/5)

(R0913)


[refactor] 166-166: Too many positional arguments (7/5)

(R0917)


[refactor] 402-421: Unnecessary "else" after "return", remove the "else" and de-indent the code inside it

(R1705)

🔇 Additional comments (3)
tests/model_registry/upgrade/test_model_registry_upgrade.py (1)

41-43: ```shell
#!/bin/bash

Locate any constants files

echo "Searching for constants files..."
find . -type f -iname '*constants.py'

Search within located constants files for MODEL_NAME and MODEL_DICT

for file in $(find . -type f -iname '*constants.py'); do
echo -e "\nChecking $file for definitions:"
rg -n '^ *MODEL_NAME' "$file" || echo "No MODEL_NAME found in $file"
rg -n '^ *MODEL_DICT' "$file" || echo "No MODEL_DICT found in $file"
done

As a fallback, search all tests for any MODEL_NAME and MODEL_DICT usages

echo -e "\nSearching all tests for MODEL_NAME and MODEL_DICT usages..."
rg -n "MODEL_NAME" tests || echo "No MODEL_NAME usages in tests"
rg -n "MODEL_DICT" tests || echo "No MODEL_DICT usages in tests"


</details>
<details>
<summary>tests/model_registry/conftest.py (2)</summary>

`78-78`: **Consider the implications of explicit resource deletion in post-upgrade mode.**

All resources are explicitly deleted with `wait=True` after the fixture yields in post-upgrade mode. This could be problematic if:
- Other tests or processes depend on these resources
- The deletion fails and blocks test execution
- Resources are meant to persist beyond the test session

Consider using the teardown mechanism consistently or documenting why explicit deletion is necessary in post-upgrade scenarios.



Also applies to: 123-123, 151-151, 184-184, 225-225

---

`265-265`: **Good simplification of the MySQL config fixture.**

Using the constants directly instead of reading from the secret resource reduces coupling and simplifies the fixture.



Also applies to: 269-269

</details>

</blockquote></details>

</details>

<!-- This is an auto-generated comment by CodeRabbit for review status -->

Signed-off-by: lugi0 <lgiorgi@redhat.com>
@lugi0 lugi0 marked this pull request as ready for review June 24, 2025 08:38
@lugi0 lugi0 requested a review from a team as a code owner June 24, 2025 08:38
@lugi0 lugi0 requested a review from dbasunag June 24, 2025 08:38
@dbasunag
Copy link
Copy Markdown
Collaborator

/build-push-pr-image

@github-actions
Copy link
Copy Markdown

Status of building tag pr-371: success.
Status of pushing tag pr-371 to image registry: success.

@dbasunag
Copy link
Copy Markdown
Collaborator

/build-push-pr-image

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (2)
tests/model_registry/upgrade/test_model_registry_upgrade.py (2)

37-38: Consider expanding the TODO for better clarity

The TODO comment mentions testing v1alpha1 to v1beta1 conversion, but this functionality is actually implemented in test_model_registry_instance_status_conversion_post_upgrade. Consider updating this TODO to reflect what's still needed or remove it if the conversion testing is complete.

-    # TODO: if we are in <=2.21, we can create a servicemesh MR here instead of oauth (v1alpha1), and then in
-    # post-upgrade check that it automatically gets converted to oauth (v1beta1) - to be done in 2.21 branch directly.
+    # TODO: Add servicemesh MR creation for <=2.21 versions to test automatic conversion to oauth (v1beta1) post-upgrade

76-87: Consider adding error context to the status validation

The test validates the v1alpha1 status conversion, but the failure message could be more descriptive about what constitutes a valid status.

         if not status:
-            pytest.fail(f"Empty status found for {mr_instance}")
+            pytest.fail(f"Empty status found for {mr_instance}. Expected status to contain conversion information or other relevant fields.")
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 895ab2d and 925d417.

📒 Files selected for processing (1)
  • tests/model_registry/upgrade/test_model_registry_upgrade.py (1 hunks)
🧰 Additional context used
🪛 Pylint (3.3.7)
tests/model_registry/upgrade/test_model_registry_upgrade.py

[refactor] 24-24: Too few public methods (1/2)

(R0903)

⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: tox-tests
🔇 Additional comments (6)
tests/model_registry/upgrade/test_model_registry_upgrade.py (6)

1-11: LGTM: Clean imports and setup

The imports are well-organized and all necessary dependencies are properly imported. The logger setup follows good practices.


14-22: Good use of parametrized fixtures with indirect mode

The parametrization with indirect=True allows the registered_model fixture to receive the MODEL_DICT parameter, enabling flexible test data configuration.


26-35: Excellent improvement from previous empty test body

The test now properly validates the registered model using the utility function get_and_validate_registered_model. This addresses the past review concern about the empty test body and provides meaningful validation.


44-54: Good consistency in validation approach

The post-upgrade test correctly uses the same utility function for validation, maintaining consistency with the pre-upgrade test while appropriately omitting the registered_model parameter since it's validating retrieval rather than comparing against a fixture.


57-64: Solid API version validation for 2.22+ compatibility

The test correctly validates the expected API version format and the comment appropriately indicates the version compatibility requirement, which aligns with the PR objectives.


67-73: Clear spec validation with meaningful assertions

The test properly validates key spec fields (istio disabled, oauthProxy.serviceRoute enabled) that are important for post-upgrade verification.

@github-actions
Copy link
Copy Markdown

Status of building tag pr-371: success.
Status of pushing tag pr-371 to image registry: success.

@dbasunag dbasunag closed this Jun 24, 2025
@dbasunag dbasunag reopened this Jun 24, 2025
@dbasunag
Copy link
Copy Markdown
Collaborator

/build-push-pr-image

@github-actions
Copy link
Copy Markdown

Status of building tag pr-371: success.
Status of pushing tag pr-371 to image registry: success.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

♻️ Duplicate comments (1)
tests/model_registry/conftest.py (1)

391-415: Fix inconsistent return statement pattern.

The fixture has an inconsistent return pattern - it returns dsc_resource in the success path but has no return in the failure path after pytest.fail(). While pytest.fail() raises an exception, maintaining consistency is important for code clarity.

-    if (
-        original_components.get(DscComponents.MODELREGISTRY).get("managementState")
-        == DscComponents.ManagementState.MANAGED
-    ):
-        pytest.fail("Model Registry is already set to Managed before upgrade - was this intentional?")
-    else:
-        editor = ResourceEditor(patches={dsc_resource: {"spec": {"components": component_patch}}})
-        editor.update()
-        dsc_resource.wait_for_condition(condition=DscComponents.COMPONENT_MAPPING["modelregistry"], status="True")
-        namespace = Namespace(
-            name=dsc_resource.instance.spec.components.modelregistry.registriesNamespace, ensure_exists=True
-        )
-        namespace.wait_for_status(status=Namespace.Status.ACTIVE)
-        wait_for_pods_running(
-            admin_client=admin_client,
-            namespace_name=py_config["applications_namespace"],
-            number_of_consecutive_checks=6,
-        )
-        return dsc_resource
+    if (
+        original_components.get(DscComponents.MODELREGISTRY).get("managementState")
+        == DscComponents.ManagementState.MANAGED
+    ):
+        pytest.fail("Model Registry is already set to Managed before upgrade - was this intentional?")
+    
+    editor = ResourceEditor(patches={dsc_resource: {"spec": {"components": component_patch}}})
+    editor.update()
+    dsc_resource.wait_for_condition(condition=DscComponents.COMPONENT_MAPPING["modelregistry"], status="True")
+    namespace = Namespace(
+        name=dsc_resource.instance.spec.components.modelregistry.registriesNamespace, ensure_exists=True
+    )
+    namespace.wait_for_status(status=Namespace.Status.ACTIVE)
+    wait_for_pods_running(
+        admin_client=admin_client,
+        namespace_name=py_config["applications_namespace"],
+        number_of_consecutive_checks=6,
+    )
+    return dsc_resource
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 7c20557 and b16e9da.

📒 Files selected for processing (1)
  • tests/model_registry/conftest.py (3 hunks)
🧰 Additional context used
🪛 Ruff (0.11.9)
tests/model_registry/conftest.py

206-206: Local variable iistio_config is assigned to but never used

Remove assignment to unused variable iistio_config

(F841)

🪛 Flake8 (7.2.0)
tests/model_registry/conftest.py

[error] 206-206: local variable 'iistio_config' is assigned to but never used

(F841)

🪛 Pylint (3.3.7)
tests/model_registry/conftest.py

[refactor] 155-155: Too many arguments (8/5)

(R0913)


[refactor] 155-155: Too many positional arguments (8/5)

(R0917)


[refactor] 192-192: Too many arguments (6/5)

(R0913)


[refactor] 192-192: Too many positional arguments (6/5)

(R0917)


[error] 222-222: Possibly using variable 'istio_config' before assignment

(E0606)


[refactor] 391-391: Either all return statements in a function should return an expression, or none of them should.

(R1710)

🔇 Additional comments (4)
tests/model_registry/conftest.py (4)

64-99: Post-upgrade logic implementation looks correct.

The conditional logic for handling post-upgrade mode versus normal resource creation is well implemented. The fixture properly retrieves existing resources with ensure_exists=True and explicitly deletes them during teardown in post-upgrade mode.


256-260: Good improvement using constants instead of secret data.

Using static constants from MODEL_REGISTRY_DB_SECRET_STR_DATA instead of reading from the secret instance makes the configuration more reliable and predictable, especially in upgrade scenarios.


419-441: Well-designed post-upgrade teardown fixture.

The fixture properly implements the generator pattern with immediate yield for setup and teardown logic afterward. The state validation and cleanup logic for setting ModelRegistry to REMOVED and deleting the namespace is well structured.


505-506: Good addition of missing fixture.

This fixture addresses the missing is_model_registry_oauth dependency that was flagged in multiple past review comments. The implementation correctly extracts the OAuth proxy setting from request parameters with a sensible default.

Signed-off-by: lugi0 <lgiorgi@redhat.com>
@lugi0 lugi0 requested a review from dbasunag June 25, 2025 10:04
Copy link
Copy Markdown
Contributor

@fege fege left a comment

Choose a reason for hiding this comment

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

/lgtm

@dbasunag
Copy link
Copy Markdown
Collaborator

/build-push-pr-image

@github-actions
Copy link
Copy Markdown

Status of building tag pr-371: success.
Status of pushing tag pr-371 to image registry: success.

@lugi0 lugi0 merged commit 379baff into opendatahub-io:main Jun 25, 2025
10 checks passed
@github-actions
Copy link
Copy Markdown

Status of building tag latest: success.
Status of pushing tag latest to image registry: success.

@coderabbitai coderabbitai bot mentioned this pull request Aug 5, 2025
3 tasks
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.

4 participants