Fix another setattr internal error that QA found.

https://fedorahosted.org/freeipa/ticket/2706

--
PetrĀ³
From df68cf178e0bae0104684c482ac2f2eee8469caf Mon Sep 17 00:00:00 2001
From: Petr Viktorin <pvikt...@redhat.com>
Date: Wed, 2 May 2012 12:36:15 -0400
Subject: [PATCH] Don't fail when adding default objectclasses using
 config-mod

The config plugin was adding together a list and a tuple, then
converting to a set.
Replace the operation with a set union.

Regression test included.

https://fedorahosted.org/freeipa/ticket/2706
---
 ipalib/plugins/config.py                |    4 +--
 tests/test_xmlrpc/test_config_plugin.py |   55 +++++++++++++++++++++++++++++++
 2 files changed, 57 insertions(+), 2 deletions(-)
 create mode 100644 tests/test_xmlrpc/test_config_plugin.py

diff --git a/ipalib/plugins/config.py b/ipalib/plugins/config.py
index df960f4c0117e453ffb79ae7469476b5ff234f0d..30f26addf1162f2b6d7febe76853f894a560ef60 100644
--- a/ipalib/plugins/config.py
+++ b/ipalib/plugins/config.py
@@ -229,8 +229,8 @@ def pre_callback(self, ldap, dn, entry_attrs, attrs_list, *keys, **options):
                 if not entry_attrs[attr]:
                     raise errors.ValidationError(name=attr,
                         error=_('May not be empty'))
-                objectclasses = list(set(entry_attrs[attr] \
-                                         + self.api.Object[obj].possible_objectclasses))
+                objectclasses = list(set(entry_attrs[attr]).union(
+                        self.api.Object[obj].possible_objectclasses))
                 new_allowed_attrs = ldap.get_allowed_attributes(objectclasses,
                                         raise_on_unknown=True)
                 checked_attrs = self.api.Object[obj].default_attributes
diff --git a/tests/test_xmlrpc/test_config_plugin.py b/tests/test_xmlrpc/test_config_plugin.py
new file mode 100644
index 0000000000000000000000000000000000000000..fbe389106601c1cef7f4689d7d3f85d80694d34a
--- /dev/null
+++ b/tests/test_xmlrpc/test_config_plugin.py
@@ -0,0 +1,55 @@
+# Authors:
+#   Petr Viktorin <pvikt...@redhat.com>
+#
+# Copyright (C) 2010  Red Hat
+# see file 'COPYING' for use and warranty information
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+"""
+Test the `ipalib/plugins/config.py` module.
+"""
+
+from xmlrpc_test import Declarative, fuzzy_digits, fuzzy_uuid
+
+class test_config(Declarative):
+
+    cleanup_commands = [
+    ]
+
+    tests = [
+
+        dict(
+            desc='Try to add an unrelated objectclass to ipauserobjectclasses',
+            command=('config_mod', [],
+                dict(addattr=u'ipauserobjectclasses=ipahost')),
+            expected=dict(
+                    result=lambda d: 'ipahost' in d['ipauserobjectclasses'],
+                    value=u'',
+                    summary=None,
+                ),
+        ),
+
+        dict(
+            desc='Remove the unrelated objectclass from ipauserobjectclasses',
+            command=('config_mod', [],
+                dict(delattr=u'ipauserobjectclasses=ipahost')),
+            expected=dict(
+                    result=lambda d: 'ipahost' not in d['ipauserobjectclasses'],
+                    value=u'',
+                    summary=None,
+                ),
+        ),
+
+    ]
-- 
1.7.10

_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to