@@ -50,6 +50,12 @@ def test_prepare_environment_no_groups_selected(ws, make_ucx_group, sql_backend,
5050 assert ws_group .display_name in names
5151
5252
53+ # group rename is eventually consistent
54+ @retried (on = [AssertionError ], timeout = timedelta (minutes = 1 ))
55+ def check_group_renamed (ws , ws_group ):
56+ assert ws .groups .get (ws_group .id ).display_name == "ucx-temp-" + ws_group .display_name
57+
58+
5359@retried (on = [NotFound ], timeout = timedelta (minutes = 2 ))
5460def test_rename_groups (ws , make_ucx_group , sql_backend , inventory_schema ):
5561 # FIXME - test_rename_groups - TimeoutError: Timed out after 0:01:00
@@ -58,7 +64,7 @@ def test_rename_groups(ws, make_ucx_group, sql_backend, inventory_schema):
5864 group_manager = GroupManager (sql_backend , ws , inventory_schema , [ws_group .display_name ], "ucx-temp-" )
5965 group_manager .rename_groups ()
6066
61- assert ws . groups . get ( ws_group . id ). display_name == "ucx-temp-" + ws_group . display_name
67+ check_group_renamed ( ws , ws_group )
6268
6369
6470@retried (on = [NotFound ], timeout = timedelta (minutes = 2 ))
@@ -87,9 +93,8 @@ def test_reflect_account_groups_on_workspace(ws, make_ucx_group, sql_backend, in
8793 assert not reflected_group .roles # Cannot create roles currently
8894 assert not reflected_group .entitlements # Entitlements aren't reflected there
8995
90- assert (
91- ws .groups .get (ws_group .id ).display_name == "ucx-temp-" + ws_group .display_name
92- ) # At this time previous ws level groups aren't deleted
96+ check_group_renamed (ws , ws_group )
97+ # At this time previous ws level groups aren't deleted
9398
9499
95100@retried (on = [NotFound ], timeout = timedelta (minutes = 2 ))
@@ -124,127 +129,70 @@ def test_delete_ws_groups_should_not_delete_non_reflected_acc_groups(ws, make_uc
124129 group_manager .rename_groups ()
125130 group_manager .delete_original_workspace_groups ()
126131
127- assert ws . groups . get ( ws_group . id ). display_name == "ucx-temp-" + ws_group . display_name
132+ check_group_renamed ( ws , ws_group )
128133
129134
130135def validate_migrate_groups (group_manager : GroupManager , ws_group : Group , to_group : Group ):
131- assert group_manager .has_workspace_group (ws_group .display_name ), f'missing workspace group: { ws_group .display_name } '
136+ if not group_manager .has_workspace_group (ws_group .display_name ):
137+ raise NotFound (f'missing workspace group: { ws_group .display_name } ' )
132138 group_manager .rename_groups ()
133- assert group_manager .has_workspace_group (f"ucx-temp-{ ws_group .display_name } " ), 'missing temp group'
139+ if not group_manager .has_workspace_group (f"ucx-temp-{ ws_group .display_name } " ):
140+ raise NotFound ('missing temp group' )
134141 group_manager .reflect_account_groups_on_workspace ()
135- assert group_manager .has_account_group (to_group .display_name ), f'missing account group: { to_group .display_name } '
136-
137-
138- @retried (on = [NotFound ], timeout = timedelta (minutes = 2 ))
139- def test_group_name_change_prefix (ws , sql_backend , inventory_schema , make_ucx_group , make_random ):
140- ws_display_name = f"ucx_{ make_random (4 )} "
141- ws_group , accnt_group = make_ucx_group (
142- workspace_group_name = ws_display_name , account_group_name = f"SAMPLE_{ ws_display_name } "
143- )
144- logger .info (
145- f"Attempting Mapping From Workspace Group { ws_group .display_name } to "
146- f"Account Group { accnt_group .display_name } "
147- )
148- group_manager = GroupManager (
149- sql_backend , ws , inventory_schema , [ws_group .display_name ], "ucx-temp-" , "^" , "SAMPLE_"
150- )
151- validate_migrate_groups (group_manager , ws_group , accnt_group )
142+ if not group_manager .has_account_group (to_group .display_name ):
143+ raise NotFound (f'missing account group: { to_group .display_name } ' )
152144
153145
154146@retried (on = [NotFound ], timeout = timedelta (minutes = 2 ))
155- def test_group_name_change_suffix (ws , sql_backend , inventory_schema , make_ucx_group , make_random ):
156- ws_display_name = f"ucx_{ make_random (4 )} "
157- ws_group , accnt_group = make_ucx_group (
158- workspace_group_name = ws_display_name , account_group_name = f"{ ws_display_name } _SAMPLE"
159- )
160- logger .info (
161- f"Attempting Mapping From Workspace Group { ws_group .display_name } to "
162- f"Account Group { accnt_group .display_name } "
163- )
164- group_manager = GroupManager (
165- sql_backend , ws , inventory_schema , [ws_group .display_name ], "ucx-temp-" , "$" , "_SAMPLE"
166- )
167- validate_migrate_groups (group_manager , ws_group , accnt_group )
168-
169-
170- @retried (on = [NotFound ], timeout = timedelta (minutes = 2 ))
171- def test_group_name_change_substitute (ws , sql_backend , inventory_schema , make_ucx_group , make_random ):
172- random_elem = f"{ make_random (4 )} "
173- ws_display_name = f"ucx_engineering_{ random_elem } "
174- acct_display_name = f"ucx_eng_{ random_elem } "
175- ws_group , accnt_group = make_ucx_group (workspace_group_name = ws_display_name , account_group_name = acct_display_name )
176- logger .info (
177- f"Attempting Mapping From Workspace Group { ws_group .display_name } to "
178- f"Account Group { accnt_group .display_name } "
179- )
180- group_manager = GroupManager (
181- sql_backend , ws , inventory_schema , [ws_group .display_name ], "ucx-temp-" , "engineering" , "eng"
182- )
183- validate_migrate_groups (group_manager , ws_group , accnt_group )
184-
185-
186- @retried (on = [NotFound ], timeout = timedelta (minutes = 2 ))
187- def test_group_matching_names (ws , sql_backend , inventory_schema , make_ucx_group , make_random ):
188- rand_elem = make_random (4 )
189- ws_group , accnt_group = make_ucx_group (f"test_group_{ rand_elem } " , f"same_group_[{ rand_elem } ]" )
190- logger .info (
191- f"Attempting Mapping From Workspace Group { ws_group .display_name } to "
192- f"Account Group { accnt_group .display_name } "
193- )
147+ @pytest .mark .parametrize ("strategy" , ["prefix" , "suffix" , "substitute" , "matching" ])
148+ def test_group_name_change (ws , sql_backend , inventory_schema , make_ucx_group , make_random , strategy ):
149+ random_element = f"ucx{ make_random (4 )} "
150+ ws_group , account_group = None , None
151+ workspace_group_regex , workspace_group_replace , account_group_regex = None , None , None
152+ match strategy :
153+ case "prefix" :
154+ ws_group , account_group = make_ucx_group (random_element , f"SAMPLE_{ random_element } " )
155+ workspace_group_regex , workspace_group_replace = "^" , "SAMPLE_"
156+ case "suffix" :
157+ ws_group , account_group = make_ucx_group (random_element , f"{ random_element } _SAMPLE" )
158+ workspace_group_regex , workspace_group_replace = "$" , "_SAMPLE"
159+ case "substitute" :
160+ ws_group , account_group = make_ucx_group (f"ucx_engineering_{ random_element } " , f"ucx_eng_{ random_element } " )
161+ workspace_group_regex , workspace_group_replace = "engineering" , "eng"
162+ case "matching" :
163+ ws_group , account_group = make_ucx_group (f"test_group_{ random_element } " , f"same_group_[{ random_element } ]" )
164+ workspace_group_regex , account_group_regex = r"([0-9a-zA-Z]*)$" , r"\[([0-9a-zA-Z]*)\]"
194165 group_manager = GroupManager (
195166 sql_backend ,
196167 ws ,
197168 inventory_schema ,
198169 [ws_group .display_name ],
199170 "ucx-temp-" ,
200- workspace_group_regex = r"([0-9a-zA-Z]*)$" ,
201- account_group_regex = r"\[([0-9a-zA-Z]*)\]" ,
171+ workspace_group_regex ,
172+ workspace_group_replace ,
173+ account_group_regex ,
202174 )
203- validate_migrate_groups (group_manager , ws_group , accnt_group )
204-
205-
206- @retried (on = [NotFound ], timeout = timedelta (minutes = 2 ))
207- def test_group_matching_names_with_diff_users (
208- ws , sql_backend , inventory_schema , make_random , make_user , make_group , make_acc_group
209- ):
210- rand_elem = make_random (4 )
211- workspace_group_name = f"test_group_{ rand_elem } "
212- account_group_name = f"same_group_[{ rand_elem } ]"
213- user1 = make_user ()
214- user2 = make_user ()
215- members1 = [user1 .id ]
216- members2 = [user2 .id ]
217- ws_group = make_group (display_name = workspace_group_name , members = members1 , entitlements = ["allow-cluster-create" ])
218- accnt_group = make_acc_group (display_name = account_group_name , members = members2 )
219-
220175 logger .info (
221176 f"Attempting Mapping From Workspace Group { ws_group .display_name } to "
222- f"Account Group { accnt_group .display_name } "
177+ f"Account Group { account_group .display_name } "
223178 )
224- group_manager = GroupManager (
225- sql_backend ,
226- ws ,
227- inventory_schema ,
228- [ws_group .display_name ],
229- "ucx-temp-" ,
230- workspace_group_regex = r"([0-9a-zA-Z]*)$" ,
231- account_group_regex = r"\[([0-9a-zA-Z]*)\]" ,
232- )
233-
234- membership = group_manager .validate_group_membership ()
235- assert len (membership ) > 0
179+ validate_migrate_groups (group_manager , ws_group , account_group )
236180
237181
238182@retried (on = [NotFound ], timeout = timedelta (minutes = 2 ))
239- def test_group_matching_names_with_same_users (
240- ws , sql_backend , inventory_schema , make_random , make_user , make_group , make_acc_group
183+ @pytest .mark .parametrize ("same_user" , [True , False ])
184+ def test_group_matching_names (
185+ ws , sql_backend , inventory_schema , make_random , make_user , make_group , make_acc_group , same_user
241186):
242187 rand_elem = make_random (4 )
243188 workspace_group_name = f"test_group_{ rand_elem } "
244189 account_group_name = f"same_group_[{ rand_elem } ]"
245190 user1 = make_user ()
246191 members1 = [user1 .id ]
247192 members2 = [user1 .id ]
193+ if not same_user :
194+ user2 = make_user ()
195+ members2 = [user2 .id ]
248196 ws_group = make_group (display_name = workspace_group_name , members = members1 , entitlements = ["allow-cluster-create" ])
249197 acc_group = make_acc_group (display_name = account_group_name , members = members2 )
250198
@@ -257,12 +205,16 @@ def test_group_matching_names_with_same_users(
257205 inventory_schema ,
258206 [ws_group .display_name ],
259207 "ucx-temp-" ,
260- workspace_group_regex = r"([0-9a-zA-Z]*)$" ,
261- account_group_regex = r"\[([0-9a-zA-Z]*)\]" ,
208+ r"([0-9a-zA-Z]*)$" ,
209+ None ,
210+ r"\[([0-9a-zA-Z]*)\]" ,
262211 )
263212
264213 membership = group_manager .validate_group_membership ()
265- assert len (membership ) == 0
214+ if same_user :
215+ assert len (membership ) == 0
216+ else :
217+ assert len (membership ) > 0
266218
267219
268220# average runtime is 100 seconds
0 commit comments