diff options
author | sridhargaddam <sridhar.gaddam@enovance.com> | 2014-11-19 10:03:02 +0000 |
---|---|---|
committer | sridhargaddam <sridhar.gaddam@enovance.com> | 2015-01-15 14:34:00 +0000 |
commit | 845f4618f4818d3f536eda1dde8d9b9d860f0417 (patch) | |
tree | f1b1ec2f3bf1885a2869d4fe7342634a775091dd | |
parent | fe3d363b2ca67f130a4df83563177cdc45fde792 (diff) | |
download | python-neutronclient-845f4618f4818d3f536eda1dde8d9b9d860f0417.tar.gz |
Fix KeyError when filtering SG rule listing
extend_list API of ListSecurityGroupRule class assumes that the data
includes security_group_id and remote_group_id fields, which may not
be the case when we filter on other fields. This patch addresses this
issue.
Closes-Bug: #1359230
Change-Id: Icb38e6e926ae441116ac4a895650f80c24d373a6
-rw-r--r-- | neutronclient/neutron/v2_0/securitygroup.py | 6 | ||||
-rw-r--r-- | neutronclient/tests/unit/test_cli20_securitygroup.py | 23 |
2 files changed, 17 insertions, 12 deletions
diff --git a/neutronclient/neutron/v2_0/securitygroup.py b/neutronclient/neutron/v2_0/securitygroup.py index a1a2bf5..7f27eac 100644 --- a/neutronclient/neutron/v2_0/securitygroup.py +++ b/neutronclient/neutron/v2_0/securitygroup.py @@ -134,7 +134,8 @@ class ListSecurityGroupRule(neutronV20.ListCommand): sec_group_ids = set() for rule in data: for key in self.replace_rules: - sec_group_ids.add(rule[key]) + if key in rule: + sec_group_ids.add(rule[key]) sec_group_ids = list(sec_group_ids) def _get_sec_group_list(sec_group_ids): @@ -164,7 +165,8 @@ class ListSecurityGroupRule(neutronV20.ListCommand): for sg in secgroups if sg['name']]) for rule in data: for key in self.replace_rules: - rule[key] = sg_dict.get(rule[key], rule[key]) + if key in rule: + rule[key] = sg_dict.get(rule[key], rule[key]) def setup_columns(self, info, parsed_args): parsed_args.columns = self.replace_columns(parsed_args.columns, diff --git a/neutronclient/tests/unit/test_cli20_securitygroup.py b/neutronclient/tests/unit/test_cli20_securitygroup.py index 788da53..a906621 100644 --- a/neutronclient/tests/unit/test_cli20_securitygroup.py +++ b/neutronclient/tests/unit/test_cli20_securitygroup.py @@ -189,14 +189,9 @@ class CLITestV20SecurityGroupsJSON(test_cli20.CLITestV20Base): mox.IgnoreArg()) self._test_list_resources(resources, cmd, True) - def _test_extend_list(self, mox_calls): + def _test_extend_list(self, mox_calls, data): resources = "security_groups" - data = [{'name': 'default', - 'security_group_id': 'secgroupid%02d' % i, - 'remote_group_id': 'remgroupid%02d' % i} - for i in range(10)] - cmd = securitygroup.ListSecurityGroupRule( test_cli20.MyApp(sys.stdout), None) self.mox.StubOutWithMock(cmd, "get_client") @@ -226,8 +221,9 @@ class CLITestV20SecurityGroupsJSON(test_cli20.CLITestV20Base): sec_group_ids = set() for rule in data: for key in replace_rules: - sec_group_ids.add(rule[key]) - response.append({'id': rule[key], 'name': 'default'}) + if rule.get(key): + sec_group_ids.add(rule[key]) + response.append({'id': rule[key], 'name': 'default'}) sec_group_ids = list(sec_group_ids) result = [] @@ -260,7 +256,10 @@ class CLITestV20SecurityGroupsJSON(test_cli20.CLITestV20Base): 'X-Auth-Token', test_cli20.TOKEN)).AndReturn( responses[0]['response']) - self._test_extend_list(mox_calls) + data = [{'name': 'default', + 'remote_group_id': 'remgroupid%02d' % i} + for i in range(10)] + self._test_extend_list(mox_calls, data) def test_extend_list_exceed_max_uri_len(self): def mox_calls(path, data): @@ -282,7 +281,11 @@ class CLITestV20SecurityGroupsJSON(test_cli20.CLITestV20Base): 'X-Auth-Token', test_cli20.TOKEN)).AndReturn( item['response']) - self._test_extend_list(mox_calls) + data = [{'name': 'default', + 'security_group_id': 'secgroupid%02d' % i, + 'remote_group_id': 'remgroupid%02d' % i} + for i in range(10)] + self._test_extend_list(mox_calls, data) def test_list_security_group_rules_pagination(self): resources = "security_group_rules" |