|
1 | 1 | import json |
2 | | -from unittest.mock import MagicMock |
| 2 | +from unittest.mock import MagicMock, create_autospec |
3 | 3 |
|
4 | 4 | import pytest |
5 | 5 | from _pytest.outcomes import fail |
6 | 6 | from databricks.labs.blueprint.parallel import ManyError |
7 | 7 | from databricks.labs.blueprint.tui import MockPrompts |
| 8 | +from databricks.sdk import WorkspaceClient |
8 | 9 | from databricks.sdk.errors import DatabricksError, ResourceDoesNotExist |
9 | 10 | from databricks.sdk.service import iam |
10 | 11 | from databricks.sdk.service.iam import ComplexValue, Group, ResourceMeta |
11 | 12 |
|
| 13 | +from databricks.labs.ucx.framework.crawlers import SqlBackend |
12 | 14 | from databricks.labs.ucx.workspace_access.groups import ( |
13 | 15 | ConfigureGroups, |
14 | 16 | GroupManager, |
@@ -824,3 +826,62 @@ def test_state(): |
824 | 826 | assert not state.get_target_principal("invalid_group_name") |
825 | 827 | assert not state.get_temp_principal("invalid_group_name") |
826 | 828 | assert not state.is_in_scope("invalid_group_name") |
| 829 | + |
| 830 | + |
| 831 | +def test_validate_group_diff_membership(): |
| 832 | + backend = create_autospec(SqlBackend) |
| 833 | + wsclient = create_autospec(WorkspaceClient) |
| 834 | + group = Group( |
| 835 | + id="1", |
| 836 | + external_id="1234", |
| 837 | + display_name="test_(1234)", |
| 838 | + meta=ResourceMeta(resource_type="WorkspaceGroup"), |
| 839 | + members=[ComplexValue(display="test-user-1", value="20"), ComplexValue(display="test-user-2", value="21")], |
| 840 | + roles=[ |
| 841 | + ComplexValue(value="arn:aws:iam::123456789098:instance-profile/ip1"), |
| 842 | + ComplexValue(value="arn:aws:iam::123456789098:instance-profile/ip2"), |
| 843 | + ], |
| 844 | + entitlements=[ComplexValue(value="allow-cluster-create"), ComplexValue(value="allow-instance-pool-create")], |
| 845 | + ) |
| 846 | + wsclient.groups.list.return_value = [group] |
| 847 | + wsclient.groups.get.return_value = group |
| 848 | + account_admins_group = Group(id="1234", external_id="1234", display_name="ac_test_1234") |
| 849 | + wsclient.api_client.do.return_value = { |
| 850 | + "Resources": [g.as_dict() for g in [account_admins_group]], |
| 851 | + } |
| 852 | + grp_membership = GroupManager( |
| 853 | + backend, wsclient, inventory_database="inv", workspace_group_regex=r"\(([1-9]+)\)", account_group_regex="[1-9]+" |
| 854 | + ).validate_group_membership() |
| 855 | + assert grp_membership == [{"wf_group_name": "test_(1234)", "ac_group_name": "ac_test_1234"}] |
| 856 | + |
| 857 | + |
| 858 | +def test_validate_group_same_membership(): |
| 859 | + backend = MockBackend() |
| 860 | + wsclient = MagicMock() |
| 861 | + group = Group( |
| 862 | + id="1", |
| 863 | + external_id="1234", |
| 864 | + display_name="test_(1234)", |
| 865 | + meta=ResourceMeta(resource_type="WorkspaceGroup"), |
| 866 | + members=[ComplexValue(display="test-user-1", value="01"), ComplexValue(display="test-user-2", value="02")], |
| 867 | + roles=[ |
| 868 | + ComplexValue(value="arn:aws:iam::123456789098:instance-profile/test_ip1"), |
| 869 | + ComplexValue(value="arn:aws:iam::123456789098:instance-profile/test_ip2"), |
| 870 | + ], |
| 871 | + entitlements=[ComplexValue(value="allow-cluster-create"), ComplexValue(value="allow-instance-pool-create")], |
| 872 | + ) |
| 873 | + wsclient.groups.list.return_value = [group] |
| 874 | + wsclient.groups.get.return_value = group |
| 875 | + account_admins_group = Group( |
| 876 | + id="1234", |
| 877 | + external_id="1234", |
| 878 | + display_name="ac_test_1234", |
| 879 | + members=[ComplexValue(display="test-user-1", value="01"), ComplexValue(display="test-user-2", value="02")], |
| 880 | + ) |
| 881 | + wsclient.api_client.do.return_value = { |
| 882 | + "Resources": [g.as_dict() for g in [account_admins_group]], |
| 883 | + } |
| 884 | + grp_membership = GroupManager( |
| 885 | + backend, wsclient, inventory_database="inv", workspace_group_regex=r"\(([1-9]+)\)", account_group_regex="[1-9]+" |
| 886 | + ).validate_group_membership() |
| 887 | + assert grp_membership == [] |
0 commit comments