Skip to content

Commit e069fc7

Browse files
fregataaclaude
andcommitted
fix(BA-3692): Fix unit tests for updated RBAC action signatures
- Add _project_id to CreateModelServiceAction/Result test data - Replace success field with route_id/service_id in ActionResult assertions - Add shared conftest with mock_action_validators fixture - Replace MagicMock(spec=ActionValidators) with real dataclass instances (MagicMock spec doesn't expose dataclass instance fields) - Add python_test_utils to BUILD for conftest.py Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent bb80cda commit e069fc7

16 files changed

Lines changed: 69 additions & 21 deletions
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
11
python_tests(
22
name="tests",
33
)
4+
5+
python_test_utils(
6+
name="testutils",
7+
)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from unittest.mock import MagicMock
2+
3+
import pytest
4+
5+
from ai.backend.manager.actions.validators import ActionValidators
6+
from ai.backend.manager.actions.validators.rbac import RBACValidators
7+
from ai.backend.manager.actions.validators.rbac.scope import ScopeActionRBACValidator
8+
from ai.backend.manager.actions.validators.rbac.single_entity import (
9+
SingleEntityActionRBACValidator,
10+
)
11+
12+
13+
@pytest.fixture
14+
def mock_action_validators() -> ActionValidators:
15+
return ActionValidators(
16+
rbac=RBACValidators(
17+
scope=MagicMock(spec=ScopeActionRBACValidator),
18+
single_entity=MagicMock(spec=SingleEntityActionRBACValidator),
19+
),
20+
)

tests/unit/manager/services/model_serving/actions/test_create_auto_scaling_rule.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,12 @@ def auto_scaling_processors(
7474
self,
7575
mock_action_monitor: MagicMock,
7676
auto_scaling_service: AutoScalingService,
77+
mock_action_validators: ActionValidators,
7778
) -> ModelServingAutoScalingProcessors:
7879
return ModelServingAutoScalingProcessors(
7980
service=auto_scaling_service,
8081
action_monitors=[mock_action_monitor],
81-
validators=MagicMock(spec=ActionValidators),
82+
validators=mock_action_validators,
8283
)
8384

8485
@pytest.fixture

tests/unit/manager/services/model_serving/actions/test_create_model_service.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,11 +234,12 @@ def model_serving_processors(
234234
self,
235235
mock_action_monitor: MagicMock,
236236
model_serving_service: ModelServingService,
237+
mock_action_validators: ActionValidators,
237238
) -> ModelServingProcessors:
238239
return ModelServingProcessors(
239240
service=model_serving_service,
240241
action_monitors=[mock_action_monitor],
241-
validators=MagicMock(spec=ActionValidators),
242+
validators=mock_action_validators,
242243
)
243244

244245
@pytest.fixture
@@ -379,6 +380,7 @@ def mock_create_endpoint_validated(self, mocker: Any, mock_repositories: Any) ->
379380
extra_mounts=[],
380381
),
381382
),
383+
_project_id=uuid.UUID("00000000-0000-0000-0000-000000000002"),
382384
),
383385
CreateModelServiceActionResult(
384386
data=ServiceInfo(
@@ -394,6 +396,7 @@ def mock_create_endpoint_validated(self, mocker: Any, mock_repositories: Any) ->
394396
is_public=False,
395397
runtime_variant=RuntimeVariant.CUSTOM,
396398
),
399+
_project_id=uuid.UUID("00000000-0000-0000-0000-000000000002"),
397400
),
398401
),
399402
ScenarioBase.failure(
@@ -436,6 +439,7 @@ def mock_create_endpoint_validated(self, mocker: Any, mock_repositories: Any) ->
436439
extra_mounts=[],
437440
),
438441
),
442+
_project_id=uuid.UUID("00000000-0000-0000-0000-000000000002"),
439443
),
440444
Exception, # insufficient resources
441445
),
@@ -479,6 +483,7 @@ def mock_create_endpoint_validated(self, mocker: Any, mock_repositories: Any) ->
479483
extra_mounts=[],
480484
),
481485
),
486+
_project_id=uuid.UUID("00000000-0000-0000-0000-000000000002"),
482487
),
483488
InvalidAPIParameters,
484489
),
@@ -522,6 +527,7 @@ def mock_create_endpoint_validated(self, mocker: Any, mock_repositories: Any) ->
522527
extra_mounts=[],
523528
),
524529
),
530+
_project_id=uuid.UUID("00000000-0000-0000-0000-000000000002"),
525531
),
526532
CreateModelServiceActionResult(
527533
data=ServiceInfo(
@@ -537,6 +543,7 @@ def mock_create_endpoint_validated(self, mocker: Any, mock_repositories: Any) ->
537543
is_public=True,
538544
runtime_variant=RuntimeVariant.CUSTOM,
539545
),
546+
_project_id=uuid.UUID("00000000-0000-0000-0000-000000000002"),
540547
),
541548
),
542549
],
@@ -735,11 +742,12 @@ def model_serving_processors(
735742
self,
736743
mock_action_monitor: MagicMock,
737744
model_serving_service: ModelServingService,
745+
mock_action_validators: ActionValidators,
738746
) -> ModelServingProcessors:
739747
return ModelServingProcessors(
740748
service=model_serving_service,
741749
action_monitors=[mock_action_monitor],
742-
validators=MagicMock(spec=ActionValidators),
750+
validators=mock_action_validators,
743751
)
744752

