Hello,
These patches concentrate on tests, and code that was added/changed
since I last looked at the FreeIPA project.

With these patches, I'm back to getting the same errors under py2 and
py3 when in test_xmlrpc.


-- 
Petr Viktorin
From 974ff8d326e13b3121681366a2dea6503b025d77 Mon Sep 17 00:00:00 2001
From: Petr Viktorin <pvikt...@redhat.com>
Date: Fri, 29 Apr 2016 13:18:18 +0200
Subject: [PATCH] test_xmlrpc: Use absolute imports

In Python 3, a module from the current package can be imported
either with the absolute name or by using an explicit relative import.

Part of the work for https://fedorahosted.org/freeipa/ticket/4985
---
 ipatests/test_xmlrpc/test_add_remove_cert_cmd.py | 10 +++++-----
 ipatests/test_xmlrpc/test_user_plugin.py         |  2 +-
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/ipatests/test_xmlrpc/test_add_remove_cert_cmd.py b/ipatests/test_xmlrpc/test_add_remove_cert_cmd.py
index 122921d79f788e2c01171652ae4246e6b1717c70..0810182b35dee2e8e14466e1f454903d27e31899 100644
--- a/ipatests/test_xmlrpc/test_add_remove_cert_cmd.py
+++ b/ipatests/test_xmlrpc/test_add_remove_cert_cmd.py
@@ -4,13 +4,13 @@
 
 import base64
 
+import pytest
+
 from ipalib import api, errors
-
-from ipatests.util import assert_deepequal, raises
-from xmlrpc_test import XMLRPC_test
 from ipapython.dn import DN
-from testcert import get_testcert
-import pytest
+from ipatests.util import assert_deepequal, raises
+from ipatests.test_xmlrpc.xmlrpc_test import XMLRPC_test
+from ipatests.test_xmlrpc.testcert import get_testcert
 
 
 @pytest.mark.tier1
diff --git a/ipatests/test_xmlrpc/test_user_plugin.py b/ipatests/test_xmlrpc/test_user_plugin.py
index a70b90a994a243ea98a4d09ceec9a6b0aca49545..7c6d2ee531ed6b2945f6253861090a177e05713d 100644
--- a/ipatests/test_xmlrpc/test_user_plugin.py
+++ b/ipatests/test_xmlrpc/test_user_plugin.py
@@ -33,7 +33,7 @@ from ipalib import api, errors
 from ipatests.test_xmlrpc import objectclasses
 from ipatests.util import (
     assert_deepequal, assert_equal, assert_not_equal, raises)
