Merge pull request #70034 from rhcs-dashboard/bucket-validator-fix

Reviewed-by: Aashish Sharma <aasharma@redhat.com>
Reviewed-by: Afreen Misbah <afreen@ibm.com>
This commit is contained in:
Afreen Misbah 2026-07-14 01:58:09 +05:30 committed by GitHub
commit 4522b9be68
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 56 additions and 4 deletions

View File

@ -550,7 +550,7 @@ class RgwUserTest(RgwTestCase):
self._delete('/api/rgw/user/teuth-test-user')
self.assertStatus(204)
self.get_rgw_user('teuth-test-user')
self.assertStatus(500)
self.assertStatus(404)
resp = self.jsonBody()
self.assertIn('detail', resp)
self.assertIn('failed request with status code 404', resp['detail'])
@ -593,7 +593,7 @@ class RgwUserTest(RgwTestCase):
self._delete('/api/rgw/user/test01$teuth-test-user')
self.assertStatus(204)
self.get_rgw_user('test01$teuth-test-user')
self.assertStatus(500)
self.assertStatus(404)
resp = self.jsonBody()
self.assertIn('detail', resp)
self.assertIn('failed request with status code 404', resp['detail'])

View File

@ -394,7 +394,11 @@ class RgwRESTController(RESTController):
result = json_str_to_object(result)
return result
except (DashboardException, RequestException) as e:
http_status_code = e.status if isinstance(e, DashboardException) else 500
response = getattr(e, 'response', None)
if isinstance(e, RequestException) and response is not None:
http_status_code = getattr(response, 'status_code', 500)
else:
http_status_code = getattr(e, 'status_code', getattr(e, 'status', None)) or 500
raise DashboardException(e, http_status_code=http_status_code, component='rgw')

View File

@ -2,7 +2,7 @@
from unittest.mock import Mock, call, patch
from .. import mgr
from ..controllers.rgw import Rgw, RgwDaemon, RgwTopic, RgwUser
from ..controllers.rgw import Rgw, RgwBucket, RgwDaemon, RgwTopic, RgwUser
from ..rest_client import RequestException
from ..services.rgw_client import RgwClient, RgwMultisite
from ..tests import ControllerTestCase, RgwStub
@ -600,3 +600,51 @@ class TestRgwTopicController(ControllerTestCase):
result = controller.delete(key='RGW22222222222222222:HttpTest')
mock_delete_topic.assert_called_with(key='RGW22222222222222222:HttpTest')
self.assertEqual(result, None)
class RgwBucketControllerTestCase(ControllerTestCase):
@classmethod
def setup_server(cls):
cls.setup_controllers([RgwBucket], '/test')
@patch('dashboard.services.rgw_client.RgwClient.admin_instance')
def test_get_bucket_not_found(self, mock_admin_instance):
mock_instance = Mock()
mock_admin_instance.return_value = mock_instance
mock_response = Mock()
mock_response.status_code = 404
mock_exception = RequestException('RGW REST API failed request')
mock_exception.response = mock_response
mock_instance.proxy.side_effect = mock_exception
self._get('/test/api/rgw/bucket/i-do-not-exist')
self.assertStatus(404)
@patch('dashboard.services.rgw_client.RgwClient.admin_instance')
def test_get_bucket_not_found_with_fallback_attribute(self, mock_admin_instance):
mock_instance = Mock()
mock_admin_instance.return_value = mock_instance
# mock that lacks a .response but has a direct .status_code attribute.
mock_exception = RequestException('RGW REST API failed request')
mock_exception.status_code = 404
mock_instance.proxy.side_effect = mock_exception
self._get('/test/api/rgw/bucket/i-do-not-exist')
self.assertStatus(404)
@patch('dashboard.services.rgw_client.RgwClient.admin_instance')
def test_get_bucket_server_error(self, mock_admin_instance):
mock_instance = Mock()
mock_admin_instance.return_value = mock_instance
mock_exception = RequestException('Internal Server Error')
mock_exception.status_code = 500
mock_instance.proxy.side_effect = mock_exception
self._get('/test/api/rgw/bucket/i-do-not-exist')
self.assertStatus(500)