authentik.policies.reputation.tests

test reputation signals and policy

 1"""test reputation signals and policy"""
 2
 3from django.test import RequestFactory, TestCase
 4
 5from authentik.core.models import User
 6from authentik.lib.generators import generate_id
 7from authentik.policies.reputation.api import ReputationPolicySerializer
 8from authentik.policies.reputation.models import Reputation, ReputationPolicy
 9from authentik.policies.reputation.signals import update_score
10from authentik.policies.types import PolicyRequest
11from authentik.stages.password import BACKEND_INBUILT
12from authentik.stages.password.stage import authenticate
13from authentik.tenants.models import DEFAULT_REPUTATION_LOWER_LIMIT, DEFAULT_REPUTATION_UPPER_LIMIT
14
15
16class TestReputationPolicy(TestCase):
17    """test reputation signals and policy"""
18
19    def setUp(self):
20        self.request_factory = RequestFactory()
21        self.request = self.request_factory.get("/")
22        self.ip = "127.0.0.1"
23        self.username = "username"
24        self.password = generate_id()
25        # We need a user for the one-to-one in userreputation
26        self.user = User.objects.create(username=self.username)
27        self.user.set_password(self.password)
28        self.backends = [BACKEND_INBUILT]
29
30    def test_ip_reputation(self):
31        """test IP reputation"""
32        # Trigger negative reputation
33        authenticate(self.request, self.backends, username=self.username, password=self.username)
34        self.assertEqual(Reputation.objects.get(ip=self.ip).score, -1)
35
36    def test_user_reputation(self):
37        """test User reputation"""
38        # Trigger negative reputation
39        authenticate(self.request, self.backends, username=self.username, password=self.username)
40        self.assertEqual(Reputation.objects.get(identifier=self.username).score, -1)
41
42    def test_update_reputation(self):
43        """test reputation update"""
44        Reputation.objects.create(identifier=self.username, ip=self.ip, score=4)
45        # Trigger negative reputation
46        authenticate(self.request, self.backends, username=self.username, password=self.username)
47        self.assertEqual(Reputation.objects.get(identifier=self.username).score, 3)
48
49    def test_reputation_lower_limit(self):
50        """test reputation lower limit"""
51        Reputation.objects.create(identifier=self.username, ip=self.ip)
52        update_score(self.request, identifier=self.username, amount=-1000)
53        self.assertEqual(
54            Reputation.objects.get(identifier=self.username).score, DEFAULT_REPUTATION_LOWER_LIMIT
55        )
56
57    def test_reputation_upper_limit(self):
58        """test reputation upper limit"""
59        Reputation.objects.create(identifier=self.username, ip=self.ip)
60        update_score(self.request, identifier=self.username, amount=1000)
61        self.assertEqual(
62            Reputation.objects.get(identifier=self.username).score, DEFAULT_REPUTATION_UPPER_LIMIT
63        )
64
65    def test_policy(self):
66        """Test Policy"""
67        request = PolicyRequest(user=self.user)
68        policy: ReputationPolicy = ReputationPolicy.objects.create(
69            name="reputation-test", threshold=0
70        )
71        self.assertTrue(policy.passes(request).passing)
72
73    def test_api(self):
74        """Test API Validation"""
75        no_toggle = ReputationPolicySerializer(data={"name": generate_id(), "threshold": -5})
76        self.assertFalse(no_toggle.is_valid())
class TestReputationPolicy(django.test.testcases.TestCase):
17class TestReputationPolicy(TestCase):
18    """test reputation signals and policy"""
19
20    def setUp(self):
21        self.request_factory = RequestFactory()
22        self.request = self.request_factory.get("/")
23        self.ip = "127.0.0.1"
24        self.username = "username"
25        self.password = generate_id()
26        # We need a user for the one-to-one in userreputation
27        self.user = User.objects.create(username=self.username)
28        self.user.set_password(self.password)
29        self.backends = [BACKEND_INBUILT]
30
31    def test_ip_reputation(self):
32        """test IP reputation"""
33        # Trigger negative reputation
34        authenticate(self.request, self.backends, username=self.username, password=self.username)
35        self.assertEqual(Reputation.objects.get(ip=self.ip).score, -1)
36
37    def test_user_reputation(self):
38        """test User reputation"""
39        # Trigger negative reputation
40        authenticate(self.request, self.backends, username=self.username, password=self.username)
41        self.assertEqual(Reputation.objects.get(identifier=self.username).score, -1)
42
43    def test_update_reputation(self):
44        """test reputation update"""
45        Reputation.objects.create(identifier=self.username, ip=self.ip, score=4)
46        # Trigger negative reputation
47        authenticate(self.request, self.backends, username=self.username, password=self.username)
48        self.assertEqual(Reputation.objects.get(identifier=self.username).score, 3)
49
50    def test_reputation_lower_limit(self):
51        """test reputation lower limit"""
52        Reputation.objects.create(identifier=self.username, ip=self.ip)
53        update_score(self.request, identifier=self.username, amount=-1000)
54        self.assertEqual(
55            Reputation.objects.get(identifier=self.username).score, DEFAULT_REPUTATION_LOWER_LIMIT
56        )
57
58    def test_reputation_upper_limit(self):
59        """test reputation upper limit"""
60        Reputation.objects.create(identifier=self.username, ip=self.ip)
61        update_score(self.request, identifier=self.username, amount=1000)
62        self.assertEqual(
63            Reputation.objects.get(identifier=self.username).score, DEFAULT_REPUTATION_UPPER_LIMIT
64        )
65
66    def test_policy(self):
67        """Test Policy"""
68        request = PolicyRequest(user=self.user)
69        policy: ReputationPolicy = ReputationPolicy.objects.create(
70            name="reputation-test", threshold=0
71        )
72        self.assertTrue(policy.passes(request).passing)
73
74    def test_api(self):
75        """Test API Validation"""
76        no_toggle = ReputationPolicySerializer(data={"name": generate_id(), "threshold": -5})
77        self.assertFalse(no_toggle.is_valid())

