|
1 | 1 | import json |
2 | 2 | from datetime import timedelta |
3 | 3 |
|
| 4 | +from databricks.sdk import WorkspaceClient |
4 | 5 | from databricks.sdk.errors import BadRequest, NotFound |
5 | 6 | from databricks.sdk.retries import retried |
6 | 7 | from databricks.sdk.service import iam |
7 | | -from databricks.sdk.service.iam import PermissionLevel |
| 8 | +from databricks.sdk.service.iam import AccessControlRequest, PermissionLevel |
8 | 9 |
|
9 | 10 | from databricks.labs.ucx.workspace_access.base import Permissions |
10 | 11 | from databricks.labs.ucx.workspace_access.generic import ( |
11 | 12 | GenericPermissionsSupport, |
12 | 13 | Listing, |
13 | 14 | WorkspaceListing, |
14 | 15 | experiments_listing, |
| 16 | + feature_store_listing, |
| 17 | + feature_tables_root_page, |
15 | 18 | models_listing, |
| 19 | + models_root_page, |
16 | 20 | tokens_and_passwords, |
17 | 21 | ) |
18 | 22 | from databricks.labs.ucx.workspace_access.groups import MigratedGroup |
@@ -439,3 +443,86 @@ def test_endpoints( |
439 | 443 |
|
440 | 444 | after = generic_permissions.load_as_dict("serving-endpoints", endpoint.response.id) |
441 | 445 | assert after[group_b.display_name] == PermissionLevel.CAN_MANAGE |
| 446 | + |
| 447 | + |
| 448 | +def test_feature_tables(ws: WorkspaceClient, make_feature_table, make_group, make_feature_table_permissions): |
| 449 | + group_a = make_group() |
| 450 | + group_b = make_group() |
| 451 | + feature_table = make_feature_table() |
| 452 | + make_feature_table_permissions( |
| 453 | + object_id=feature_table["id"], |
| 454 | + permission_level=PermissionLevel.CAN_EDIT_METADATA, |
| 455 | + group_name=group_a.display_name, |
| 456 | + ) |
| 457 | + |
| 458 | + generic_permissions = GenericPermissionsSupport( |
| 459 | + ws, [Listing(feature_store_listing(ws), "object_id", "feature-tables")] |
| 460 | + ) |
| 461 | + before = generic_permissions.load_as_dict("feature-tables", feature_table["id"]) |
| 462 | + assert before[group_a.display_name] == PermissionLevel.CAN_EDIT_METADATA |
| 463 | + |
| 464 | + apply_tasks( |
| 465 | + generic_permissions, |
| 466 | + [ |
| 467 | + MigratedGroup.partial_info(group_a, group_b), |
| 468 | + ], |
| 469 | + ) |
| 470 | + |
| 471 | + after = generic_permissions.load_as_dict("feature-tables", feature_table["id"]) |
| 472 | + assert after[group_b.display_name] == PermissionLevel.CAN_EDIT_METADATA |
| 473 | + |
| 474 | + |
| 475 | +def test_feature_store_root_page(ws: WorkspaceClient, make_group): |
| 476 | + group_a = make_group() |
| 477 | + group_b = make_group() |
| 478 | + ws.permissions.update( |
| 479 | + "feature-tables", |
| 480 | + "/root", |
| 481 | + access_control_list=[ |
| 482 | + AccessControlRequest(group_name=group_a.display_name, permission_level=PermissionLevel.CAN_EDIT_METADATA) |
| 483 | + ], |
| 484 | + ) |
| 485 | + |
| 486 | + generic_permissions = GenericPermissionsSupport( |
| 487 | + ws, [Listing(feature_tables_root_page, "object_id", "feature-tables")] |
| 488 | + ) |
| 489 | + before = generic_permissions.load_as_dict("feature-tables", "/root") |
| 490 | + assert before[group_a.display_name] == PermissionLevel.CAN_EDIT_METADATA |
| 491 | + |
| 492 | + apply_tasks( |
| 493 | + generic_permissions, |
| 494 | + [ |
| 495 | + MigratedGroup.partial_info(group_a, group_b), |
| 496 | + ], |
| 497 | + ) |
| 498 | + |
| 499 | + after = generic_permissions.load_as_dict("feature-tables", "/root") |
| 500 | + assert after[group_b.display_name] == PermissionLevel.CAN_EDIT_METADATA |
| 501 | + |
| 502 | + |
| 503 | +def test_models_root_page(ws: WorkspaceClient, make_group): |
| 504 | + group_a = make_group() |
| 505 | + group_b = make_group() |
| 506 | + ws.permissions.update( |
| 507 | + "registered-models", |
| 508 | + "/root", |
| 509 | + access_control_list=[ |
| 510 | + AccessControlRequest( |
| 511 | + group_name=group_a.display_name, permission_level=PermissionLevel.CAN_MANAGE_PRODUCTION_VERSIONS |
| 512 | + ) |
| 513 | + ], |
| 514 | + ) |
| 515 | + |
| 516 | + generic_permissions = GenericPermissionsSupport(ws, [Listing(models_root_page, "object_id", "registered-models")]) |
| 517 | + before = generic_permissions.load_as_dict("registered-models", "/root") |
| 518 | + assert before[group_a.display_name] == PermissionLevel.CAN_MANAGE_PRODUCTION_VERSIONS |
| 519 | + |
| 520 | + apply_tasks( |
| 521 | + generic_permissions, |
| 522 | + [ |
| 523 | + MigratedGroup.partial_info(group_a, group_b), |
| 524 | + ], |
| 525 | + ) |
| 526 | + |
| 527 | + after = generic_permissions.load_as_dict("registered-models", "/root") |
| 528 | + assert after[group_b.display_name] == PermissionLevel.CAN_MANAGE_PRODUCTION_VERSIONS |
0 commit comments