-from xmlrpc_test import (
+from ipatests.test_xmlrpc.xmlrpc_test import (
     XMLRPC_test, fuzzy_digits, fuzzy_uuid, fuzzy_password,
     fuzzy_string, fuzzy_dergeneralizedtime, add_sid, add_oc, raises_exact)
 from ipapython.dn import DN
-- 
2.5.5

From e85e876f1af99d01a8e2a7137ca6575185ad860c Mon Sep 17 00:00:00 2001
From: Petr Viktorin <pvikt...@redhat.com>
Date: Fri, 29 Apr 2016 14:10:28 +0200
Subject: [PATCH] xmlrpc_test: Rename exception instance before working with it

Python 3 unsets the exception variable at the end of an "except"
block to prevent reference cycles and speed up garbage collection.

Store the exception under a different name in order to use it later.

Part of the work for https://fedorahosted.org/freeipa/ticket/4985
---
 ipatests/test_xmlrpc/xmlrpc_test.py | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/ipatests/test_xmlrpc/xmlrpc_test.py b/ipatests/test_xmlrpc/xmlrpc_test.py
index 33088934199a2b9706f3953da1233b09c7e1315a..4052ab91868b0f0e2400b6533e5adba3fe72200d 100644
--- a/ipatests/test_xmlrpc/xmlrpc_test.py
+++ b/ipatests/test_xmlrpc/xmlrpc_test.py
@@ -330,14 +330,15 @@ class Declarative(XMLRPC_test):
         try:
             output = api.Command[cmd](*args, **options)
         except Exception as e:
-            pass
+            exception = e
         else:
             raise AssertionError(
                 EXPECTED % (cmd, name, args, options, output)
             )
-        if not isinstance(e, klass):
+        if not isinstance(exception, klass):
             raise AssertionError(
-                UNEXPECTED % (cmd, name, args, options, e.__class__.__name__, e)
+                UNEXPECTED % (cmd, name, args, options,
+                              exception.__class__.__name__, exception)
             )
         # FIXME: the XML-RPC transport doesn't allow us to return structured
         # information through the exception, so we can't test the kw on the
@@ -345,21 +346,21 @@ class Declarative(XMLRPC_test):
         # transport, the exception is a free-form data structure (dict).
         # For now just compare the strings
         # pylint: disable=no-member
-        assert_deepequal(expected.strerror, e.strerror)
+        assert_deepequal(expected.strerror, exception.strerror)
         # pylint: enable=no-member
 
     def check_callable(self, nice, cmd, args, options, expected):
         name = expected.__class__.__name__
         output = dict()
-        e = None
+        exception = None
         try:
             output = api.Command[cmd](*args, **options)
         except Exception as e:
-            pass
-        if not expected(e, output):
+            exception = e
+        if not expected(exception, output):
             raise AssertionError(
                 UNEXPECTED % (cmd, name, args, options,
-                              type(e).__name__, e)
+                              type(exception).__name__, exception)
             )
 
     def check_output(self, nice, cmd, args, options, expected, extra_check):
-- 
2.5.5

From 10f2bb03c718e4ecc78501c37447eae90f2d092e Mon Sep 17 00:00:00 2001
From: Petr Viktorin <pvikt...@redhat.com>
Date: Fri, 29 Apr 2016 16:11:38 +0200
Subject: [PATCH] radiusproxy plugin: Use str(error) rather than error.message

In Python 3, the "message" attribute has been removed in favor of
calling str() on the error.

Part of the work for https://fedorahosted.org/freeipa/ticket/4985
---
 ipalib/plugins/radiusproxy.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ipalib/plugins/radiusproxy.py b/ipalib/plugins/radiusproxy.py
index 2a66436f5fbecff35074acf722b10e96cfccee14..8ca179b49e261665be39c8283c3e15c36669a063 100644
--- a/ipalib/plugins/radiusproxy.py
+++ b/ipalib/plugins/radiusproxy.py
@@ -85,7 +85,7 @@ def validate_radiusserver(ugettext, server):
         validate_hostname(server, check_fqdn=True, allow_underscore=True)
     except ValueError as e:
         raise errors.ValidationError(name="ipatokenradiusserver",
-                                     error=e.message)
+                                     error=str(e))
 
 
 @register()
-- 
2.5.5

From e0815c2a28ee12f6094e94baa519c04dc8545641 Mon Sep 17 00:00:00 2001
From: Petr Viktorin <pvikt...@redhat.com>
Date: Fri, 29 Apr 2016 16:26:04 +0200
Subject: [PATCH] xmlrpc_test: Expect bytes rather than strings for binary
 attributes

The attributes krbextradata, krbprincipalkey, and userpassword contain
binary data.

Part of the work for: https://fedorahosted.org/freeipa/ticket/4985
---
 ipatests/test_xmlrpc/test_stageuser_plugin.py    | 4 ++--
 ipatests/test_xmlrpc/test_user_plugin.py         | 4 ++--
 ipatests/test_xmlrpc/tracker/stageuser_plugin.py | 8 ++++----
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/ipatests/test_xmlrpc/test_stageuser_plugin.py b/ipatests/test_xmlrpc/test_stageuser_plugin.py
index 0ad017cbd61ec1db009fef917ea1be4ec8f357d8..cfb7ab478041817a6003810bd4d0d3b28b3fa30e 100644
--- a/ipatests/test_xmlrpc/test_stageuser_plugin.py
+++ b/ipatests/test_xmlrpc/test_stageuser_plugin.py
@@ -75,8 +75,8 @@ options_def = OrderedDict([
     ('random password', {u'random': True}),
     ])
 
