diff --git a/neutron_lbaas/services/loadbalancer/plugin.py b/neutron_lbaas/services/loadbalancer/plugin.py index 02084b138..177e11a7d 100644 --- a/neutron_lbaas/services/loadbalancer/plugin.py +++ b/neutron_lbaas/services/loadbalancer/plugin.py @@ -607,7 +607,7 @@ class LoadBalancerPluginv2(loadbalancerv2.LoadBalancerPluginBaseV2, curr_listener['default_tls_container_id']) if 'sni_container_refs' not in listener: listener['sni_container_ids'] = [ - container.tls_container_id for container in ( + container['tls_container_id'] for container in ( curr_listener['sni_containers'])] tls_containers_changed = False diff --git a/neutron_lbaas/tests/unit/db/loadbalancer/test_db_loadbalancerv2.py b/neutron_lbaas/tests/unit/db/loadbalancer/test_db_loadbalancerv2.py index 9cf901055..2fc39f5c5 100644 --- a/neutron_lbaas/tests/unit/db/loadbalancer/test_db_loadbalancerv2.py +++ b/neutron_lbaas/tests/unit/db/loadbalancer/test_db_loadbalancerv2.py @@ -1377,6 +1377,52 @@ class LbaasListenerTests(ListenerTestBase): ) self.assertEqual('', listener['default_tls_container_ref']) + def test_update_listener_without_sni_container_refs(self): + default_tls_container_ref = uuidutils.generate_uuid() + sni_tls_container_ref_1 = uuidutils.generate_uuid() + sni_tls_container_ref_2 = uuidutils.generate_uuid() + + listener_data = { + 'protocol': lb_const.PROTOCOL_TERMINATED_HTTPS, + 'default_tls_container_ref': default_tls_container_ref, + 'sni_container_refs': [sni_tls_container_ref_1, + sni_tls_container_ref_2], + 'protocol_port': 443, + 'admin_state_up': True, + 'tenant_id': self._tenant_id, + 'loadbalancer_id': self.lb_id + } + + with mock.patch('neutron_lbaas.services.loadbalancer.plugin.' + 'cert_parser.validate_cert') as validate_cert_mock,\ + mock.patch('neutron_lbaas.services.loadbalancer.plugin.' + 'CERT_MANAGER_PLUGIN.CertManager.' + 'get_cert') as get_cert_mock: + get_cert_mock.start().return_value = CertMock( + 'mock_cert') + validate_cert_mock.start().return_value = True + + # Default container and two SNI containers + # Test order and validation behavior. + listener = self.plugin.create_listener( + context.get_admin_context(), {'listener': listener_data}) + expected = [sni_tls_container_ref_1, sni_tls_container_ref_2] + self.assertEqual(expected, listener['sni_container_refs']) + # No changes on default container and the containers list + # Only update the listener name + # Test getting info from current and validation behavior. + updated_name = 'Updated Listener' + listener_data = {'name': updated_name} + listener = self.plugin.update_listener( + context.get_admin_context(), + listener['id'], + {'listener': listener_data} + ) + self.assertEqual(default_tls_container_ref, + listener['default_tls_container_ref']) + self.assertEqual(expected, listener['sni_container_refs']) + self.assertEqual(updated_name, listener['name']) + def test_delete_listener(self): with self.listener(no_delete=True, loadbalancer_id=self.lb_id) as listener: