def test_sync_lbaas_members_svc_listener_port_edit(self, m_get_drv_lbaas, m_get_drv_project, m_get_drv_subnets): # REVISIT(ivc): test methods separately and verify ensure/release project_id = uuidutils.generate_uuid() subnet_id = uuidutils.generate_uuid() current_ip = '1.1.1.1' current_targets = {'1.1.1.101': (1001, 10001)} expected_ip = '1.1.1.1' expected_targets = {'1.1.1.101': (1201, 10001)} endpoints = self._generate_endpoints(expected_targets) state = self._generate_lbaas_state(current_ip, current_targets, project_id, subnet_id) spec = self._generate_lbaas_spec(expected_ip, expected_targets, project_id, subnet_id) m_drv_lbaas = mock.Mock(wraps=FakeLBaaSDriver()) m_drv_project = mock.Mock() m_drv_project.get_project.return_value = project_id m_drv_subnets = mock.Mock() m_drv_subnets.get_subnets.return_value = { subnet_id: mock.sentinel.subnet } m_get_drv_lbaas.return_value = m_drv_lbaas m_get_drv_project.return_value = m_drv_project m_get_drv_subnets.return_value = m_drv_subnets handler = h_lbaas.LoadBalancerHandler() with mock.patch.object(handler, '_get_pod_subnet') as m_get_pod_subnet: m_get_pod_subnet.return_value = subnet_id handler._sync_lbaas_members(endpoints, state, spec) self.assertEqual(expected_ip, str(state.loadbalancer.ip)) m_drv_lbaas.release_pool.assert_called_once()
def test_add_new_members_udp(self, m_get_drv_lbaas, m_get_drv_project, m_get_drv_subnets): project_id = str(uuid.uuid4()) subnet_id = str(uuid.uuid4()) current_ip = '1.1.1.1' current_targets = { '1.1.1.101': (1001, 10001), '1.1.1.111': (1001, 10001), '1.1.1.201': (2001, 20001)} expected_ip = '2.2.2.2' expected_targets = { '2.2.2.101': (1201, 12001), '2.2.2.111': (1201, 12001), '2.2.2.201': (2201, 22001)} endpoints = self._generate_endpoints(expected_targets) state = self._generate_lbaas_state( current_ip, current_targets, project_id, subnet_id) spec = self._generate_lbaas_spec(expected_ip, expected_targets, project_id, subnet_id, 'UDP') m_drv_lbaas = mock.Mock(wraps=FakeLBaaSDriver()) m_drv_project = mock.Mock() m_drv_project.get_project.return_value = project_id m_drv_subnets = mock.Mock() m_drv_subnets.get_subnets.return_value = { subnet_id: mock.sentinel.subnet} m_get_drv_lbaas.return_value = m_drv_lbaas m_get_drv_project.return_value = m_drv_project m_get_drv_subnets.return_value = m_drv_subnets handler = h_lbaas.LoadBalancerHandler() member_added = handler._add_new_members(endpoints, state, spec) self.assertEqual(member_added, False) m_drv_lbaas.ensure_member.assert_not_called()
def _sync_lbaas_members_impl(self, m_get_drv_lbaas, m_get_drv_project, m_get_drv_subnets, subnet_id, project_id, endpoints, state, spec): m_drv_lbaas = mock.Mock(wraps=FakeLBaaSDriver()) m_drv_project = mock.Mock() m_drv_project.get_project.return_value = project_id m_drv_subnets = mock.Mock() m_drv_subnets.get_subnets.return_value = { subnet_id: mock.sentinel.subnet } m_get_drv_lbaas.return_value = m_drv_lbaas m_get_drv_project.return_value = m_drv_project m_get_drv_subnets.return_value = m_drv_subnets handler = h_lbaas.LoadBalancerHandler() with mock.patch.object(handler, '_get_pod_subnet') as m_get_pod_subnet: m_get_pod_subnet.return_value = subnet_id handler._sync_lbaas_members(endpoints, state, spec) lsnrs = {lsnr.id: lsnr for lsnr in state.listeners} pools = {pool.id: pool for pool in state.pools} observed_targets = sorted( (str(member.ip), (lsnrs[pools[member.pool_id].listener_id].port, member.port)) for member in state.members) return observed_targets
def test_init(self, m_get_drv_lbaas, m_get_drv_project, m_get_drv_subnets): m_get_drv_lbaas.return_value = mock.sentinel.drv_lbaas m_get_drv_project.return_value = mock.sentinel.drv_project m_get_drv_subnets.return_value = mock.sentinel.drv_subnets handler = h_lbaas.LoadBalancerHandler() self.assertEqual(mock.sentinel.drv_lbaas, handler._drv_lbaas) self.assertEqual(mock.sentinel.drv_project, handler._drv_pod_project) self.assertEqual(mock.sentinel.drv_subnets, handler._drv_pod_subnets)
def __init__(self): super(KuryrK8sService, self).__init__() objects.register_locally_defined_vifs() pipeline = h_pipeline.ControllerPipeline(self.tg) self.watcher = watcher.Watcher(pipeline, self.tg) # TODO(ivc): pluggable resource/handler registration for resource in ["pods", "services", "endpoints"]: self.watcher.add("%s/%s" % (constants.K8S_API_BASE, resource)) pipeline.register(h_vif.VIFHandler()) pipeline.register(h_lbaas.LBaaSSpecHandler()) pipeline.register(h_lbaas.LoadBalancerHandler())
def test_init(self, m_get_drv_lbaas, m_get_drv_project, m_get_drv_subnets, m_get_drv_service_pub_ip, m_cfg): m_get_drv_lbaas.return_value = mock.sentinel.drv_lbaas m_get_drv_project.return_value = mock.sentinel.drv_project m_get_drv_subnets.return_value = mock.sentinel.drv_subnets m_get_drv_service_pub_ip.return_value = mock.sentinel.drv_lb_ip m_cfg.kubernetes.endpoints_driver_octavia_provider = 'default' handler = h_lbaas.LoadBalancerHandler() self.assertEqual(mock.sentinel.drv_lbaas, handler._drv_lbaas) self.assertEqual(mock.sentinel.drv_project, handler._drv_pod_project) self.assertEqual(mock.sentinel.drv_subnets, handler._drv_pod_subnets) self.assertEqual(mock.sentinel.drv_lb_ip, handler._drv_service_pub_ip) self.assertIsNone(handler._lb_provider)
def test_sync_lbaas_members(self, m_get_drv_lbaas, m_get_drv_project, m_get_drv_subnets): # REVISIT(ivc): test methods separately and verify ensure/release project_id = uuidutils.generate_uuid() subnet_id = uuidutils.generate_uuid() current_ip = '1.1.1.1' current_targets = { '1.1.1.101': (1001, 10001), '1.1.1.111': (1001, 10001), '1.1.1.201': (2001, 20001) } expected_ip = '2.2.2.2' expected_targets = { '2.2.2.101': (1201, 12001), '2.2.2.111': (1201, 12001), '2.2.2.201': (2201, 22001) } endpoints = self._generate_endpoints(expected_targets) state = self._generate_lbaas_state(current_ip, current_targets, project_id, subnet_id) spec = self._generate_lbaas_spec(expected_ip, expected_targets, project_id, subnet_id) m_drv_lbaas = mock.Mock(wraps=FakeLBaaSDriver()) m_drv_project = mock.Mock() m_drv_project.get_project.return_value = project_id m_drv_subnets = mock.Mock() m_drv_subnets.get_subnets.return_value = { subnet_id: mock.sentinel.subnet } m_get_drv_lbaas.return_value = m_drv_lbaas m_get_drv_project.return_value = m_drv_project m_get_drv_subnets.return_value = m_drv_subnets handler = h_lbaas.LoadBalancerHandler() with mock.patch.object(handler, '_get_pod_subnet') as m_get_pod_subnet: m_get_pod_subnet.return_value = subnet_id handler._sync_lbaas_members(endpoints, state, spec) lsnrs = {lsnr.id: lsnr for lsnr in state.listeners} pools = {pool.id: pool for pool in state.pools} observed_targets = sorted( (str(member.ip), (lsnrs[pools[member.pool_id].listener_id].port, member.port)) for member in state.members) self.assertEqual(sorted(expected_targets.items()), observed_targets) self.assertEqual(expected_ip, str(state.loadbalancer.ip))
def test_init_provider_ovn(self, m_get_drv_lbaas, m_get_drv_project, m_get_drv_subnets, m_get_drv_service_pub_ip, m_cfg, m_cleanup_leftover_lbaas, m_get_svc_sg_drv, m_get_svc_drv_project): m_get_drv_lbaas.return_value = mock.sentinel.drv_lbaas m_get_drv_project.return_value = mock.sentinel.drv_project m_get_drv_subnets.return_value = mock.sentinel.drv_subnets m_get_drv_service_pub_ip.return_value = mock.sentinel.drv_lb_ip m_get_svc_drv_project.return_value = mock.sentinel.drv_svc_project m_get_svc_sg_drv.return_value = mock.sentinel.drv_sg m_cfg.kubernetes.endpoints_driver_octavia_provider = 'ovn' handler = h_lbaas.LoadBalancerHandler() self.assertEqual(mock.sentinel.drv_lbaas, handler._drv_lbaas) self.assertEqual(mock.sentinel.drv_project, handler._drv_pod_project) self.assertEqual(mock.sentinel.drv_subnets, handler._drv_pod_subnets) self.assertEqual(mock.sentinel.drv_lb_ip, handler._drv_service_pub_ip) self.assertEqual(mock.sentinel.drv_svc_project, handler._drv_project) self.assertEqual(mock.sentinel.drv_sg, handler._drv_sg) self.assertEqual('ovn', handler._lb_provider)