diff --git a/ironic_staging_drivers/ovirt/ovirt.py b/ironic_staging_drivers/ovirt/ovirt.py index 3e447f2..fe3f307 100644 --- a/ironic_staging_drivers/ovirt/ovirt.py +++ b/ironic_staging_drivers/ovirt/ovirt.py @@ -133,20 +133,21 @@ def _getvm(driver_info): password = driver_info['ovirt_password'] insecure = driver_info['ovirt_insecure'] ca_file = driver_info['ovirt_ca_file'] - name = str.encode( - driver_info['ovirt_vm_name'], encoding='ascii', errors='ignore') + name = driver_info['ovirt_vm_name'] url = "https://%s/ovirt-engine/api" % address + try: # pycurl.Curl.setopt doesn't support unicode strings, - # attempt to turn `url` into an all-ASCII string; + # attempt to turn variables into an all-ASCII string; # in Python 3.x setopt accepts bytes as it should. - url = str.encode(url, encoding='ascii', errors='strict') + str.encode(url, encoding='ascii', errors='strict') except UnicodeEncodeError: - LOG.warning("oVirt URL '%(url)s' contains non-ascii characters, " - "that might cause pycurl to explode " - "momentarily", {'url': url}) - + LOG.exception("oVirt SDK does not accept non-ascii " + "characters. A non-ascii character has " + "been provided for: {}".format(url)) + raise staging_exception.OVirtError("Unicode values " + "are not valid") 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 bc6cbd2..fcd7849 100644 --- a/ironic_staging_drivers/tests/unit/ovirt/test_ovirt.py +++ b/ironic_staging_drivers/tests/unit/ovirt/test_ovirt.py @@ -21,7 +21,9 @@ from ironic.common import states from ironic.conductor import task_manager from ironic.tests.unit.db import base as db_base from ironic.tests.unit.objects import utils as obj_utils +import testtools +from ironic_staging_drivers.common import exception as staging_exception from ironic_staging_drivers.ovirt import ovirt as ovirt_power @@ -64,11 +66,11 @@ class OVirtDriverTestCase(db_base.DbTestCase): with 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', + url='https://127.0.0.1/ovirt-engine/api', username='jhendrix@internal' ) url = ovirt_power.sdk.Connection.mock_calls[0][-1]['url'] - self.assertIsInstance(url, bytes) + self.assertIsInstance(url, str) ovirt_power.sdk.Connection.return_value.close.assert_called() @@ -77,15 +79,10 @@ class OVirtDriverTestCase(db_base.DbTestCase): self.node['driver_info']['ovirt_address'] = u'host\u20141' driver_info = ovirt_power._parse_driver_info(self.node) - with 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.assertIsInstance(url, str) - ovirt_power.sdk.Connection.return_value.close.assert_called() + with testtools.ExpectedException(staging_exception.OVirtError): + with ovirt_power._getvm(driver_info): + pass + ovirt_power.sdk.Connection.call_count = 0 def test_get_properties(self): expected = list(ovirt_power.PROPERTIES.keys())