|
23 | 23 |
|
24 | 24 | import json |
25 | 25 | import os |
| 26 | +import pytest |
26 | 27 |
|
27 | | -from django.test import TestCase |
| 28 | +from django.test import Client |
28 | 29 |
|
29 | 30 | from vulnerabilities.api import PackageSerializer |
30 | 31 | from vulnerabilities.data_dump import debian_dump |
|
38 | 39 | TEST_DATA = os.path.join(BASE_DIR, 'test_data/') |
39 | 40 |
|
40 | 41 |
|
41 | | -class TestDebianResponse(TestCase): |
42 | | - @classmethod |
43 | | - def setUpTestData(cls): |
44 | | - with open(os.path.join(TEST_DATA, 'debian.json')) as f: |
45 | | - test_data = json.load(f) |
| 42 | +def test_debian_query_by_name(setDebianData): |
46 | 43 |
|
47 | | - extract_data = debian.extract_vulnerabilities(test_data) |
48 | | - debian_dump(extract_data) |
| 44 | + client = Client() |
| 45 | + response = client.get('/api/packages/?name=mimetex', format='json').data |
| 46 | + assert 4 == response['count'] |
| 47 | + first_result = response['results'][0] |
| 48 | + assert 'mimetex' == first_result['name'] |
| 49 | + versions = {r['version'] for r in response['results']} |
| 50 | + assert '1.50-1.1' in versions |
| 51 | + assert '1.74-1' in versions |
49 | 52 |
|
50 | | - Package.objects.create( |
51 | | - name='mimetex', |
52 | | - version='1.50-1.1', |
53 | | - type='deb', |
54 | | - namespace='ubuntu' |
55 | | - ) |
56 | | - |
57 | | - def test_query_by_name(self): |
58 | | - response = self.client.get('/api/packages/?name=mimetex', format='json').data |
59 | | - |
60 | | - self.assertEqual(5, response['count']) |
61 | | - |
62 | | - first_result = response['results'][0] |
63 | | - self.assertEqual('mimetex', first_result['name']) |
64 | | - |
65 | | - versions = {r['version'] for r in response['results']} |
66 | | - self.assertIn('1.50-1.1', versions) |
67 | | - self.assertIn('1.74-1', versions) |
| 53 | + purls = {r['package_url'] for r in response['results']} |
| 54 | + assert 'pkg:deb/debian/mimetex@1.50-1.1?distro=jessie' in purls |
| 55 | + assert 'pkg:deb/debian/mimetex@1.74-1?distro=jessie' in purls |
68 | 56 |
|
69 | | - purls = {r['package_url'] for r in response['results']} |
70 | | - self.assertIn('pkg:deb/debian/mimetex@1.50-1.1?distro=jessie', purls) |
71 | | - self.assertIn('pkg:deb/debian/mimetex@1.74-1?distro=jessie', purls) |
72 | 57 |
|
73 | | - def test_query_by_invalid_package_url(self): |
74 | | - url = '/api/packages/?package_url=invalid_purl' |
75 | | - response = self.client.get(url, format='json') |
| 58 | +def test_debian_query_by_invalid_package_url(setDebianData): |
| 59 | + client = Client() |
| 60 | + url = '/api/packages/?package_url=invalid_purl' |
| 61 | + response = client.get(url, format='json') |
76 | 62 |
|
77 | | - self.assertEqual(400, response.status_code) |
78 | | - self.assertIn('error', response.data) |
79 | | - error = response.data['error'] |
80 | | - self.assertIn('invalid_purl', error) |
| 63 | + assert 400 == response.status_code |
| 64 | + assert 'error' in response.data |
| 65 | + error = response.data['error'] |
| 66 | + assert 'invalid_purl' in error |
81 | 67 |
|
82 | | - def test_query_by_package_url(self): |
83 | | - url = '/api/packages/?package_url=pkg:deb/debian/mimetex@1.50-1.1?distro=jessie' |
84 | | - response = self.client.get(url, format='json').data |
85 | 68 |
|
86 | | - self.assertEqual(2, response['count']) |
| 69 | +def test_debian_query_by_package_url(setDebianData): |
| 70 | + client = Client() |
| 71 | + url = '/api/packages/?package_url=pkg:deb/debian/mimetex@1.50-1.1?distro=jessie' |
| 72 | + response = client.get(url, format='json').data |
87 | 73 |
|
88 | | - first_result = response['results'][0] |
89 | | - self.assertEqual('mimetex', first_result['name']) |
| 74 | + assert 2 == response['count'] |
90 | 75 |
|
91 | | - versions = {r['version'] for r in response['results']} |
92 | | - self.assertIn('1.50-1.1', versions) |
93 | | - self.assertNotIn('1.74-1', versions) |
| 76 | + first_result = response['results'][0] |
| 77 | + assert 'mimetex' == first_result['name'] |
| 78 | + versions = {r['version'] for r in response['results']} |
| 79 | + assert '1.50-1.1' in versions |
| 80 | + assert '1.74-1' not in versions |
94 | 81 |
|
95 | | - def test_query_by_package_url_without_namespace(self): |
96 | | - url = '/api/packages/?package_url=pkg:deb/mimetex@1.50-1.1' |
97 | | - response = self.client.get(url, format='json').data |
98 | 82 |
|
99 | | - self.assertEqual(3, response['count']) |
| 83 | +def test_debian_query_by_package_url_without_namespace(setDebianData): |
100 | 84 |
|
101 | | - first_result = response['results'][0] |
102 | | - self.assertEqual('mimetex', first_result['name']) |
103 | | - |
104 | | - purls = {r['package_url'] for r in response['results']} |
105 | | - self.assertIn('pkg:deb/debian/mimetex@1.50-1.1?distro=jessie', purls) |
106 | | - self.assertIn('pkg:deb/ubuntu/mimetex@1.50-1.1', purls) |
107 | | - |
108 | | - |
109 | | -class TestUbuntuResponse(TestCase): |
110 | | - def test_ubuntu_response(self): |
111 | | - with open(os.path.join(TEST_DATA, 'ubuntu_main.html')) as f: |
112 | | - test_data = f.read() |
113 | | - |
114 | | - extract_data = ubuntu.extract_cves(test_data) |
115 | | - ubuntu_dump(extract_data) |
116 | | - response = self.client.get('/api/packages/?name=automake', format='json') |
| 85 | + Package.objects.create( |
| 86 | + name='mimetex', |
| 87 | + version='1.50-1.1', |
| 88 | + type='deb', |
| 89 | + namespace='ubuntu' |
| 90 | + ) |
| 91 | + client = Client() |
| 92 | + url = '/api/packages/?package_url=pkg:deb/mimetex@1.50-1.1' |
| 93 | + response = client.get(url, format='json').data |
117 | 94 |
|
118 | | - result = response.data.get('results')[0] |
119 | | - self.assertEqual('automake', result['name']) |
120 | | - self.assertEqual(None, result['version']) |
121 | | - self.assertEqual(1, len(result['vulnerabilities'])) |
| 95 | + assert 3 == response['count'] |
122 | 96 |
|
123 | | - vuln = result['vulnerabilities'][0] |
124 | | - self.assertEqual(0, len(vuln['references'])) |
| 97 | + first_result = response['results'][0] |
| 98 | + assert 'mimetex' == first_result['name'] |
125 | 99 |
|
| 100 | + purls = {r['package_url'] for r in response['results']} |
| 101 | + assert 'pkg:deb/debian/mimetex@1.50-1.1?distro=jessie' in purls |
| 102 | + assert 'pkg:deb/ubuntu/mimetex@1.50-1.1' in purls |
126 | 103 |
|
127 | | -class TestSerializers(TestCase): |
128 | | - @classmethod |
129 | | - def setUpTestData(cls): |
130 | | - with open(os.path.join(TEST_DATA, 'debian.json')) as f: |
131 | | - test_data = json.load(f) |
132 | 104 |
|
133 | | - extract_data = debian.extract_vulnerabilities(test_data) |
134 | | - debian_dump(extract_data) |
| 105 | +def test_debian_package_serializer(setDebianData): |
| 106 | + client = Client() |
| 107 | + pk = Package.objects.filter(name="mimetex") |
| 108 | + response = PackageSerializer(pk, many=True).data |
| 109 | + print(response) |
| 110 | + assert 4 == len(response) |
135 | 111 |
|
136 | | - def test_package_serializer(self): |
137 | | - pk = Package.objects.filter(name="mimetex") |
138 | | - response = PackageSerializer(pk, many=True).data |
| 112 | + first_result = response[0] |
| 113 | + assert 'mimetex' == first_result['name'] |
139 | 114 |
|
140 | | - self.assertEqual(4, len(response)) |
| 115 | + versions = {r['version'] for r in response} |
| 116 | + assert '1.50-1.1' in versions |
| 117 | + assert '1.74-1' in versions |
141 | 118 |
|
142 | | - first_result = response[0] |
143 | | - self.assertEqual('mimetex', first_result['name']) |
| 119 | + purls = {r['package_url'] for r in response} |
| 120 | + assert 'pkg:deb/debian/mimetex@1.50-1.1?distro=jessie' in purls |
| 121 | + assert 'pkg:deb/debian/mimetex@1.74-1?distro=jessie' in purls |
144 | 122 |
|
145 | | - versions = {r['version'] for r in response} |
146 | | - self.assertIn('1.50-1.1', versions) |
147 | | - self.assertIn('1.74-1', versions) |
148 | 123 |
|
149 | | - purls = {r['package_url'] for r in response} |
150 | | - self.assertIn('pkg:deb/debian/mimetex@1.50-1.1?distro=jessie', purls) |
151 | | - self.assertIn('pkg:deb/debian/mimetex@1.74-1?distro=jessie', purls) |
| 124 | +def test_ubuntu_response(setUbuntuData): |
| 125 | + client = Client() |
| 126 | + response = client.get('/api/packages/?name=automake', format='json') |
| 127 | + result = response.data.get('results')[0] |
| 128 | + assert 'automake' == result['name'] |
| 129 | + assert result['version'] is None |
| 130 | + assert 1 == len(result['vulnerabilities']) |
| 131 | + vuln = result['vulnerabilities'][0] |
| 132 | + assert 0 == len(vuln['references']) |
0 commit comments