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)
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)
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_))
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)
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_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_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)
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)
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)
def test_is_soft_deleted_is_deleted(self): uuid = uuidutils.generate_uuid() self.assertEqual(uuid, db_policy_rules.is_soft_deleted(uuid, True))
def test_is_soft_deleted_not_deleted(self): uuid = uuidutils.generate_uuid() self.assertEqual('', db_policy_rules.is_soft_deleted(uuid, False))
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_))
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)