Completed
Pull Request — master (#16)
by
unknown
01:35
created

ValidatorTests   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 8
Duplicated Lines 0 %
Metric Value
dl 0
loc 8
rs 10
wmc 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A test_notfound_get_validator_by_name() 0 2 1
A setUp() 0 3 1
A test_base_get_validator_by_name() 0 2 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
6
from sigma_core.models.validator import Validator
7
8
def are_validator_fields_valid(validator, fields):
9
    try:
10
        v = get_validator_by_name(validator)
11
        return v['validate_fields'](fields)
12
    except ValidationError:
13
        return False
14
15
def is_validator_input_valid(validator, fields, value):
16
    try:
17
        v = get_validator_by_name(validator)
18
        v['validate_input'](fields, value)
19
        return True
20
    except ValidationError:
21
        return False
22
23
class ValidatorTests(TestCase):
24
    @classmethod
25
    def setUp(self):
26
        pass
27
    def test_notfound_get_validator_by_name(self):
28
        self.assertEqual(get_validator_by_name('notfound-validator'), None)
29
    def test_base_get_validator_by_name(self):
30
        self.assertNotEqual(get_validator_by_name(Validator.VALIDATOR_NONE), None)
31
32
class TextValidatorTests(TestCase):
33
    @classmethod
34
    def setUp(self):
35
        pass
36
    def test_get_validator_by_name(self):
37
        self.assertNotEqual(get_validator_by_name(Validator.VALIDATOR_TEXT), None)
38
    def test_regex1(self):
39
        fields = {'regex': "\s*(?P<header>[^:]+)\s*:(?P<value>.*?)\s*$", 'message': 'Err msg' }
40
        self.assertTrue(are_validator_fields_valid(Validator.VALIDATOR_TEXT, fields))
41
    def test_regex2(self):
42
        # The following pattern excludes filenames that end in either bat or exe:
43
        # https://docs.python.org/3/howto/regex.html
44
        fields = {'regex': ".*[.](?!bat$|exe$).*$", 'message': 'Err msg' }
45
        self.assertTrue(are_validator_fields_valid(Validator.VALIDATOR_TEXT, fields))
46
        self.assertTrue(is_validator_input_valid(Validator.VALIDATOR_TEXT, fields, 'file.png'))
47
        self.assertFalse(is_validator_input_valid(Validator.VALIDATOR_TEXT, fields, 'file.exe'))
48
    def test_evil_regex(self):
49
        fields = {'regex': "^(([a-z])+.)+[A-Z]([a-z])+$", 'message': 'Err msg' }
50
        value = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!'
51
        self.assertTrue(are_validator_fields_valid(Validator.VALIDATOR_TEXT, fields))
52
        self.assertFalse(is_validator_input_valid(Validator.VALIDATOR_TEXT, fields, value))
53