Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[release-4.6] Bug 1893681: Bulk port creation exception not completely formatted #390

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion kuryr_kubernetes/clients.py
Expand Up @@ -103,7 +103,7 @@ def _create_ports(self, payload):
response = self.post(os_port.Port.base_path, json=payload)

if not response.ok:
raise os_exc.SDKException('Error when bulk creating ports: %s',
raise os_exc.SDKException('Error when bulk creating ports: %s' %
response.text)
return (os_port.Port(**item) for item in response.json()['ports'])

Expand Down
25 changes: 25 additions & 0 deletions kuryr_kubernetes/tests/unit/test_clients.py
Expand Up @@ -15,6 +15,7 @@

from unittest import mock

from openstack import exceptions as os_exc
from openstack.network.v2 import port as os_port

from kuryr_kubernetes import clients
Expand Down Expand Up @@ -128,3 +129,27 @@ def test_create_ports(self):

clients._create_ports(m_osdk, payload)
m_post.assert_called_once_with(os_port.Port.base_path, json=expected)

def test_create_ports_out_of_ports(self):
"""Simulate error response from OpenStack SDK"""
m_response = mock.Mock()
m_response.text = ('{"NeutronError": {"type": "OverQuota", "message": '
'"Quota exceeded for resources: [\'port\'].", '
'"detail": ""}}')
m_response.ok = False
m_post = mock.Mock()
m_post.return_value = m_response
m_osdk = mock.Mock()
m_osdk.post = m_post

payload = {'ports': []}

try:
clients._create_ports(m_osdk, payload)
except os_exc.SDKException as ex:
# no additional params passed to the exception class
self.assertIsNone(ex.extra_data)
# no formatting placeholders in message
self.assertNotIn('%s', ex.message)

m_post.assert_called_once_with(os_port.Port.base_path, json=payload)