From f35229e7563b8e2b58ab86c4066a447e148a58c2 Mon Sep 17 00:00:00 2001 From: Tanner Prestegard <tanner.prestegard@ligo.org> Date: Wed, 10 Jul 2019 09:40:14 -0500 Subject: [PATCH] ligoauth: add/modify unit tests These tests cover the bugfix in the previous commit. --- gracedb/ligoauth/tests/test_middleware.py | 54 ++++++++++++++++++++--- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/gracedb/ligoauth/tests/test_middleware.py b/gracedb/ligoauth/tests/test_middleware.py index 1a525b991..73e151341 100644 --- a/gracedb/ligoauth/tests/test_middleware.py +++ b/gracedb/ligoauth/tests/test_middleware.py @@ -412,13 +412,15 @@ class TestShibbolethWebAuthMiddleware(GraceDbTestBase): def test_group_addition(self): """Add a group for a user based on shib group header content""" - # Create new group for testing - new_group = AuthGroup.objects.create(name='new_group', + # Create new group which should be managed through the + # LDAP/shib sessions + new_ldap_group = AuthGroup.objects.create(name='new_group', ldap_name='new_ldap_group') - # Compile group header + # Compile group header - add one random additional group name string + other_group_ldap_str = 'other_group' delim = ShibbolethWebAuthMiddleware.group_delimiter groups_str = delim.join([self.internal_group.ldap_name, - new_group.ldap_name]) + new_ldap_group.ldap_name, other_group_ldap_str]) # Set up request request = self.factory.get(self.url) @@ -448,7 +450,7 @@ class TestShibbolethWebAuthMiddleware(GraceDbTestBase): self.assertTrue(self.internal_user.groups.filter( pk=self.internal_group.pk).exists()) self.assertTrue(self.internal_user.groups.filter( - pk=new_group.pk).exists()) + pk=new_ldap_group.pk).exists()) def test_group_removal(self): """Remove a group for a user based on shib group header content""" @@ -490,6 +492,48 @@ class TestShibbolethWebAuthMiddleware(GraceDbTestBase): self.assertFalse(request.user.groups.filter( pk=new_group.pk).exists()) + def test_non_ldap_group_not_removed(self): + """ + A group which is not managed through the LDAP/Shib sessions shouldn't + be modified by this middleware + """ + # Create new group without an ldap_name, add to user + new_group = AuthGroup.objects.create(name='non_ldap_group') + self.internal_user.groups.add(new_group) + + # Set up request + # Shib session doesn't have new_group in it + request = self.factory.get(self.url) + request.META.update(**{ + settings.SHIB_USER_HEADER: self.internal_user.username, + settings.SHIB_GROUPS_HEADER: self.internal_group.ldap_name, + }) + + # Make sure user has both groups initially + self.assertEqual(self.internal_user.groups.count(), 2) + self.assertTrue(self.internal_user.groups.filter( + pk=self.internal_group.pk).exists()) + self.assertTrue(self.internal_user.groups.filter( + pk=new_group.pk).exists()) + + # Necessary pre-processing middleware + SessionMiddleware().process_request(request) + AuthenticationMiddleware().process_request(request) + # Process request + self.mw_instance.process_request(request) + + # Make sure user is authenticated and was authenticated by + # the shibboleth backend and that the group memberships are + # what we expect + self.assertTrue(request.user.is_authenticated) + self.assertEqual(request.user.backend, + 'ligoauth.backends.ShibbolethRemoteUserBackend') + self.assertTrue(self.internal_user.groups.filter( + pk=self.internal_group.pk).exists()) + self.assertTrue(request.user.groups.filter( + pk=new_group.pk).exists()) + self.assertEqual(self.internal_user.groups.count(), 2) + #def test_robotuser_group_addition(self): # """ # Shib group header content is not used to add groups for a robotuser -- GitLab