33import logging
44import os
55import random
6- import uuid
76from functools import partial
87
98import databricks .sdk .core
109import pytest
11- from _pytest .fixtures import SubRequest
1210from databricks .sdk import AccountClient , WorkspaceClient
1311from databricks .sdk .core import Config , DatabricksError
1412from databricks .sdk .service .compute import (
4644 EnvironmentInfo ,
4745 InstanceProfile ,
4846 WorkspaceObjects ,
49- _cleanup_groups ,
50- _create_groups ,
5147 _get_basic_job_cluster ,
5248 _get_basic_task ,
5349 _set_random_permissions ,
@@ -220,48 +216,30 @@ def test_table_fixture(make_table):
220216 logger .info (f'Created new view in new schema: { make_table (view = True , ctas = "SELECT 2+2 AS four" )} ' )
221217
222218
223- @pytest .fixture (scope = "session" )
224- def env (ws : WorkspaceClient , acc : AccountClient , request : SubRequest ) -> EnvironmentInfo :
225- # prepare environment
226- test_uid = f"{ UCX_TESTING_PREFIX } _{ str (uuid .uuid4 ())[:8 ]} "
227- logger .debug (f"Creating environment with uid { test_uid } " )
228- groups = _create_groups (ws , acc , test_uid , NUM_TEST_GROUPS , Threader )
229-
230- def post_cleanup ():
231- print ("\n " )
232- logger .debug ("Cleaning up the environment" )
233- logger .debug ("Deleting test groups" )
234- cleanups = [partial (_cleanup_groups , ws , acc , g ) for g in groups ]
235-
236- def error_silencer (func ):
237- def _wrapped (* args , ** kwargs ):
238- try :
239- func (* args , ** kwargs )
240- except Exception as e :
241- logger .warning (f"Cannot delete temp group, skipping it. Original exception { e } " )
242-
243- return _wrapped
244-
245- silent_delete = error_silencer (ws .groups .delete )
246-
247- temp_cleanups = [
248- # TODO: this is too heavy for SCIM API, refactor to ID lookup
249- partial (silent_delete , g .id )
250- for g in ws .groups .list (filter = f"displayName sw 'db-temp-{ test_uid } '" )
251- ]
252- new_ws_groups_cleanups = [
253- partial (silent_delete , g .id ) for g in ws .groups .list (filter = f"displayName sw '{ test_uid } '" )
254- ]
219+ @pytest .fixture
220+ def user_pool (ws ):
221+ return list (ws .users .list (filter = "displayName sw 'test-user-'" , attributes = "id, userName, displayName" ))
255222
256- all_cleanups = cleanups + temp_cleanups + new_ws_groups_cleanups
257- Threader (all_cleanups ).run ()
258- logger .debug (f"Finished cleanup for the environment { test_uid } " )
259223
260- request .addfinalizer (post_cleanup )
261- yield EnvironmentInfo (test_uid = test_uid , groups = groups )
224+ @pytest .fixture
225+ def make_ucx_group (make_random , make_group , make_acc_group , user_pool ):
226+ def inner ():
227+ display_name = f"ucx_{ make_random (4 )} "
228+ members = [_ .id for _ in random .choices (user_pool , k = random .randint (1 , 40 ))]
229+ ws_group = make_group (display_name = display_name , members = members , entitlements = ["allow-cluster-create" ])
230+ acc_group = make_acc_group (display_name = display_name , members = members )
231+ return ws_group , acc_group
262232
233+ return inner
263234
264- @pytest .fixture (scope = "session" )
235+
236+ @pytest .fixture
237+ def env (make_ucx_group , make_random ) -> EnvironmentInfo :
238+ test_uid = f"ucx_{ make_random (4 )} "
239+ yield EnvironmentInfo (test_uid = test_uid , groups = [make_ucx_group ()])
240+
241+
242+ @pytest .fixture
265243def instance_profiles (env : EnvironmentInfo , ws : WorkspaceClient ) -> list [InstanceProfile ]:
266244 logger .debug ("Adding test instance profiles" )
267245 profiles : list [InstanceProfile ] = []
@@ -295,7 +273,7 @@ def instance_profiles(env: EnvironmentInfo, ws: WorkspaceClient) -> list[Instanc
295273 logger .debug ("Test instance profiles deleted" )
296274
297275
298- @pytest .fixture ( scope = "session" )
276+ @pytest .fixture
299277def instance_pools (env : EnvironmentInfo , ws : WorkspaceClient ) -> list [CreateInstancePoolResponse ]:
300278 logger .debug ("Creating test instance pools" )
301279
@@ -320,7 +298,7 @@ def instance_pools(env: EnvironmentInfo, ws: WorkspaceClient) -> list[CreateInst
320298 Threader (executables ).run ()
321299
322300
323- @pytest .fixture ( scope = "session" )
301+ @pytest .fixture
324302def pipelines (env : EnvironmentInfo , ws : WorkspaceClient ) -> list [CreatePipelineResponse ]:
325303 logger .debug ("Creating test DLT pipelines" )
326304
@@ -350,7 +328,7 @@ def pipelines(env: EnvironmentInfo, ws: WorkspaceClient) -> list[CreatePipelineR
350328 Threader (executables ).run ()
351329
352330
353- @pytest .fixture ( scope = "session" )
331+ @pytest .fixture
354332def jobs (env : EnvironmentInfo , ws : WorkspaceClient ) -> list [CreateResponse ]:
355333 logger .debug ("Creating test jobs" )
356334
@@ -377,7 +355,7 @@ def jobs(env: EnvironmentInfo, ws: WorkspaceClient) -> list[CreateResponse]:
377355 Threader (executables ).run ()
378356
379357
380- @pytest .fixture ( scope = "session" )
358+ @pytest .fixture
381359def cluster_policies (env : EnvironmentInfo , ws : WorkspaceClient ) -> list [CreatePolicyResponse ]:
382360 logger .debug ("Creating test cluster policies" )
383361
@@ -412,7 +390,7 @@ def cluster_policies(env: EnvironmentInfo, ws: WorkspaceClient) -> list[CreatePo
412390 Threader (executables ).run ()
413391
414392
415- @pytest .fixture ( scope = "session" )
393+ @pytest .fixture
416394def clusters (env : EnvironmentInfo , ws : WorkspaceClient ) -> list [ClusterDetails ]:
417395 logger .debug ("Creating test clusters" )
418396
@@ -447,7 +425,7 @@ def clusters(env: EnvironmentInfo, ws: WorkspaceClient) -> list[ClusterDetails]:
447425 logger .debug ("Test clusters deleted" )
448426
449427
450- @pytest .fixture ( scope = "session" )
428+ @pytest .fixture
451429def experiments (ws : WorkspaceClient , env : EnvironmentInfo ) -> list [CreateExperimentResponse ]:
452430 logger .debug ("Creating test experiments" )
453431
@@ -480,7 +458,7 @@ def experiments(ws: WorkspaceClient, env: EnvironmentInfo) -> list[CreateExperim
480458 logger .debug ("Test experiments deleted" )
481459
482460
483- @pytest .fixture ( scope = "session" )
461+ @pytest .fixture
484462def models (ws : WorkspaceClient , env : EnvironmentInfo ) -> list [ModelDatabricks ]:
485463 logger .debug ("Creating models" )
486464
@@ -513,7 +491,7 @@ def models(ws: WorkspaceClient, env: EnvironmentInfo) -> list[ModelDatabricks]:
513491 logger .debug ("Test models deleted" )
514492
515493
516- @pytest .fixture ( scope = "session" )
494+ @pytest .fixture
517495def warehouses (ws : WorkspaceClient , env : EnvironmentInfo ) -> list [GetWarehouseResponse ]:
518496 logger .debug ("Creating warehouses" )
519497
@@ -548,13 +526,13 @@ def warehouses(ws: WorkspaceClient, env: EnvironmentInfo) -> list[GetWarehouseRe
548526 logger .debug ("Test warehouses deleted" )
549527
550528
551- @pytest .fixture ( scope = "session" )
529+ @pytest .fixture
552530def tokens (ws : WorkspaceClient , env : EnvironmentInfo ) -> list [AccessControlRequest ]:
553531 logger .debug ("Adding token-level permissions to groups" )
554532
555533 token_permissions = [
556534 AccessControlRequest (group_name = ws_group .display_name , permission_level = PermissionLevel .CAN_USE )
557- for ws_group , _ in random .sample (env .groups , k = NUM_TEST_TOKENS )
535+ for ws_group , _ in random .sample (env .groups , k = min ( len ( env . groups ), NUM_TEST_TOKENS ) )
558536 ]
559537
560538 ws .permissions .update (
@@ -566,7 +544,7 @@ def tokens(ws: WorkspaceClient, env: EnvironmentInfo) -> list[AccessControlReque
566544 yield token_permissions
567545
568546
569- @pytest .fixture ( scope = "session" )
547+ @pytest .fixture
570548def secret_scopes (ws : WorkspaceClient , env : EnvironmentInfo ) -> list [SecretScope ]:
571549 logger .debug ("Creating test secret scopes" )
572550
@@ -587,7 +565,7 @@ def secret_scopes(ws: WorkspaceClient, env: EnvironmentInfo) -> list[SecretScope
587565 Threader (executables ).run ()
588566
589567
590- @pytest .fixture ( scope = "session" )
568+ @pytest .fixture
591569def workspace_objects (ws : WorkspaceClient , env : EnvironmentInfo ) -> WorkspaceObjects :
592570 logger .info (f"Creating test workspace objects under /{ env .test_uid } " )
593571 ws .workspace .mkdirs (f"/{ env .test_uid } " )
@@ -642,7 +620,7 @@ def workspace_objects(ws: WorkspaceClient, env: EnvironmentInfo) -> WorkspaceObj
642620 logger .debug ("Test workspace objects deleted" )
643621
644622
645- @pytest .fixture ( scope = "session" )
623+ @pytest .fixture
646624def verifiable_objects (
647625 clusters ,
648626 instance_pools ,
0 commit comments