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