From f3eea6bbea06d2655caa0a3b507f7aaf2e7806af Mon Sep 17 00:00:00 2001 From: Ashley Rodriguez Date: Thu, 19 May 2022 20:49:06 +0000 Subject: [PATCH] [OSC] Add OSC Functional Tests Replica Export Location Adds osc functional tests for share replica export location list and show Partially-implements: bp openstack-client-support Change-Id: I4a97333d955bf4ea7eac18c60c476f0f3a8e233e --- manilaclient/tests/functional/osc/base.py | 26 ++++++++ .../test_share_replica_export_locations.py | 59 +++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 manilaclient/tests/functional/osc/test_share_replica_export_locations.py diff --git a/manilaclient/tests/functional/osc/base.py b/manilaclient/tests/functional/osc/base.py index c7d397823..ad04da6d7 100644 --- a/manilaclient/tests/functional/osc/base.py +++ b/manilaclient/tests/functional/osc/base.py @@ -298,6 +298,7 @@ class OSCClientTestBase(base.ClientTestBase): self.addCleanup( self.openstack, f'share snapshot delete {snapshot_object["id"]} --wait') + return snapshot_object def create_share_network(self, neutron_net_id=None, @@ -322,3 +323,28 @@ class OSCClientTestBase(base.ClientTestBase): f'share network delete {share_network_obj["id"]}' ) return share_network_obj + + def create_share_replica(self, share, availability_zone=None, + wait=None, add_cleanup=True): + cmd = (f'replica create {share}') + + if availability_zone: + cmd = cmd + f' --availability-zone {availability_zone}' + if wait: + cmd = cmd + ' --wait' + + replica_object = self.dict_result('share', cmd) + self._wait_for_object_status( + 'share replica', replica_object['id'], 'available') + + if add_cleanup: + self.addCleanup( + self.openstack, + f'share replica delete {replica_object["id"]} --wait' + ) + return replica_object + + def get_share_replica_export_locations(self, replica): + cmd = (f'replica export location list {replica}') + export_locations = self.listing_result('share', cmd) + return export_locations diff --git a/manilaclient/tests/functional/osc/test_share_replica_export_locations.py b/manilaclient/tests/functional/osc/test_share_replica_export_locations.py new file mode 100644 index 000000000..7e6f6a401 --- /dev/null +++ b/manilaclient/tests/functional/osc/test_share_replica_export_locations.py @@ -0,0 +1,59 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import json +from manilaclient.tests.functional.osc import base +from tempest.lib.common.utils import data_utils + + +class ShareReplicaExportLocationsCLITest(base.OSCClientTestBase): + + def test_openstack_share_replica_export_location_list(self): + slug = 'replica-supported' + share_type = self.create_share_type( + data_utils.rand_name(slug), 'False', extra_specs={ + 'replication_type': 'readable'}) + share = self.create_share(share_type=share_type['name']) + replica = self.create_share_replica(share['id'], wait=True) + rep_exp_loc_list = self.listing_result( + 'share replica export location', f'list {replica["id"]}') + self.assertTableStruct(rep_exp_loc_list, [ + 'ID', + 'Availability Zone', + 'Replica State', + 'Preferred', + 'Path' + ]) + exp_loc_list = self.openstack( + f'share replica show {replica["id"]} -f json') + exp_loc_list = json.loads(exp_loc_list) + + self.assertIn(exp_loc_list.get('export_locations')[0]['id'], + [item['ID'] for item in rep_exp_loc_list]) + + def test_openstack_share_replica_export_location_show(self): + slug = 'replica-supported' + share_type = self.create_share_type( + data_utils.rand_name(slug), 'False', extra_specs={ + 'replication_type': 'readable'}) + share = self.create_share(share_type=share_type['name']) + replica = self.create_share_replica(share['id'], wait=True) + rep_exp_loc_obj = self.get_share_replica_export_locations( + replica['id'])[0] + exp_loc_list = self.openstack( + f'share replica show {replica["id"]} -f json') + exp_loc_list = json.loads(exp_loc_list) + result = self.dict_result( + 'share replica export location', + f'show {replica["id"]} {rep_exp_loc_obj["ID"]}') + export_location = exp_loc_list['export_locations'][0] + self.assertEqual(result['id'], export_location['id'])