Added support for HostHeaderType and HostHeaderValue while creating the service.

Implements: blueprint host-header-forwarding

Change-Id: I7fa82c7699cd300e1eb1966bbf3d25c7ab549ed6
This commit is contained in:
Anantha Arunachalam 2015-06-09 14:41:43 -04:00
parent 7ede82199d
commit 1a8edc0c22
18 changed files with 1552 additions and 173 deletions

View File

@ -20,11 +20,14 @@ from poppy.model.helpers import rule
class Origin(common.DictSerializableModel):
"""Origin."""
def __init__(self, origin, port=80, ssl=False, rules=[]):
def __init__(self, origin, hostheadertype='domain', hostheadervalue='-',
port=80, ssl=False, rules=[]):
self._origin = origin
self._port = port
self._ssl = ssl
self._rules = rules
self._hostheadertype = hostheadertype
self._hostheadervalue = hostheadervalue
@property
def origin(self):
@ -76,6 +79,26 @@ class Origin(common.DictSerializableModel):
# TODO(tonytan4ever) this field should by typed too
self._rules = value
@property
def hostheadertype(self):
"""hostheadertype."""
return self._hostheadertype
@hostheadertype.setter
def hostheadertype(self, value):
"""hostheadertype setter."""
self._hostheadertype = value
@property
def hostheadervalue(self):
"""hostheadervalue."""
return self._hostheadervalue
@hostheadervalue.setter
def hostheadervalue(self, value):
"""hostheadervalue setter."""
self._hostheadervalue = value
@classmethod
def init_from_dict(cls, dict_obj):
"""Construct a model instance from a dictionary.
@ -90,6 +113,10 @@ class Origin(common.DictSerializableModel):
o.origin = dict_obj.get("origin", "unnamed")
o.port = dict_obj.get("port", 80)
o.ssl = dict_obj.get("ssl", False)
o.hostheadertype = dict_obj.get("hostheadertype", "domain")
o.hostheadervalue = dict_obj.get("hostheadervalue", None)
if o.hostheadertype == 'origin':
o.hostheadervalue = o.origin
rules_dict_list = dict_obj.get("rules", [])
o.rules = []
for rule_dict in rules_dict_list:
@ -98,7 +125,6 @@ class Origin(common.DictSerializableModel):
new_rule.from_dict(rule_dict)
o.rules.append(new_rule)
return o
return o
def to_dict(self):
result = common.DictSerializableModel.to_dict(self)

View File

@ -478,6 +478,15 @@ class ServiceController(base.ServiceBase):
}
}
if origin.hostheadertype == 'custom':
origin_behavior_dict['params']['hostHeaderType'] = 'fixed'
origin_behavior_dict['params']['hostHeaderValue'] = \
origin.hostheadervalue
elif origin.hostheadertype == 'origin':
origin_behavior_dict['params']['hostHeaderType'] = 'origin'
origin_behavior_dict['params']['hostHeaderValue'] = \
origin.hostheadervalue
wildcards = []
# this is the global 'url-wildcard' rule

View File

@ -595,6 +595,8 @@ class ServicesController(base.ServicesController):
origins = [
origin.Origin(
o['origin'],
o.get('hostheadertype', 'domain'),
o.get('hostheadervalue', None),
o.get('port', 80),
o.get('ssl', False), [
rule.Rule(

View File

@ -20,10 +20,14 @@ from poppy.transport.pecan.models.request import rule
def load_from_json(json_data):
origin_name = json_data.get("origin")
origin_name = origin_name.rstrip("/")
hostheadertype = json_data.get("hostheadertype", "domain")
hostheadervalue = json_data.get("hostheadervalue", None)
port = json_data.get("port", 80)
ssl = json_data.get("ssl", False)
rules = json_data.get("rules", [])
rules = [rule.load_from_json(r) for r in rules]
result = origin.Origin(origin_name, port, ssl)
result = origin.Origin(origin=origin_name, hostheadertype=hostheadertype,
hostheadervalue=hostheadervalue, port=port,
ssl=ssl)
result.rules = rules
return result

View File

@ -31,3 +31,6 @@ class Model(collections.OrderedDict):
self['port'] = origin.port
self['ssl'] = origin.ssl
self['rules'] = [rule.Model(r) for r in origin.rules]
self['hostheadertype'] = origin.hostheadertype
if origin.hostheadervalue is not None:
self['hostheadervalue'] = origin.hostheadervalue

View File

@ -20,7 +20,6 @@ from poppy.transport.validators import schema_base
class ServiceSchema(schema_base.SchemaBase):
'''JSON Schmema validation for /service.'''
schema = {
@ -61,7 +60,7 @@ class ServiceSchema(schema_base.SchemaBase):
'required': True,
'type': 'string',
'enum': [
'http']
'http']
},
# When protocol is http
# certificate must be null
@ -83,13 +82,13 @@ class ServiceSchema(schema_base.SchemaBase):
'required': True,
'type': 'string',
'enum': [
'https']
'https']
},
'certificate': {
'required': True,
'type': 'string',
'enum': [
'shared']
'shared']
},
},
"additionalProperties": False
@ -106,14 +105,14 @@ class ServiceSchema(schema_base.SchemaBase):
'required': True,
'type': 'string',
'enum': [
'https']
'https']
},
'certificate': {
'required': True,
'type': 'string',
'enum': [
'san',
'custom']
'san',
'custom']
},
},
"additionalProperties": False
@ -127,50 +126,116 @@ class ServiceSchema(schema_base.SchemaBase):
# the first origin does not have to
# have rules field, it will be defaulted
# to global url matching
'items': [{
'type': 'object',
'properties': {
'origin': {
'type': 'string',
'pattern': re.compile(
'^(([^:/?#]+):)?'
'(//([^/?#]*))?'
'([^?#]*)(\?([^#]*))?'
'(#(.*))?$',
re.UNICODE
),
'required': True,
'minLength': 3,
'maxLength': 253},
'port': {
'type': 'integer',
'enum': [
80,
443]},
'ssl': {
'type': 'boolean'},
'rules': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'name': {
'type': 'string',
'required': True,
'minLength': 1,
'maxLength': 256
},
'request_url': {
'type': 'string',
'required': True,
'minLength': 1,
'maxLength': 1024
'items': {
'type': [{
'type': 'object',
'properties': {
'origin': {
'type': 'string',
'pattern': re.compile(
'^(([^:/?#]+):)?'
'(//([^/?#]*))?'
'([^?#]*)(\?([^#]*))?'
'(#(.*))?$',
re.UNICODE
),
'required': True,
'minLength': 3,
'maxLength': 253},
'port': {
'type': 'integer',
'enum': [
80,
443]},
'ssl': {
'type': 'boolean'},
'rules': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'name': {
'type': 'string',
'required': True,
'minLength': 1,
'maxLength': 256
},
'request_url': {
'type': 'string',
'required': True,
'minLength': 1,
'maxLength': 1024
}
}
}
},
'hostheadertype': {
'type': 'string',
'enum': ['domain', 'origin'],
'required': False,
},
}
}, {
'type': 'object',
'properties': {
'origin': {
'type': 'string',
'pattern': re.compile(
'^(([^:/?#]+):)?'
'(//([^/?#]*))?'
'([^?#]*)(\?([^#]*))?'
'(#(.*))?$',
re.UNICODE
),
'required': True,
'minLength': 3,
'maxLength': 253},
'port': {
'type': 'integer',
'enum': [
80,
443]},
'ssl': {
'type': 'boolean'},
'rules': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'name': {
'type': 'string',
'required': True,
'minLength': 1,
'maxLength': 256
},
'request_url': {
'type': 'string',
'required': True,
'minLength': 1,
'maxLength': 1024
}
}
}
},
'hostheadertype': {
'type': 'string',
'enum': ['custom'],
'required': False,
},
'hostheadervalue': {
'type': 'string',
'pattern': re.compile(
'^(([^:/?#]+):)?'
'(//([^/?#]*))?'
'([^?#]*)(\?([^#]*))?'
'(#(.*))?$',
re.UNICODE
),
'required': True,
}
}
}
}],
]},
'required': True,
'minItems': 1,
'maxItems': 10,
@ -220,6 +285,71 @@ class ServiceSchema(schema_base.SchemaBase):
'required': True,
'minItems': 1,
},
'hostheadertype': {
'type': 'string',
'enum': ['domain', 'origin'],
'required': False,
}
},
'type': 'object',
'properties': {
'origin': {
'type': 'string',
'pattern': re.compile(
'^(([^:/?#]+):)?'
'(//([^/?#]*))?'
'([^?#]*)(\?([^#]*))?'
'(#(.*))?$',
re.UNICODE
),
'required': True,
'minLength': 3,
'maxLength': 253},
'port': {
'type': 'integer',
'enum': [
80,
443]},
'ssl': {
'type': 'boolean'},
'rules': {
'type': 'array',
'items': {
'type': 'object',
'properties': {
'name': {
'type': 'string',
'required': True,
'minLength': 1,
'maxLength': 256,
},
'request_url': {
'type': 'string',
'required': True,
'minLength': 1,
'maxLength': 1024,
}
}
},
'required': True,
'minItems': 1,
},
'hostheadertype': {
'type': 'string',
'enum': ['custom'],
'required': False,
},
'hostheadervalue': {
'type': 'string',
'pattern': re.compile(
'^(([^:/?#]+):)?'
'(//([^/?#]*))?'
'([^?#]*)(\?([^#]*))?'
'(#(.*))?$',
re.UNICODE
),
'required': True,
}
}
}
},

View File

@ -1,4 +1,4 @@
pbr
pbr==0.11.0
Babel>=1.3
netaddr>=0.7.6

View File

@ -11,8 +11,9 @@
{
"name" : "default",
"request_url" : "/*"
}
]
}],
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}],
"caching_list": [
{
@ -58,11 +59,12 @@
"port": 80,
"ssl": false,
"rules": [
{
"name" : "default",
"request_url" : "/*"
}
]
{
"name": "default",
"request_url": "/*"
}],
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}],
"caching_list": []
},
@ -78,7 +80,9 @@
"name": "default rule",
"request_url": "/*"
}
]
],
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
},
{
"origin": "mywebsite2.com",
@ -89,7 +93,9 @@
"name": "images rules",
"request_url": "/images/*"
}
]
],
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"caching_list": [{"name": "default",
@ -109,7 +115,9 @@
"name": "default rule",
"request_url": "/*"
}
]
],
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
},
{
"origin": "mywebsite2.com",
@ -120,7 +128,9 @@
"name": "images rules",
"request_url": "/images/test.jpg"
}
]
],
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"caching_list": [{"name": "default",
@ -137,11 +147,12 @@
"port": 80,
"ssl": false,
"rules": [
{
"name" : "default",
"request_url" : "/*"
}
]
{
"name": "default",
"request_url": "/*"
}],
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}],
"caching_list": [
{
@ -192,7 +203,9 @@
"name" : "default",
"request_url" : "/*"
}
]
],
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}],
"caching_list": [
{
@ -242,8 +255,111 @@
"name" : "default",
"request_url" : "/*"
}
],
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}],
"caching_list": []
},
"origin_hostheadertype": {
"name": "origin_hostheadertype",
"domain_list": [{"domain": "my-website.com", "protocol": "http"}],
"origin_list": [{"origin": "mywebsite1.com",
"port": 80,
"ssl": false,
"hostheadertype": "origin",
"rules": [
{
"name" : "default",
"request_url" : "/*"
}
]
}],
"caching_list": []
},
"custom_hostheadertype": {
"name": "custom_hostheadertype",
"domain_list": [{"domain": "my-website.com", "protocol": "http"}],
"origin_list": [{"origin": "mywebsite1.com",
"port": 80,
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "customweb.com",
"rules": [
{
"name" : "default",
"request_url" : "/*"
}
]
}],
"caching_list": []
},
"domain_hostheadertype": {
"name": "domain_hostheadertype",
"domain_list": [{"domain": "my-website.com", "protocol": "http"}],
"origin_list": [{"origin": "mywebsite1.com",
"port": 80,
"ssl": false,
"rules": [
{
"name" : "default",
"request_url" : "/*"
}
]
}],
"caching_list": []
},
"origin_hostheadertype_other_hostheadervalue": {
"name": "origin_hostheadertype_other_hostheadervalue",
"domain_list": [{"domain": "my-website.com", "protocol": "http"}],
"origin_list": [{"origin": "mywebsite1.com",
"port": 80,
"ssl": false,
"rules": [
{
"name" : "default",
"request_url" : "/*"
}
],
"hostheadertype": "origin",
"hostheadervalue": "www.somewebsite.com"
}],
"caching_list": []
},
"multiple_hostheadertypes": {
"name": "multiple_hostheadertypes",
"domain_list": [{"domain": "my-website.com", "protocol": "http"}],
"origin_list": [{"origin": "mywebsite1.com",
"port": 80,
"ssl": false,
"rules": [
{
"name" : "default",
"request_url" : "/*"
}
]},
{"origin": "www.mywebsite23.com",
"port": 80,
"ssl": false,
"rules": [
{
"name" : "images",
"request_url" : "/images/testpic.jpg"
}],
"hostheadertype": "origin"
},
{"origin": "www.mywebsite34.com",
"port": 80,
"ssl": false,
"rules": [
{
"name" : "videos",
"request_url" : "/videos/testvideo.mp4"
}],
"hostheadertype": "custom",
"hostheadervalue": "www.mycustomweb.com"
}],
"caching_list": []
}
}

View File

@ -713,5 +713,62 @@
"rules": [{"name" : "index",
"request_url" : "/index.htm"}]}],
"restrictions_list": []
},
"invalid_hostheadertype":{
"service_name": "invalid_hostheadertype",
"domain_list": [{"domain": "mywebsite.com"}],
"origin_list": [{"origin": "mywebsite1.com",
"port": 443,
"ssl": false,
"hostheadertype": "org"}],
"caching_list": [],
"restrictions_list": []
},
"missing_hostheadervalue":{
"service_name": "missing_hostheadervalue",
"domain_list": [{"domain": "mywebsite.com"}],
"origin_list": [{"origin": "mywebsite1.com",
"port": 443,
"ssl": false,
"hostheadertype": "custom"}],
"caching_list": [],
"restrictions_list": []
},
"nonASCII_hostheadertype": {
"service_name": "nonASCII_hostheadertype",
"domain_list": [
{
"domain": "mywebsite.com"
}
],
"origin_list": [
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false,
"hostheadertype": ": איבערזעצן"
}
],
"caching_list": [],
"restrictions_list": []
},
"nonASCII_hostheadervalue": {
"service_name": "nonASCII_hostheadervalue",
"domain_list": [
{
"domain": "mywebsite.com"
}
],
"origin_list": [
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": ": איבערזעצן"
}
],
"caching_list": [],
"restrictions_list": []
}
}

View File

@ -8,7 +8,9 @@
"origin_list": [{"origin": "mywebsite1.com",
"port": 443,
"ssl": true,
"rules": [{ "name" : "default", "request_url" : "/*"}]
"rules": [{ "name" : "default", "request_url" : "/*"}],
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}],
"caching_list": [{"name": "default", "ttl": 3600},
{"name": "home",
@ -29,7 +31,9 @@
"certificate": "san"}],
"origin_list": [{"origin": "mywebsite1.com",
"port": 443,
"ssl": true}],
"ssl": true,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"}],
"caching_list": [{"name": "default", "ttl": 3600},
{"name": "home",
"ttl": 1200,
@ -48,7 +52,9 @@
"certificate": "custom"}],
"origin_list": [{"origin": "mywebsite1.com",
"port": 443,
"ssl": true}],
"ssl": true,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"}],
"caching_list": [{"name": "default", "ttl": 3600},
{"name": "home",
"ttl": 1200,
@ -68,7 +74,9 @@
],
"origin_list": [{"origin": "mywebsite1.com",
"port": 443,
"ssl": true}],
"ssl": true,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"}],
"caching_list": [{"name": "default", "ttl": 3600},
{"name": "home",
"ttl": 1200,

View File

@ -31,7 +31,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -78,7 +80,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -125,7 +129,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -172,7 +178,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -219,7 +227,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -266,7 +276,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -313,7 +325,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -360,7 +374,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -407,7 +423,9 @@
{
"origin": "%3Cscript%3Ealert%281%29%3C/script%3E",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -454,7 +472,9 @@
{
"origin": "mywebsite1.com",
"port": "%3Cscript%3Ealert%281%29%3C/script%3E",
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -501,7 +521,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -548,7 +570,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -595,7 +619,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -642,7 +668,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -689,7 +717,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": "%3Cscript%3Ealert%281%29%3C/script%3E"
"ssl": "%3Cscript%3Ealert%281%29%3C/script%3E",
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -736,7 +766,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -783,7 +815,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -830,7 +864,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -877,7 +913,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -924,7 +962,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -971,7 +1011,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1018,7 +1060,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1065,7 +1109,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1112,7 +1158,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1159,7 +1207,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1206,7 +1256,9 @@
{
"origin": "%22",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1253,7 +1305,9 @@
{
"origin": "mywebsite1.com",
"port": "%22",
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1300,7 +1354,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1347,7 +1403,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1394,7 +1452,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1441,7 +1501,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1488,7 +1550,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": "%22"
"ssl": "%22",
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1535,7 +1599,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1582,7 +1648,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1629,7 +1697,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1676,7 +1746,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1723,7 +1795,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1770,7 +1844,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1817,7 +1893,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1864,7 +1942,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1911,7 +1991,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -1958,7 +2040,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2005,7 +2089,9 @@
{
"origin": "<script>alert(1)</script>",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2052,7 +2138,9 @@
{
"origin": "mywebsite1.com",
"port": "<script>alert(1)</script>",
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2099,7 +2187,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2146,7 +2236,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2193,7 +2285,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2240,7 +2334,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2287,7 +2383,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": "<script>alert(1)</script>"
"ssl": "<script>alert(1)</script>",
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2334,7 +2432,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2381,7 +2481,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2428,7 +2530,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2475,7 +2579,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2522,7 +2628,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2569,7 +2677,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2616,7 +2726,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2663,7 +2775,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2710,7 +2824,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2757,7 +2873,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2804,7 +2922,9 @@
{
"origin": "<",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2851,7 +2971,9 @@
{
"origin": "mywebsite1.com",
"port": "<",
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2898,7 +3020,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2945,7 +3069,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -2992,7 +3118,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3039,7 +3167,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3086,7 +3216,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": "<"
"ssl": "<",
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3133,7 +3265,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3180,7 +3314,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3227,7 +3363,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3274,7 +3412,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3321,7 +3461,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3368,7 +3510,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3415,7 +3559,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3462,7 +3608,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3509,7 +3657,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3556,7 +3706,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3603,7 +3755,9 @@
{
"origin": ">",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3650,7 +3804,9 @@
{
"origin": "mywebsite1.com",
"port": ">",
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3697,7 +3853,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3744,7 +3902,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3791,7 +3951,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3838,7 +4000,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3885,7 +4049,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": ">"
"ssl": ">",
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3932,7 +4098,9 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
@ -3979,7 +4147,107 @@
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
{
"name": "test",
"rules": [
{
"name": "only me",
"referrer": "www.mywebsite.com"
}
]
}
]
},
"xss_escaped_jscript_into_hostheadertype": {
"caching_list": [
{
"name": "default",
"ttl": 3600
},
{
"name": "home",
"rules": [
{
"name": "index",
"request_url": "/index.htm"
}
],
"ttl": 1200
}
],
"domain_list": [
{
"domain": "www.domain1234.com",
"protocol": "http"
},
{
"domain": "blog.mywebsite.com",
"protocol": "http"
}
],
"name": "my_service_name",
"origin_list": [
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false,
"hostheadertype": "%3Cscript%3Ealert%281%29%3C/script%3E",
"hostheadervalue": "www.customweb.com"
}
],
"restrictions_list": [
{
"name": "test",
"rules": [
{
"name": "only me",
"referrer": "www.mywebsite.com"
}
]
}
]
},
"xss_escaped_jscript_into_hostheadervalue": {
"caching_list": [
{
"name": "default",
"ttl": 3600
},
{
"name": "home",
"rules": [
{
"name": "index",
"request_url": "/index.htm"
}
],
"ttl": 1200
}
],
"domain_list": [
{
"domain": "www.domain1234.com",
"protocol": "http"
},
{
"domain": "blog.mywebsite.com",
"protocol": "http"
}
],
"name": "my_service_name",
"origin_list": [
{
"origin": "mywebsite1.com",
"port": 443,
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "%3Cscript%3Ealert%281%29%3C/script%3E"
}
],
"restrictions_list": [

View File

@ -34,7 +34,9 @@
"name" : "default",
"request_url" : "/*"
}
]
],
"hostheadertype": "domain",
"hostheadervalue": null
}
]
}
@ -80,7 +82,9 @@
"name" : "default",
"request_url" : "/*"
}
]
],
"hostheadertype": "domain",
"hostheadervalue": null
}
],
"caching_list": [
@ -144,6 +148,20 @@
"origin": "mywebsite1.com",
"port": 80,
"ssl": false,
"rules": [
{
"name" : "default",
"request_url" : "/*"
}
],
"hostheadertype": "domain",
"hostheadervalue": null
}
],
"caching_list": [
{
"name": "default",
"ttl": 3600,
"rules": [
{
"name" : "default",
@ -152,6 +170,246 @@
]
}
],
"restrictions": [
{
"name": "test",
"rules": [
{
"name": "only me",
"referrer": "www.mywebsite.com",
"request_url": "/*"
}
]
}
]
}
},
"default_hostheadertype": {
"submit_value": {
"name": "my_service_name",
"domain_list": [
{
"domain": "mywebsite.com",
"protocol": "http"
}
],
"origin_list": [
{
"origin": "mywebsite1.com",
"port": 80,
"ssl": false
}
],
"caching_list": [
{
"name": "default",
"ttl": 3600
}
],
"restrictions": [
{
"name": "test",
"rules": [
{
"name": "only me",
"referrer": "www.mywebsite.com"
}
]
}
]
},
"expected_value": {
"name": "my_service_name",
"domain_list": [
{
"domain": "mywebsite.com",
"protocol": "http"
}
],
"origin_list": [
{
"origin": "mywebsite1.com",
"port": 80,
"ssl": false,
"rules": [
{
"name" : "default",
"request_url" : "/*"
}
],
"hostheadertype": "domain",
"hostheadervalue": null
}
],
"caching_list": [
{
"name": "default",
"ttl": 3600,
"rules": [
{
"name" : "default",
"request_url" : "/*"
}
]
}
],
"restrictions": [
{
"name": "test",
"rules": [
{
"name": "only me",
"referrer": "www.mywebsite.com",
"request_url": "/*"
}
]
}
]
}
},
"origin_hostheadertype": {
"submit_value": {
"name": "my_service_name",
"domain_list": [
{
"domain": "mywebsite.com",
"protocol": "http"
}
],
"origin_list": [
{
"origin": "mywebsite1.com",
"port": 80,
"ssl": false,
"hostheadertype": "origin"
}
],
"caching_list": [
{
"name": "default",
"ttl": 3600
}
],
"restrictions": [
{
"name": "test",
"rules": [
{
"name": "only me",
"referrer": "www.mywebsite.com"
}
]
}
]
},
"expected_value": {
"name": "my_service_name",
"domain_list": [
{
"domain": "mywebsite.com",
"protocol": "http"
}
],
"origin_list": [
{
"origin": "mywebsite1.com",
"port": 80,
"ssl": false,
"rules": [
{
"name" : "default",
"request_url" : "/*"
}
],
"hostheadertype": "origin",
"hostheadervalue": "mywebsite1.com"
}
],
"caching_list": [
{
"name": "default",
"ttl": 3600,
"rules": [
{
"name" : "default",
"request_url" : "/*"
}
]
}
],
"restrictions": [
{
"name": "test",
"rules": [
{
"name": "only me",
"referrer": "www.mywebsite.com",
"request_url": "/*"
}
]
}
]
}
},
"custom_hostheadertype": {
"submit_value": {
"name": "my_service_name",
"domain_list": [
{
"domain": "mywebsite.com",
"protocol": "http"
}
],
"origin_list": [
{
"origin": "mywebsite1.com",
"port": 80,
"ssl": false,
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"caching_list": [
{
"name": "default",
"ttl": 3600
}
],
"restrictions": [
{
"name": "test",
"rules": [
{
"name": "only me",
"referrer": "www.mywebsite.com"
}
]
}
]
},
"expected_value": {
"name": "my_service_name",
"domain_list": [
{
"domain": "mywebsite.com",
"protocol": "http"
}
],
"origin_list": [
{
"origin": "mywebsite1.com",
"port": 80,
"ssl": false,
"rules": [
{
"name" : "default",
"request_url" : "/*"
}
],
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
],
"caching_list": [
{
"name": "default",

View File

@ -46,7 +46,7 @@
"replace_origin": [
{"op": "replace",
"path": "/origins/0",
"value": {"origin": "1.2.3.4", "port": 80, "rules": [{"name": "default", "request_url": "/replacement"}], "ssl": false}}
"value": {"origin": "1.2.3.4", "port": 80, "rules": [{"name": "default", "request_url": "/replacement"}], "ssl": false, "hostheadertype": "custom", "hostheadervalue": "www.customweb.com"}}
],
"add_origin": [
{"op": "add",
@ -113,11 +113,25 @@
{"op": "remove",
"path": "/origins/0"}
],
"add_origin_with_origin_hostheadertype": [
{"op": "add",
"path": "/origins/1",
"value": {"origin": "1.2.3.4", "port": 80, "ssl": false,
"rules": [{"name" : "origin", "request_url" : "/origin.htm"}], "hostheadertype": "origin"}
}
],
"add_origin_with_custom_hostheadertype": [
{"op": "add",
"path": "/origins/1",
"value": {"origin": "1.2.3.4", "port": 80, "ssl": false,
"rules": [{"name" : "origin", "request_url" : "/origin.htm"}], "hostheadertype": "custom", "hostheadervalue": "www.mycustom.com"}
}
],
"add_caching": [
{"op": "add",
"path": "/caching/-",
"value": {"name": "cache_name", "ttl": 111,
"rules": [{"name" : "index","request_url" : "/cats.jpg"}]}}
"rules": [{"name" : "index","request_url" : "/cats.jpg"}] }}
],
"add_caching_with_minimum_length_name": [
{"op": "add",
@ -225,7 +239,7 @@
{"op": "replace",
"path": "/origins/0",
"value": {"origin": "1.1.1.1", "port": 443, "ssl": true,
"rules": [{"name" : "origin", "request_url" : "/origin2.htm"}]}}
"rules": [{"name" : "origin", "request_url" : "/origin2.htm"}], "hostheadertype": "custom", "hostheadervalue": "www.customweb.com"}}
],
"empty_list": []
}

View File

@ -20,6 +20,7 @@ import urlparse
import uuid
import ddt
import jsonpatch
from nose.plugins import attrib
from tests.api import base
@ -83,6 +84,11 @@ class TestCreateService(providers.TestProviderBase):
for item in origin_list:
if 'rules' not in item:
item[u'rules'] = []
if 'hostheadertype' not in item:
item[u'hostheadertype'] = 'domain'
item[u'hostheadervalue'] = None
elif item['hostheadertype'] == 'origin':
item[u'hostheadervalue'] = item['origin']
self.assertEqual(body['origins'], origin_list)
# TODO(malini): uncomment below after caching list is implemented.
@ -163,7 +169,9 @@ class TestListServices(base.TestBase):
prefix='api-test-domain') + '.com'}]
self.origin_list = [{"origin": self.generate_random_string(
prefix='api-test-origin') + '.com', "port": 80, "ssl": False}]
prefix='api-test-origin') + '.com', "port": 80, "ssl": False,
"hostheadertype": "custom", "hostheadervalue":
"www.customweb.com"}]
self.caching_list = [{"name": "default", "ttl": 3600},
{"name": "home", "ttl": 1200,
@ -292,7 +300,9 @@ class TestServiceActions(base.TestBase):
u"rules": [{
u"name": u"default",
u"request_url": u"/*"
}]
}],
u"hostheadertype": "custom",
u"hostheadervalue": "www.customweb.com"
}
]
@ -423,6 +433,476 @@ class TestServiceActions(base.TestBase):
super(TestServiceActions, self).tearDown()
@ddt.ddt
class TestServicePatch(base.TestBase):
"""Tests for PATCH Services."""
def setUp(self):
super(TestServicePatch, self).setUp()
self.service_name = self.generate_random_string(prefix='api-test')
self.flavor_id = self.test_flavor
self.log_delivery = {"enabled": False}
domain = self.generate_random_string(prefix='api-test-domain') + '.com'
self.domain_list = [
{
"domain": domain,
"protocol": "http"
}
]
origin = self.generate_random_string(prefix='api-test-origin') + '.com'
self.origin_list = [
{
"origin": origin,
"port": 80,
"ssl": False,
"rules": [
{
"name": "default",
"request_url": "/*"
}
],
"hostheadertype": "domain",
"hostheadervalue": None
}
]
self.caching_list = [
{
"name": "default",
"ttl": 3600,
"rules": [
{
"name": "default",
"request_url": "/*"
}
]
},
{
"name": "home",
"ttl": 1200,
"rules": [
{
"name": "index",
"request_url": "/index.htm"
}
]
}
]
self.restrictions_list = [
{"name": "website only",
"rules": [{"name": "mywebsite.com",
"referrer": "www.mywebsite.com",
"request_url": "/*"
}]}]
resp = self.client.create_service(
service_name=self.service_name,
domain_list=self.domain_list,
origin_list=self.origin_list,
caching_list=self.caching_list,
restrictions_list=self.restrictions_list,
flavor_id=self.flavor_id,
log_delivery=self.log_delivery)
self.service_url = resp.headers["location"]
self.original_service_details = {
"name": self.service_name,
"domains": self.domain_list,
"origins": self.origin_list,
"caching": self.caching_list,
"restrictions": self.restrictions_list,
"flavor_id": self.flavor_id,
"log_delivery": self.log_delivery}
self.client.wait_for_service_status(
location=self.service_url,
status='deployed',
abort_on_status='failed',
retry_interval=self.test_config.status_check_retry_interval,
retry_timeout=self.test_config.status_check_retry_timeout)
resp = self.client.get_service(location=self.service_url)
body = resp.json()
self.assertEqual(resp.status_code, 200)
self.assertEqual(body['status'], 'deployed')
@ddt.file_data('data_patch_service.json')
def test_patch_service(self, test_data):
for item in test_data:
if 'skip_test' in item:
self.skipTest('Not Implemented - bug# 1433807')
if ('domain' in item['path']) and ('value' in item):
if isinstance(item['value'], (list)):
item['value'][0]['domain'] = self._replace_domain(
domain=item['value'][0])
else:
item['value']['domain'] = self._replace_domain(
domain=item['value'])
patch = jsonpatch.JsonPatch(test_data)
expected_service_details = patch.apply(self.original_service_details)
resp = self.client.patch_service(location=self.service_url,
request_body=test_data)
self.assertEqual(resp.status_code, 202)
for item in test_data:
if 'origin' in item['path'] and ('value' in item):
if 'hostheadertype' in item['value']:
if item['value']['hostheadertype'] == 'custom':
for origin in expected_service_details['origins']:
if origin['origin'] == item['value']['origin']:
origin['hostheadertype'] = 'custom'
origin['hostheadervalue'] = item['value'][
'hostheadervalue']
elif item['value']['hostheadertype'] == 'origin':
for origin in expected_service_details['origins']:
if origin['origin'] == item['value']['origin']:
origin['hostheadertype'] = 'origin'
origin['hostheadervalue'] = item['value'][
'origin']
else:
for origin in expected_service_details['origins']:
origin['hostheadertype'] = 'domain'
origin['hostheadervalue'] = None
self.client.wait_for_service_status(
location=self.service_url,
status='deployed',
abort_on_status='failed',
retry_interval=self.test_config.status_check_retry_interval,
retry_timeout=self.test_config.status_check_retry_timeout)
resp = self.client.get_service(location=self.service_url)
body = resp.json()
self.assertEqual(body['status'], 'deployed')
self.assert_patch_service_details(body, expected_service_details)
def _replace_domain(self, domain):
if ('protocol' in domain):
if domain['protocol'] == 'https':
if (domain['certificate'] == u'shared'):
return self.generate_random_string(prefix='api-test-ssl')
return self.generate_random_string(prefix='api-test-ssl') + '.com'
@ddt.file_data('data_patch_service_negative.json')
def test_patch_service_HTTP_400(self, test_data):
resp = self.client.patch_service(location=self.service_url,
request_body=test_data)
self.assertEqual(resp.status_code, 400)
# nothing should have changed.
resp = self.client.get_service(location=self.service_url)
self.assertEqual(resp.status_code, 200)
body = resp.json()
self.assertEqual(body['status'], 'deployed')
self.assert_patch_service_details(body, self.original_service_details)
def test_patch_service_claim_relinquish_domain(self):
newdomain = str(uuid.uuid4()) + ".com"
add_domain = (
[{
"op": "add",
"path": "/domains/-",
"value": {"domain": newdomain, "protocol": "http"}
}])
remove_domain = (
[{
"op": "remove",
"path": "/domains/1"
}])
# add new domain
resp = self.client.patch_service(location=self.service_url,
request_body=add_domain)
self.assertEqual(resp.status_code, 202)
# wait for the domain to be added
self.client.wait_for_service_status(
location=self.service_url,
status='deployed',
abort_on_status='failed',
retry_interval=self.test_config.status_check_retry_interval,
retry_timeout=self.test_config.status_check_retry_timeout)
# make sure the new domain is added
resp = self.client.get_service(location=self.service_url)
body = resp.json()
self.assertEqual(body['status'], 'deployed')
self.assertEqual(body['domains'][-1]['domain'], newdomain)
# remove the new domain
resp = self.client.patch_service(location=self.service_url,
request_body=remove_domain)
self.assertEqual(resp.status_code, 202)
# wait for the domain to be removed
self.client.wait_for_service_status(
location=self.service_url,
status='deployed',
abort_on_status='failed',
retry_interval=self.test_config.status_check_retry_interval,
retry_timeout=self.test_config.status_check_retry_timeout)
# make sure the new domain is removed
resp = self.client.get_service(location=self.service_url)
body = resp.json()
self.assertEqual(body['status'], 'deployed')
for domain in body['domains']:
self.assertNotEqual(domain['domain'], newdomain)
# add new domain, again
resp = self.client.patch_service(location=self.service_url,
request_body=add_domain)
self.assertEqual(resp.status_code, 202)
# wait for the domain to be added
self.client.wait_for_service_status(
location=self.service_url,
status='deployed',
abort_on_status='failed',
retry_interval=self.test_config.status_check_retry_interval,
retry_timeout=self.test_config.status_check_retry_timeout)
# make sure the new domain is added
resp = self.client.get_service(location=self.service_url)
body = resp.json()
self.assertEqual(body['status'], 'deployed')
self.assertEqual(body['domains'][-1]['domain'], newdomain)
def test_patch_service_add_duplicate_domain(self):
# create second service
service_name = str(uuid.uuid1())
duplicate_domain = str(uuid.uuid1()) + '.com'
domain_list = [{"domain": duplicate_domain, "protocol": "http"}]
origin = str(uuid.uuid1()) + '.com'
origin_list = [{"origin": origin,
"port": 80, "ssl": False, "rules": []}]
resp = self.client.create_service(
service_name=service_name,
domain_list=domain_list,
origin_list=origin_list,
flavor_id=self.flavor_id)
service_url = resp.headers["location"]
# wait until the service is deployed
self.client.wait_for_service_status(
location=service_url,
status='deployed',
abort_on_status='failed',
retry_interval=self.test_config.status_check_retry_interval,
retry_timeout=self.test_config.status_check_retry_timeout)
resp = self.client.get_service(location=service_url)
body = resp.json()
self.assertEqual(resp.status_code, 200)
self.assertEqual(body['status'], 'deployed')
# wait to make sure cassandra is eventually consistent
time.sleep(self.test_config.cassandra_consistency_wait_time)
# patch original service with the duplicate domain
add_duplicate_domain = (
[{
"op": "add",
"path": "/domains/-",
"value": {"domain": duplicate_domain, "protocol": "http"}
}])
# add the duplicate domain
resp = self.client.patch_service(location=self.service_url,
request_body=add_duplicate_domain)
self.assertEqual(resp.status_code, 400)
def tearDown(self):
self.client.delete_service(location=self.service_url)
if self.test_config.generate_flavors:
self.client.delete_flavor(flavor_id=self.flavor_id)
super(TestServicePatch, self).tearDown()
@ddt.ddt
class TestServicePatchWithLogDelivery(base.TestBase):
"""Tests for PATCH Services."""
def setUp(self):
super(TestServicePatchWithLogDelivery, self).setUp()
self.service_name = self.generate_random_string(prefix='api-test')
self.flavor_id = self.test_flavor
self.log_delivery = {"enabled": True}
domain = self.generate_random_string(prefix='api-test-domain') + '.com'
self.domain_list = [
{
"domain": domain,
"protocol": "http"
}
]
origin = self.generate_random_string(prefix='api-test-origin') + '.com'
self.origin_list = [
{
"origin": origin,
"port": 80,
"ssl": False,
"rules": [
{
"name": "default",
"request_url": "/*"
}
],
"hostheadertype": "domain",
"hostheadervalue": None
}
]
self.caching_list = [
{
"name": "default",
"ttl": 3600,
"rules": [
{
"name": "default",
"request_url": "/*"
}
]
},
{
"name": "home",
"ttl": 1200,
"rules": [
{
"name": "index",
"request_url": "/index.htm"
}
]
}
]
self.restrictions_list = [
{"name": "website only",
"rules": [{"name": "mywebsite.com",
"referrer": "www.mywebsite.com",
"request_url": "/*"
}]}]
resp = self.client.create_service(
service_name=self.service_name,
domain_list=self.domain_list,
origin_list=self.origin_list,
caching_list=self.caching_list,
restrictions_list=self.restrictions_list,
flavor_id=self.flavor_id,
log_delivery=self.log_delivery)
self.service_url = resp.headers["location"]
self.original_service_details = {
"name": self.service_name,
"domains": self.domain_list,
"origins": self.origin_list,
"caching": self.caching_list,
"restrictions": self.restrictions_list,
"flavor_id": self.flavor_id,
"log_delivery": self.log_delivery}
self.client.wait_for_service_status(
location=self.service_url,
status='deployed',
abort_on_status='failed',
retry_interval=self.test_config.status_check_retry_interval,
retry_timeout=self.test_config.status_check_retry_timeout)
resp = self.client.get_service(location=self.service_url)
body = resp.json()
self.assertEqual(resp.status_code, 200)
self.assertEqual(body['status'], 'deployed')
def _replace_domain(self, domain):
if ('protocol' in domain):
if domain['protocol'] == 'https':
if (domain['certificate'] == u'shared'):
return self.generate_random_string(prefix='api-test-ssl')
return self.generate_random_string(prefix='api-test-ssl') + '.com'
@ddt.file_data('data_patch_service.json')
def test_patch_service(self, test_data):
for item in test_data:
if 'skip_test' in item:
self.skipTest('Not Implemented - bug# 1433807')
if ('domain' in item['path']) and ('value' in item):
if isinstance(item['value'], (list)):
item['value'][0]['domain'] = self._replace_domain(
domain=item['value'][0])
else:
item['value']['domain'] = self._replace_domain(
domain=item['value'])
patch = jsonpatch.JsonPatch(test_data)
expected_service_details = patch.apply(self.original_service_details)
resp = self.client.patch_service(location=self.service_url,
request_body=test_data)
self.assertEqual(resp.status_code, 202)
for item in test_data:
if 'origin' in item['path'] and ('value' in item):
if 'hostheadertype' in item['value']:
if item['value']['hostheadertype'] == 'custom':
for origin in expected_service_details['origins']:
if origin['origin'] == item['value']['origin']:
origin['hostheadertype'] = 'custom'
origin['hostheadervalue'] = item['value'][
'hostheadervalue']
elif item['value']['hostheadertype'] == 'origin':
for origin in expected_service_details['origins']:
if origin['origin'] == item['value']['origin']:
origin['hostheadertype'] = 'origin'
origin['hostheadervalue'] = item['value'][
'origin']
else:
for origin in expected_service_details['origins']:
origin['hostheadertype'] = 'domain'
origin['hostheadervalue'] = None
self.client.wait_for_service_status(
location=self.service_url,
status='deployed',
abort_on_status='failed',
retry_interval=self.test_config.status_check_retry_interval,
retry_timeout=self.test_config.status_check_retry_timeout)
resp = self.client.get_service(location=self.service_url)
body = resp.json()
self.assertEqual(body['status'], 'deployed')
self.assert_patch_service_details(body, expected_service_details)
def tearDown(self):
self.client.delete_service(location=self.service_url)
if self.test_config.generate_flavors:
self.client.delete_flavor(flavor_id=self.flavor_id)
super(TestServicePatchWithLogDelivery, self).tearDown()
@ddt.ddt
class TestDefaultServiceFields(providers.TestProviderBase):

View File

@ -123,8 +123,9 @@ class TestPatchSSLService(base.TestBase):
{
"name": "default",
"request_url": "/*"
}
]
}],
"hostheadertype": "custom",
"hostheadervalue": "www.customweb.com"
}
]

View File

@ -43,7 +43,9 @@ origin = {
'minumum': 0,
'maximum': 100000},
'ssl': {'type': 'boolean'},
'rules': {'type': 'array'}},
'rules': {'type': 'array'},
'hostheadertype': {'type': 'string'},
'hostheadervalue': {'type': ['string', 'null']}},
'required': ['origin', 'port', 'ssl'],
'additionalProperties': False
}

View File

@ -26,15 +26,15 @@ class TestOrigin(base.TestCase):
@ddt.unpack
@ddt.data({'origin_url': 'www.mydomain.com',
'changed_origin_url': 'www.changed-domain.com'},
'changed_origin_url': 'www.changed-domain.com'},
{'origin_url': u'www.düsseldorf-Lörick.com',
'changed_origin_url': u'www.düsseldorf.com'
})
'changed_origin_url': u'www.düsseldorf.com'})
def test_origin(self, origin_url, changed_origin_url):
port = 443
port = 80
ssl = True
myorigin = origin.Origin(origin_url, port, ssl)
myorigin = origin.Origin(origin=origin_url, hostheadertype="origin",
hostheadervalue="", port=80, ssl=True)
# test all properties
# origin
@ -44,8 +44,8 @@ class TestOrigin(base.TestCase):
# port
self.assertEqual(myorigin.port, port)
myorigin.port = 80
self.assertEqual(myorigin.port, 80)
myorigin.port = 443
self.assertEqual(myorigin.port, 443)
# ssl
self.assertEqual(myorigin.ssl, ssl)

View File

@ -20,6 +20,7 @@ deps = -r{toxinidir}/requirements/requirements.txt
commands = pip install git+https://github.com/stackforge/opencafe.git#egg=cafe
nosetests {posargs:--exclude=api --exclude=endtoend --nologcapture}
[tox:jenkins]
downloadcache = ~/cache/pip