Fix regression with SG read API with empty ruleset

Used to be, we would return an empty list. Now, as of change
https://review.openstack.org/#/c/630401/, we don't return the
field at all. That's an API regression.

Go back to returning an empty list.

Change-Id: I295076155eea518152e2479f93f3cf1ea811a207
(cherry picked from commit cc4d5a2561)
This commit is contained in:
Doug Wiegley 2019-02-26 13:27:22 -07:00 committed by Adit Sarfaty
parent 871b86390a
commit f0a88de46f
2 changed files with 39 additions and 0 deletions

View File

@ -302,6 +302,8 @@ class SecurityGroupDbMixin(ext_sg.SecurityGroupPluginBase):
self._make_security_group_rule_dict(r.db_obj)
for r in security_group.rules
]
else:
res['security_group_rules'] = []
resource_extend.apply_funcs(ext_sg.SECURITYGROUPS, res,
security_group.db_obj)
return db_utils.resource_fields(res, fields)

View File

@ -698,6 +698,43 @@ class TestSecurityGroups(SecurityGroupDBTestCase):
for k, v, in keys:
self.assertEqual(sg_rule[0][k], v)
def test_get_security_group_empty_rules(self):
name = 'webservers'
description = 'my webservers'
with self.security_group(name, description) as sg:
remote_group_id = sg['security_group']['id']
self._delete_default_security_group_egress_rules(
remote_group_id)
res = self.new_show_request('security-groups', remote_group_id)
group = self.deserialize(
self.fmt, res.get_response(self.ext_api))
sg_rule = group['security_group']['security_group_rules']
self.assertEqual(group['security_group']['id'],
remote_group_id)
self.assertEqual(0, len(sg_rule))
def test_get_security_group_empty_rules_id_only(self):
name = 'webservers'
description = 'my webservers'
with self.security_group(name, description) as sg:
remote_group_id = sg['security_group']['id']
self._delete_default_security_group_egress_rules(
remote_group_id)
res = self.new_show_request('security-groups', remote_group_id,
fields=['id'])
group = self.deserialize(
self.fmt, res.get_response(self.ext_api))
secgroup = group['security_group']
self.assertFalse('security_group_rules' in secgroup)
self.assertEqual(group['security_group']['id'],
remote_group_id)
# This test case checks that admins from a different tenant can add rules
# as themselves. This is an odd behavior, with some weird GET semantics,
# but this test is checking that we don't break that old behavior, at least