Skip to content

Commit

Permalink
Changed list manipulation. Added 2 tests (for system tables and for w…
Browse files Browse the repository at this point in the history
…orkspace only tables)
  • Loading branch information
FastLee committed Oct 3, 2023
1 parent d4b60a1 commit f9c7516
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 5 deletions.
9 changes: 4 additions & 5 deletions src/databricks/labs/ucx/workspace_access/groups.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,35 +161,34 @@ def prepare_groups_in_environment(self):
"exist and are of the correct type. If some temporary groups are missing, they'll be created"
)
group_names = self.config.selected
valid_group_names = []
if group_names:
logger.info("Using the provided group listing")

for g in group_names:
if g in self.SYSTEM_GROUPS:
logger.info(f"Cannot migrate system group {g}. {g} will be skipped.")
group_names.remove(g)
continue
if not self._get_group(g, "workspace"):
logger.info(f"Group {g} not found on the workspace level. {g} will be skipped.")
group_names.remove(g)
continue
if not self._get_group(g, "account"):
logger.info(
f"Group {g} not found on the account level. {g} will be skipped. You can add {g} "
f"to the account and rerun the job."
)
group_names.remove(g)
continue
valid_group_names.append(g)
else:
logger.info(
"No group listing provided, all available workspace-level groups that have an account-level "
"group with the same name will be used"
)
ws_group_names = {_.display_name for _ in self._workspace_groups}
ac_group_names = {_.display_name for _ in self._account_groups}
group_names = list(ws_group_names.intersection(ac_group_names))
valid_group_names = list(ws_group_names.intersection(ac_group_names))

self._set_migration_groups(group_names)
self._set_migration_groups(valid_group_names)
logger.info("Environment prepared successfully")

@property
Expand Down
38 changes: 38 additions & 0 deletions tests/unit/workspace_access/test_groups.py
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,44 @@ def test_replace_workspace_groups_with_account_groups_should_call_delete_and_do(
)


def test_system_groups():
client = Mock()
test_ws_group = Group(display_name="admins", meta=ResourceMeta(resource_type="WorkspaceGroup"))
test_acc_group = Group(display_name="admins", meta=ResourceMeta(resource_type="Group"))
backup_group_id = "100"
client.groups.list.return_value = [test_ws_group]
client.groups.create.return_value = Group(
display_name="dbr_backup_de", meta=ResourceMeta(resource_type="WorkspaceGroup"), id=backup_group_id
)
client.api_client.do.return_value = {
"Resources": [g.as_dict() for g in [test_acc_group]],
}

group_conf = GroupsConfig(backup_group_prefix="dbr_backup_", selected=["admins"])
manager = GroupManager(client, group_conf)
manager.prepare_groups_in_environment()
assert len(manager._migration_state.groups) == 0


def test_workspace_only_groups():
client = Mock()
test_ws_group = Group(display_name="ws_group", meta=ResourceMeta(resource_type="WorkspaceGroup"))
test_acc_group = Group(display_name="acc_group", meta=ResourceMeta(resource_type="Group"))
backup_group_id = "100"
client.groups.list.return_value = [test_ws_group, test_acc_group]
client.groups.create.return_value = Group(
display_name="dbr_backup_de", meta=ResourceMeta(resource_type="WorkspaceGroup"), id=backup_group_id
)
client.api_client.do.return_value = {
"Resources": [g.as_dict() for g in [test_acc_group]],
}

group_conf = GroupsConfig(backup_group_prefix="dbr_backup_", selected=["ws_group"])
manager = GroupManager(client, group_conf)
manager.prepare_groups_in_environment()
assert len(manager._migration_state.groups) == 0


def test_delete_backup_groups():
client = Mock()

Expand Down

0 comments on commit f9c7516

Please sign in to comment.