-options_ok = options_def.values()
-options_ids = options_def.keys()
+options_ok = list(options_def.values())
+options_ids = list(options_def.keys())
 
 
 @pytest.fixture(scope='class')
diff --git a/ipatests/test_xmlrpc/test_user_plugin.py b/ipatests/test_xmlrpc/test_user_plugin.py
index 7c6d2ee531ed6b2945f6253861090a177e05713d..c576394dda5ed0647588f179da45a4e722f2469e 100644
--- a/ipatests/test_xmlrpc/test_user_plugin.py
+++ b/ipatests/test_xmlrpc/test_user_plugin.py
@@ -35,7 +35,7 @@ from ipatests.util import (
     assert_deepequal, assert_equal, assert_not_equal, raises)
 from ipatests.test_xmlrpc.xmlrpc_test import (
     XMLRPC_test, fuzzy_digits, fuzzy_uuid, fuzzy_password,
-    fuzzy_string, fuzzy_dergeneralizedtime, add_sid, add_oc, raises_exact)
+    Fuzzy, fuzzy_dergeneralizedtime, add_sid, add_oc, raises_exact)
 from ipapython.dn import DN
 
 from ipatests.test_xmlrpc.tracker.base import Tracker
@@ -483,7 +483,7 @@ class TestCreate(XMLRPC_test):
         testuser.attrs.update(
             randompassword=fuzzy_password,
             has_keytab=True, has_password=True,
-            krbextradata=[fuzzy_string],
+            krbextradata=[Fuzzy(type=bytes)],
             krbpasswordexpiration=[fuzzy_dergeneralizedtime],
             krblastpwdchange=[fuzzy_dergeneralizedtime]
         )
diff --git a/ipatests/test_xmlrpc/tracker/stageuser_plugin.py b/ipatests/test_xmlrpc/tracker/stageuser_plugin.py
index 72edd334201798bf35e92764cb63bc1ca1907ebf..dd973c8a43dea81418e032ae7eb3fe6fb745422a 100644
--- a/ipatests/test_xmlrpc/tracker/stageuser_plugin.py
+++ b/ipatests/test_xmlrpc/tracker/stageuser_plugin.py
@@ -9,7 +9,7 @@ from ipalib import api, errors
 from ipatests.test_xmlrpc.tracker.base import Tracker
 from ipatests.test_xmlrpc import objectclasses
 from ipatests.test_xmlrpc.xmlrpc_test import (
-    fuzzy_string, fuzzy_dergeneralizedtime, raises_exact)
+    Fuzzy, fuzzy_string, fuzzy_dergeneralizedtime, raises_exact)
 
 from ipatests.util import assert_deepequal
 from ipapython.dn import DN
@@ -133,12 +133,12 @@ class StageUserTracker(Tracker):
                 self.attrs[u'sshpubkeyfp'] = [sshpubkeyfp]
                 self.attrs[key] = [self.kwargs[key]]
             elif key == u'random' or key == u'userpassword':
-                self.attrs[u'krbextradata'] = [fuzzy_string]
+                self.attrs[u'krbextradata'] = [Fuzzy(type=bytes)]
                 self.attrs[u'krbpasswordexpiration'] = [
                     fuzzy_dergeneralizedtime]
                 self.attrs[u'krblastpwdchange'] = [fuzzy_dergeneralizedtime]
-                self.attrs[u'krbprincipalkey'] = [fuzzy_string]
-                self.attrs[u'userpassword'] = [fuzzy_string]
+                self.attrs[u'krbprincipalkey'] = [Fuzzy(type=bytes)]
+                self.attrs[u'userpassword'] = [Fuzzy(type=bytes)]
                 self.attrs[u'has_keytab'] = True
                 self.attrs[u'has_password'] = True
                 if key == u'random':
