diff options
author | Zuul <zuul@review.opendev.org> | 2023-05-16 18:07:39 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2023-05-16 18:07:39 +0000 |
commit | b9089acc627602893efc2dc3e456395d4147f518 (patch) | |
tree | 6c5275480c2232fb31c7997354ac934de4c5316e /nova | |
parent | f361ce2ab1c2cec12ace3ab6a3416747ccf1a630 (diff) | |
parent | 6b8d9d419170fb0ec2c6df561a0874e6362382c1 (diff) | |
download | nova-stable/2023.1.tar.gz |
Merge "Fix get_segments_id with subnets without segment_id" into stable/2023.1stable/2023.1
Diffstat (limited to 'nova')
-rw-r--r-- | nova/network/neutron.py | 2 | ||||
-rw-r--r-- | nova/tests/unit/network/test_neutron.py | 18 |
2 files changed, 18 insertions, 2 deletions
diff --git a/nova/network/neutron.py b/nova/network/neutron.py index affd76535f..dd3e4de05d 100644 --- a/nova/network/neutron.py +++ b/nova/network/neutron.py @@ -3896,7 +3896,7 @@ class API: 'Failed to get segment IDs for network %s' % network_id) from e # The segment field of an unconfigured subnet could be None return [subnet['segment_id'] for subnet in subnets - if subnet['segment_id'] is not None] + if subnet.get('segment_id') is not None] def get_segment_id_for_subnet( self, diff --git a/nova/tests/unit/network/test_neutron.py b/nova/tests/unit/network/test_neutron.py index fec66fb2d3..c551191e4c 100644 --- a/nova/tests/unit/network/test_neutron.py +++ b/nova/tests/unit/network/test_neutron.py @@ -7431,7 +7431,7 @@ class TestAPI(TestAPIBase): network_id=uuids.network_id, fields='segment_id') @mock.patch.object(neutronapi, 'get_client') - def test_get_segment_ids_for_network_with_no_segments(self, mock_client): + def test_get_segment_ids_for_network_with_segments_none(self, mock_client): subnets = {'subnets': [{'segment_id': None}]} mocked_client = mock.create_autospec(client.Client) mock_client.return_value = mocked_client @@ -7447,6 +7447,22 @@ class TestAPI(TestAPIBase): network_id=uuids.network_id, fields='segment_id') @mock.patch.object(neutronapi, 'get_client') + def test_get_segment_ids_for_network_with_no_segments(self, mock_client): + subnets = {'subnets': [{}]} + mocked_client = mock.create_autospec(client.Client) + mock_client.return_value = mocked_client + mocked_client.list_subnets.return_value = subnets + with mock.patch.object( + self.api, 'has_segment_extension', return_value=True, + ): + res = self.api.get_segment_ids_for_network( + self.context, uuids.network_id) + self.assertEqual([], res) + mock_client.assert_called_once_with(self.context, admin=True) + mocked_client.list_subnets.assert_called_once_with( + network_id=uuids.network_id, fields='segment_id') + + @mock.patch.object(neutronapi, 'get_client') def test_get_segment_ids_for_network_fails(self, mock_client): mocked_client = mock.create_autospec(client.Client) mock_client.return_value = mocked_client |