From b7a5234057fab4ed71b5d0ebd412a648ccca76e6 Mon Sep 17 00:00:00 2001 From: Derek Higgins Date: Mon, 9 Apr 2018 11:21:15 +0100 Subject: [PATCH] Convert ovirt url to a str Older versions if pyculr.Curl.setopt don't accept unicode string values. Change-Id: I4fca91228435a1a652b98db69aa2a92ffbaa47e7 Closes-Bug: #1761724 --- ironic_staging_drivers/ovirt/ovirt.py | 10 +++++++ .../tests/unit/ovirt/test_ovirt.py | 28 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/ironic_staging_drivers/ovirt/ovirt.py b/ironic_staging_drivers/ovirt/ovirt.py index 71e9071..2658a46 100644 --- a/ironic_staging_drivers/ovirt/ovirt.py +++ b/ironic_staging_drivers/ovirt/ovirt.py @@ -131,6 +131,16 @@ def _getvm(driver_info): ca_file = driver_info['ovirt_ca_file'] name = driver_info['ovirt_vm_name'].encode('ascii', 'ignore') url = "https://%s/ovirt-engine/api" % address + try: + # pycurl.Curl.setopt doesn't support unicode stings + # convert them to a acsii str + url = url.encode('ascii', 'strict') + except UnicodeEncodeError: + # url contains unicode characters that can't be converted, attempt to + # use it, if we have a version of pycurl that rejects it then a + # sdk.Error will be thrown below + pass + try: connection = sdk.Connection(url=url, username=username, password=password, insecure=insecure, diff --git a/ironic_staging_drivers/tests/unit/ovirt/test_ovirt.py b/ironic_staging_drivers/tests/unit/ovirt/test_ovirt.py index 8d4f352..4f0a374 100644 --- a/ironic_staging_drivers/tests/unit/ovirt/test_ovirt.py +++ b/ironic_staging_drivers/tests/unit/ovirt/test_ovirt.py @@ -58,6 +58,34 @@ class oVirtDriverTestCase(db_base.DbTestCase): self.assertEqual('changeme', params['ovirt_password']) self.assertEqual('jimi', params['ovirt_vm_name']) + @mock.patch.object(ovirt_power, "sdk", create=True) + def test_getvm_nounicode(self, sdk): + self.node['driver_info']['ovirt_address'] = u'127.0.0.1' + driver_info = ovirt_power._parse_driver_info(self.node) + + ovirt_power._getvm(driver_info) + ovirt_power.sdk.Connection.assert_called_with( + ca_file=None, insecure='False', password='changeme', + url=b'https://127.0.0.1/ovirt-engine/api', + username='jhendrix@internal' + ) + url = ovirt_power.sdk.Connection.mock_calls[0][-1]['url'] + self.assertEqual(type(b''), type(url)) + + @mock.patch.object(ovirt_power, "sdk", create=True) + def test_getvm_unicode(self, sdk): + self.node['driver_info']['ovirt_address'] = u'host\u20141' + driver_info = ovirt_power._parse_driver_info(self.node) + + ovirt_power._getvm(driver_info) + ovirt_power.sdk.Connection.assert_called_with( + ca_file=None, insecure='False', password='changeme', + url=u'https://host\u20141/ovirt-engine/api', + username='jhendrix@internal' + ) + url = ovirt_power.sdk.Connection.mock_calls[0][-1]['url'] + self.assertEqual(type(u''), type(url)) + def test_get_properties(self): expected = list(ovirt_power.PROPERTIES.keys()) with task_manager.acquire(