Skip to content

Commit d87403c

Browse files
authored
Use new fixtures for notebooks and folders (#176)
1 parent c4a6eae commit d87403c

File tree

3 files changed

+38
-101
lines changed

3 files changed

+38
-101
lines changed

src/databricks/labs/ucx/providers/mixins/fixtures.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -483,9 +483,9 @@ def create(
483483
if model_name is None:
484484
model_name = f"sdk-{make_random(4)}"
485485

486-
return ws.model_registry.get_model(
487-
ws.model_registry.create_model(model_name, **kwargs).registered_model.name
488-
).registered_model_databricks
486+
created_model = ws.model_registry.create_model(model_name, **kwargs)
487+
model = ws.model_registry.get_model(created_model.registered_model.name)
488+
return model.registered_model_databricks
489489

490490
yield from factory("model", create, lambda item: ws.model_registry.delete_model(item.id))
491491

tests/integration/conftest.py

Lines changed: 1 addition & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import io
21
import json
32
import logging
43
import os
@@ -9,16 +8,13 @@
98
import pytest
109
from databricks.sdk import AccountClient, WorkspaceClient
1110
from databricks.sdk.core import Config
12-
from databricks.sdk.service.iam import AccessControlRequest, PermissionLevel
13-
from databricks.sdk.service.workspace import ObjectInfo, ObjectType
1411

1512
from databricks.labs.ucx.config import InventoryTable
16-
from databricks.labs.ucx.inventory.types import RequestObjectType
1713
from databricks.labs.ucx.providers.mixins.fixtures import * # noqa: F403
1814
from databricks.labs.ucx.providers.mixins.sql import StatementExecutionExt
1915
from databricks.labs.ucx.utils import ThreadedExecution
2016

21-
from .utils import EnvironmentInfo, InstanceProfile, WorkspaceObjects
17+
from .utils import EnvironmentInfo, InstanceProfile
2218

2319
logging.getLogger("tests").setLevel("DEBUG")
2420
logging.getLogger("databricks.labs.ucx").setLevel("DEBUG")
@@ -234,71 +230,6 @@ def instance_profiles(env: EnvironmentInfo, ws: WorkspaceClient) -> list[Instanc
234230
logger.debug("Test instance profiles deleted")
235231

236232

237-
@pytest.fixture
238-
def workspace_objects(ws: WorkspaceClient, env: EnvironmentInfo) -> WorkspaceObjects:
239-
logger.info(f"Creating test workspace objects under /{env.test_uid}")
240-
ws.workspace.mkdirs(f"/{env.test_uid}")
241-
242-
base_dirs = []
243-
244-
for ws_group, _ in env.groups:
245-
_path = f"/{env.test_uid}/{ws_group.display_name}"
246-
ws.workspace.mkdirs(_path)
247-
object_info = ws.workspace.get_status(_path)
248-
base_dirs.append(object_info)
249-
250-
ws.permissions.set(
251-
request_object_type=RequestObjectType.DIRECTORIES,
252-
request_object_id=object_info.object_id,
253-
access_control_list=[
254-
AccessControlRequest(group_name=ws_group.display_name, permission_level=PermissionLevel.CAN_MANAGE)
255-
],
256-
)
257-
258-
notebooks = []
259-
260-
for nb_idx in range(3):
261-
random_group = random.choice([g[0] for g in env.groups])
262-
_nb_path = f"/{env.test_uid}/{random_group.display_name}/nb-{nb_idx}.py"
263-
ws.workspace.upload(path=_nb_path, content=io.BytesIO(b"print(1)"))
264-
# TODO: add a proper test for this
265-
# if random.choice([True, False]):
266-
# ws.experiments.create_experiment(name=_nb_path) # create experiment to test nb-based experiments
267-
_nb_obj = ws.workspace.get_status(_nb_path)
268-
notebooks.append(_nb_obj)
269-
ws.permissions.set(
270-
request_object_type=RequestObjectType.NOTEBOOKS,
271-
request_object_id=_nb_obj.object_id,
272-
access_control_list=[
273-
AccessControlRequest(group_name=random_group.display_name, permission_level=PermissionLevel.CAN_EDIT)
274-
],
275-
)
276-
277-
yield WorkspaceObjects(
278-
root_dir=ObjectInfo(
279-
path=f"/{env.test_uid}",
280-
object_type=ObjectType.DIRECTORY,
281-
object_id=ws.workspace.get_status(f"/{env.test_uid}").object_id,
282-
),
283-
directories=base_dirs,
284-
notebooks=notebooks,
285-
)
286-
287-
logger.debug("Deleting test workspace objects")
288-
ws.workspace.delete(f"/{env.test_uid}", recursive=True)
289-
logger.debug("Test workspace objects deleted")
290-
291-
292-
@pytest.fixture
293-
def verifiable_objects(
294-
workspace_objects,
295-
) -> list[tuple[list, str, RequestObjectType | None]]:
296-
_verifiable_objects = [
297-
(workspace_objects, "workspace_objects", None),
298-
]
299-
yield _verifiable_objects
300-
301-
302233
@pytest.fixture()
303234
def inventory_table(env: EnvironmentInfo, ws: WorkspaceClient, make_catalog, make_schema) -> InventoryTable:
304235
catalog, schema = make_schema(make_catalog()).split(".")

tests/integration/test_e2e.py

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ def _verify_group_permissions(
3030
objects: list | WorkspaceObjects | None,
3131
id_attribute: str,
3232
request_object_type: RequestObjectType | None,
33-
ws: WorkspaceClient,
3433
toolkit: GroupMigrationToolkit,
3534
target: Literal["backup", "account"],
3635
):
@@ -39,30 +38,7 @@ def _verify_group_permissions(
3938
f"{request_object_type or id_attribute} were applied to {target} groups"
4039
)
4140

42-
if id_attribute == "workspace_objects":
43-
_workspace_objects: WorkspaceObjects = objects
44-
45-
# list of groups that source the permissions
46-
comparison_base = [
47-
getattr(mi, "workspace" if target == "backup" else "backup")
48-
for mi in toolkit.group_manager.migration_groups_provider.groups
49-
]
50-
# list of groups that are the target of the permissions
51-
comparison_target = [getattr(mi, target) for mi in toolkit.group_manager.migration_groups_provider.groups]
52-
53-
root_permissions = ws.permissions.get(
54-
request_object_type=RequestObjectType.DIRECTORIES, request_object_id=_workspace_objects.root_dir.object_id
55-
)
56-
base_group_names = [g.display_name for g in comparison_base]
57-
target_group_names = [g.display_name for g in comparison_target]
58-
59-
base_acls = [a for a in root_permissions.access_control_list if a.group_name in base_group_names]
60-
61-
target_acls = [a for a in root_permissions.access_control_list if a.group_name in target_group_names]
62-
63-
assert len(base_acls) == len(target_acls)
64-
65-
elif id_attribute == "secret_scopes":
41+
if id_attribute == "secret_scopes":
6642
for scope_name in objects:
6743
toolkit.permissions_manager.verify_applied_scope_acls(
6844
scope_name, toolkit.group_manager.migration_groups_provider, target
@@ -97,7 +73,6 @@ def test_e2e(
9773
env: EnvironmentInfo,
9874
inventory_table: InventoryTable,
9975
ws: WorkspaceClient,
100-
verifiable_objects: list[tuple[list, str, RequestObjectType | None]],
10176
make_instance_pool,
10277
make_instance_pool_permissions,
10378
make_cluster,
@@ -110,6 +85,10 @@ def test_e2e(
11085
make_experiment_permissions,
11186
make_job,
11287
make_job_permissions,
88+
make_notebook,
89+
make_notebook_permissions,
90+
make_directory,
91+
make_directory_permissions,
11392
make_pipeline,
11493
make_pipeline_permissions,
11594
make_secret_scope,
@@ -121,6 +100,8 @@ def test_e2e(
121100
logger.debug(f"Test environment: {env.test_uid}")
122101
ws_group = env.groups[0][0]
123102

103+
verifiable_objects = []
104+
124105
pool = make_instance_pool()
125106
make_instance_pool_permissions(
126107
object_id=pool.instance_pool_id,
@@ -180,6 +161,31 @@ def test_e2e(
180161
([experiment], "experiment_id", RequestObjectType.EXPERIMENTS),
181162
)
182163

164+
directory = make_directory()
165+
make_directory_permissions(
166+
object_id=directory,
167+
permission_level=random.choice(
168+
[PermissionLevel.CAN_READ, PermissionLevel.CAN_MANAGE, PermissionLevel.CAN_EDIT, PermissionLevel.CAN_RUN]
169+
),
170+
group_name=ws_group.display_name,
171+
)
172+
173+
verifiable_objects.append(
174+
([ws.workspace.get_status(directory)], "object_id", RequestObjectType.DIRECTORIES),
175+
)
176+
177+
notebook = make_notebook(path=f"{directory}/sample.py")
178+
make_notebook_permissions(
179+
object_id=notebook,
180+
permission_level=random.choice(
181+
[PermissionLevel.CAN_READ, PermissionLevel.CAN_MANAGE, PermissionLevel.CAN_EDIT, PermissionLevel.CAN_RUN]
182+
),
183+
group_name=ws_group.display_name,
184+
)
185+
verifiable_objects.append(
186+
([ws.workspace.get_status(notebook)], "object_id", RequestObjectType.NOTEBOOKS),
187+
)
188+
183189
job = make_job()
184190
make_job_permissions(
185191
object_id=job.job_id,
@@ -255,7 +261,7 @@ def test_e2e(
255261
toolkit.apply_permissions_to_backup_groups()
256262

257263
for _objects, id_attribute, request_object_type in verifiable_objects:
258-
_verify_group_permissions(_objects, id_attribute, request_object_type, ws, toolkit, "backup")
264+
_verify_group_permissions(_objects, id_attribute, request_object_type, toolkit, "backup")
259265

260266
_verify_roles_and_entitlements(group_migration_state, ws, "backup")
261267

@@ -270,7 +276,7 @@ def test_e2e(
270276
toolkit.apply_permissions_to_account_groups()
271277

272278
for _objects, id_attribute, request_object_type in verifiable_objects:
273-
_verify_group_permissions(_objects, id_attribute, request_object_type, ws, toolkit, "account")
279+
_verify_group_permissions(_objects, id_attribute, request_object_type, toolkit, "account")
274280

275281
_verify_roles_and_entitlements(group_migration_state, ws, "account")
276282

0 commit comments

Comments
 (0)