 df8995deed
			
		
	
	df8995deed
	
	
	
		
			
			policies: rewrite engine to use PolicyBinding for order/negate/timeout policies: rewrite engine to use PolicyResult instead of tuple
		
			
				
	
	
		
			85 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """policy engine tests"""
 | |
| from django.core.cache import cache
 | |
| from django.test import TestCase
 | |
| 
 | |
| from passbook.core.models import User
 | |
| from passbook.policies.dummy.models import DummyPolicy
 | |
| from passbook.policies.engine import PolicyEngine
 | |
| from passbook.policies.expression.models import ExpressionPolicy
 | |
| from passbook.policies.models import Policy, PolicyBinding, PolicyBindingModel
 | |
| 
 | |
| 
 | |
| class PolicyTestEngine(TestCase):
 | |
|     """PolicyEngine tests"""
 | |
| 
 | |
|     def setUp(self):
 | |
|         cache.clear()
 | |
|         self.user = User.objects.create_user(username="policyuser")
 | |
|         self.policy_false = DummyPolicy.objects.create(
 | |
|             result=False, wait_min=0, wait_max=1
 | |
|         )
 | |
|         self.policy_true = DummyPolicy.objects.create(
 | |
|             result=True, wait_min=0, wait_max=1
 | |
|         )
 | |
|         self.policy_wrong_type = Policy.objects.create(name="wrong_type")
 | |
|         self.policy_raises = ExpressionPolicy.objects.create(
 | |
|             name="raises", expression="{{ 0/0 }}"
 | |
|         )
 | |
| 
 | |
|     def test_engine_empty(self):
 | |
|         """Ensure empty policy list passes"""
 | |
|         pbm = PolicyBindingModel.objects.create()
 | |
|         engine = PolicyEngine(pbm, self.user)
 | |
|         result = engine.build().result
 | |
|         self.assertEqual(result.passing, True)
 | |
|         self.assertEqual(result.messages, ())
 | |
| 
 | |
|     def test_engine(self):
 | |
|         """Ensure all policies passes (Mix of false and true -> false)"""
 | |
|         pbm = PolicyBindingModel.objects.create()
 | |
|         PolicyBinding.objects.create(target=pbm, policy=self.policy_false, order=0)
 | |
|         PolicyBinding.objects.create(target=pbm, policy=self.policy_true, order=1)
 | |
|         engine = PolicyEngine(pbm, self.user)
 | |
|         result = engine.build().result
 | |
|         self.assertEqual(result.passing, False)
 | |
|         self.assertEqual(result.messages, ("dummy",))
 | |
| 
 | |
|     def test_engine_negate(self):
 | |
|         """Test negate flag"""
 | |
|         pbm = PolicyBindingModel.objects.create()
 | |
|         PolicyBinding.objects.create(
 | |
|             target=pbm, policy=self.policy_true, negate=True, order=0
 | |
|         )
 | |
|         engine = PolicyEngine(pbm, self.user)
 | |
|         result = engine.build().result
 | |
|         self.assertEqual(result.passing, False)
 | |
|         self.assertEqual(result.messages, ("dummy",))
 | |
| 
 | |
|     def test_engine_policy_error(self):
 | |
|         """Test policy raising an error flag"""
 | |
|         pbm = PolicyBindingModel.objects.create()
 | |
|         PolicyBinding.objects.create(target=pbm, policy=self.policy_raises, order=0)
 | |
|         engine = PolicyEngine(pbm, self.user)
 | |
|         result = engine.build().result
 | |
|         self.assertEqual(result.passing, False)
 | |
|         self.assertEqual(result.messages, ("division by zero",))
 | |
| 
 | |
|     def test_engine_policy_type(self):
 | |
|         """Test invalid policy type"""
 | |
|         pbm = PolicyBindingModel.objects.create()
 | |
|         PolicyBinding.objects.create(target=pbm, policy=self.policy_wrong_type, order=0)
 | |
|         with self.assertRaises(TypeError):
 | |
|             engine = PolicyEngine(pbm, self.user)
 | |
|             engine.build()
 | |
| 
 | |
|     def test_engine_cache(self):
 | |
|         """Ensure empty policy list passes"""
 | |
|         pbm = PolicyBindingModel.objects.create()
 | |
|         PolicyBinding.objects.create(target=pbm, policy=self.policy_false, order=0)
 | |
|         engine = PolicyEngine(pbm, self.user)
 | |
|         self.assertEqual(len(cache.keys("policy_*")), 0)
 | |
|         self.assertEqual(engine.build().passing, False)
 | |
|         self.assertEqual(len(cache.keys("policy_*")), 1)
 | |
|         self.assertEqual(engine.build().passing, False)
 | |
|         self.assertEqual(len(cache.keys("policy_*")), 1)
 |