diff --git a/kuryr_kubernetes/tests/unit/platform/__init__.py b/kuryr_kubernetes/tests/unit/platform/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/kuryr_kubernetes/tests/unit/platform/ocp/controller/__init__.py b/kuryr_kubernetes/tests/unit/platform/ocp/controller/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/kuryr_kubernetes/tests/unit/platform/ocp/controller/handlers/test_route.py b/kuryr_kubernetes/tests/unit/platform/ocp/controller/handlers/test_route.py index 3e0c60f7e..a404d6d82 100644 --- a/kuryr_kubernetes/tests/unit/platform/ocp/controller/handlers/test_route.py +++ b/kuryr_kubernetes/tests/unit/platform/ocp/controller/handlers/test_route.py @@ -12,7 +12,7 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. -from kuryr_kubernetes.controller.drivers import l7_router as d_l7_rtr +from kuryr_kubernetes.controller.drivers import base as drv_base from kuryr_kubernetes.objects import lbaas as obj_lbaas from kuryr_kubernetes.objects import route as obj_route from kuryr_kubernetes.platform.ocp.controller.handlers import route as h_route @@ -23,12 +23,12 @@ import mock class TestOcpRouteHandler(test_base.TestCase): @mock.patch('kuryr_kubernetes.controller.drivers.base' - '.L7RouterDriver.get_instance') - def test_init(self, m_get_drv_l7_router): - m_get_drv_l7_router.return_value = mock.sentinel.drv_l7_router + '.LBaaSDriver.get_instance') + def test_init(self, m_get_drv_lbaas): + m_get_drv_lbaas.return_value = mock.sentinel.drv_lbaas handler = h_route.OcpRouteHandler() - self.assertEqual(mock.sentinel.drv_l7_router, handler._drv_l7_router) + self.assertEqual(mock.sentinel.drv_lbaas, handler._drv_lbaas) self.assertIsNone(handler._l7_router) self.assertIsNone(handler._l7_router_listeners) @@ -44,6 +44,12 @@ class TestOcpRouteHandler(test_base.TestCase): m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer( id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C', project_id='TEST_PROJECT') + m_handler._l7_router_listeners = obj_lbaas.LBaaSListener( + id='00EE9E11-91C2-41CF-8FD4-7970579E1234', + project_id='TEST_PROJECT', + name='http_listenr', + protocol='http', + port=80) h_route.OcpRouteHandler.on_present(m_handler, route_event) m_handler._sync_router_pool.assert_called_once_with( @@ -72,6 +78,13 @@ class TestOcpRouteHandler(test_base.TestCase): id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C', project_id='TEST_PROJECT') + m_handler._l7_router_listeners = obj_lbaas.LBaaSListener( + id='00EE9E11-91C2-41CF-8FD4-7970579E1234', + project_id='TEST_PROJECT', + name='http_listenr', + protocol='http', + port=80) + h_route.OcpRouteHandler.on_present(m_handler, route_event) m_handler._get_route_spec.assert_called_once_with( route_event) @@ -161,9 +174,10 @@ class TestOcpRouteHandler(test_base.TestCase): m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer( id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C', project_id='TEST_PROJECT') - m_handler._drv_l7_router = mock.Mock( - spec=d_l7_rtr.LBaaSv2L7RouterDriver) - m_handler._drv_l7_router.ensure_pool.return_value = None + m_handler._drv_lbaas = mock.Mock( + spec=drv_base.LBaaSDriver) + m_handler._drv_lbaas.get_pool_by_name.return_value = None + m_handler._drv_lbaas.ensure_pool_attached_to_lb.return_value = None route = {'metadata': {'namespace': 'namespace'}, 'spec': {'host': 'www.test.com', 'path': 'mypath', @@ -184,14 +198,16 @@ class TestOcpRouteHandler(test_base.TestCase): m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer( id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C', project_id='TEST_PROJECT') - m_handler._drv_l7_router = mock.Mock( - spec=d_l7_rtr.LBaaSv2L7RouterDriver) + m_handler._drv_lbaas = mock.Mock( + spec=drv_base.LBaaSDriver) ret_pool = obj_lbaas.LBaaSPool( name='TEST_NAME', project_id='TEST_PROJECT', protocol='TCP', listener_id='A57B7771-6050-4CA8-A63C-443493EC98AB', loadbalancer_id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C') - m_handler._drv_l7_router.ensure_pool.return_value = ret_pool + m_handler._drv_lbaas.get_pool_by_name.return_value = None + m_handler._drv_lbaas.ensure_pool_attached_to_lb.return_value = ret_pool + route = {'metadata': {'namespace': 'namespace'}, 'spec': {'host': 'www.test.com', 'path': 'mypath', 'to': {'name': 'target_service'}}} @@ -211,21 +227,21 @@ class TestOcpRouteHandler(test_base.TestCase): m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer( id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C', project_id='TEST_PROJECT') - m_handler._drv_l7_router = mock.Mock( - spec=d_l7_rtr.LBaaSv2L7RouterDriver) + m_handler._drv_lbaas = mock.Mock( + spec=drv_base.LBaaSDriver) listener = obj_lbaas.LBaaSListener( id='123443545', name='TEST_NAME', project_id='TEST_PROJECT', protocol='TCP', port=80, loadbalancer_id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C') m_handler._l7_router_listeners = {'80': listener} - l7_policy = obj_route.RouteL7Policy( + l7_policy = obj_lbaas.LBaaSL7Policy( id='00EE9E11-91C2-41CF-8FD4-7970579E5C44', name='myname', listener_id='00EE9E11-91C2-41CF-8FD4-7970579E5C45', redirect_pool_id='00EE9E11-91C2-41CF-8FD4-7970579E5C46', project_id='00EE9E11-91C2-41CF-8FD4-7970579E5C46') route_state = obj_route.RouteState() - m_handler._drv_l7_router.ensure_l7_policy.return_value = l7_policy + m_handler._drv_lbaas.ensure_l7_policy.return_value = l7_policy route = {'metadata': {'namespace': 'namespace', 'name': 'name'}, 'spec': {'host': 'www.test.com', 'path': 'mypath', @@ -244,9 +260,9 @@ class TestOcpRouteHandler(test_base.TestCase): m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer( id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C', project_id='TEST_PROJECT') - m_handler._drv_l7_router = mock.Mock( - spec=d_l7_rtr.LBaaSv2L7RouterDriver) - h_l7_rule = obj_route.RouteL7Rule( + m_handler._drv_lbaas = mock.Mock( + spec=drv_base.LBaaSDriver) + h_l7_rule = obj_lbaas.LBaaSL7Rule( id='00EE9E11-91C2-41CF-8FD4-7970579E5C44', compare_type='EQUAL_TO', l7policy_id='00EE9E11-91C2-41CF-8FD4-7970579E5C45', @@ -272,9 +288,9 @@ class TestOcpRouteHandler(test_base.TestCase): m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer( id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C', project_id='TEST_PROJECT') - m_handler._drv_l7_router = mock.Mock( - spec=d_l7_rtr.LBaaSv2L7RouterDriver) - h_l7_rule = obj_route.RouteL7Rule( + m_handler._drv_lbaas = mock.Mock( + spec=drv_base.LBaaSDriver) + h_l7_rule = obj_lbaas.LBaaSL7Rule( id='00EE9E11-91C2-41CF-8FD4-7970579E5C44', compare_type='EQUAL_TO', l7policy_id='00EE9E11-91C2-41CF-8FD4-7970579E5C45', @@ -291,7 +307,7 @@ class TestOcpRouteHandler(test_base.TestCase): path='mypath', to_service='target_service') - m_handler._drv_l7_router.ensure_l7_rule.return_value = h_l7_rule + m_handler._drv_lbaas.ensure_l7_rule.return_value = h_l7_rule h_route.OcpRouteHandler._sync_host_l7_rule( m_handler, route, route_spec, route_state) self.assertEqual(route_state.h_l7_rule.value, route['spec']['host']) @@ -301,90 +317,95 @@ class TestOcpRouteHandler(test_base.TestCase): m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer( id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C', project_id='TEST_PROJECT') - m_handler._drv_l7_router = mock.Mock( - spec=d_l7_rtr.LBaaSv2L7RouterDriver) + m_handler._drv_lbaas = mock.Mock( + spec=drv_base.LBaaSDriver) - old_p_l7_rule = obj_route.RouteL7Rule( - id='00EE9E11-91C2-41CF-8FD4-7970579E5C44', - compare_type='EQUAL_TO', - l7policy_id='00EE9E11-91C2-41CF-8FD4-7970579E5C45', - type='PATH', - value='/nice_path/') + l7_policy = obj_lbaas.LBaaSL7Policy( + id='00EE9E11-91C2-41CF-8FD4-7970579E6666', name='myname', + listener_id='00EE9E11-91C2-41CF-8FD4-7970579E5C45', + redirect_pool_id='00EE9E11-91C2-41CF-8FD4-7970579E5C46', + project_id='00EE9E11-91C2-41CF-8FD4-7970579E5C46') - route_state = obj_route.RouteState(p_l7_rule=old_p_l7_rule) + route_state = obj_route.RouteState( + l7_policy=l7_policy) route = {'metadata': {'namespace': 'namespace', 'name': 'name'}, - 'spec': {'host': 'new.www.test.com', 'path': 'mypath', + 'spec': {'host': 'new.www.test.com', 'path': '/nice_path', 'to': {'name': 'target_service'}}} - route_spec = obj_route.RouteSpec( - host='www.test.com', - path='mypath', - to_service='target_service') - - ret_p_l7_rule = obj_route.RouteL7Rule( - id='55559E11-91C2-41CF-8FD4-7970579E5C44', - compare_type='EQUAL_TO', - l7policy_id='55559E11-91C2-41CF-8FD4-7970579E5C45', - type='PATH', - value='/nice_path/') - - m_handler._drv_l7_router.ensure_l7_rule.return_value = ret_p_l7_rule - h_route.OcpRouteHandler._sync_path_l7_rule( - m_handler, route, route_spec, route_state) - self.assertEqual(route_state.p_l7_rule, old_p_l7_rule) - - def test_sync_path_l7_rule_route_spec_path_is_none(self): - m_handler = mock.Mock(spec=h_route.OcpRouteHandler) - m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer( - id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C', - project_id='TEST_PROJECT') - m_handler._drv_l7_router = mock.Mock( - spec=d_l7_rtr.LBaaSv2L7RouterDriver) - - old_p_l7_rule = obj_route.RouteL7Rule( - id='00EE9E11-91C2-41CF-8FD4-7970579E5C44', - compare_type='EQUAL_TO', - l7policy_id='00EE9E11-91C2-41CF-8FD4-7970579E5C45', - type='PATH', - value='/nice_path/') - - route_state = obj_route.RouteState(p_l7_rule=old_p_l7_rule) - - route = {'metadata': {'namespace': 'namespace', 'name': 'name'}, - 'spec': {'host': 'new.www.test.com', 'path': 'mypath', - 'to': {'name': 'target_service'}}} route_spec = obj_route.RouteSpec( host='www.test.com', path=None, to_service='target_service') - ret_p_l7_rule = obj_route.RouteL7Rule( + ret_p_l7_rule = obj_lbaas.LBaaSL7Rule( id='55559E11-91C2-41CF-8FD4-7970579E5C44', compare_type='EQUAL_TO', l7policy_id='55559E11-91C2-41CF-8FD4-7970579E5C45', type='PATH', - value='/nice_path/') + value='/nice_path') - m_handler._drv_l7_router.ensure_l7_rule.return_value = ret_p_l7_rule + m_handler._drv_lbaas.ensure_l7_rule.return_value = ret_p_l7_rule h_route.OcpRouteHandler._sync_path_l7_rule( m_handler, route, route_spec, route_state) self.assertEqual(route_state.p_l7_rule, ret_p_l7_rule) + m_handler._drv_lbaas.ensure_l7_rule.assert_called_once_with( + m_handler._l7_router, route_state.l7_policy, + 'EQUAL_TO', 'PATH', route['spec']['path']) + + def test_sync_path_l7_rule_edit_usecase(self): + m_handler = mock.Mock(spec=h_route.OcpRouteHandler) + m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer( + id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C', + project_id='TEST_PROJECT') + m_handler._drv_lbaas = mock.Mock( + spec=drv_base.LBaaSDriver) + + old_p_l7_rule = obj_lbaas.LBaaSL7Rule( + id='00EE9E11-91C2-41CF-8FD4-7970579E5C44', + compare_type='EQUAL_TO', + l7policy_id='00EE9E11-91C2-41CF-8FD4-7970579E5C45', + type='PATH', + value='/cur_path') + + route_state = obj_route.RouteState(p_l7_rule=old_p_l7_rule) + + route = {'metadata': {'namespace': 'namespace', 'name': 'name'}, + 'spec': {'host': 'new.www.test.com', 'path': '/new_path', + 'to': {'name': 'target_service'}}} + route_spec = obj_route.RouteSpec( + host='www.test.com', + path=old_p_l7_rule.value, + to_service='target_service') + + ret_p_l7_rule = obj_lbaas.LBaaSL7Rule( + id='00EE9E11-91C2-41CF-8FD4-7970579E5C44', + compare_type='EQUAL_TO', + l7policy_id='00EE9E11-91C2-41CF-8FD4-7970579E5C45', + type='PATH', + value=route['spec']['path']) + + m_handler._drv_lbaas.update_l7_rule.return_value = True + h_route.OcpRouteHandler._sync_path_l7_rule( + m_handler, route, route_spec, route_state) + self.assertEqual(route_state.p_l7_rule.value, ret_p_l7_rule.value) + m_handler._drv_lbaas.update_l7_rule.assert_called_once_with( + old_p_l7_rule, route['spec']['path']) def test_sync_path_l7_rule_route_spec_not_sync(self): m_handler = mock.Mock(spec=h_route.OcpRouteHandler) m_handler._l7_router = obj_lbaas.LBaaSLoadBalancer( id='00EE9E11-91C2-41CF-8FD4-7970579E5C4C', project_id='TEST_PROJECT') - m_handler._drv_l7_router = mock.Mock( - spec=d_l7_rtr.LBaaSv2L7RouterDriver) + m_handler._drv_lbaas = mock.Mock( + spec=drv_base.LBaaSDriver) - old_p_l7_rule = obj_route.RouteL7Rule( + old_p_l7_rule = obj_lbaas.LBaaSL7Rule( id='00EE9E11-91C2-41CF-8FD4-7970579E5C44', compare_type='EQUAL_TO', l7policy_id='00EE9E11-91C2-41CF-8FD4-7970579E5C45', type='PATH', - value='/nice_path/') + value='/cur_path') route_state = obj_route.RouteState(p_l7_rule=old_p_l7_rule) @@ -394,10 +415,11 @@ class TestOcpRouteHandler(test_base.TestCase): route_spec = obj_route.RouteSpec( host='www.test.com', - path='path', + path='/not_cur_path', to_service='target_service') - m_handler._drv_l7_router.update_l7_rule.return_value = None + m_handler._drv_lbaas.update_l7_rule.return_value = None h_route.OcpRouteHandler._sync_path_l7_rule( m_handler, route, route_spec, route_state) self.assertEqual(route_state.p_l7_rule.value, route['spec']['path']) + self.assertEqual(route_spec.path, route['spec']['path']) diff --git a/kuryr_kubernetes/tests/unit/test_object.py b/kuryr_kubernetes/tests/unit/test_object.py index a2d4daaa4..c7fafd353 100644 --- a/kuryr_kubernetes/tests/unit/test_object.py +++ b/kuryr_kubernetes/tests/unit/test_object.py @@ -35,6 +35,8 @@ object_data = { 'LBaaSRouteState': '1.0-bdf561462a2d337c0e0ae8cb10e9ff20', 'LBaaSServiceSpec': '1.0-d430ecd443f2b1999196bfe531e56f7e', 'LBaaSState': '1.0-a0ff7dce2d3f6ce1ffab4ff95a344361', + 'RouteSpec': '1.0-2f02b2e24b1ca2b94c2bbdb718bfc020', + 'RouteState': '1.0-2475dbeb6ebedabe2a1e235f9bc6b614', }