On 20.10.2015 16:07, Martin Basti wrote:
On 20.10.2015 15:57, Martin Basti wrote:
https://fedorahosted.org/freeipa/ticket/5344
Patch attached.
Test are failing, a fix in UserTracker has to be done (partially in
my patch 329)
SelfNACK, I forgot to add stageuser tests
Updated patch attached.
I extracted tests to the separate patch, tests do not work, I had issues
with user and stageuser trackers.
From 250c5d3f2f5e47b19c628115ecd9df8a71d357dc Mon Sep 17 00:00:00 2001
From: Martin Basti <mba...@redhat.com>
Date: Tue, 20 Oct 2015 18:39:57 +0200
Subject: [PATCH] Allow multiple managers per user - CLI part
https://fedorahosted.org/freeipa/ticket/5344
---
API.txt | 12 ++++++------
VERSION | 4 ++--
ipalib/plugins/baseuser.py | 7 +++++--
3 files changed, 13 insertions(+), 10 deletions(-)
diff --git a/API.txt b/API.txt
index 873c6d54221a0c1657b5457bd9dceedb4adf06b3..896df430aaa1952c0fe4af4672b78f1ad11da45e 100644
--- a/API.txt
+++ b/API.txt
@@ -4225,7 +4225,7 @@ option: Str('krbprincipalname', attribute=True, autofill=True, cli_name='princip
option: Str('l', attribute=True, cli_name='city', multivalue=False, required=False)
option: Str('loginshell', attribute=True, cli_name='shell', multivalue=False, required=False)
option: Str('mail', attribute=True, cli_name='email', multivalue=True, required=False)
-option: Str('manager', attribute=True, cli_name='manager', multivalue=False, required=False)
+option: Str('manager', attribute=True, cli_name='manager', multivalue=True, required=False)
option: Str('mobile', attribute=True, cli_name='mobile', multivalue=True, required=False)
option: Flag('no_members', autofill=True, default=False, exclude='webui')
option: Str('ou', attribute=True, cli_name='orgunit', multivalue=False, required=False)
@@ -4285,7 +4285,7 @@ option: Str('krbprincipalname', attribute=True, autofill=False, cli_name='princi
option: Str('l', attribute=True, autofill=False, cli_name='city', multivalue=False, query=True, required=False)
option: Str('loginshell', attribute=True, autofill=False, cli_name='shell', multivalue=False, query=True, required=False)
option: Str('mail', attribute=True, autofill=False, cli_name='email', multivalue=True, query=True, required=False)
-option: Str('manager', attribute=True, autofill=False, cli_name='manager', multivalue=False, query=True, required=False)
+option: Str('manager', attribute=True, autofill=False, cli_name='manager', multivalue=True, query=True, required=False)
option: Str('mobile', attribute=True, autofill=False, cli_name='mobile', multivalue=True, query=True, required=False)
option: Flag('no_members', autofill=True, default=False, exclude='webui')
option: Str('not_in_group*', cli_name='not_in_groups', csv=True)
@@ -4342,7 +4342,7 @@ option: DateTime('krbprincipalexpiration', attribute=True, autofill=False, cli_n
option: Str('l', attribute=True, autofill=False, cli_name='city', multivalue=False, required=False)
option: Str('loginshell', attribute=True, autofill=False, cli_name='shell', multivalue=False, required=False)
option: Str('mail', attribute=True, autofill=False, cli_name='email', multivalue=True, required=False)
-option: Str('manager', attribute=True, autofill=False, cli_name='manager', multivalue=False, required=False)
+option: Str('manager', attribute=True, autofill=False, cli_name='manager', multivalue=True, required=False)
option: Str('mobile', attribute=True, autofill=False, cli_name='mobile', multivalue=True, required=False)
option: Flag('no_members', autofill=True, default=False, exclude='webui')
option: Str('ou', attribute=True, autofill=False, cli_name='orgunit', multivalue=False, required=False)
@@ -5172,7 +5172,7 @@ option: Str('krbprincipalname', attribute=True, autofill=True, cli_name='princip
option: Str('l', attribute=True, cli_name='city', multivalue=False, required=False)
option: Str('loginshell', attribute=True, cli_name='shell', multivalue=False, required=False)
option: Str('mail', attribute=True, cli_name='email', multivalue=True, required=False)
-option: Str('manager', attribute=True, cli_name='manager', multivalue=False, required=False)
+option: Str('manager', attribute=True, cli_name='manager', multivalue=True, required=False)
option: Str('mobile', attribute=True, cli_name='mobile', multivalue=True, required=False)
option: Flag('no_members', autofill=True, default=False, exclude='webui')
option: Flag('noprivate', autofill=True, cli_name='noprivate', default=False)
@@ -5261,7 +5261,7 @@ option: Str('krbprincipalname', attribute=True, autofill=False, cli_name='princi
option: Str('l', attribute=True, autofill=False, cli_name='city', multivalue=False, query=True, required=False)
option: Str('loginshell', attribute=True, autofill=False, cli_name='shell', multivalue=False, query=True, required=False)
option: Str('mail', attribute=True, autofill=False, cli_name='email', multivalue=True, query=True, required=False)
-option: Str('manager', attribute=True, autofill=False, cli_name='manager', multivalue=False, query=True, required=False)
+option: Str('manager', attribute=True, autofill=False, cli_name='manager', multivalue=True, query=True, required=False)
option: Str('mobile', attribute=True, autofill=False, cli_name='mobile', multivalue=True, query=True, required=False)
option: Flag('no_members', autofill=True, default=False, exclude='webui')
option: Str('not_in_group*', cli_name='not_in_groups', csv=True)
@@ -5321,7 +5321,7 @@ option: DateTime('krbprincipalexpiration', attribute=True, autofill=False, cli_n
option: Str('l', attribute=True, autofill=False, cli_name='city', multivalue=False, required=False)
option: Str('loginshell', attribute=True, autofill=False, cli_name='shell', multivalue=False, required=False)
option: Str('mail', attribute=True, autofill=False, cli_name='email', multivalue=True, required=False)
-option: Str('manager', attribute=True, autofill=False, cli_name='manager', multivalue=False, required=False)
+option: Str('manager', attribute=True, autofill=False, cli_name='manager', multivalue=True, required=False)
option: Str('mobile', attribute=True, autofill=False, cli_name='mobile', multivalue=True, required=False)
option: Flag('no_members', autofill=True, default=False, exclude='webui')
option: Bool('nsaccountlock', attribute=True, autofill=False, cli_name='nsaccountlock', multivalue=False, required=False)
diff --git a/VERSION b/VERSION
index cdda198c6ce3148dcf785149dc3ce050782e8caa..6bcd9ee8e0557555f790db0940af57f9e9ed4f42 100644
--- a/VERSION
+++ b/VERSION
@@ -90,5 +90,5 @@ IPA_DATA_VERSION=20100614120000
# #
########################################################
IPA_API_VERSION_MAJOR=2
-IPA_API_VERSION_MINOR=157
-# Last change: mbabinsk - hide segment direction from topology commands
+IPA_API_VERSION_MINOR=158
+# Last change: mbasti - allow to specify multiple managers per user
diff --git a/ipalib/plugins/baseuser.py b/ipalib/plugins/baseuser.py
index b974e3fb18659e7eb6e75557e0d4db3ec1197dcd..40114d6e994d0c1f814ce0c5b362c9cf4848f850 100644
--- a/ipalib/plugins/baseuser.py
+++ b/ipalib/plugins/baseuser.py
@@ -338,7 +338,7 @@ class baseuser(LDAPObject):
Str('title?',
label=_('Job Title'),
),
- Str('manager?',
+ Str('manager*',
label=_('Manager'),
),
Str('carlicense*',
@@ -426,8 +426,11 @@ class baseuser(LDAPObject):
if not manager:
return None
- if not isinstance(manager, list):
+ if isinstance(manager, tuple):
+ manager = list(manager)
+ elif not isinstance(manager, list):
manager = [manager]
+
try:
container_dn = DN(container, api.env.basedn)
for i, mgr in enumerate(manager):
--
2.4.3
From 83200aebcb642c48fcf4542753a70d1cff6e5c09 Mon Sep 17 00:00:00 2001
From: Martin Basti <mba...@redhat.com>
Date: Tue, 20 Oct 2015 18:40:36 +0200
Subject: [PATCH] WIP tests: multiple managers per user
---
ipatests/test_xmlrpc/test_stageuser_plugin.py | 37 +++++++++++++++++++++
ipatests/test_xmlrpc/test_user_plugin.py | 48 +++++++++++++++++++++++++++
2 files changed, 85 insertions(+)
diff --git a/ipatests/test_xmlrpc/test_stageuser_plugin.py b/ipatests/test_xmlrpc/test_stageuser_plugin.py
index b09ef6e84cd95a32061b07d833c5a39f1750f80b..761f8fa48bcdc83fbf66dc4c9eca668adf010fc7 100644
--- a/ipatests/test_xmlrpc/test_stageuser_plugin.py
+++ b/ipatests/test_xmlrpc/test_stageuser_plugin.py
@@ -389,6 +389,18 @@ def user7(request):
return tracker.make_fixture_restore(request)
+@pytest.fixture(scope='class')
+def manager1(request):
+ t = UserTracker(u"manager1", u"manager", u"manager1")
+ return t.make_fixture(request)
+
+
+@pytest.fixture(scope='class')
+def manager2(request):
+ t = UserTracker(u"manager2", u"manager", u"manager2")
+ return t.make_fixture(request)
+
+
class TestNonexistentStagedUser(XMLRPC_test):
def test_retrieve_nonexistent(self, stageduser):
stageduser.ensure_missing()
@@ -891,3 +903,28 @@ class TestGroups(XMLRPC_test):
command = group.make_add_member_command(options={u'user': user.uid})
result = command()
group.check_add_member_negative(result)
+
+
+class TestMultipleManagers(XMLRPC_test):
+ """Tests for: https://fedorahosted.org/freeipa/ticket/5344"""
+ def test_multiple_managers_per_stageduser(self, manager1, manager2,
+ stageduser):
+ manager1.create()
+ manager2.create()
+ stageduser.create()
+
+ stageduser.update({u"manager": [manager1.name, manager2.name]})
+
+ def test_find_stageuser_with_multiple_managers(self, manager1, manager2,
+ stageduser):
+ command = stageduser.make_find_command(
+ manager=[manager1.name, manager2.name])
+ result = command()
+ stageduser.check_find(result)
+
+ def test_create_new_stageduser_with_multiple_managers(
+ self, manager1, manager2, stageuser2):
+ command = stageuser2.make_create_command(
+ manager=[manager1.name, manager2.name])
+ result = command()
+ stageuser2.check_create(result)
diff --git a/ipatests/test_xmlrpc/test_user_plugin.py b/ipatests/test_xmlrpc/test_user_plugin.py
index 18305ad02906a63baafcdf49bd2c93fa39dc4584..3a1848a2b0e6ba9bf714c9c32ba48db9267e0ca3 100644
--- a/ipatests/test_xmlrpc/test_user_plugin.py
+++ b/ipatests/test_xmlrpc/test_user_plugin.py
@@ -27,6 +27,7 @@ import functools
import datetime
import ldap
import re
+import pytest
from ipalib import api, errors
from ipatests.test_xmlrpc import objectclasses
@@ -1975,3 +1976,50 @@ class UserTracker(Tracker):
request.addfinalizer(finish)
return self
+
+
+@pytest.fixture(scope='class')
+def manager1(request):
+ t = UserTracker(u"manager1", u"manager", u"manager1")
+ return t.make_fixture(request)
+
+
+@pytest.fixture(scope='class')
+def manager2(request):
+ t = UserTracker(u"manager2", u"manager", u"manager2")
+ return t.make_fixture(request)
+
+
+@pytest.fixture(scope='class')
+def testuser(request):
+ t = UserTracker(u"user", u"test", u"user")
+ return t.make_fixture(request)
+
+@pytest.fixture(scope='class')
+def testuser2(request):
+ t = UserTracker(u"user2", u"test", u"user2")
+ return t.make_fixture(request)
+
+
+class TestMultipleManagers(XMLRPC_test):
+ """Tests for: https://fedorahosted.org/freeipa/ticket/5344"""
+ def test_multiple_managers_per_user(self, manager1, manager2, testuser):
+ manager1.create()
+ manager2.create()
+ testuser.create()
+
+ testuser.update({u"manager": [manager1.name, manager2.name]})
+
+ def test_find_user_with_multiple_managers(self, manager1, manager2,
+ testuser):
+ command = testuser.make_find_command(
+ manager=[manager1.name, manager2.name])
+ result = command()
+ testuser.check_find(result)
+
+ def test_create_new_user_with_multiple_managers(
+ self, manager1, manager2, testuser2):
+ command = testuser2.make_create_command(
+ options={u"manager": [manager1.name, manager2.name]})
+ result = command()
+ testuser2.check_create(result)
--
2.4.3
--
Manage your subscription for the Freeipa-devel mailing list:
https://www.redhat.com/mailman/listinfo/freeipa-devel
Contribute to FreeIPA: http://www.freeipa.org/page/Contribute/Code