File: test_db_vuln.py

package info (click to toggle)
python-vulndb 0.1.3-4
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 1,032 kB
  • sloc: python: 446; sh: 196; makefile: 2
file content (147 lines) | stat: -rw-r--r-- 5,992 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
import unittest
import os

from vulndb import DBVuln
from vulndb.db_vuln import Reference

MOCK_TITLE = 'Title'
MOCK_DESC = 'Description for the vulnerability'
MOCK_ID = 123
MOCK_SEVERITY = 'medium'
MOCK_WASC = ['2']
MOCK_TAGS = ['hello', 'world']
MOCK_CWE = ['89']
MOCK_OWASP_TOP_10 = {"2010": [1], "2013": [2]}
MOCK_FIX_EFFORT = 50
MOCK_FIX_GUIDANCE = "A very long text explaining how to fix..."
MOCK_DB_FILE = 'path/to/file.json'
MOCK_REFERENCES = [{"url": "http://foo.com/xss",
                    "title": "First reference to XSS vulnerability"},
                   {"url": "http://asp.net/xss",
                    "title": "How to fix XSS vulns in ASP.NET"}]


class TestDBVuln(unittest.TestCase):
    DEFAULT_KWARGS = {
            '_id': MOCK_ID,
            'title': MOCK_TITLE,
            'description': MOCK_DESC,
            'severity': MOCK_SEVERITY,
            'wasc': MOCK_WASC,
            'tags': MOCK_TAGS,
            'cwe': MOCK_CWE,
            'owasp_top_10': MOCK_OWASP_TOP_10,
            'fix_effort': MOCK_FIX_EFFORT,
            'fix_guidance': MOCK_FIX_GUIDANCE,
            'references': MOCK_REFERENCES,
            'db_file': MOCK_DB_FILE
        }

    def setUp(self):
        self.original_db_path = DBVuln.DB_PATH

        current_dir = os.path.dirname(os.path.realpath(__file__))
        DBVuln.DB_PATH = os.path.join(current_dir, 'db')

    def tearDown(self):
        DBVuln.DB_PATH = self.original_db_path

    def test_basic(self):
        dbv = DBVuln(**self.DEFAULT_KWARGS)

        self.assertEqual(dbv.title, MOCK_TITLE)
        self.assertEqual(dbv.description, MOCK_DESC)
        self.assertEqual(dbv.id, MOCK_ID)
        self.assertEqual(dbv.severity, MOCK_SEVERITY)
        self.assertEqual(dbv.wasc, MOCK_WASC)
        self.assertEqual(dbv.tags, MOCK_TAGS)
        self.assertEqual(dbv.cwe, MOCK_CWE)
        self.assertEqual(dbv.owasp_top_10, MOCK_OWASP_TOP_10)
        self.assertEqual(dbv.fix_effort, MOCK_FIX_EFFORT)
        self.assertEqual(dbv.fix_guidance, MOCK_FIX_GUIDANCE)
        self.assertEqual(dbv.references, MOCK_REFERENCES)
        self.assertEqual(dbv.db_file, MOCK_DB_FILE)

    def test_from_file(self):
        _file = os.path.join(DBVuln.DB_PATH, DBVuln.DEFAULT_LANG, '123-spec-example.json')

        dbv_1 = DBVuln.from_file(_file)
        dbv_2 = DBVuln.from_id(123)

        self.assertEqual(dbv_1, dbv_2)
        self.assertEqual(dbv_1.db_file, _file)

    def test_from_id(self):
        dbv = DBVuln.from_id(123)

        _file = os.path.join(DBVuln.DB_PATH, DBVuln.DEFAULT_LANG, '123-spec-example.json')
        self.assertEqual(dbv.db_file, _file)

        expected_references = [Reference("http://foo.com/xss",
                                         "First reference to XSS vulnerability"),
                               Reference("http://asp.net/xss",
                                         "How to fix XSS vulns in ASP.NET")]

        self.assertEqual(dbv.title, u'Cross-Site Scripting')
        self.assertEqual(dbv.description, u'A very long text explaining what a XSS'
                                          u' vulnerability is')
        self.assertEqual(dbv.id, MOCK_ID)
        self.assertEqual(dbv.severity, MOCK_SEVERITY)
        self.assertEqual(dbv.wasc, [u'0003'])
        self.assertEqual(dbv.tags, [u'xss', u'client side'])
        self.assertEqual(dbv.cwe, [u'0003', u'0007'])
        self.assertEqual(dbv.owasp_top_10, {"2010": [1], "2013": [2]},)
        self.assertEqual(dbv.references, expected_references)
        self.assertEqual(dbv.fix_effort, 50)
        self.assertEqual(dbv.fix_guidance, u'A very long text explaining how developers'
                                           u' should prevent\nXSS vulnerabilities.\n')

    def test_get_cwe_url(self):
        dbv = DBVuln(**self.DEFAULT_KWARGS)
        self.assertEqual(dbv.get_cwe_url(89),
                         'https://cwe.mitre.org/data/definitions/89.html')

    def test_get_wasc_url(self):
        dbv = DBVuln(**self.DEFAULT_KWARGS)
        self.assertEqual(dbv.get_wasc_url(3),
                         'http://projects.webappsec.org/w/page/13246946/Integer%20Overflows')

    def test_get_owasp_top_10_url(self):
        dbv = DBVuln(**self.DEFAULT_KWARGS)
        self.assertEqual(dbv.get_owasp_top_10_url(2010, 2),
                         'https://www.owasp.org/index.php/Top_10_2010-A2')

        self.assertEqual(dbv.get_owasp_top_10_url(2013, 2),
                         'https://www.owasp.org/index.php/Top_10_2013-A2')

        self.assertEqual(dbv.get_owasp_top_10_url(2033, 2), None)

    def test_load_es_lang(self):
        language = 'es'
        _file = os.path.join(DBVuln.DB_PATH, language, '123-spec-example.json')

        dbv_1 = DBVuln.from_file(_file, language=language)
        dbv_2 = DBVuln.from_id(123, language=language)

        self.assertEqual(dbv_1, dbv_2)
        self.assertEqual(dbv_1.db_file, _file)

        dbv = dbv_1

        expected_references = [Reference("http://foo.es/xss",
                                         "Primera referencia a una vulnerabilidad de XSS"),
                               Reference("http://asp.net/xss",
                                         "Como arreglar XSS en .NET")]

        self.assertEqual(dbv.title, u'Cross-Site Scripting en ES')
        self.assertEqual(dbv.description, u'Un texto largo donde se explica que es un XSS')
        self.assertEqual(dbv.id, MOCK_ID)
        self.assertEqual(dbv.severity, MOCK_SEVERITY)
        self.assertEqual(dbv.wasc, [u'0003'])
        self.assertEqual(dbv.tags, [u'xss', u'client side'])
        self.assertEqual(dbv.cwe, [u'0003', u'0007'])
        self.assertEqual(dbv.owasp_top_10, {"2010": [1], "2013": [2]},)
        self.assertEqual(dbv.references, expected_references)
        self.assertEqual(dbv.fix_effort, 50)
        self.assertEqual(dbv.fix_guidance, u'Y otro texto largo donde se explica como'
                                           u' arreglar vulnerabilidades de XSS')