[Manila] Add scenario for creation and deletion of security services

List of changes:
- Added support of 'create' and 'delete' operations for security services.
- Added benchmark for creating and deleting security services.

Change-Id: I26ba499f24d0cc0036fbc3c7b2e7f7239ffad583
This commit is contained in:
Valeriy Ponomaryov 2015-06-12 13:22:25 +03:00
parent 044d6f34b1
commit b779c01ab2
7 changed files with 220 additions and 0 deletions

View File

@ -85,3 +85,28 @@
sla: sla:
failure_rate: failure_rate:
max: 0 max: 0
ManilaShares.create_security_service_and_delete:
{% for s in ("ldap", "kerberos", "active_directory") %}
-
args:
security_service_type: {{s}}
dns_ip: "fake_dns_ip"
server: "fake-server"
domain: "fake_domain"
user: "fake_user"
password: "fake_password"
name: "fake_name"
description: "fake_description"
runner:
type: "constant"
times: 10
concurrency: 10
context:
users:
tenants: 1
users_per_tenant: 1
sla:
failure_rate:
max: 0
{% endfor %}

View File

@ -134,3 +134,35 @@ class ManilaShares(utils.ManilaScenario):
"host", "status", "share_network" and "project_id". "host", "status", "share_network" and "project_id".
""" """
self._list_share_servers(search_opts=search_opts) self._list_share_servers(search_opts=search_opts)
@validation.required_services(consts.Service.MANILA)
@validation.required_openstack(users=True)
@base.scenario(context={"cleanup": ["manila"]})
def create_security_service_and_delete(self, security_service_type,
dns_ip=None, server=None,
domain=None, user=None,
password=None, name=None,
description=None):
"""Creates security service and then deletes.
:param security_service_type: security service type, permitted values
are 'ldap', 'kerberos' or 'active_directory'.
:param dns_ip: dns ip address used inside tenant's network
:param server: security service server ip address or hostname
:param domain: security service domain
:param user: security identifier used by tenant
:param password: password used by user
:param name: security service name
:param description: security service description
"""
security_service = self._create_security_service(
security_service_type=security_service_type,
dns_ip=dns_ip,
server=server,
domain=domain,
user=user,
password=password,
name=name,
description=description,
)
self._delete_security_service(security_service)

View File

@ -172,3 +172,48 @@ class ManilaScenario(base.Scenario):
share_servers = self.admin_clients("manila").share_servers.list( share_servers = self.admin_clients("manila").share_servers.list(
search_opts=search_opts) search_opts=search_opts)
return share_servers return share_servers
@base.atomic_action_timer("manila.create_security_service")
def _create_security_service(self, security_service_type, dns_ip=None,
server=None, domain=None, user=None,
password=None, name=None, description=None):
"""Create security service.
'Security service' is data container in Manila that stores info
about auth services 'Active Directory', 'Kerberos' and catalog
service 'LDAP' that should be used for shares.
:param security_service_type: security service type, permitted values
are 'ldap', 'kerberos' or 'active_directory'.
:param dns_ip: dns ip address used inside tenant's network
:param server: security service server ip address or hostname
:param domain: security service domain
:param user: security identifier used by tenant
:param password: password used by user
:param name: security service name
:param description: security service description
:returns: instance of :class:`SecurityService`
"""
security_service = self.clients("manila").security_services.create(
type=security_service_type,
dns_ip=dns_ip,
server=server,
domain=domain,
user=user,
password=password,
name=name,
description=description)
return security_service
@base.atomic_action_timer("manila.delete_security_service")
def _delete_security_service(self, security_service):
"""Delete security service.
:param security_service: instance of :class:`SecurityService`.
"""
security_service.delete()
utils.wait_for_delete(
security_service,
update_resource=utils.get_from_manager(),
timeout=CONF.benchmark.manila_share_delete_timeout,
check_interval=CONF.benchmark.manila_share_delete_poll_interval)

