Merge "Add share type change to Share Migration"
diff --git a/manila_tempest_tests/services/share/v2/json/shares_client.py b/manila_tempest_tests/services/share/v2/json/shares_client.py
index b5a745e..0ccc18b 100755
--- a/manila_tempest_tests/services/share/v2/json/shares_client.py
+++ b/manila_tempest_tests/services/share/v2/json/shares_client.py
@@ -1021,13 +1021,14 @@
force_host_assisted_migration=False,
new_share_network_id=None, writable=False,
preserve_metadata=False, nondisruptive=False,
- version=LATEST_MICROVERSION):
+ new_share_type_id=None, version=LATEST_MICROVERSION):
body = {
'migration_start': {
'host': host,
'force_host_assisted_migration': force_host_assisted_migration,
'new_share_network_id': new_share_network_id,
+ 'new_share_type_id': new_share_type_id,
'writable': writable,
'preserve_metadata': preserve_metadata,
'nondisruptive': nondisruptive,
diff --git a/manila_tempest_tests/tests/api/admin/test_migration.py b/manila_tempest_tests/tests/api/admin/test_migration.py
index ed643ff..0f55598 100644
--- a/manila_tempest_tests/tests/api/admin/test_migration.py
+++ b/manila_tempest_tests/tests/api/admin/test_migration.py
@@ -13,8 +13,11 @@
# License for the specific language governing permissions and limitations
# under the License.
+import six
+
import ddt
from tempest import config
+from tempest.lib.common.utils import data_utils
from tempest import test
from manila_tempest_tests.common import constants
@@ -59,6 +62,18 @@
CONF.share.run_driver_assisted_migration_tests):
raise cls.skipException("Share migration tests are disabled.")
+ extra_specs = {
+ 'storage_protocol': CONF.share.capability_storage_protocol,
+ 'driver_handles_share_servers': (
+ CONF.share.multitenancy_enabled),
+ 'snapshot_support': six.text_type(
+ CONF.share.capability_snapshot_support),
+ }
+ cls.new_type = cls.create_share_type(
+ name=data_utils.rand_name('new_share_type_for_migration'),
+ cleanup_in_class=True,
+ extra_specs=extra_specs)
+
@test.attr(type=[base.TAG_POSITIVE, base.TAG_BACKEND])
@base.skip_if_microversion_lt("2.22")
@ddt.data(True, False)
@@ -115,16 +130,19 @@
old_share_network_id = share['share_network_id']
new_share_network_id = self._create_secondary_share_network(
old_share_network_id)
+ old_share_type_id = share['share_type']
+ new_share_type_id = self.new_type['share_type']['id']
share = self.migrate_share(
share['id'], dest_pool,
force_host_assisted_migration=force_host_assisted,
- wait_for_status=task_state,
+ wait_for_status=task_state, new_share_type_id=new_share_type_id,
new_share_network_id=new_share_network_id)
self._validate_migration_successful(
- dest_pool, share, task_state,
- complete=False, share_network_id=old_share_network_id)
+ dest_pool, share, task_state, complete=False,
+ share_network_id=old_share_network_id,
+ share_type_id=old_share_type_id)
progress = self.shares_v2_client.migration_get_progress(share['id'])
@@ -135,7 +153,8 @@
self._validate_migration_successful(
dest_pool, share, constants.TASK_STATE_MIGRATION_SUCCESS,
- complete=True, share_network_id=new_share_network_id)
+ complete=True, share_network_id=new_share_network_id,
+ share_type_id=new_share_type_id)
def _setup_migration(self):
@@ -146,7 +165,7 @@
"needed to run share migration tests.")
share = self.create_share(self.protocol)
- share = self.shares_client.get_share(share['id'])
+ share = self.shares_v2_client.get_share(share['id'])
self.shares_v2_client.create_access_rule(
share['id'], access_to="50.50.50.50", access_level="rw")
@@ -174,7 +193,8 @@
def _validate_migration_successful(self, dest_pool, share, status_to_wait,
version=CONF.share.max_api_microversion,
- complete=True, share_network_id=None):
+ complete=True, share_network_id=None,
+ share_type_id=None):
statuses = ((status_to_wait,)
if not isinstance(status_to_wait, (tuple, list, set))
@@ -190,6 +210,8 @@
self.assertIn(share['task_state'], statuses)
if share_network_id:
self.assertEqual(share_network_id, share['share_network_id'])
+ if share_type_id:
+ self.assertEqual(share_type_id, share['share_type'])
# Share migrated
if complete:
diff --git a/manila_tempest_tests/tests/api/admin/test_migration_negative.py b/manila_tempest_tests/tests/api/admin/test_migration_negative.py
index 94450d2..5d7a578 100644
--- a/manila_tempest_tests/tests/api/admin/test_migration_negative.py
+++ b/manila_tempest_tests/tests/api/admin/test_migration_negative.py
@@ -13,7 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+import six
+
from tempest import config
+from tempest.lib.common.utils import data_utils
from tempest.lib import exceptions as lib_exc
from tempest import test
import testtools
@@ -65,6 +68,18 @@
cls.dest_pool = dest_pool['name']
+ extra_specs = {
+ 'storage_protocol': CONF.share.capability_storage_protocol,
+ 'driver_handles_share_servers': CONF.share.multitenancy_enabled,
+ 'snapshot_support': six.text_type(
+ not CONF.share.capability_snapshot_support),
+ }
+ cls.new_type = cls.create_share_type(
+ name=data_utils.rand_name(
+ 'new_invalid_share_type_for_migration'),
+ cleanup_in_class=True,
+ extra_specs=extra_specs)
+
@test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
@base.skip_if_microversion_lt("2.22")
def test_migration_cancel_invalid(self):
@@ -144,7 +159,18 @@
force_host_assisted_migration=True, writable=True,
preserve_metadata=True)
self.shares_v2_client.wait_for_migration_status(
- self.share['id'], self.dest_pool, 'migration_error')
+ self.share['id'], self.dest_pool,
+ constants.TASK_STATE_MIGRATION_ERROR)
+
+ @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
+ @base.skip_if_microversion_lt("2.22")
+ def test_migrate_share_change_type_no_valid_host(self):
+ self.shares_v2_client.migrate_share(
+ self.share['id'], self.dest_pool,
+ new_share_type_id=self.new_type['share_type']['id'])
+ self.shares_v2_client.wait_for_migration_status(
+ self.share['id'], self.dest_pool,
+ constants.TASK_STATE_MIGRATION_ERROR)
@test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
@base.skip_if_microversion_lt("2.22")
@@ -172,6 +198,14 @@
@base.skip_if_microversion_lt("2.22")
def test_migrate_share_invalid_share_network(self):
self.assertRaises(
- lib_exc.NotFound, self.shares_v2_client.migrate_share,
+ lib_exc.BadRequest, self.shares_v2_client.migrate_share,
self.share['id'], self.dest_pool,
new_share_network_id='invalid_net_id')
+
+ @test.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
+ @base.skip_if_microversion_lt("2.22")
+ def test_migrate_share_invalid_share_type(self):
+ self.assertRaises(
+ lib_exc.BadRequest, self.shares_v2_client.migrate_share,
+ self.share['id'], self.dest_pool, True,
+ new_share_type_id='invalid_type_id')
diff --git a/manila_tempest_tests/tests/api/base.py b/manila_tempest_tests/tests/api/base.py
index 6d0eb25..768a115 100644
--- a/manila_tempest_tests/tests/api/base.py
+++ b/manila_tempest_tests/tests/api/base.py
@@ -404,14 +404,14 @@
def migrate_share(
cls, share_id, dest_host, wait_for_status, client=None,
force_host_assisted_migration=False, new_share_network_id=None,
- **kwargs):
+ new_share_type_id=None, **kwargs):
client = client or cls.shares_v2_client
client.migrate_share(
share_id, dest_host,
force_host_assisted_migration=force_host_assisted_migration,
new_share_network_id=new_share_network_id,
writable=False, preserve_metadata=False, nondisruptive=False,
- **kwargs)
+ new_share_type_id=new_share_type_id, **kwargs)
share = client.wait_for_migration_status(
share_id, dest_host, wait_for_status, **kwargs)
return share