self.routes = new_routes
def _add_default_gw_virtual_route(self, ex_gw_port, interface_name):
- default_gw_rts = []
gateway_ips = self._get_external_gw_ips(ex_gw_port)
+ if not gateway_ips:
+ return
+
+ default_gw_rts = []
+ instance = self._get_keepalived_instance()
for gw_ip in gateway_ips:
# TODO(Carl) This is repeated everywhere. A method would
# be nice.
default_gw = n_consts.IP_ANY[netaddr.IPAddress(gw_ip).version]
- instance = self._get_keepalived_instance()
default_gw_rts.append(keepalived.KeepalivedVirtualRoute(
default_gw, gw_ip, interface_name))
instance.virtual_routes.gateway_routes = default_gw_rts
addresses = ['15.1.2.2/24', '15.1.2.3/32']
ri._get_cidrs_from_keepalived = mock.MagicMock(return_value=addresses)
self.assertEqual(set(addresses), ri.get_router_cidrs(device))
+
+ def test__add_default_gw_virtual_route(self):
+ ri = self._create_router()
+ mock_instance = mock.Mock()
+ mock_instance.virtual_routes.gateway_routes = []
+ ri._get_keepalived_instance = mock.Mock(return_value=mock_instance)
+ subnets = [{'id': _uuid(),
+ 'cidr': '20.0.0.0/24',
+ 'gateway_ip': None}]
+ ex_gw_port = {'fixed_ips': [],
+ 'subnets': subnets,
+ 'extra_subnets': [],
+ 'id': _uuid(),
+ 'network_id': _uuid(),
+ 'mac_address': 'ca:fe:de:ad:be:ef'}
+ # Make sure no exceptional code
+ ri._add_default_gw_virtual_route(ex_gw_port, 'qg-abc')
+ self.assertEqual(0, len(mock_instance.virtual_routes.gateway_routes))
+
+ subnets.append({'id': _uuid(),
+ 'cidr': '30.0.0.0/24',
+ 'gateway_ip': '30.0.0.1'})
+ ri._add_default_gw_virtual_route(ex_gw_port, 'qg-abc')
+ self.assertEqual(1, len(mock_instance.virtual_routes.gateway_routes))