Example #1
0
    def test_add_two_rules_and_get(self):
        id1 = uuidutils.generate_uuid()
        rule1_str = "p(x) :- q(x)"
        id2 = uuidutils.generate_uuid()
        rule2_str = "z(x) :- q(x)"
        policy_name = "classification"
        comment = "None"
        db_policy_rules.add_policy_rule(id=id1,
                                        policy_name=policy_name,
                                        rule=rule1_str,
                                        comment=comment)

        db_policy_rules.add_policy_rule(id=id2,
                                        policy_name=policy_name,
                                        rule=rule2_str,
                                        comment=comment)

        rules = db_policy_rules.get_policy_rules(policy_name)
        self.assertEqual(len(rules), 2)
        self.assertEqual(id1, rules[0].id)
        self.assertEqual(policy_name, rules[0].policy_name)
        self.assertEqual(rule1_str, rules[0].rule)
        self.assertEqual(comment, rules[0].comment)
        self.assertEqual(id2, rules[1].id)
        self.assertEqual(policy_name, rules[1].policy_name)
        self.assertEqual(rule2_str, rules[1].rule)
        self.assertEqual(comment, rules[1].comment)
        self.assertEqual(len(db_policy_rules.get_policy_rules()), 2)
    def test_add_two_rules_and_get(self):
        id1 = uuidutils.generate_uuid()
        rule1_str = "p(x) :- q(x)"
        id2 = uuidutils.generate_uuid()
        rule2_str = "z(x) :- q(x)"
        policy_name = "classification"
        comment = "None"
        db_policy_rules.add_policy_rule(id=id1,
                                        policy_name=policy_name,
                                        rule=rule1_str,
                                        comment=comment)

        db_policy_rules.add_policy_rule(id=id2,
                                        policy_name=policy_name,
                                        rule=rule2_str,
                                        comment=comment)

        rules = db_policy_rules.get_policy_rules(policy_name)
        self.assertEqual(len(rules), 2)
        self.assertEqual(id1, rules[0].id)
        self.assertEqual(policy_name, rules[0].policy_name)
        self.assertEqual(rule1_str, rules[0].rule)
        self.assertEqual(comment, rules[0].comment)
        self.assertEqual(id2, rules[1].id)
        self.assertEqual(policy_name, rules[1].policy_name)
        self.assertEqual(rule2_str, rules[1].rule)
        self.assertEqual(comment, rules[1].comment)
Example #3
0
    def add_item(self, item, params, id_=None, context=None):
        """Add item to model.

        Args:
            item: The item to add to the model
            params: A dict-like object containing parameters
                    from the request query string and body.
            id_: The ID of the item, or None if an ID should be generated
            context: Key-values providing frame of reference of request

        Returns:
             Tuple of (ID, newly_created_item)

        Raises:
            KeyError: ID already exists.
            DataModelException: Addition cannot be performed.
        """
        # validation
        if id_ is None:
            id_ = str(uuidutils.generate_uuid())
        else:
            (num, desc) = error_codes.get('policy_id_must_not_be_provided')
            raise webservice.DataModelException(num, desc)
        if 'name' not in item:
            (num, desc) = error_codes.get('policy_name_must_be_provided')
            raise webservice.DataModelException(num, desc)
        name = item['name']
        try:
            self.engine.parse("%s() :- true()" % name)
        except PolicyException:
            (num, desc) = error_codes.get('policy_name_must_be_id')
            raise webservice.DataModelException(num, desc + ": " + str(name))

        # create policy in policy engine
        try:
            policy_obj = self.engine.create_policy(
                name, abbr=item.get('abbreviation'), kind=item.get('kind'))
        except PolicyException as e:
            (num, desc) = error_codes.get('failed_to_create_policy')
            raise webservice.DataModelException(num, desc + ": " + str(e))

        # save policy to database
        desc = item.get('description', '')
        if desc is None:
            desc = ''
        obj = {
            'id': id_,
            'name': name,
            'owner_id': 'user',
            'description': desc,
            'abbreviation': policy_obj.abbr,
            'kind': self.engine.policy_type(name)
        }
        # TODO(thinrichs): add rollback of policy engine if this fails
        db_policy_rules.add_policy(obj['id'], obj['name'], obj['abbreviation'],
                                   obj['description'], obj['owner_id'],
                                   obj['kind'])
        return (id_, obj)