View File

@ -0,0 +1,27 @@
{
"ManilaShares.create_security_service_and_delete": [
{
"args": {
"security_service_type": "active_directory",
"dns_ip": "fake_dns_ip",
"server": "fake-server",
"domain": "fake_domain",
"user": "fake_user",
"password": "fake_password",
"name": "fake_name",
"description": "fake_description"
},
"runner": {
"type": "constant",
"times": 10,
"concurrency": 10
},
"context": {
"users": {
"tenants": 1,
"users_per_tenant": 1
}
}
}
]
}

View File

@ -0,0 +1,20 @@
---
ManilaShares.create_security_service_and_delete:
-
args:
security_service_type: "active_directory"
dns_ip: "fake_dns_ip"
server: "fake-server"
domain: "fake_domain"
user: "fake_user"
password: "fake_password"
name: "fake_name"
description: "fake_description"
runner:
type: "constant"
times: 10
concurrency: 10
context:
users:
tenants: 1
users_per_tenant: 1

View File

@ -148,3 +148,37 @@ class ManilaSharesTestCase(test.TestCase):
scenario._list_share_servers.assert_called_once_with( scenario._list_share_servers.assert_called_once_with(
search_opts=search_opts) search_opts=search_opts)
@ddt.data(
{"security_service_type": "fake_type"},
{"name": "foo_name",
"security_service_type": "fake_type",
"dns_ip": "fake_dns_ip",
"server": "fake_server",
"domain": "fake_domain",
"user": "fake_user",
"password": "fake_password",
"description": "fake_description"},
)
def test_create_security_service_and_delete(self, params):
fake_ss = mock.MagicMock()
scenario = shares.ManilaShares()
scenario._create_security_service = mock.MagicMock(
return_value=fake_ss)
scenario._delete_security_service = mock.MagicMock()
expected_params = {
"security_service_type": params.get("security_service_type"),
"dns_ip": params.get("dns_ip"),
"server": params.get("server"),
"domain": params.get("domain"),
"user": params.get("user"),
"password": params.get("password"),
"name": params.get("name"),
"description": params.get("description"),
}
scenario.create_security_service_and_delete(**params)
scenario._create_security_service.assert_called_once_with(
**expected_params)
scenario._delete_security_service.assert_called_once_with(fake_ss)

View File

@ -148,3 +148,40 @@ class ManilaScenarioTestCase(test.ScenarioTestCase):
self.admin_clients( self.admin_clients(
"manila").share_servers.list.assert_called_once_with( "manila").share_servers.list.assert_called_once_with(
search_opts=params.get("search_opts", None)) search_opts=params.get("search_opts", None))
@ddt.data("ldap", "kerberos", "active_directory")
def test__create_security_service(self, ss_type):
fake_ss = mock.Mock()
self.clients("manila").security_services.create.return_value = fake_ss
data = {
"security_service_type": ss_type,
"dns_ip": "fake_dns_ip",
"server": "fake_server",
"domain": "fake_domain",
"user": "fake_user",
"password": "fake_password",
"name": "fake_name",
"description": "fake_description",
}
expected = dict(data)
expected["type"] = expected.pop("security_service_type")
result = self.scenario._create_security_service(**data)
self.assertEqual(fake_ss, result)
self.clients(
"manila").security_services.create.assert_called_once_with(
**expected)
@mock.patch(BM_UTILS + "get_from_manager")
@mock.patch(BM_UTILS + "wait_for_delete")
def test__delete_security_service(self, mock_wait_for_delete,
mock_get_from_manager):
fake_ss = mock.MagicMock()
self.scenario._delete_security_service(fake_ss)
fake_ss.delete.assert_called_once_with()
mock_get_from_manager.assert_called_once_with()
mock_wait_for_delete.assert_called_once_with(
fake_ss, update_resource=mock.ANY, timeout=180, check_interval=2)