Browse Source

Fix exception message in case when bulk creation fails.

In our client, for OpenStack client, we created a workaround for missing
bulk port create (at that time). Turns out, that running out of the
OpenStack resources, there could be SDKException thrown, which is fine,
although due to the mistake, message wasn't informative at all.
This patch is fixing this.

Closes-Bug: 1901666
Change-Id: Iba0744840231088018ec37cb6e3d98e1df6916fa
changes/75/759875/2
Roman Dobosz 6 months ago
parent
commit
2b3e2f5aac
2 changed files with 26 additions and 1 deletions
  1. +1
    -1
      kuryr_kubernetes/clients.py
  2. +25
    -0
      kuryr_kubernetes/tests/unit/test_clients.py

+ 1
- 1
kuryr_kubernetes/clients.py View File

@ -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'])


+ 25
- 0
kuryr_kubernetes/tests/unit/test_clients.py View File

@ -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
@ -128,3 +129,27 @@ class TestOpenStackSDKHack(test_base.TestCase):
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)

Loading…
Cancel
Save