fix: deserialize details before get cert status

Change-Id: Ia9b897d93b4af05fd131d0d87c36838587f109e9
This commit is contained in:
Isaac Mungai 2016-08-05 13:55:24 -04:00
parent e6d866d79e
commit 0a67d6f7cc
6 changed files with 87 additions and 12 deletions

View File

@ -202,7 +202,7 @@ class ServicesController(base.ServicesBase):
yield '{0}{1}.{2}'.format(shard_prefix, shard_id, suffix)
def generate_shared_ssl_domain_suffix(self):
"""Rackespace DNS scheme to generate a shared ssl domain suffix,
"""Rackspace DNS scheme to generate a shared ssl domain suffix,
to be used with manager for shared ssl feature

View File

@ -34,8 +34,6 @@ class ProviderWrapper(object):
:param ext
:param provider_details
:param service_old
:param service_updates
:param service_obj
"""

View File

@ -418,7 +418,7 @@ class DefaultServicesController(base.ServicesController):
delattr(self, store)
# check if the service domain names already exist
# existing ones does not count!
# existing shared domains do not count!
for d in service_new.domains:
if self.storage_controller.domain_exists_elsewhere(
d.domain,

View File

@ -108,8 +108,8 @@ class SSLCertificate(common.DictSerializableModel):
if first_provider_cert_details is None:
return "create_in_progress"
else:
result = first_provider_cert_details.get('status',
"create_in_progress")
result = first_provider_cert_details.get(
'status', "create_in_progress")
if result not in VALID_STATUS_IN_CERT_DETAIL:
raise ValueError(
u'Status in cert_details: {0} not in valid options: {1}'.

View File

@ -115,10 +115,19 @@ class CertificatesController(base.CertificatesController):
CQL_CREATE_CERT,
consistency_level=self._driver.consistency_level)
self.session.execute(stmt, args)
self.insert_cert_status(
cert_obj.domain_name,
cert_obj.get_cert_status()
)
try:
provider_status = json.loads(
list(cert_obj.cert_details.values())[0]
)
cert_status = provider_status['extra_info']['status']
except (IndexError, IndexError, ValueError) as e:
LOG.error("Certificate details in inconsistent "
"state: {0}".format(cert_obj.cert_details))
LOG.error(e)
else:
# insert/update for cassandra
self.insert_cert_status(cert_obj.domain_name, cert_status)
def delete_certificate(self, project_id, domain_name, cert_type):
args = {
@ -170,8 +179,7 @@ class CertificatesController(base.CertificatesController):
provider_status = json.loads(list(cert_details.values())[0])
cert_status = provider_status['extra_info']['status']
except (IndexError, IndexError, ValueError) as e:
LOG.error("Certificate details "
"in inconsistent "
LOG.error("Certificate details in inconsistent "
"state: {0}".format(cert_details))
LOG.error(e)
else:

View File

@ -75,8 +75,77 @@ class TestSSLCertificate(base.TestCase):
}
ssl_cert.cert_details = cert_details
self.assertEqual(ssl_cert.get_cert_status(), 'deployed')
# check san edge on cert_type custom
self.assertEqual(ssl_cert.get_san_edge_name(), None)
cert_details['mock']['extra_info'] = {
'status': 'whatever'
}
self.assertRaises(ValueError, ssl_cert.get_cert_status)
def test_get_cert_status_extra_info_none(self):
project_id = '12345'
cert_details = {
'mock': {
'extra_info': None
}
}
flavor_id = 'myflavor'
domain_name = 'www.mydomain.com'
cert_type = 'san'
ssl_cert = ssl_certificate.SSLCertificate(project_id=project_id,
flavor_id=flavor_id,
domain_name=domain_name,
cert_type=cert_type,
cert_details=cert_details)
self.assertEqual(ssl_cert.get_cert_status(), 'create_in_progress')
self.assertEqual(ssl_cert.get_san_edge_name(), None)
def test_cert_details_is_none(self):
project_id = '12345'
cert_details = None
flavor_id = 'myflavor'
domain_name = 'www.mydomain.com'
cert_type = 'san'
ssl_cert = ssl_certificate.SSLCertificate(project_id=project_id,
flavor_id=flavor_id,
domain_name=domain_name,
cert_type=cert_type,
cert_details=cert_details)
self.assertEqual(ssl_cert.get_cert_status(), 'create_in_progress')
self.assertEqual(ssl_cert.get_san_edge_name(), None)
def test_get_san_edge_positive(self):
project_id = '12345'
cert_details = {
'mock': {
'extra_info': {
'san cert': 'secureX.sanX.content.com'
}
}
}
flavor_id = 'flavor'
domain_name = 'www.domain.com'
cert_type = 'san'
ssl_cert = ssl_certificate.SSLCertificate(project_id=project_id,
flavor_id=flavor_id,
domain_name=domain_name,
cert_type=cert_type,
cert_details=cert_details)
self.assertEqual(
ssl_cert.get_san_edge_name(), 'secureX.sanX.content.com')
def test_init_from_dict_positive(self):
ssl_cert = ssl_certificate.SSLCertificate.init_from_dict(
{'cert_type': 'san'})
self.assertIsNone(ssl_cert.flavor_id)
self.assertIsNone(ssl_cert.domain_name)
self.assertEqual('san', ssl_cert.cert_type)
self.assertEqual({}, ssl_cert.cert_details)
self.assertIsNone(ssl_cert.project_id)