745753
@pytest.fixture
@@ -841,6 +849,7 @@ def action_with_api_request_values(self) -> CreateModelServiceAction:
841849
extra_mounts=[],
842850
),
843851
),
852+
_project_id=uuid.UUID("00000000-0000-0000-0000-000000000002"),
844853
)
845854

846855
async def test_service_definition_overrides_applied(

tests/unit/manager/services/model_serving/actions/test_delete_auto_scaling_rule.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,12 @@ def auto_scaling_processors(
6969
self,
7070
mock_action_monitor: MagicMock,
7171
auto_scaling_service: AutoScalingService,
72+
mock_action_validators: ActionValidators,
7273
) -> ModelServingAutoScalingProcessors:
7374
return ModelServingAutoScalingProcessors(
7475
service=auto_scaling_service,
7576
action_monitors=[mock_action_monitor],
76-
validators=MagicMock(spec=ActionValidators),
77+
validators=mock_action_validators,
7778
)
7879

7980
@pytest.fixture

tests/unit/manager/services/model_serving/actions/test_delete_model_service.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,11 +158,12 @@ def model_serving_processors(
158158
self,
159159
mock_action_monitor: MagicMock,
160160
model_serving_service: ModelServingService,
161+
mock_action_validators: ActionValidators,
161162
) -> ModelServingProcessors:
162163
return ModelServingProcessors(
163164
service=model_serving_service,
164165
action_monitors=[mock_action_monitor],
165-
validators=MagicMock(spec=ActionValidators),
166+
validators=mock_action_validators,
166167
)
167168

168169
@pytest.fixture
@@ -222,7 +223,7 @@ def mock_check_user_access(self, mocker: Any, model_serving_service: Any) -> Asy
222223
service_id=uuid.UUID("cccccccc-dddd-eeee-ffff-111111111111"),
223224
),
224225
DeleteModelServiceActionResult(
225-
success=True,
226+
service_id=uuid.UUID("cccccccc-dddd-eeee-ffff-111111111111"),
226227
),
227228
),
228229
ScenarioBase.failure(

tests/unit/manager/services/model_serving/actions/test_dry_run_model_service.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,11 +204,12 @@ def model_serving_processors(
204204
self,
205205
mock_action_monitor: MagicMock,
206206
model_serving_service: ModelServingService,
207+
mock_action_validators: ActionValidators,
207208
) -> ModelServingProcessors:
208209
return ModelServingProcessors(
209210
service=model_serving_service,
210211
action_monitors=[mock_action_monitor],
211-
validators=MagicMock(spec=ActionValidators),
212+
validators=mock_action_validators,
212213
)
213214

214215
@pytest.fixture
@@ -694,11 +695,12 @@ def model_serving_processors(
694695
self,
695696
mock_action_monitor: MagicMock,
696697
model_serving_service: ModelServingService,
698+
mock_action_validators: ActionValidators,
697699
) -> ModelServingProcessors:
698700
return ModelServingProcessors(
699701
service=model_serving_service,
700702
action_monitors=[mock_action_monitor],
701-
validators=MagicMock(spec=ActionValidators),
703+
validators=mock_action_validators,
702704
)
703705

704706
@pytest.fixture
@@ -998,11 +1000,12 @@ def model_serving_processors(
9981000
self,
9991001
mock_action_monitor: MagicMock,
10001002
model_serving_service: ModelServingService,
1003+
mock_action_validators: ActionValidators,
10011004
) -> ModelServingProcessors:
10021005
return ModelServingProcessors(
10031006
service=model_serving_service,
10041007
action_monitors=[mock_action_monitor],
1005-
validators=MagicMock(spec=ActionValidators),
1008+
validators=mock_action_validators,
10061009
)
10071010

10081011
@pytest.fixture

tests/unit/manager/services/model_serving/actions/test_generate_token.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,11 +161,12 @@ def model_serving_processors(
161161
self,
162162
mock_action_monitor: MagicMock,
163163
model_serving_service: ModelServingService,
164+
mock_action_validators: ActionValidators,
164165
) -> ModelServingProcessors:
165166
return ModelServingProcessors(
166167
service=model_serving_service,
167168
action_monitors=[mock_action_monitor],
168-
validators=MagicMock(spec=ActionValidators),
169+
validators=mock_action_validators,
169170
)
170171

171172
@pytest.fixture

tests/unit/manager/services/model_serving/actions/test_get_model_service_info.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,11 +160,12 @@ def model_serving_processors(
160160
self,
161161
mock_action_monitor: MagicMock,
162162
model_serving_service: ModelServingService,
163+
mock_action_validators: ActionValidators,
163164
) -> ModelServingProcessors:
164165
return ModelServingProcessors(
165166
service=model_serving_service,
166167
action_monitors=[mock_action_monitor],
167-
validators=MagicMock(spec=ActionValidators),
168+
validators=mock_action_validators,
168169
)
169170

170171
@pytest.fixture

tests/unit/manager/services/model_serving/actions/test_list_errors.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,11 +160,12 @@ def model_serving_processors(
160160
self,
161161
mock_action_monitor: MagicMock,
162162
model_serving_service: ModelServingService,
163+
mock_action_validators: ActionValidators,
163164
) -> ModelServingProcessors:
164165
return ModelServingProcessors(
165166
service=model_serving_service,
166167
action_monitors=[mock_action_monitor],
167-
validators=MagicMock(spec=ActionValidators),
168+
validators=mock_action_validators,
168169
)
169170

170171
@pytest.fixture

0 commit comments

Comments
 (0)