-- 
2.5.5

From a388f8c5d1f66d8418f027973e7547c7f02a2e42 Mon Sep 17 00:00:00 2001
From: Petr Viktorin <pvikt...@redhat.com>
Date: Fri, 29 Apr 2016 16:34:15 +0200
Subject: [PATCH] ipalib.rpc: Send base64-encoded data as string under Python 3

Python 3's JSON library cannot deal with bytes, so decode
base64-encoded data to string.

Part of the work for https://fedorahosted.org/freeipa/ticket/4985
---
 ipalib/rpc.py | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/ipalib/rpc.py b/ipalib/rpc.py
index c70b3a29fdc86ef10d9c0ce55a360233dbd8663e..be1ae6306af15235627ef8cbb3b50a8247ce359d 100644
--- a/ipalib/rpc.py
+++ b/ipalib/rpc.py
@@ -297,7 +297,10 @@ def json_encode_binary(val, version):
         new_list = [json_encode_binary(v, version) for v in val]
         return new_list
     elif isinstance(val, bytes):
-        return {'__base64__': base64.b64encode(val)}
+        encoded = base64.b64encode(val)
+        if not six.PY2:
+            encoded = encoded.decode('ascii')
+        return {'__base64__': encoded}
     elif isinstance(val, Decimal):
         return {'__base64__': base64.b64encode(str(val))}
     elif isinstance(val, DN):
-- 
2.5.5

From 60f27cab917a59c032c45e99d16535885097f548 Mon Sep 17 00:00:00 2001
From: Petr Viktorin <pvikt...@redhat.com>
Date: Fri, 29 Apr 2016 16:52:21 +0200
Subject: [PATCH] range plugin tests: Use bytes with MockLDAP under Python 3

Part of the work for: https://fedorahosted.org/freeipa/ticket/4985
---
 ipatests/test_xmlrpc/test_range_plugin.py | 48 ++++++++++++++++++-------------
 1 file changed, 28 insertions(+), 20 deletions(-)

diff --git a/ipatests/test_xmlrpc/test_range_plugin.py b/ipatests/test_xmlrpc/test_range_plugin.py
index 3a41bb079a291eb2f1e01c886cfa70fc35cfa521..019bfd839c097c57f7b8af49da3c3814eced16da 100644
--- a/ipatests/test_xmlrpc/test_range_plugin.py
+++ b/ipatests/test_xmlrpc/test_range_plugin.py
@@ -125,27 +125,35 @@ def get_trust_dn(name):
     return format_str.format(**data)
 
 
+def encode_mockldap_value(value):
+    value = str(value)
+    if six.PY3:
+        return value.encode('utf-8')
+    else:
+        return value
+
+
 def get_trusted_dom_range_dict(name, base_id, size, rangetype, base_rid, sid):
     return dict(
-        objectClass=["ipaIDrange", "ipatrustedaddomainrange"],
-        ipaBaseID=str("{base_id}".format(base_id=base_id)),
-        ipaBaseRID=str("{base_rid}".format(base_rid=base_rid)),
-        ipaIDRangeSize=str("{size}".format(size=size)),
-        ipaNTTrustedDomainSID=str("{sid}".format(sid=sid)),
-        ipaRangeType=str("{rangetype}".format(rangetype=rangetype)),
+        objectClass=[b"ipaIDrange", b"ipatrustedaddomainrange"],
+        ipaBaseID=encode_mockldap_value("{base_id}".format(base_id=base_id)),
+        ipaBaseRID=encode_mockldap_value("{base_rid}".format(base_rid=base_rid)),
+        ipaIDRangeSize=encode_mockldap_value("{size}".format(size=size)),
+        ipaNTTrustedDomainSID=encode_mockldap_value("{sid}".format(sid=sid)),
+        ipaRangeType=encode_mockldap_value("{rangetype}".format(rangetype=rangetype)),
         )
 
 
 def get_trusted_dom_dict(name, sid):
     return dict(
-        objectClass=["ipaNTTrustedDomain", "ipaIDobject", "top"],
-        ipaNTFlatName=str(name.upper()),
-        ipaNTTrustedDomainSID=str(sid),
-        ipaNTSIDBlacklistIncoming='S-1-0',
-        ipaNTTrustPartner=str('{name}.mock'.format(name=name)),
-        ipaNTTrustType='2',
-        ipaNTTrustDirection='3',
-        ipaNTTrustAttributes='8',
+        objectClass=[b"ipaNTTrustedDomain", b"ipaIDobject", b"top"],
+        ipaNTFlatName=encode_mockldap_value(name.upper()),
+        ipaNTTrustedDomainSID=encode_mockldap_value(sid),
+        ipaNTSIDBlacklistIncoming=b'S-1-0',
+        ipaNTTrustPartner=encode_mockldap_value('{name}.mock'.format(name=name)),
+        ipaNTTrustType=b'2',
+        ipaNTTrustDirection=b'3',
+        ipaNTTrustAttributes=b'8',
         )
 
 # Domain ranges definitions
