blob: 7256a105742b6281dce7599efb950bb0be791ffe [file] [log] [blame]
Marc Kodererc832c612016-12-12 11:49:10 +01001# Copyright 2016 SAP SE
2# All Rights Reserved.
3#
4# Licensed under the Apache License, Version 2.0 (the "License"); you may
5# not use this file except in compliance with the License. You may obtain
6# a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13# License for the specific language governing permissions and limitations
14# under the License.
15
16import functools
17
18from tempest import config
19from tempest import test
20
21from barbican_tempest_plugin import clients
22
23CONF = config.CONF
24
25# NOTE(dane-fichter): We need to track resource types for cleanup.
Peter Hamilton2adeed62017-02-01 12:23:45 -050026RESOURCE_TYPES = ['container', 'order', 'quota', 'secret']
Marc Kodererc832c612016-12-12 11:49:10 +010027
28
29def _get_uuid(href):
30 return href.split('/')[-1]
31
32
33def creates(resource):
34 """Decorator that adds resource UUIDs to queue for cleanup"""
35
36 def decorator(f):
37 @functools.wraps(f)
38 def wrapper(cls, *args, **kwargs):
39 resp = f(cls, *args, **kwargs)
Peter Hamilton7be3f7e2017-01-11 15:12:21 -050040 if resource == 'container':
41 uuid = _get_uuid(resp['container_ref'])
Peter Hamiltonf4166be2017-01-20 10:54:33 -050042 if resource == 'order':
43 uuid = _get_uuid(resp.get('order_ref'))
44 order_metadata = cls.get_order(uuid)
45 secret_ref = order_metadata.get('secret_ref')
46 if secret_ref:
47 cls.created_objects['secret'].add(_get_uuid(secret_ref))
Peter Hamilton2adeed62017-02-01 12:23:45 -050048 uuid = _get_uuid(resp['order_ref'])
49 if resource == 'quota':
50 uuid = _get_uuid(args[0])
Peter Hamiltonf4166be2017-01-20 10:54:33 -050051 if resource == 'secret':
52 uuid = _get_uuid(resp['secret_ref'])
Marc Kodererc832c612016-12-12 11:49:10 +010053 cls.created_objects[resource].add(uuid)
54 return resp
55 return wrapper
56 return decorator
57
58
59class BaseKeyManagerTest(test.BaseTestCase):
60 """Base class for all api tests."""
61
62 # Why do I have to be an admin to create secrets? No idea...
Peter Hamilton2adeed62017-02-01 12:23:45 -050063 credentials = ('admin', ['service_admin', 'key-manager:service-admin'])
Marc Kodererc832c612016-12-12 11:49:10 +010064 client_manager = clients.Clients
65 created_objects = {}
66
67 @classmethod
68 def setup_clients(cls):
69 super(BaseKeyManagerTest, cls).setup_clients()
70 os = getattr(cls, 'os_%s' % cls.credentials[0])
Peter Hamiltonee389172017-01-12 16:41:45 -050071 cls.consumer_client = os.secret_v1.ConsumerClient(
72 service='key-manager'
73 )
Peter Hamilton7be3f7e2017-01-11 15:12:21 -050074 cls.container_client = os.secret_v1.ContainerClient(
75 service='key-manager'
76 )
Peter Hamiltonf4166be2017-01-20 10:54:33 -050077 cls.order_client = os.secret_v1.OrderClient(service='key-manager')
78 cls.secret_client = os.secret_v1.SecretClient(service='key-manager')
dane-fichter2aff5072017-01-11 17:20:42 -080079 cls.secret_metadata_client = os.secret_v1.SecretMetadataClient(
80 service='key-manager'
81 )
Marc Kodererc832c612016-12-12 11:49:10 +010082
Peter Hamilton2adeed62017-02-01 12:23:45 -050083 os = getattr(cls, 'os_roles_%s' % cls.credentials[1][0])
84 cls.quota_client = os.secret_v1.QuotaClient(service='key-manager')
85
Marc Kodererc832c612016-12-12 11:49:10 +010086 @classmethod
87 def resource_setup(cls):
88 super(BaseKeyManagerTest, cls).resource_setup()
89 for resource in RESOURCE_TYPES:
90 cls.created_objects[resource] = set()
91
92 @classmethod
93 def resource_cleanup(cls):
94 try:
Peter Hamilton7be3f7e2017-01-11 15:12:21 -050095 for container_uuid in list(cls.created_objects['container']):
96 cls.delete_container(container_uuid)
Peter Hamiltonf4166be2017-01-20 10:54:33 -050097 for order_uuid in list(cls.created_objects['order']):
98 cls.delete_order(order_uuid)
Peter Hamilton2adeed62017-02-01 12:23:45 -050099 for project_quota_uuid in list(cls.created_objects['quota']):
100 cls.delete_project_quota(project_quota_uuid)
Peter Hamiltonf4166be2017-01-20 10:54:33 -0500101 for secret_uuid in list(cls.created_objects['secret']):
102 cls.delete_secret(secret_uuid)
Marc Kodererc832c612016-12-12 11:49:10 +0100103 finally:
104 super(BaseKeyManagerTest, cls).resource_cleanup()
105
106 @classmethod
Peter Hamilton7be3f7e2017-01-11 15:12:21 -0500107 @creates('container')
108 def create_container(cls, **kwargs):
109 return cls.container_client.create_container(**kwargs)
110
111 @classmethod
112 def delete_container(cls, uuid):
113 cls.created_objects['container'].remove(uuid)
114 return cls.container_client.delete_container(uuid)
Peter Hamiltonf4166be2017-01-20 10:54:33 -0500115
116 @classmethod
117 @creates('order')
118 def create_order(cls, **kwargs):
119 return cls.order_client.create_order(**kwargs)
120
121 @classmethod
122 def get_order(cls, uuid):
123 return cls.order_client.get_order(uuid)
124
125 @classmethod
126 def delete_order(cls, uuid):
127 cls.created_objects['order'].remove(uuid)
128 return cls.order_client.delete_order(uuid)
129
130 @classmethod
Peter Hamilton2adeed62017-02-01 12:23:45 -0500131 @creates('quota')
132 def create_project_quota(cls, project_id, **kwargs):
133 return cls.quota_client.create_project_quota(project_id, **kwargs)
134
135 @classmethod
136 def delete_project_quota(cls, project_id):
137 cls.created_objects['quota'].remove(project_id)
138 return cls.quota_client.delete_project_quota(project_id)
139
140 @classmethod
Peter Hamiltonf4166be2017-01-20 10:54:33 -0500141 @creates('secret')
142 def create_secret(cls, **kwargs):
143 return cls.secret_client.create_secret(**kwargs)
144
145 @classmethod
146 def delete_secret(cls, uuid):
147 cls.created_objects['secret'].remove(uuid)
148 return cls.secret_client.delete_secret(uuid)