TextValidatorTests.test_regex2()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
dl 0
loc 7
c 2
b 0
f 0
rs 9.4285
cc 1
1
from django.test import TestCase
2
3
from django.core.exceptions import ValidationError
4
5
from sigma_core.models.validator import get_validator_by_name, are_validator_fields_valid, is_validator_input_valid
6
from sigma_core.models.validator import Validator
7
8
class ValidatorTests(TestCase):
9
    @classmethod
10
    def setUp(self):
11
        pass
12
    def test_notfound_get_validator_by_name(self):
13
        self.assertEqual(get_validator_by_name('notfound-validator'), None)
14
    def test_base_get_validator_by_name(self):
15
        self.assertNotEqual(get_validator_by_name(Validator.VALIDATOR_NONE), None)
16
17
class TextValidatorTests(TestCase):
18
    @classmethod
19
    def setUp(self):
20
        pass
21
    def test_get_validator_by_name(self):
22
        self.assertNotEqual(get_validator_by_name(Validator.VALIDATOR_TEXT), None)
23
    def test_regex1(self):
24
        fields = {'regex': "\s*(?P<header>[^:]+)\s*:(?P<value>.*?)\s*$", 'message': 'Err msg' }
25
        self.assertTrue(are_validator_fields_valid(Validator.VALIDATOR_TEXT, fields))
26
    def test_regex2(self):
27
        # The following pattern excludes filenames that end in either bat or exe:
28
        # https://docs.python.org/3/howto/regex.html
29
        fields = {'regex': ".*[.](?!bat$|exe$).*$", 'message': 'Err msg' }
30
        self.assertTrue(are_validator_fields_valid(Validator.VALIDATOR_TEXT, fields))
31
        self.assertTrue(is_validator_input_valid(Validator.VALIDATOR_TEXT, fields, 'file.png'))
32
        self.assertFalse(is_validator_input_valid(Validator.VALIDATOR_TEXT, fields, 'file.exe'))
33
    def test_evil_regex(self):
34
        fields = {'regex': "^(([a-z])+.)+[A-Z]([a-z])+$", 'message': 'Err msg' }
35
        value = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!'
36
        self.assertTrue(are_validator_fields_valid(Validator.VALIDATOR_TEXT, fields))
37
        self.assertFalse(is_validator_input_valid(Validator.VALIDATOR_TEXT, fields, value))
38