|
15 | 15 | from unittest import mock
|
16 | 16 |
|
17 | 17 | import netaddr
|
| 18 | +from neutron_lib.callbacks import events |
18 | 19 | from neutron_lib import context
|
19 | 20 | from oslo_utils import uuidutils
|
20 | 21 |
|
@@ -120,13 +121,14 @@ def _make_address_group_ovo(self, *args, **kwargs):
|
120 | 121 | return_value=False)
|
121 | 122 | def _make_security_group_ovo(self, *args, **kwargs):
|
122 | 123 | attrs = {'id': uuidutils.generate_uuid(), 'revision_number': 1}
|
| 124 | + r_group = kwargs.get('remote_group_id') or attrs['id'] |
123 | 125 | sg_rule = securitygroup.SecurityGroupRule(
|
124 | 126 | id=uuidutils.generate_uuid(),
|
125 | 127 | security_group_id=attrs['id'],
|
126 | 128 | direction='ingress',
|
127 | 129 | ethertype='IPv4', protocol='tcp',
|
128 | 130 | port_range_min=400,
|
129 |
| - remote_group_id=attrs['id'], |
| 131 | + remote_group_id=r_group, |
130 | 132 | revision_number=1,
|
131 | 133 | remote_address_group_id=kwargs.get('remote_address_group_id',
|
132 | 134 | None),
|
@@ -198,6 +200,52 @@ def test_sg_member_update_events(self):
|
198 | 200 | self.sg_agent.security_groups_member_updated.assert_called_with(
|
199 | 201 | {s1.id})
|
200 | 202 |
|
| 203 | + def test_sg_delete_events_with_remote(self): |
| 204 | + s1 = self._make_security_group_ovo(remote_group_id='') |
| 205 | + s2 = self._make_security_group_ovo(remote_group_id=s1.id) |
| 206 | + rules = self.rcache.get_resources( |
| 207 | + 'SecurityGroupRule', |
| 208 | + filters={'security_group_id': (s1.id, s2.id)}) |
| 209 | + self.assertEqual(2, len(rules)) |
| 210 | + self.assertEqual(s1.id, rules[0].remote_group_id) |
| 211 | + |
| 212 | + self.shim._clear_child_sg_rules( |
| 213 | + 'SecurityGroup', 'after_delete', '', |
| 214 | + events.DBEventPayload( |
| 215 | + context=self.ctx, |
| 216 | + states=[s1] |
| 217 | + ) |
| 218 | + ) |
| 219 | + rules = self.rcache.get_resources( |
| 220 | + 'SecurityGroupRule', |
| 221 | + filters={'security_group_id': (s1.id, s2.id)}) |
| 222 | + self.assertEqual(0, len(rules)) |
| 223 | + |
| 224 | + def test_sg_delete_events_without_remote(self): |
| 225 | + s1 = self._make_security_group_ovo() |
| 226 | + s2 = self._make_security_group_ovo() |
| 227 | + rules = self.rcache.get_resources( |
| 228 | + 'SecurityGroupRule', |
| 229 | + filters={'security_group_id': (s1.id, s2.id)}) |
| 230 | + self.assertEqual(2, len(rules)) |
| 231 | + self.assertEqual(s1.id, rules[0].remote_group_id) |
| 232 | + |
| 233 | + self.shim._clear_child_sg_rules( |
| 234 | + 'SecurityGroup', 'after_delete', '', |
| 235 | + events.DBEventPayload( |
| 236 | + context=self.ctx, |
| 237 | + states=[s1] |
| 238 | + ) |
| 239 | + ) |
| 240 | + s1_rules = self.rcache.get_resources( |
| 241 | + 'SecurityGroupRule', |
| 242 | + filters={'security_group_id': (s1.id, )}) |
| 243 | + self.assertEqual(0, len(s1_rules)) |
| 244 | + s2_rules = self.rcache.get_resources( |
| 245 | + 'SecurityGroupRule', |
| 246 | + filters={'security_group_id': (s2.id, )}) |
| 247 | + self.assertEqual(1, len(s2_rules)) |
| 248 | + |
201 | 249 | def test_get_secgroup_ids_for_address_group(self):
|
202 | 250 | ag = self._make_address_group_ovo()
|
203 | 251 | sg1 = self._make_security_group_ovo(remote_address_group_id=ag.id)
|
|
0 commit comments