Return the actual name value for entities
It used to be the case that for secrets and containers, if the name was initially set to null, the GETing of the secret would actually return the UUID, which is not what's reflected in the database. This is now fixed. Issuing a GET for those entities will return what's actually in the database. On the other hand, there was a bug where the validator for secrets was actually turning empty strings into None, and this would be saved in the database. This was now fixed. Change-Id: I8ebcf752e47be97ecdd4cb3c5ab152b6717b5341
This commit is contained in:
parent
b77710c88a
commit
e4fd17cb70
@ -178,7 +178,7 @@ class NewSecretValidator(ValidatorBase):
|
||||
def _extract_name(self, json_data):
|
||||
"""Extracts and returns the name from the JSON data."""
|
||||
name = json_data.get('name')
|
||||
if name:
|
||||
if isinstance(name, six.string_types):
|
||||
return name.strip()
|
||||
return None
|
||||
|
||||
|
@ -323,7 +323,7 @@ class Secret(BASE, ModelBase):
|
||||
|
||||
return {
|
||||
'secret_id': self.id,
|
||||
'name': self.name or self.id,
|
||||
'name': self.name,
|
||||
'expiration': expiration,
|
||||
'algorithm': self.algorithm,
|
||||
'bit_length': self.bit_length,
|
||||
@ -601,7 +601,7 @@ class Container(BASE, ModelBase):
|
||||
def _do_extra_dict_fields(self):
|
||||
"""Sub-class hook method: return dict of fields."""
|
||||
return {'container_id': self.id,
|
||||
'name': self.name or self.id,
|
||||
'name': self.name,
|
||||
'type': self.type,
|
||||
'secret_refs': [
|
||||
{
|
||||
|
@ -127,12 +127,10 @@ class OrdersTestCase(base.TestCase):
|
||||
|
||||
# verify the new secret's name matches the name in the secret ref
|
||||
# in the newly created order.
|
||||
secret_id_from_ref = utils.get_id_from_ref(order_resp.model.secret_ref)
|
||||
secret_resp = self.secret_behaviors.get_secret_metadata(
|
||||
order_resp.model.secret_ref)
|
||||
self.assertEqual(secret_resp.status_code, 200)
|
||||
self.assertGreater(len(secret_id_from_ref), 0)
|
||||
self.assertEqual(secret_resp.model.name, secret_id_from_ref)
|
||||
self.assertEqual(secret_resp.model.name, test_model.meta['name'])
|
||||
|
||||
@testcase.attr('positive')
|
||||
def test_order_and_secret_metadata_same(self):
|
||||
|
@ -439,7 +439,8 @@ class SecretsTestCase(base.TestCase):
|
||||
'punctuation': ['~!@#$%^&*()_+`-={}[]|:;<>,.?'],
|
||||
'uuid': ['54262d9d-4bc7-4821-8df0-dc2ca8e112bb'],
|
||||
'len_255': [base.TestCase.max_sized_field],
|
||||
'empty': ['']
|
||||
'empty': [''],
|
||||
'null': [None]
|
||||
})
|
||||
@testcase.attr('positive')
|
||||
def test_secret_create_defaults_valid_name(self, name):
|
||||
|
@ -58,11 +58,15 @@ class BaseModel(object):
|
||||
have been removed.
|
||||
"""
|
||||
|
||||
# NOTE(jaosorior): deleting a key from the incoming dictionary actually
|
||||
# affects the model object. So we do a copy to avoid this.
|
||||
resulting_dict = dictionary.copy()
|
||||
|
||||
# Dumping the keys to a list as we'll be changing the dict size
|
||||
empty_keys = [k for k, v in dictionary.iteritems() if v is None]
|
||||
for k in empty_keys:
|
||||
del dictionary[k]
|
||||
return dictionary
|
||||
del resulting_dict[k]
|
||||
return resulting_dict
|
||||
|
||||
@classmethod
|
||||
def json_to_obj(cls, serialized_str):
|
||||
|
@ -14,6 +14,7 @@
|
||||
# limitations under the License.
|
||||
from testtools import testcase
|
||||
|
||||
from barbican.tests import utils
|
||||
from functionaltests.api import base
|
||||
from functionaltests.api.v1.behaviors import container_behaviors
|
||||
from functionaltests.api.v1.behaviors import secret_behaviors
|
||||
@ -70,6 +71,7 @@ create_container_empty_data = {
|
||||
}
|
||||
|
||||
|
||||
@utils.parameterized_test_case
|
||||
class ContainersTestCase(base.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
@ -149,11 +151,21 @@ class ContainersTestCase(base.TestCase):
|
||||
self.assertEqual(resp.status_code, 201)
|
||||
self.assertGreater(len(container_ref), 0)
|
||||
|
||||
@utils.parameterized_dataset({
|
||||
'alphanumeric': ['a2j3j6ll9'],
|
||||
'punctuation': ['~!@#$%^&*()_+`-={}[]|:;<>,.?'],
|
||||
'len_255': [str(bytearray().zfill(255))],
|
||||
'uuid': ['54262d9d-4bc7-4821-8df0-dc2ca8e112bb'],
|
||||
'empty': ['']
|
||||
})
|
||||
@testcase.attr('positive')
|
||||
def test_container_get_defaults(self):
|
||||
def test_container_get_defaults_w_valid_name(self, name):
|
||||
"""Covers getting a generic container with a three secrets."""
|
||||
test_model = container_models.ContainerModel(
|
||||
**create_container_defaults_data)
|
||||
overrides = {'name': name}
|
||||
test_model.override_values(**overrides)
|
||||
|
||||
secret_refs = []
|
||||
for secret_ref in test_model.secret_refs:
|
||||
secret_refs.append(secret_ref['secret_ref'])
|
||||
@ -166,9 +178,9 @@ class ContainersTestCase(base.TestCase):
|
||||
|
||||
# Verify the response data
|
||||
self.assertEqual(get_resp.status_code, 200)
|
||||
self.assertEqual(get_resp.model.name, "containername")
|
||||
self.assertEqual(get_resp.model.name, test_model.name)
|
||||
self.assertEqual(get_resp.model.container_ref, container_ref)
|
||||
self.assertEqual(get_resp.model.type, "generic")
|
||||
self.assertEqual(get_resp.model.type, test_model.type)
|
||||
|
||||
# Verify the secret refs in the response
|
||||
self.assertEqual(len(get_resp.model.secret_refs), 3)
|
||||
|
@ -16,6 +16,7 @@ import binascii
|
||||
|
||||
from testtools import testcase
|
||||
|
||||
from barbican.tests import utils
|
||||
from functionaltests.api import base
|
||||
from functionaltests.api.v1.behaviors import secret_behaviors
|
||||
from functionaltests.api.v1.models import secret_models
|
||||
@ -66,6 +67,7 @@ secret_create_two_phase_data = {
|
||||
}
|
||||
|
||||
|
||||
@utils.parameterized_test_case
|
||||
class SecretsTestCase(base.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
@ -90,10 +92,20 @@ class SecretsTestCase(base.TestCase):
|
||||
self.assertEqual(resp.model.status, "ACTIVE")
|
||||
self.assertGreater(resp.model.secret_ref, 0)
|
||||
|
||||
@utils.parameterized_dataset({
|
||||
'alphanumeric': ['1f34ds'],
|
||||
'punctuation': ['~!@#$%^&*()_+`-={}[]|:;<>,.?'],
|
||||
'uuid': ['54262d9d-4bc7-4821-8df0-dc2ca8e112bb'],
|
||||
'len_255': [str(bytearray().zfill(255))],
|
||||
'empty': [''],
|
||||
'null': [None]
|
||||
})
|
||||
@testcase.attr('positive')
|
||||
def test_secret_get_defaults_metadata(self):
|
||||
def test_secret_get_defaults_metadata_w_valid_name(self, name):
|
||||
"""Covers getting and checking a secret's metadata."""
|
||||
test_model = secret_models.SecretModel(**secret_create_defaults_data)
|
||||
overrides = {'name': name}
|
||||
test_model.override_values(**overrides)
|
||||
|
||||
resp, secret_ref = self.behaviors.create_secret(test_model)
|
||||
self.assertEqual(resp.status_code, 201)
|
||||
|
Loading…
x
Reference in New Issue
Block a user