poppy/tests/unit/provider/akamai/background_jobs/akamai_mocks.py

341 lines
13 KiB
Python

# Copyright (c) 2015 Rackspace, Inc.
#
# 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.
import random
import uuid
import json
import mock
from poppy.model.helpers import domain
from poppy.model.helpers import origin
from poppy.model import service
from poppy.model import ssl_certificate
class MockBootStrap(mock.Mock):
def __init__(self, conf):
super(MockBootStrap, self).__init__()
@property
def manager(self):
return MockManager()
class MockProviderDetails(mock.Mock):
def __init__(self, service_id):
super(MockProviderDetails, self).__init__()
self.service_id = service_id
def __getitem__(self, provider_name):
akamai_provider_detail_mock = mock.Mock()
akamai_provider_detail_mock.provider_service_id = ''.join([
'[{"protocol":',
' "https", "certificate": ',
'"san", "policy_name": "blog.testabc.com"}]'])
akamai_provider_detail_mock.status = 'deployed'
return akamai_provider_detail_mock
class MockManager(mock.Mock):
def __init__(self):
super(MockManager, self).__init__()
@property
def providers(self):
return self.get_providers()
@staticmethod
def get_providers():
akamai_mock_provider = mock.Mock()
akamai_mock_provider_obj = mock.Mock()
akamai_mock_provider_obj.service_controller = mock.Mock()
akamai_mock_provider_obj.akamai_conf = {
'property_id': 'prp_12345',
'contract_id': "B-ABCDE",
'group_id': 12345
}
akamai_mock_provider_obj.akamai_sps_api_client = MockSPSAPIClient()
akamai_mock_provider_obj.akamai_papi_api_client = MockPapiAPIClient()
akamai_mock_provider_obj.akamai_sps_api_base_url = (
'https://mybaseurl.net/config-secure-provisioning-service/'
'v1/sps-requests/{spsId}?'
'contractId=None&groupId=None')
akamai_mock_provider_obj.akamai_papi_api_base_url = (
'https://mybaseurl.net/papi/v0/{middle_part}/'
'?contractId=ctr_None&groupId=grp_None')
akamai_mock_provider.obj = akamai_mock_provider_obj
providers = {
'akamai': akamai_mock_provider,
}
return providers
@property
def services_controller(self):
return self.get_services_controller()
@staticmethod
def get_ssl_certificate_controller():
sc = mock.Mock()
sc.ssl_certificate_controller = MockStorageController()
return sc
@staticmethod
def get_services_controller():
sc = mock.Mock()
sc.storage_controller = MockStorageController()
return sc
class MockStorageController(mock.Mock):
def get_certs_by_domain(self, domain_name, project_id=None,
flavor_id=None,
cert_type=None):
return ssl_certificate.SSLCertificate(
"premium",
"blog.testabcd.com",
"san",
project_id=project_id,
cert_details={
'Akamai': {
u'cert_domain': u'secure2.san1.test_123.com',
u'extra_info': {
u'action': u'Waiting for customer domain '
'validation for blog.testabc.com',
u'akamai_spsId': str(random.randint(1, 100000)),
u'create_at': u'2015-09-29 16:09:12.429147',
u'san cert': u'secure2.san1.test_123.com',
u'status': u'create_in_progress'}
}
}
)
def get_service_details_by_domain_name(self, domain_name,
project_id=None):
r = service.Service(
str(uuid.uuid4()),
str(uuid.uuid4()),
[domain.Domain('wiki.cc', 'https', 'shared')],
[origin.Origin('mysite.com')],
"strawberry")
r.provider_details = MockProviderDetails(r.service_id)
return r
class MockPapiAPIClient(mock.Mock):
def __init__(self):
super(MockPapiAPIClient, self).__init__()
self.response_200 = mock.Mock(status_code=200)
def get(self, url):
if 'hostnames' in url and 'versions' in url:
self.response_200.text = json.dumps({
"accountId": "act_1-ABCDE",
"contractId": "B-ABCDE",
"groupId": "grp_12345",
"propertyId": "prp_12345",
"propertyName": "ssl.san.test_123.com_pm",
"propertyVersion": 2,
"etag": str(uuid.uuid4()),
"hostnames": {
"items": [{
"cnameType": "EDGE_HOSTNAME",
"edgeHostnameId": "ehn_1052022",
"cnameFrom": "www.testxxx.com",
"cnameTo": "ssl.test_123.com.edge_host_test.net"
}, {
"cnameType": "EDGE_HOSTNAME",
"edgeHostnameId": "ehn_1126816",
"cnameFrom": "secure.san2.test_789.com",
"cnameTo": "secure.test_456.com.edge_host_test.net"
}]
}
})
self.response_200.status_code = 200
return self.response_200
if 'edgehostnames' in url:
self.response_200.text = json.dumps({
"accountId": "act_1-ABCDE",
"contractId": "B-ABCDE",
"groupId": "grp_12345",
"edgeHostnames": {
"items": [{
"cnameType": "EDGE_HOSTNAME",
"edgeHostnameId": "ehn_1052022",
"domainPrefix": "secure1.san1.test_123.com",
"domainSuffix": "edge_host_test.net",
"ipVersionBehavior": "IPV4",
"secure": True,
"edgeHostnameDomain": "secure1.san1.test_123.com"
".edge_host_test.net"
}, {
"cnameType": "EDGE_HOSTNAME",
"edgeHostnameId": "ehn_1159587",
"domainPrefix": "secure2.san1.test_123.com",
"domainSuffix": "edge_host_test.net",
"ipVersionBehavior": "IPV4",
"secure": True,
"edgeHostnameDomain": "secure2.san1.test_123.com"
".edge_host_test.net"
}]
}
})
self.response_200.status_code = 200
return self.response_200
if 'activations' in url:
self.response_200.text = json.dumps({
"activationId": "atv_2511473",
"status": "SUCCESS"
})
if 'versions' in url:
self.response_200.text = json.dumps({
"propertyId": "prp_12345",
"propertyName": "secure.test_123.com_pm",
"accountId": "act_1-ABCDE",
"contractId": "B-ABCDE",
"groupId": "grp_12345",
"versions": {
"items": [{
"propertyVersion": 1,
"etag": str(uuid.uuid4())
}]
}
})
else:
self.response_200.text = json.dumps({
"properties": {
"items": [{
"accountId": "act_1-ABCDE",
"contractId": "B-ABCDE",
"groupId": "grp_12345",
"propertyId": "prp_12345",
"propertyName": "secure.test_123.com_pm",
"latestVersion": 2,
"stagingVersion": 2,
"productionVersion": 1
}]
}
})
self.response_200.status_code = 200
return self.response_200
def post(self, url, data=None, headers=None):
if 'activations' in url:
self.response_200.status_code = 201
self.response_200.text = json.dumps({
"activationLink": "/papi/v0/properties/prp_227429/"
"activations/atv_2511473?contractId"
"=ctr_C-2M6JYA&groupId=grp_12345",
'warnings': []
})
if 'versions' in url:
self.response_200.status_code = 201
return self.response_200
def put(self, url, data=None, headers=None):
if 'hostnames' in url:
self.response_200.text = json.dumps({
"accountId": "act_1-ABCDE",
"contractId": "B-ABCDE",
"groupId": "grp_12345",
"propertyId": "prp_12345",
"propertyName": "ssl.san.test_123.com_pm",
"propertyVersion": 2,
"etag": str(uuid.uuid4()),
"hostnames": {
"items": [{
"cnameType": "EDGE_HOSTNAME",
"edgeHostnameId": "ehn_1052022",
"cnameFrom": "secure.san1.test_789.com",
"cnameTo": "ssl.test_123.com.edge_host_test.net"
}, {
"cnameType": "EDGE_HOSTNAME",
"edgeHostnameId": "ehn_1126816",
"cnameFrom": "secure.san2.test_789.com",
"cnameTo": "secure.test_456.com.edge_host_test.net"
}, {
'cnameTo': 'secure.test_7891.com.edge_host_test.net',
'cnameFrom': 'www.blogyyy.com',
'edgeHostnameId': 'ehn_1126816',
'cnameType': u'EDGE_HOSTNAME'
}, {
'cnameTo': u'secure.test_7891.com.edge_host_test.net',
'cnameFrom': u'www.testxxx.com',
'edgeHostnameId': u'ehn_1126816',
'cnameType': u'EDGE_HOSTNAME'
}]
}
})
return self.response_200
class MockSPSAPIClient(mock.Mock):
def __init__(self):
super(MockSPSAPIClient, self).__init__()
self.response_200 = mock.Mock(status_code=200)
def get(self, url):
self.response_200.text = json.dumps({
"requestList":
[{"resourceUrl": "/config-secure-provisioning-service/"
"v1/sps-requests/1849",
"parameters": [{
"name": "cnameHostname",
"value": "secure.san3.test_123.com"
}, {"name": "createType", "value": "san"},
{"name": "csr.cn",
"value": "secure.san3.test_123.com"},
{"name": "csr.c", "value": "US"},
{"name": "csr.st", "value": "TX"},
{"name": "csr.l", "value": "San Antonio"},
{"name": "csr.o", "value": "Rackspace US Inc."},
{"name": "csr.ou", "value": "IT"},
{"name": "csr.sans",
"value": "secure.san3.test_123.com"},
{"name": "organization-information.organization-name",
"value": "Rackspace US Inc."},
{"name": "organization-information.address-line-one",
"value": "1 Fanatical Place"},
{"name": "organization-information.city",
"value": "San Antonio"}],
"lastStatusChange": "2015-03-19T21:47:10Z",
"spsId": random.randint(1, 10000),
"status": "SPS Request Complete",
"jobId": random.randint(1, 100000)}]})
self.response_200.status_code = 200
return self.response_200
def post(self, url, data=None, headers=None):
self.response_200.status_code = 202
self.response_200.text = json.dumps({
"spsId": 1789,
"resourceLocation":
"/config-secure-provisioning-service/v1/sps-requests/1856",
"Results": {
"size": 1,
"data": [{
"text": None,
"results": {
"type": "SUCCESS",
"jobID": 44434}
}]}})
return self.response_200
def put(self, url, data=None, headers=None):
return self.response_200