manila-tempest-plugin/manila_tempest_tests/tests/api/test_resource_locks_negative.py
Goutham Pacha Ravi 646fcd2e23 Test resource locks
Add API tests for the resource locks APIs

Change-Id: Idf71e236b1b8a2558bb4ad3de1018fa33b41877f
Partially-implements: bp/allow-locking-shares-against-deletion
Depends-On: I146bc09e4e8a39797e22458ff6860346e11e592e
Signed-off-by: Goutham Pacha Ravi <gouthampravi@gmail.com>
2023-08-21 16:52:44 -07:00

128 lines
4.9 KiB
Python

# 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.
from tempest import config
from tempest.lib import decorators
from tempest.lib import exceptions as lib_exc
from manila_tempest_tests.tests.api import base
from manila_tempest_tests import utils
CONF = config.CONF
LOCKS_MIN_API_VERSION = '2.81'
class ResourceLockNegativeTestAPIOnly(base.BaseSharesMixedTest):
@classmethod
def skip_checks(cls):
super(ResourceLockNegativeTestAPIOnly, cls).skip_checks()
utils.check_skip_if_microversion_not_supported(LOCKS_MIN_API_VERSION)
@decorators.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
@decorators.idempotent_id('dd978cf7-1622-49e8-a6c8-3da4ac6c6f86')
def test_create_resource_lock_invalid_resource(self):
self.assertRaises(
lib_exc.BadRequest,
self.shares_v2_client.create_resource_lock,
'invalid-share-id',
'share'
)
@decorators.attr(type=[base.TAG_NEGATIVE, base.TAG_API])
@decorators.idempotent_id('d5600bdc-72c8-43fd-9900-c112aa6c87fa')
def test_delete_resource_lock_invalid(self):
self.assertRaises(
lib_exc.NotFound,
self.shares_v2_client.delete_resource_lock,
'invalid-lock-id'
)
class ResourceLockNegativeTestWithShares(base.BaseSharesMixedTest):
@classmethod
def skip_checks(cls):
super(ResourceLockNegativeTestWithShares, cls).skip_checks()
utils.check_skip_if_microversion_not_supported(LOCKS_MIN_API_VERSION)
@classmethod
def resource_setup(cls):
super(ResourceLockNegativeTestWithShares, cls).resource_setup()
share_type = cls.create_share_type()
cls.share = cls.create_share(share_type_id=share_type['id'])
cls.user_project = cls.os_admin.projects_client.show_project(
cls.shares_v2_client.project_id)['project']
@decorators.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
@decorators.idempotent_id('658297a8-d675-471d-8a19-3d9e9af3a352')
def test_create_resource_lock_invalid_resource_action(self):
self.assertRaises(
lib_exc.BadRequest,
self.shares_v2_client.create_resource_lock,
self.share['id'],
'share',
resource_action='invalid-action'
)
@decorators.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
@decorators.idempotent_id('0057b3e7-c250-492d-805b-e355dff954ed')
def test_create_resource_lock_invalid_lock_reason_too_long(self):
self.assertRaises(
lib_exc.BadRequest,
self.shares_v2_client.create_resource_lock,
self.share['id'],
'share',
resource_action='delete',
lock_reason='invalid' * 150,
)
@decorators.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
@decorators.idempotent_id('a2db3d29-b42f-4c0b-b484-afd32f91f747')
def test_update_resource_lock_invalid_param(self):
lock = self.create_resource_lock(self.share['id'])
self.assertRaises(
lib_exc.BadRequest,
self.shares_v2_client.update_resource_lock,
lock['id'],
resource_action='invalid-action'
)
self.assertRaises(
lib_exc.BadRequest,
self.shares_v2_client.update_resource_lock,
lock['id'],
lock_reason='invalid' * 150,
)
@decorators.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
@decorators.idempotent_id('45b12120-0fc3-461f-8776-fdb92e599394')
def test_update_resource_lock_created_by_different_user(self):
lock = self.create_resource_lock(self.share['id'])
new_user = self.create_user_and_get_client(project=self.user_project)
self.assertRaises(
lib_exc.Forbidden,
new_user.shares_v2_client.update_resource_lock,
lock['id'],
lock_reason="I shouldn't be able to do this",
)
@decorators.attr(type=[base.TAG_NEGATIVE, base.TAG_API_WITH_BACKEND])
@decorators.idempotent_id('00a8ef2b-8769-4aad-aefc-43fc579492f7')
def test_delete_resource_lock_created_by_different_user(self):
lock = self.create_resource_lock(self.share['id'])
new_user = self.create_user_and_get_client(project=self.user_project)
self.assertRaises(
lib_exc.Forbidden,
new_user.shares_v2_client.delete_resource_lock,
lock['id'],
)