diff options
| author | zhangbailin <zhangbailin@inspur.com> | 2019-07-31 12:24:04 +0800 |
|---|---|---|
| committer | Dean Troyer <dtroyer@gmail.com> | 2019-11-19 21:07:20 +0000 |
| commit | 874a726f522dae3a08832f32230e2590a787d45c (patch) | |
| tree | 8faadf72d1f59fad6108f573046157993f257e9c /openstackclient/tests/unit | |
| parent | c6a171f0106714bc42045bcfdc308fe99ba6a275 (diff) | |
| download | python-openstackclient-874a726f522dae3a08832f32230e2590a787d45c.tar.gz | |
Microversion 2.79: Add delete_on_termination to volume-attach API
Added ``--disable-delete-on-termination`` and
``--enable-delete-on-termination`` options to the
``openstack server add volume`` command that enables users to mark
whether to delete the attached volume when the server is destroyed.
Depends-On: https://review.opendev.org/#/c/681267/
Part of blueprint support-delete-on-termination-in-server-attach-volume
Change-Id: I6b5cd54b82a1135335a71b9768a1a2c2012f755b
Diffstat (limited to 'openstackclient/tests/unit')
| -rw-r--r-- | openstackclient/tests/unit/compute/v2/test_server.py | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py index 5c98188a..c70d6d72 100644 --- a/openstackclient/tests/unit/compute/v2/test_server.py +++ b/openstackclient/tests/unit/compute/v2/test_server.py @@ -43,6 +43,10 @@ class TestServer(compute_fakes.TestComputev2): self.servers_mock = self.app.client_manager.compute.servers self.servers_mock.reset_mock() + # Get a shortcut to the compute client volumeManager Mock + self.servers_volumes_mock = self.app.client_manager.compute.volumes + self.servers_volumes_mock.reset_mock() + # Get a shortcut to the compute client FlavorManager Mock self.flavors_mock = self.app.client_manager.compute.flavors self.flavors_mock.reset_mock() @@ -457,6 +461,174 @@ class TestServerAddPort(TestServer): self.find_port.assert_not_called() +class TestServerVolume(TestServer): + + def setUp(self): + super(TestServerVolume, self).setUp() + + self.volume = volume_fakes.FakeVolume.create_one_volume() + self.volumes_mock.get.return_value = self.volume + + self.methods = { + 'create_server_volume': None, + } + + # Get the command object to test + self.cmd = server.AddServerVolume(self.app, None) + + def test_server_add_volume(self): + servers = self.setup_servers_mock(count=1) + arglist = [ + '--device', '/dev/sdb', + servers[0].id, + self.volume.id, + ] + verifylist = [ + ('server', servers[0].id), + ('volume', self.volume.id), + ('device', '/dev/sdb'), + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + result = self.cmd.take_action(parsed_args) + + self.servers_volumes_mock.create_server_volume.assert_called_once_with( + servers[0].id, self.volume.id, device='/dev/sdb') + self.assertIsNone(result) + + +class TestServerVolumeV279(TestServerVolume): + + def test_server_add_volume_with_enable_delete_on_termination(self): + self.app.client_manager.compute.api_version = api_versions.APIVersion( + '2.79') + + servers = self.setup_servers_mock(count=1) + arglist = [ + '--enable-delete-on-termination', + '--device', '/dev/sdb', + servers[0].id, + self.volume.id, + ] + + verifylist = [ + ('server', servers[0].id), + ('volume', self.volume.id), + ('device', '/dev/sdb'), + ('enable_delete_on_termination', True), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + result = self.cmd.take_action(parsed_args) + + self.servers_volumes_mock.create_server_volume.assert_called_once_with( + servers[0].id, self.volume.id, + device='/dev/sdb', delete_on_termination=True) + self.assertIsNone(result) + + def test_server_add_volume_with_disable_delete_on_termination(self): + self.app.client_manager.compute.api_version = api_versions.APIVersion( + '2.79') + + servers = self.setup_servers_mock(count=1) + arglist = [ + '--disable-delete-on-termination', + '--device', '/dev/sdb', + servers[0].id, + self.volume.id, + ] + + verifylist = [ + ('server', servers[0].id), + ('volume', self.volume.id), + ('device', '/dev/sdb'), + ('disable_delete_on_termination', True), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + result = self.cmd.take_action(parsed_args) + + self.servers_volumes_mock.create_server_volume.assert_called_once_with( + servers[0].id, self.volume.id, + device='/dev/sdb', delete_on_termination=False) + self.assertIsNone(result) + + def test_server_add_volume_with_enable_delete_on_termination_pre_v279( + self): + self.app.client_manager.compute.api_version = api_versions.APIVersion( + '2.78') + + servers = self.setup_servers_mock(count=1) + arglist = [ + servers[0].id, + self.volume.id, + '--enable-delete-on-termination', + ] + verifylist = [ + ('server', servers[0].id), + ('volume', self.volume.id), + ('enable_delete_on_termination', True), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + ex = self.assertRaises(exceptions.CommandError, + self.cmd.take_action, + parsed_args) + self.assertIn('--os-compute-api-version 2.79 or greater is required', + str(ex)) + + def test_server_add_volume_with_disable_delete_on_termination_pre_v279( + self): + self.app.client_manager.compute.api_version = api_versions.APIVersion( + '2.78') + + servers = self.setup_servers_mock(count=1) + arglist = [ + servers[0].id, + self.volume.id, + '--disable-delete-on-termination', + ] + verifylist = [ + ('server', servers[0].id), + ('volume', self.volume.id), + ('disable_delete_on_termination', True), + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + ex = self.assertRaises(exceptions.CommandError, + self.cmd.take_action, + parsed_args) + self.assertIn('--os-compute-api-version 2.79 or greater is required', + str(ex)) + + def test_server_add_volume_with_disable_and_enable_delete_on_termination( + self): + self.app.client_manager.compute.api_version = api_versions.APIVersion( + '2.79') + + servers = self.setup_servers_mock(count=1) + arglist = [ + '--enable-delete-on-termination', + '--disable-delete-on-termination', + '--device', '/dev/sdb', + servers[0].id, + self.volume.id, + ] + + verifylist = [ + ('server', servers[0].id), + ('volume', self.volume.id), + ('device', '/dev/sdb'), + ('enable_delete_on_termination', True), + ('disable_delete_on_termination', True), + ] + ex = self.assertRaises(utils.ParserException, + self.check_parser, + self.cmd, arglist, verifylist) + self.assertIn('Argument parse failed', str(ex)) + + class TestServerAddNetwork(TestServer): def setUp(self): |
