Blob Blame History Raw
From bcfbeef0ca7f69ff50f40990e783d58fb9a83d30 Mon Sep 17 00:00:00 2001
From: Florence Blanc-Renaud <flo@redhat.com>
Date: Fri, 26 Jul 2019 15:44:58 +0200
Subject: [PATCH] xmlrpc test: add test for preserved > stage user

When moving a preserved user to the stage area, check that the
custom attributes are not lost ( = the attr for which there is
no specific user_stage option).

Test scenario:
- add a stage user with --setattr "businesscategory=value"
- activate the user, check that businesscategory is still present
- delete (preserve) the user, check that attr is still present
- stage the user, check that attr is still present

Related: https://pagure.io/freeipa/issue/7597
Reviewed-By: Alexander Bokovoy <abokovoy@redhat.com>
Reviewed-By: Rob Crittenden <rcritten@redhat.com>
---
 ipatests/test_xmlrpc/test_stageuser_plugin.py | 64 +++++++++++++++++++
 .../test_xmlrpc/tracker/stageuser_plugin.py   |  5 +-
 2 files changed, 67 insertions(+), 2 deletions(-)

diff --git a/ipatests/test_xmlrpc/test_stageuser_plugin.py b/ipatests/test_xmlrpc/test_stageuser_plugin.py
index 9a869259d06a65722f019a19405baf53c03917e1..cc6a3b1a880acab1ffba06061be6eae229f80237 100644
--- a/ipatests/test_xmlrpc/test_stageuser_plugin.py
+++ b/ipatests/test_xmlrpc/test_stageuser_plugin.py
@@ -128,6 +128,17 @@ def stageduser_notposix(request):
     return tracker.make_fixture(request)
 
 
+@pytest.fixture(scope='class')
+def stageduser_customattr(request):
+    tracker = StageUserTracker(u'customattr', u'customattr', u'customattr',
+                               setattr=u'businesscategory=BusinessCat')
+    tracker.track_create()
+    tracker.attrs.update(
+        businesscategory=[u'BusinessCat']
+    )
+    return tracker.make_fixture(request)
+
+
 @pytest.fixture(scope='class')
 def user(request):
     tracker = UserTracker(u'auser1', u'active', u'user')
@@ -573,6 +584,59 @@ class TestPreserved(XMLRPC_test):
         stageduser.delete()
 
 
+@pytest.mark.tier1
+class TestCustomAttr(XMLRPC_test):
+    """Test for pagure ticket 7597
+
+    When a staged user is activated, preserved and finally staged again,
+    the custom attributes are lost.
+    """
+    def test_stageduser_customattr(self, stageduser_customattr):
+        # Create a staged user with attributes not accessible
+        # through the options
+        # --setattr is needed here
+        command = stageduser_customattr.make_create_command()
+        result = command()
+        stageduser_customattr.check_create(result, [u'businesscategory'])
+
+        # Activate the staged user
+        user_customattr = UserTracker(
+            stageduser_customattr.uid, stageduser_customattr.givenname,
+            stageduser_customattr.sn)
+        user_customattr.create_from_staged(stageduser_customattr)
+        user_customattr.attrs[u'businesscategory'] = [u'BusinessCat']
+
+        command = stageduser_customattr.make_activate_command()
+        result = command()
+        user_customattr.check_activate(result)
+
+        # Check that the user contains businesscategory
+        command = user_customattr.make_retrieve_command(all=True)
+        result = command()
+        assert 'BusinessCat' in result['result'][u'businesscategory']
+
+        # delete the user with --preserve
+        command = user_customattr.make_delete_command(no_preserve=False,
+                                                      preserve=True)
+        result = command()
+        user_customattr.check_delete(result)
+
+        # Check that the preserved user contains businesscategory
+        command = user_customattr.make_retrieve_command(all=True)
+        result = command()
+        assert 'BusinessCat' in result['result'][u'businesscategory']
+
+        # Move the user from preserved to stage
+        command = user_customattr.make_stage_command()
+        result = command()
+        stageduser_customattr.check_restore_preserved(result)
+
+        # Check that the stage user contains businesscategory
+        command = stageduser_customattr.make_retrieve_command(all=True)
+        result = command()
+        assert 'BusinessCat' in result['result'][u'businesscategory']
+
+
 @pytest.mark.tier1
 class TestManagers(XMLRPC_test):
     def test_staged_manager(self, user, stageduser):
diff --git a/ipatests/test_xmlrpc/tracker/stageuser_plugin.py b/ipatests/test_xmlrpc/tracker/stageuser_plugin.py
index c2ab1d35c0b64980eae37f75db081b948c992b00..7609664ab4f3dc3d17b33c9ba4fa855f61a8b106 100644
--- a/ipatests/test_xmlrpc/tracker/stageuser_plugin.py
+++ b/ipatests/test_xmlrpc/tracker/stageuser_plugin.py
@@ -176,12 +176,13 @@ class StageUserTracker(KerberosAliasMixin, Tracker):
 
         self.exists = True
 
-    def check_create(self, result):
+    def check_create(self, result, extra_keys=()):
         """ Check 'stageuser-add' command result """
+        expected = self.filter_attrs(self.create_keys | set(extra_keys))
         assert_deepequal(dict(
             value=self.uid,
             summary=u'Added stage user "%s"' % self.uid,
-            result=self.filter_attrs(self.create_keys),
+            result=self.filter_attrs(expected),
         ), result)
 
     def check_delete(self, result):
-- 
2.20.1