This repository has been archived on 2024-05-31. You can view files and clone it, but cannot push or open issues or pull requests.
authentik/passbook/policies/tests/test_engine.py

60 lines
2.1 KiB
Python
Raw Normal View History

"""policy engine tests"""
from django.core.cache import cache
from django.test import TestCase
from passbook.core.models import DebugPolicy, Policy, User
from passbook.policies.engine import PolicyEngine
class PolicyTestEngine(TestCase):
"""PolicyEngine tests"""
def setUp(self):
cache.clear()
self.user = User.objects.create_user(
username="policyuser")
self.policy_false = DebugPolicy.objects.create(
result=False,
wait_min=0,
wait_max=1)
self.policy_true = DebugPolicy.objects.create(
result=True,
wait_min=0,
wait_max=1)
self.policy_negate = DebugPolicy.objects.create(
negate=True,
result=True,
wait_min=0,
wait_max=1)
self.policy_raises = Policy.objects.create(
name='raises')
def test_engine_empty(self):
"""Ensure empty policy list passes"""
engine = PolicyEngine([], self.user)
self.assertEqual(engine.build().passing, True)
def test_engine(self):
"""Ensure all policies passes (Mix of false and true -> false)"""
engine = PolicyEngine(DebugPolicy.objects.filter(negate__exact=False), self.user)
self.assertEqual(engine.build().passing, False)
def test_engine_negate(self):
"""Test negate flag"""
engine = PolicyEngine(DebugPolicy.objects.filter(negate__exact=True), self.user)
self.assertEqual(engine.build().passing, False)
def test_engine_policy_error(self):
"""Test negate flag"""
engine = PolicyEngine(Policy.objects.filter(name='raises'), self.user)
self.assertEqual(engine.build().passing, False)
def test_engine_cache(self):
"""Ensure empty policy list passes"""
engine = PolicyEngine(DebugPolicy.objects.filter(negate__exact=False), self.user)
self.assertEqual(len(cache.keys('policy_*')), 0)
self.assertEqual(engine.build().passing, False)
self.assertEqual(len(cache.keys('policy_*')), 2)
self.assertEqual(engine.build().passing, False)
self.assertEqual(len(cache.keys('policy_*')), 2)