Exemple #1
0
    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))
Exemple #2
0
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', [])
Exemple #4
0
    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
Exemple #5
0
 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])
Exemple #6
0
    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, [])
Exemple #7
0
    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)
Exemple #8
0
    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