summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammed Naser <mnaser@vexxhost.com>2018-02-20 16:47:06 -0500
committerMohammed Naser <mnaser@vexxhost.com>2018-02-21 18:07:03 -0500
commit9b59abc04475e51458112541ca2bb50e51599cfd (patch)
treeb76a2c6422ad217993c0a949c51ca4980ad8c16a
parentc1b3d8c2140197dca2d7037476953cc46cbae793 (diff)
downloadnova-9b59abc04475e51458112541ca2bb50e51599cfd.tar.gz
Add functional test for deleting BFV server with old attach flow
When creating a new instance and deleting it before it gets scheduled with the old attachment flow (reserve_volume), the block device mappings are not persisted to database which means that the clean up fails because it tries to lookup attachment_id which cannot be lazy loaded. This patch adds a (failing) functional test to check for this issue which will be addressed in a follow-up patch. Related-Bug: #1750666 Change-Id: I294c54e5a22dd6e5b226a4b00e7cd116813f0704 (cherry picked from commit 3120627d9802ceda46c2db387fec8fbc80700338)
-rw-r--r--nova/tests/functional/wsgi/test_servers.py43
1 files changed, 42 insertions, 1 deletions
diff --git a/nova/tests/functional/wsgi/test_servers.py b/nova/tests/functional/wsgi/test_servers.py
index 5cec3fda50..b0a6999125 100644
--- a/nova/tests/functional/wsgi/test_servers.py
+++ b/nova/tests/functional/wsgi/test_servers.py
@@ -10,6 +10,9 @@
# License for the specific language governing permissions and limitations
# under the License.
+import mock
+
+from nova.compute import api as compute_api
from nova import test
from nova.tests import fixtures as nova_fixtures
from nova.tests.functional import integrated_helpers
@@ -240,7 +243,45 @@ class ServersPreSchedulingTestCase(test.TestCase,
list_resp = list_resp.body['servers']
self.assertEqual(0, len(list_resp))
- def test_boot_from_volume_delete_build_request_pre_scheduling(self):
+ @mock.patch('nova.objects.service.get_minimum_version_all_cells',
+ return_value=compute_api.BFV_RESERVE_MIN_COMPUTE_VERSION)
+ def test_bfv_delete_build_request_pre_scheduling_ocata(self, mock_get):
+ cinder = self.useFixture(nova_fixtures.CinderFixture(self))
+
+ volume_id = nova_fixtures.CinderFixture.IMAGE_BACKED_VOL
+ server = self.api.post_server({
+ 'server': {
+ 'flavorRef': '1',
+ 'name': 'test_bfv_delete_build_request_pre_scheduling',
+ 'networks': 'none',
+ 'block_device_mapping_v2': [
+ {
+ 'boot_index': 0,
+ 'uuid': volume_id,
+ 'source_type': 'volume',
+ 'destination_type': 'volume'
+ },
+ ]
+ }
+ })
+
+ # Since _IntegratedTestBase uses the CastAsCall fixture, when we
+ # get the server back we know all of the volume stuff should be done.
+ self.assertIn(volume_id, cinder.reserved_volumes)
+
+ # Now delete the server, which should go through the "local delete"
+ # code in the API, find the build request and delete it along with
+ # detaching the volume from the instance.
+ self.api.delete_server(server['id'])
+
+ # The volume should no longer have any attachments as instance delete
+ # should have removed them.
+ # self.assertNotIn(volume_id, cinder.reserved_volumes)
+ # FIXME(mnaser): This is part of bug 1750666 where the BDMs aren't
+ # properly deleted because they don't exist in the database.
+ self.assertIn(volume_id, cinder.reserved_volumes)
+
+ def test_bfv_delete_build_request_pre_scheduling(self):
cinder = self.useFixture(
nova_fixtures.CinderFixtureNewAttachFlow(self))
# This makes the get_minimum_version_all_cells check say we're running