def setUp(self): super(TestServiceModel, self).setUp() self.project_id = str(uuid.uuid4()) self.service_id = str(uuid.uuid4()) self.service_name = uuid.uuid1() self.flavor_id = "strawberry" self.myorigins = [] self.mydomains = [] self.myrestrictions = [] self.mycaching = [] self.log_delivery = {"enabled": False} self.myorigins.append(origin.Origin('mysite.com')) self.myorigins.append(origin.Origin('yoursite.io', port=80, ssl=True)) self.mydomains.append(domain.Domain('oursite.org')) self.mydomains.append(domain.Domain('wiki.cc', 'https', 'shared')) # test a rule with referrer restriction r1 = restriction.Restriction('referrer_site', 'whitelist') self.r1_rules = [rule.Rule('referrer_restriction_rule_1')] self.r1_rules[0].http_host = 'www.some_bad_site.com' r1.rules = self.r1_rules self.myrestrictions.append(r1) self.myrestrictions.append( restriction.Restriction('client_ip', 'whitelist')) self.mycaching.append(cachingrule.CachingRule('images', 3600)) self.mycaching.append(cachingrule.CachingRule('js', 7200))
def load_from_json(json_data): name = json_data.get('name') access = json_data.get('access', 'whitelist') res = restriction.Restriction(name, access) rules = json_data.get('rules', []) rules = [rule.load_from_json(r) for r in rules] res.rules = rules return res
def test_restriction(self): name = 'restriction' myrestriction = restriction.Restriction(name) # test all properties # name self.assertEqual(myrestriction.name, name) self.assertRaises(AttributeError, setattr, myrestriction, 'name', name) # rules self.assertEqual(myrestriction.rules, []) self.assertRaises(AttributeError, setattr, myrestriction, 'rules', [])
def format_result(result): service_id = result.get('service_id') name = str(result.get('service_name')) origins = [o for o in result.get('origins', [])] domains = [d for d in result.get('domains', [])] origins = [ origin.Origin(o['origin'], hostheadertype='domain', hostheadervalue='blog.mywebsite.com', port=o.get('port', 80), ssl=o.get('ssl', False)) for o in origins ] domains = [ domain.Domain(d['domain'], d['protocol'], d['certificate']) for d in domains ] restrictions = [ restriction.Restriction(r.get('name'), r.get( 'access', 'whitelist'), [ rule.Rule(r_rule.get('name'), referrer=r_rule.get('referrer'), client_ip=r_rule.get('client_ip'), geography=r_rule.get('geography'), request_url=r_rule.get('request_url', "/*") or "/*") for r_rule in r['rules'] ]) for r in result.get('restrictions', []) ] flavor_id = result.get('flavor_id') s = service.Service(service_id, name, domains, origins, flavor_id, restrictions=restrictions) provider_detail_results = result.get('provider_details') or {} provider_details_dict = {} for provider_name in provider_detail_results: provider_detail_dict = json.loads( provider_detail_results[provider_name]) provider_service_id = provider_detail_dict.get('id', None) access_urls = provider_detail_dict.get('access_urls', []) status = provider_detail_dict.get('status', u'unknown') provider_detail_obj = provider_details.ProviderDetail( provider_service_id=provider_service_id, access_urls=access_urls, status=status) provider_details_dict[provider_name] = provider_detail_obj s.provider_details = provider_details_dict return s
def test_init_from_dict_whitespaces(self): caching = [cachingrule.CachingRule('images ', 3600)] restrictions = [restriction.Restriction('client_ip ', 'whitelist')] name = 'tests ' myservice = service.Service( self.service_id, name, self.mydomains, self.myorigins, self.flavor_id, caching, restrictions) cloned_service = service.Service.init_from_dict(self.project_id, myservice.to_dict()) self.assertNotEqual(cloned_service.name, myservice.name.strip()) self.assertNotEqual([x.name for x in cloned_service.caching], [y.name for y in myservice.caching]) self.assertNotEqual([x.name for x in cloned_service.restrictions], [y.name for y in myservice.restrictions])
def test_restriction(self): name = 'restriction' myrestriction = restriction.Restriction(name, 'whitelist') # test all properties # name self.assertEqual(myrestriction.name, name) # change name and verify that its updated name = "new_name" myrestriction.name = name self.assertEqual(myrestriction.name, name) # rules test: # We need to be able to set the rule now so previous setattr # will be gone self.assertEqual(myrestriction.rules, [])
def test_process_restriction_rules(self): controller = services.ServiceController(self.driver) rule_entry = rule.Rule('index', request_url='*.jpg', referrer='www.poppy.com') restriction_rule = restriction.Restriction(name='restriction', rules=[rule_entry]) restriction_rules = [restriction_rule] rules_list = [{ 'matches': [{ 'name': 'url-wildcard', 'value': u'/*' }], 'behaviors': [{ 'params': { 'hostHeaderValue': '-', 'cacheKeyType': 'digital_property', 'cacheKeyValue': '-', 'originDomain': 'www.mydomain.com', 'hostHeaderType': 'digital_property' }, 'name': 'origin', 'value': '-' }] }] controller._process_restriction_rules(restriction_rules, rules_list) restriction_rule_valid = False for restriction_rule in rules_list: matches = restriction_rule['matches'] for match in matches: if match['value'] == u'/*.jpg': restriction_rule_valid = True break self.assertTrue(restriction_rule_valid)
def format_result(result): """format_result. :param result :returns formatted result """ service_id = result.get('service_id') project_id = result.get('project_id') name = result.get('service_name') flavor_id = result.get('flavor_id') origins = [json.loads(o) for o in result.get('origins', []) or []] domains = [json.loads(d) for d in result.get('domains', []) or []] restrictions = [ json.loads(r) for r in result.get('restrictions', []) or [] ] caching_rules = [ json.loads(c) for c in result.get('caching_rules', []) or [] ] log_delivery = json.loads(result.get('log_delivery', '{}') or '{}') operator_status = result.get('operator_status', 'enabled') # create models for each item origins = [ origin.Origin(o['origin'], o.get('hostheadertype', 'domain'), o.get('hostheadervalue', None), o.get('port', 80), o.get('ssl', False), [ rule.Rule(rule_i.get('name'), request_url=rule_i.get('request_url')) for rule_i in o.get('rules', []) ]) for o in origins ] domains = [ domain.Domain(d['domain'], d.get('protocol', 'http'), d.get('certificate', None)) for d in domains ] restrictions = [ restriction.Restriction(r.get('name'), r.get( 'access', 'whitelist'), [ rule.Rule(r_rule.get('name'), referrer=r_rule.get('referrer'), client_ip=r_rule.get('client_ip'), geography=r_rule.get('geography'), request_url=r_rule.get('request_url', "/*") or "/*") for r_rule in r['rules'] ]) for r in restrictions ] caching_rules = [ cachingrule.CachingRule( caching_rule.get('name'), caching_rule.get('ttl'), [ rule.Rule(rule_i.get('name'), request_url=rule_i.get('request_url', '/*') or '/*') for rule_i in caching_rule['rules'] ]) for caching_rule in caching_rules ] log_delivery = ld.LogDelivery(log_delivery.get('enabled', False)) # create the service object s = service.Service(service_id=service_id, name=name, domains=domains, origins=origins, flavor_id=flavor_id, caching=caching_rules, restrictions=restrictions, log_delivery=log_delivery, operator_status=operator_status, project_id=project_id) # format the provider details provider_detail_results = result.get('provider_details') or {} provider_details_dict = {} for provider_name in provider_detail_results: provider_detail_dict = json.loads( provider_detail_results[provider_name]) provider_service_id = provider_detail_dict.get('id', None) access_urls = provider_detail_dict.get('access_urls', []) status = provider_detail_dict.get('status', u'unknown') domains_certificate_status = (provider_detail_dict.get( 'domains_certificate_status', {})) error_message = provider_detail_dict.get('error_message', None) provider_detail_obj = provider_details.ProviderDetail( provider_service_id=provider_service_id, access_urls=access_urls, domains_certificate_status=domains_certificate_status, status=status, error_message=error_message) provider_details_dict[provider_name] = provider_detail_obj s.provider_details = provider_details_dict # return the service return s