From 6136d2d355e9e4830d2f6458bc6a9ed84d2909ed Mon Sep 17 00:00:00 2001 From: Marcus <marcus@hardt-it.de> Date: Tue, 5 Sep 2023 15:23:51 +0200 Subject: [PATCH] add tests for regex mapping --- tests/userinfo.py | 172 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 170 insertions(+), 2 deletions(-) diff --git a/tests/userinfo.py b/tests/userinfo.py index 91cc524..4586c85 100644 --- a/tests/userinfo.py +++ b/tests/userinfo.py @@ -1,3 +1,4 @@ +# vim: tw=100 foldmethod=expr import pytest from unittest import mock from itertools import repeat @@ -259,6 +260,113 @@ def test_eppn(userinfo, eppn): ], ), (settings.INPUT_EGI, []), + ( + settings.INPUT_EGI_MANYGROUPS, + [ + "egi-eu_covid19-eosc-synergy-eu_admins", + "egi-eu_covid19-eosc-synergy-eu_admins", + "egi-eu_cryoem-instruct-eric-eu_admins", + "egi-eu_cryoem-instruct-eric-eu_admins", + "egi-eu_eosc-synergy-eu_admins", + "egi-eu_eosc-synergy-eu_admins", + "egi-eu_eosc-synergy-eu", + "egi-eu_eosc-synergy-eu", + "egi-eu_goc-egi-eu", + "egi-eu_goc-egi-eu", + "egi-eu_mteam-data-kit-edu_admins", + "egi-eu_mteam-data-kit-edu_admins", + "egi-eu_mteam-data-kit-edu_perfmon-m-d-k-e_admins", + "egi-eu_mteam-data-kit-edu_perfmon-m-d-k-e", + "egi-eu_mteam-data-kit-edu", + "egi-eu_mteam-data-kit-edu", + "egi-eu_o3as-data-kit-edu_admins", + "egi-eu_o3as-data-kit-edu_admins", + "egi-eu_o3as-data-kit-edu", + "egi-eu_o3as-data-kit-edu", + "egi-eu_registry_perfmon", + "egi-eu_registry_perfmon", + "egi-eu_saps-vo-i3m-upv-es_admins", + "egi-eu_saps-vo-i3m-upv-es_admins", + "egi-eu_umsa-cerit-sc-cz_admins", + "egi-eu_umsa-cerit-sc-cz_admins", + "egi-eu_university-eosc-synergy-eu_admins", + "egi-eu_university-eosc-synergy-eu_admins", + "egi-eu_university-eosc-synergy-eu", + "egi-eu_university-eosc-synergy-eu", + "egi-eu_worsica-vo-incd-pt", + "egi-eu_worsica-vo-incd-pt", + ], + ), + (settings.INPUT_DEEP_IAM, ["kit-cloud"]), + (settings.INPUT_INDIGO_IAM, ["users", "developers", "test-vo-users"]), + ( + settings.INPUT_KIT, + [ + "kit-edu_dfn-slcs", + "kit-edu_lsdf-dis", + "kit-edu_bw_grid", + "kit-edu_bw_lsdf-fs", + "kit-edu_bw_uni_cluster", + "kit-edu_bwsyncnshare", + "kit-edu_bwsyncnshare-idm", + "kit-edu_gruppenverwalter", + ], + ), + ], +) +def test_groups_classic(userinfo, groups): + assert sorted(userinfo.groups) == sorted(set(groups)) + + +@pytest.mark.parametrize( + "data,groups", + [ + ( + settings.INPUT_UNITY, + [ + "h-df-de_imk-tro-ewcc", + "h-df-de_my_example_colab", + "h-df-de_wlcg-test", + "h-df-de_hdf", + ], + ), + (settings.INPUT_EGI, []), + ( + settings.INPUT_EGI_MANYGROUPS, + [ + "egi-eu_covid19-eosc-synergy-eu_admins", + "egi-eu_covid19-eosc-synergy-eu_admins", + "egi-eu_cryoem-instruct-eric-eu_admins", + "egi-eu_cryoem-instruct-eric-eu_admins", + "egi-eu_eosc-synergy-eu_admins", + "egi-eu_eosc-synergy-eu_admins", + "egi-eu_eosc-synergy-eu", + "egi-eu_eosc-synergy-eu", + "egi-eu_goc-egi-eu", + "egi-eu_goc-egi-eu", + "egi-eu_mteam-data-kit-edu_admins", + "egi-eu_mteam-data-kit-edu_admins", + "egi-eu_mteam-data-kit-edu_perfmon-m-d-k-e_admins", + "egi-eu_mteam-data-kit-edu_perfmon-m-d-k-e", + "egi-eu_mteam-data-kit-edu", + "egi-eu_mteam-data-kit-edu", + "egi-eu_o3as-data-kit-edu_admins", + "egi-eu_o3as-data-kit-edu_admins", + "egi-eu_o3as-data-kit-edu", + "egi-eu_o3as-data-kit-edu", + "egi-eu_registry_perfmon", + "egi-eu_registry_perfmon", + "egi-eu_saps-vo-i3m-upv-es_admins", + "egi-eu_saps-vo-i3m-upv-es_admins", + "egi-eu_umsa-cerit-sc-cz_admins", + "egi-eu_umsa-cerit-sc-cz_admins", + "egi-eu_university-eosc-synergy-eu_admins", + "egi-eu_university-eosc-synergy-eu", + "egi-eu_university-eosc-synergy-eu", + "egi-eu_worsica-vo-incd-pt", + "egi-eu_worsica-vo-incd-pt", + ], + ), (settings.INPUT_DEEP_IAM, ["kit-cloud"]), (settings.INPUT_INDIGO_IAM, ["users", "developers", "test-vo-users"]), ( @@ -276,10 +384,70 @@ def test_eppn(userinfo, eppn): ), ], ) -def test_groups(userinfo, groups): +def test_groups_regex_1(userinfo, groups, monkeypatch): + monkeypatch.setattr( + "ldf_adapter.backend.local_unix.CONFIG.groups.method", + "regex", + ) + monkeypatch.setattr( + "ldf_adapter.backend.local_unix.CONFIG.groups.map", + r""" + :role=(owner|member|vm_operator) -> # remove all role=member and role=owner entries + :role= -> : # all other roles: map to : + urn:geant:kit.edu:group: -> kit-edu_ + urn:mace:egi.eu:group: -> egi-eu_ + :perfmon -> _perfmon + urn:geant:h-df.de:group: -> h-df-de_ + :admins -> _admins + """, + ) + assert sorted(set(userinfo.groups)) == sorted(set(groups)) assert sorted(userinfo.groups) == sorted(groups) +@pytest.mark.parametrize( + "data,groups", + [ + ( + settings.INPUT_UNITY, + [ + "this-is-a-test", + ], + ), + (settings.INPUT_EGI, []), + ( + settings.INPUT_EGI_MANYGROUPS, + [ + "this-is-a-test", + ], + ), + ( + settings.INPUT_DEEP_IAM, + ["kit-cloud"], + ), # group entries are (currently) not mapped + (settings.INPUT_INDIGO_IAM, ["developers", "test-vo-users", "users"]), + ( + settings.INPUT_KIT, + [ + "this-is-a-test", + ], + ), + ], +) +def test_groups_regex_2(userinfo, groups, monkeypatch): + monkeypatch.setattr( + "ldf_adapter.backend.local_unix.CONFIG.groups.method", + "regex", + ) + monkeypatch.setattr( + "ldf_adapter.backend.local_unix.CONFIG.groups.map", + r""" + ^.* -> this-is-a-test + """, + ) + assert sorted(set(userinfo.groups)) == sorted(set(groups)) + + @mock.patch("ldf_adapter.userinfo.CONFIG.ldf_adapter.fallback_group", "nogroup") @mock.patch("ldf_adapter.userinfo.CONFIG.ldf_adapter.primary_group", "mytestgroup") @pytest.mark.parametrize("data", settings.ALL_INPUT) @@ -299,7 +467,7 @@ def test_primary_group_primary_and_fallback_configured(userinfo): ], ) def test_primary_group_no_fallback_or_primary_configured(userinfo, group): - logger.warning(F"userinfo.primary_group: {userinfo.primary_group} group: {group}") + logger.warning(f"userinfo.primary_group: {userinfo.primary_group} group: {group}") assert userinfo.primary_group == group -- GitLab