Example #4
0
 def test_delete_datasource(self):
     id_ = uuidutils.generate_uuid()
     datasources.add_datasource(id_=id_,
                                name="hiya",
                                driver="foo",
                                config='{user: foo}',
                                description="hello",
                                enabled=True)
     self.assertTrue(datasources.delete_datasource(id_))
Example #5
0
 def test_add_datasource(self):
     id_ = uuidutils.generate_uuid()
     source = datasources.add_datasource(
         id_=id_, name="hiya", driver="foo", config="{user: foo}", description="hello", enabled=True
     )
     self.assertEqual(id_, source.id)
     self.assertEqual("hiya", source.name)
     self.assertEqual("foo", source.driver)
     self.assertEqual("hello", source.description)
     self.assertEqual('"{user: foo}"', source.config)
     self.assertEqual(True, source.enabled)
Example #6
0
 def test_add_delete_get_policy_rule(self):
     id = uuidutils.generate_uuid()
     rule_str = "p(x) :- q(x)"
     policy_name = "classification"
     comment = "None"
     db_policy_rules.add_policy_rule(id=id,
                                     policy_name=policy_name,
                                     rule=rule_str,
                                     comment=comment)
     db_policy_rules.delete_policy_rule(id)
     rule = db_policy_rules.get_policy_rule(id, policy_name)
     self.assertEqual(rule, None)
 def test_add_delete_get_policy_rule(self):
     id = uuidutils.generate_uuid()
     rule_str = "p(x) :- q(x)"
     policy_name = "classification"
     comment = "None"
     db_policy_rules.add_policy_rule(id=id,
                                     policy_name=policy_name,
                                     rule=rule_str,
                                     comment=comment)
     db_policy_rules.delete_policy_rule(id)
     rule = db_policy_rules.get_policy_rule(id, policy_name)
     self.assertEqual(rule, None)
Example #8
0
 def test_add_policy_rule(self):
     id = uuidutils.generate_uuid()
     rule_str = "p(x) :- q(x)"
     policy_name = "classification"
     comment = "None"
     rule = db_policy_rules.add_policy_rule(id=id,
                                            policy_name=policy_name,
                                            rule=rule_str,
                                            comment=comment)
     self.assertEqual(id, rule.id)
     self.assertEqual(policy_name, rule.policy_name)
     self.assertEqual(rule_str, rule.rule)
     self.assertEqual(comment, rule.comment)
 def test_add_policy_rule(self):
     id = uuidutils.generate_uuid()
     rule_str = "p(x) :- q(x)"
     policy_name = "classification"
     comment = "None"
     rule = db_policy_rules.add_policy_rule(id=id,
                                            policy_name=policy_name,
                                            rule=rule_str,
                                            comment=comment)
     self.assertEqual(id, rule.id)
     self.assertEqual(policy_name, rule.policy_name)
     self.assertEqual(rule_str, rule.rule)
     self.assertEqual(comment, rule.comment)
Example #10
0
 def test_add_datasource(self):
     id_ = uuidutils.generate_uuid()
     source = datasources.add_datasource(id_=id_,
                                         name="hiya",
                                         driver="foo",
                                         config='{user: foo}',
                                         description="hello",
                                         enabled=True)
     self.assertEqual(id_, source.id)
     self.assertEqual("hiya", source.name)
     self.assertEqual("foo", source.driver)
     self.assertEqual("hello", source.description)
     self.assertEqual('"{user: foo}"', source.config)
     self.assertEqual(True, source.enabled)