@@ -359,7 +367,7 @@ domain7range1_dn = get_range_dn(name=domain7range1)
 
 trust_container_dn = "cn=ad,cn=trusts,{basedn}".format(basedn=api.env.basedn)
 trust_container_add = dict(
-    objectClass=["nsContainer", "top"]
+    objectClass=[b"nsContainer", b"top"]
     )
 
 # Convince Domain Validator that adtrust-install was run in order to test
@@ -369,7 +377,7 @@ smb_cont_dn = "{cifsdomains},{basedn}".format(
     cifsdomains=api.env.container_cifsdomains,
     basedn=api.env.basedn)
 smb_cont_add = dict(
-    objectClass=["nsContainer", "top"]
+    objectClass=[b"nsContainer", b"top"]
     )
 
 trust_local_dn = "cn={domain},{smbcont}".format(
@@ -377,10 +385,10 @@ trust_local_dn = "cn={domain},{smbcont}".format(
     smbcont=smb_cont_dn)
 
 trust_local_add = dict(
-    objectClass=["ipaNTDomainAttrs", "nsContainer", "top"],
-    ipaNTFlatName=["UNITTESTS"],
-    ipaNTDomainGUID=["4ed70def-bff4-464c-889f-6cd2cfa4dbb7"],
-    ipaNTSecurityIdentifier=["S-1-5-21-2568409255-1212639194-836868319"]
+    objectClass=[b"ipaNTDomainAttrs", b"nsContainer", b"top"],
+    ipaNTFlatName=[b"UNITTESTS"],
+    ipaNTDomainGUID=[b"4ed70def-bff4-464c-889f-6cd2cfa4dbb7"],
+    ipaNTSecurityIdentifier=[b"S-1-5-21-2568409255-1212639194-836868319"]
     )
 
 user1 = u'tuser1'
-- 
2.5.5

From eb6d079f788ef3203556b81efad910c25319a7aa Mon Sep 17 00:00:00 2001
From: Petr Viktorin <pvikt...@redhat.com>
Date: Fri, 29 Apr 2016 16:56:11 +0200
Subject: [PATCH] radiusproxy plugin tests: Expect bytes, not text, for
 ipatokenradiussecret

Part of the work for: https://fedorahosted.org/freeipa/ticket/4985
---
 ipatests/test_xmlrpc/test_radiusproxy_plugin.py | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/ipatests/test_xmlrpc/test_radiusproxy_plugin.py b/ipatests/test_xmlrpc/test_radiusproxy_plugin.py
index 30df17e7ed672bde57725cabcb9e9f6fb456f263..a078eca8f2cfe5a249274231df0309164d15580b 100644
--- a/ipatests/test_xmlrpc/test_radiusproxy_plugin.py
+++ b/ipatests/test_xmlrpc/test_radiusproxy_plugin.py
@@ -35,6 +35,7 @@ radius1_fqdn = u'testradius.test'
 radius1_dn = DN(('cn=testradius'), ('cn=radiusproxy'), api.env.basedn)
 user1 = u'tuser1'
 password1 = u'very*secure123'
+password1_bytes = password1.encode('ascii')
 
 
 @pytest.mark.tier1
@@ -85,7 +86,7 @@ class test_raduisproxy(Declarative):
                 result=dict(
                     cn=[radius1],
                     dn=radius1_dn,
-                    ipatokenradiussecret=[str(password1)],
+                    ipatokenradiussecret=[password1_bytes],
                     ipatokenradiusserver=[radius1_fqdn],
                     objectclass=objectclasses.radiusproxy,
 
@@ -131,7 +132,7 @@ class test_raduisproxy(Declarative):
                 result=dict(
                     cn=[radius1],
                     dn=radius1_dn,
-                    ipatokenradiussecret=[str(password1)],
+                    ipatokenradiussecret=[password1_bytes],
                     ipatokenradiusserver=[radius1_fqdn],
                     objectclass=objectclasses.radiusproxy,
                 ),
-- 
2.5.5

From 9174e9eed0aa4a05fba1b69c8b43bc0e59ca3550 Mon Sep 17 00:00:00 2001
From: Petr Viktorin <pvikt...@redhat.com>
Date: Fri, 29 Apr 2016 17:35:01 +0200
Subject: [PATCH] certprofile plugin: Use binary mode for file with binary data

Part of the work for: https://fedorahosted.org/freeipa/ticket/4985
---
 ipalib/plugins/certprofile.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ipalib/plugins/certprofile.py b/ipalib/plugins/certprofile.py
index 6329d84c3e45a3f5c58111122d66858da57b5886..224d5cec8beb0db8f790a318691eb42ce24921b0 100644
--- a/ipalib/plugins/certprofile.py
+++ b/ipalib/plugins/certprofile.py
@@ -224,7 +224,7 @@ class certprofile_show(LDAPRetrieve):
 
         result = super(certprofile_show, self).forward(*keys, **options)
         if 'out' in options and 'config' in result['result']:
-            with open(options['out'], 'w') as f:
+            with open(options['out'], 'wb') as f:
                 f.write(result['result'].pop('config'))
             result['summary'] = (
                 _("Profile configuration stored in file '%(file)s'")
-- 
2.5.5

From cb63035c625c66186f2232b0e26617e74adcdd69 Mon Sep 17 00:00:00 2001
From: Petr Viktorin <pvikt...@redhat.com>
Date: Fri, 29 Apr 2016 17:38:39 +0200
Subject: [PATCH] test_add_remove_cert_cmd: Use bytes for base64.b64encode()

Part of the work for: https://fedorahosted.org/freeipa/ticket/4985
---
 ipatests/test_xmlrpc/test_add_remove_cert_cmd.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ipatests/test_xmlrpc/test_add_remove_cert_cmd.py b/ipatests/test_xmlrpc/test_add_remove_cert_cmd.py
index 0810182b35dee2e8e14466e1f454903d27e31899..014d088c695c8a3bde9de4a63f5532a17afefb6b 100644
--- a/ipatests/test_xmlrpc/test_add_remove_cert_cmd.py
+++ b/ipatests/test_xmlrpc/test_add_remove_cert_cmd.py
@@ -112,7 +112,7 @@ class CertManipCmdTestBase(XMLRPC_test):
         cls.invalid_b64 = [u'few4w24gvrae54y6463234f']
 
         # malformed certificate
-        cls.malformed_cert = [base64.b64encode('malformed cert')]
+        cls.malformed_cert = [base64.b64encode(b'malformed cert')]
 
         # store entity info for the final test
         cls.entity_attrs = api.Command['%s_show' % cls.entity_class](
-- 
2.5.5

-- 
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

Reply via email to