test reputation signals and policy

def setUp(self):
20    def setUp(self):
21        self.request_factory = RequestFactory()
22        self.request = self.request_factory.get("/")
23        self.ip = "127.0.0.1"
24        self.username = "username"
25        self.password = generate_id()
26        # We need a user for the one-to-one in userreputation
27        self.user = User.objects.create(username=self.username)
28        self.user.set_password(self.password)
29        self.backends = [BACKEND_INBUILT]

Hook method for setting up the test fixture before exercising it.

def test_ip_reputation(self):
31    def test_ip_reputation(self):
32        """test IP reputation"""
33        # Trigger negative reputation
34        authenticate(self.request, self.backends, username=self.username, password=self.username)
35        self.assertEqual(Reputation.objects.get(ip=self.ip).score, -1)

test IP reputation

def test_user_reputation(self):
37    def test_user_reputation(self):
38        """test User reputation"""
39        # Trigger negative reputation
40        authenticate(self.request, self.backends, username=self.username, password=self.username)
41        self.assertEqual(Reputation.objects.get(identifier=self.username).score, -1)

test User reputation

def test_update_reputation(self):
43    def test_update_reputation(self):
44        """test reputation update"""
45        Reputation.objects.create(identifier=self.username, ip=self.ip, score=4)
46        # Trigger negative reputation
47        authenticate(self.request, self.backends, username=self.username, password=self.username)
48        self.assertEqual(Reputation.objects.get(identifier=self.username).score, 3)

test reputation update

def test_reputation_lower_limit(self):
50    def test_reputation_lower_limit(self):
51        """test reputation lower limit"""
52        Reputation.objects.create(identifier=self.username, ip=self.ip)
53        update_score(self.request, identifier=self.username, amount=-1000)
54        self.assertEqual(
55            Reputation.objects.get(identifier=self.username).score, DEFAULT_REPUTATION_LOWER_LIMIT
56        )

test reputation lower limit

def test_reputation_upper_limit(self):
58    def test_reputation_upper_limit(self):
59        """test reputation upper limit"""
60        Reputation.objects.create(identifier=self.username, ip=self.ip)
61        update_score(self.request, identifier=self.username, amount=1000)
62        self.assertEqual(
63            Reputation.objects.get(identifier=self.username).score, DEFAULT_REPUTATION_UPPER_LIMIT
64        )

test reputation upper limit

def test_policy(self):
66    def test_policy(self):
67        """Test Policy"""
68        request = PolicyRequest(user=self.user)
69        policy: ReputationPolicy = ReputationPolicy.objects.create(
70            name="reputation-test", threshold=0
71        )
72        self.assertTrue(policy.passes(request).passing)

Test Policy

def test_api(self):
74    def test_api(self):
75        """Test API Validation"""
76        no_toggle = ReputationPolicySerializer(data={"name": generate_id(), "threshold": -5})
77        self.assertFalse(no_toggle.is_valid())

Test API Validation