Example #11
0
    def make_datasource_dict(cls, req, fields=None):
        result = {'id': req.get('id') or uuidutils.generate_uuid(),
                  'name': req.get('name'),
                  'driver': req.get('driver'),
                  'description': req.get('description'),
                  'type': None,
                  'enabled': req.get('enabled', True)}
        # NOTE(arosen): we store the config as a string in the db so
        # here we serialize it back when returning it.
        if type(req.get('config')) in [str, unicode]:
            result['config'] = json.loads(req['config'])
        else:
            result['config'] = req.get('config')

        return cls._fields(result, fields)
Example #12
0
    def make_datasource_dict(cls, req, fields=None):
        result = {
            'id': req.get('id') or uuidutils.generate_uuid(),
            'name': req.get('name'),
            'driver': req.get('driver'),
            'description': req.get('description'),
            'type': None,
            'enabled': req.get('enabled', True)
        }
        # NOTE(arosen): we store the config as a string in the db so
        # here we serialize it back when returning it.
        if type(req.get('config')) in [str, unicode]:
            result['config'] = json.loads(req['config'])
        else:
            result['config'] = req.get('config')

        return cls._fields(result, fields)
Example #13
0
 def test_is_soft_deleted_is_deleted(self):
     uuid = uuidutils.generate_uuid()
     self.assertEqual(uuid, db_policy_rules.is_soft_deleted(uuid, True))
Example #14
0
 def test_is_soft_deleted_not_deleted(self):
     uuid = uuidutils.generate_uuid()
     self.assertEqual('', db_policy_rules.is_soft_deleted(uuid, False))
 def test_is_soft_deleted_is_deleted(self):
     uuid = uuidutils.generate_uuid()
     self.assertEqual(uuid, db_policy_rules.is_soft_deleted(uuid, True))
Example #16
0
 def test_delete_datasource(self):
     id_ = uuidutils.generate_uuid()
     datasources.add_datasource(
         id_=id_, name="hiya", driver="foo", config="{user: foo}", description="hello", enabled=True
     )
     self.assertTrue(datasources.delete_datasource(id_))
Example #17
0
    def add_item(self, item, params, id_=None, context=None):
        """Add item to model.

        Args:
            item: The item to add to the model
            params: A dict-like object containing parameters
                    from the request query string and body.
            id_: The ID of the item, or None if an ID should be generated
            context: Key-values providing frame of reference of request

        Returns:
             Tuple of (ID, newly_created_item)

        Raises:
            KeyError: ID already exists.
            DataModelException: Addition cannot be performed.
        """
        # validation
        if id_ is None:
            id_ = str(uuidutils.generate_uuid())
        else:
            (num, desc) = error_codes.get('policy_id_must_not_be_provided')
            raise webservice.DataModelException(num, desc)
        if 'name' not in item:
            (num, desc) = error_codes.get('policy_name_must_be_provided')
            raise webservice.DataModelException(num, desc)
        name = item['name']
        try:
            self.engine.parse("%s() :- true()" % name)
        except PolicyException:
            (num, desc) = error_codes.get('policy_name_must_be_id')
            raise webservice.DataModelException(
                num, desc + ": " + str(name))

        # create policy in policy engine
        try:
            policy_obj = self.engine.create_policy(
                name, abbr=item.get('abbreviation'), kind=item.get('kind'))
            policy_obj.set_id(id_)
        except PolicyException as e:
            (num, desc) = error_codes.get('failed_to_create_policy')
            raise webservice.DataModelException(
                num, desc + ": " + str(e))

        # save policy to database
        desc = item.get('description', '')
        if desc is None:
            desc = ''
        obj = {'id': id_,
               'name': name,
               'owner_id': 'user',
               'description': desc,
               'abbreviation': policy_obj.abbr,
               'kind': self.engine.policy_type(name)}
        # TODO(thinrichs): add rollback of policy engine if this fails
        db_policy_rules.add_policy(obj['id'],
                                   obj['name'],
                                   obj['abbreviation'],
                                   obj['description'],
                                   obj['owner_id'],
                                   obj['kind'])
        return (id_, obj)
 def test_is_soft_deleted_not_deleted(self):
     uuid = uuidutils.generate_uuid()
     self.assertEqual('', db_policy_rules.is_soft_deleted(uuid, False))