4
4
from test .utils import LONG_TESTS
5
5
6
6
import pytest
7
+ from pytest_mock import MockerFixture
7
8
8
9
from cve_bin_tool .available_fix import AvailableFixReport
9
10
from cve_bin_tool .available_fix .debian_cve_tracker import check_json
@@ -15,6 +16,140 @@ class TestAvailableFixReport:
15
16
def arrange_data (self ):
16
17
check_json ()
17
18
19
+ @pytest .mark .skipif (
20
+ LONG_TESTS () != 1 , reason = "Skipping tests to reduce network calls"
21
+ )
22
+ def test_long_debian_backport_fix_output (
23
+ self , caplog : pytest .LogCaptureFixture
24
+ ) -> None :
25
+ """Test Backported fix for Debian distros output on console with external API"""
26
+
27
+ fixes = AvailableFixReport (self .MOCK_PSPP_CVE_DATA , "debian-bullseye" , True )
28
+ fixes .check_available_fix ()
29
+ expected_output = [
30
+ "pspp: CVE-2018-20230 has backported fix in v1.2.0-3 release." ,
31
+ "pspp: CVE-2019-9211 has backported fix in v1.2.0-4 release." ,
32
+ ]
33
+
34
+ assert expected_output == [rec .message for rec in caplog .records ]
35
+
36
+ def test_debian_backport_fix_output (
37
+ self , mocker : MockerFixture , caplog : pytest .LogCaptureFixture
38
+ ) -> None :
39
+ """Test Backported fix for Debian distros output on console"""
40
+
41
+ fixes = AvailableFixReport (self .MOCK_PSPP_CVE_DATA , "debian-bullseye" , True )
42
+ mocker .patch (
43
+ "cve_bin_tool.available_fix.debian_cve_tracker.DebianCVETracker.get_data" ,
44
+ return_value = self .MOCK_DEBIAN_API ,
45
+ )
46
+ fixes .check_available_fix ()
47
+ expected_output = [
48
+ "pspp: CVE-2018-20230 has backported fix in v1.2.0-3 release." ,
49
+ "pspp: CVE-2019-9211 has backported fix in v1.2.0-4 release." ,
50
+ ]
51
+
52
+ assert expected_output == [rec .message for rec in caplog .records ]
53
+
54
+ @pytest .mark .skipif (
55
+ LONG_TESTS () != 1 , reason = "Skipping tests to reduce network calls"
56
+ )
57
+ def test_long_debian_available_fix_output (
58
+ self , caplog : pytest .LogCaptureFixture
59
+ ) -> None :
60
+ """Test Available fix for Debian distros output on console with external API"""
61
+
62
+ fixes = AvailableFixReport (self .MOCK_AVAHI_CVE_DATA , "debian-bullseye" , False )
63
+ fixes .check_available_fix ()
64
+ expected_output = [
65
+ "avahi: CVE-2010-2244 has available fix in v0.6.26-1 release." ,
66
+ "avahi: CVE-2011-1002 has available fix in v0.6.28-4 release." ,
67
+ "avahi: CVE-2017-6519 has available fix in v0.7-5 release." ,
68
+ "avahi: CVE-2021-26720 has available fix in v0.8-4 release." ,
69
+ ]
70
+
71
+ assert expected_output == [rec .message for rec in caplog .records ]
72
+
73
+ def test_debian_available_fix_output (
74
+ self , mocker : MockerFixture , caplog : pytest .LogCaptureFixture
75
+ ) -> None :
76
+ """Test Available fix for Debian distros output on console"""
77
+
78
+ fixes = AvailableFixReport (self .MOCK_AVAHI_CVE_DATA , "debian-bullseye" , False )
79
+ mocker .patch (
80
+ "cve_bin_tool.available_fix.debian_cve_tracker.DebianCVETracker.get_data" ,
81
+ return_value = self .MOCK_DEBIAN_API ,
82
+ )
83
+ fixes .check_available_fix ()
84
+ expected_output = [
85
+ "avahi: CVE-2010-2244 has available fix in v0.6.26-1 release." ,
86
+ "avahi: CVE-2011-1002 has available fix in v0.6.28-4 release." ,
87
+ "avahi: CVE-2017-6519 has available fix in v0.7-5 release." ,
88
+ "avahi: CVE-2021-26720 has available fix in v0.8-4 release." ,
89
+ ]
90
+
91
+ assert expected_output == [rec .message for rec in caplog .records ]
92
+
93
+ @pytest .mark .skipif (
94
+ LONG_TESTS () != 1 , reason = "Skipping tests to reduce network calls"
95
+ )
96
+ def test_long_redhat_available_fix_output (
97
+ self , caplog : pytest .LogCaptureFixture
98
+ ) -> None :
99
+ """Test Available fix for Redhat distros output on console with external API"""
100
+
101
+ fixes = AvailableFixReport (self .MOCK_NODEJS_CVE_DATA , "rhel-8" , False )
102
+ fixes .check_available_fix ()
103
+ expected_output = [
104
+ "node.js: CVE-2021-22918 - Status: Fixed - Fixed package: nodejs v12" ,
105
+ "node.js: CVE-2021-22918 - Status: Fixed - Fixed package: nodejs v14" ,
106
+ "node.js: CVE-2021-22918 - Status: Fixed - Fixed package: libuv v1.41" ,
107
+ "node.js: CVE-2021-22918 - Status: Not affected - Related package: nodejs v16" ,
108
+ "node.js: CVE-2021-22931 - Status: Fixed - Fixed package: nodejs v12" ,
109
+ "node.js: CVE-2021-22931 - Status: Fixed - Fixed package: nodejs v14" ,
110
+ "node.js: CVE-2021-22931 - Status: Not affected - Related package: nodejs v16" ,
111
+ "node.js: CVE-2021-22939 - Status: Fixed - Fixed package: nodejs v12" ,
112
+ "node.js: CVE-2021-22939 - Status: Fixed - Fixed package: nodejs v14" ,
113
+ "node.js: CVE-2021-22939 - Status: Not affected - Related package: nodejs v16" ,
114
+ "node.js: CVE-2021-22940 - Status: Fixed - Fixed package: nodejs v12" ,
115
+ "node.js: CVE-2021-22940 - Status: Fixed - Fixed package: nodejs v14" ,
116
+ "node.js: CVE-2021-22940 - Status: Not affected - Related package: nodejs v16" ,
117
+ ]
118
+
119
+ assert expected_output == [rec .message for rec in caplog .records ]
120
+
121
+ def test_redhat_available_fix_output (
122
+ self , mocker : MockerFixture , caplog : pytest .LogCaptureFixture
123
+ ) -> None :
124
+ """Test Available fix for Redhat distros output on console"""
125
+
126
+ fixes = AvailableFixReport (self .MOCK_NODEJS_CVE_DATA , "rhel-8" , False )
127
+ mocker .patch (
128
+ "cve_bin_tool.available_fix.redhat_cve_tracker.RedhatCVETracker.get_data" ,
129
+ return_value = self .MOCK_RH_API ,
130
+ )
131
+ fixes .check_available_fix ()
132
+ expected_output = [
133
+ "node.js: CVE-2021-22918 - Status: Fixed - Fixed package: nodejs v12" ,
134
+ "node.js: CVE-2021-22918 - Status: Fixed - Fixed package: nodejs v14" ,
135
+ "node.js: CVE-2021-22918 - Status: Fixed - Fixed package: libuv v1.41" ,
136
+ "node.js: CVE-2021-22918 - Status: Not affected - Related package: nodejs v16" ,
137
+ "node.js: CVE-2021-22931 - Status: Fixed - Fixed package: nodejs v12" ,
138
+ "node.js: CVE-2021-22931 - Status: Fixed - Fixed package: nodejs v14" ,
139
+ "node.js: CVE-2021-22931 - Status: Fixed - Fixed package: libuv v1.41" ,
140
+ "node.js: CVE-2021-22931 - Status: Not affected - Related package: nodejs v16" ,
141
+ "node.js: CVE-2021-22939 - Status: Fixed - Fixed package: nodejs v12" ,
142
+ "node.js: CVE-2021-22939 - Status: Fixed - Fixed package: nodejs v14" ,
143
+ "node.js: CVE-2021-22939 - Status: Fixed - Fixed package: libuv v1.41" ,
144
+ "node.js: CVE-2021-22939 - Status: Not affected - Related package: nodejs v16" ,
145
+ "node.js: CVE-2021-22940 - Status: Fixed - Fixed package: nodejs v12" ,
146
+ "node.js: CVE-2021-22940 - Status: Fixed - Fixed package: nodejs v14" ,
147
+ "node.js: CVE-2021-22940 - Status: Fixed - Fixed package: libuv v1.41" ,
148
+ "node.js: CVE-2021-22940 - Status: Not affected - Related package: nodejs v16" ,
149
+ ]
150
+
151
+ assert expected_output == [rec .message for rec in caplog .records ]
152
+
18
153
MOCK_PSPP_CVE_DATA = {
19
154
ProductInfo (vendor = "gnu" , product = "pspp" , version = "1.2.0" ): CVEData (
20
155
None ,
@@ -89,60 +224,88 @@ def arrange_data(self):
89
224
)
90
225
}
91
226
92
- @pytest .mark .skipif (
93
- LONG_TESTS () != 1 , reason = "Skipping tests to reduce network calls"
94
- )
95
- def test_debian_backport_fix_output (self , caplog : pytest .LogCaptureFixture ):
96
- """Test Backported fix for Debian distros output on console"""
97
-
98
- fixes = AvailableFixReport (self .MOCK_PSPP_CVE_DATA , "debian-bullseye" , True )
99
- fixes .check_available_fix ()
100
- expected_output = [
101
- "pspp: CVE-2018-20230 has backported fix in v1.2.0-3 release." ,
102
- "pspp: CVE-2019-9211 has backported fix in v1.2.0-4 release." ,
103
- ]
104
-
105
- assert expected_output == [rec .message for rec in caplog .records ]
106
-
107
- @pytest .mark .skipif (
108
- LONG_TESTS () != 1 , reason = "Skipping tests to reduce network calls"
109
- )
110
- def test_debian_available_fix_output (self , caplog : pytest .LogCaptureFixture ):
111
- """Test Available fix for Debian distros output on console"""
112
-
113
- fixes = AvailableFixReport (self .MOCK_AVAHI_CVE_DATA , "debian-bullseye" , False )
114
- fixes .check_available_fix ()
115
- expected_output = [
116
- "avahi: CVE-2010-2244 has available fix in v0.6.26-1 release." ,
117
- "avahi: CVE-2011-1002 has available fix in v0.6.28-4 release." ,
118
- "avahi: CVE-2017-6519 has available fix in v0.7-5 release." ,
119
- "avahi: CVE-2021-26720 has available fix in v0.8-4 release." ,
120
- ]
121
-
122
- assert expected_output == [rec .message for rec in caplog .records ]
123
-
124
- @pytest .mark .skipif (
125
- LONG_TESTS () != 1 , reason = "Skipping tests to reduce network calls"
126
- )
127
- def test_redhat_available_fix_output (self , caplog : pytest .LogCaptureFixture ):
128
- """Test Available fix for Redhat distros output on console"""
129
-
130
- fixes = AvailableFixReport (self .MOCK_NODEJS_CVE_DATA , "rhel-8" , False )
131
- fixes .check_available_fix ()
132
- expected_output = [
133
- "node.js: CVE-2021-22918 - Status: Fixed - Fixed package: nodejs v12" ,
134
- "node.js: CVE-2021-22918 - Status: Fixed - Fixed package: nodejs v14" ,
135
- "node.js: CVE-2021-22918 - Status: Fixed - Fixed package: libuv v1.41" ,
136
- "node.js: CVE-2021-22918 - Status: Not affected - Related package: nodejs v16" ,
137
- "node.js: CVE-2021-22931 - Status: Fixed - Fixed package: nodejs v12" ,
138
- "node.js: CVE-2021-22931 - Status: Fixed - Fixed package: nodejs v14" ,
139
- "node.js: CVE-2021-22931 - Status: Not affected - Related package: nodejs v16" ,
140
- "node.js: CVE-2021-22939 - Status: Fixed - Fixed package: nodejs v12" ,
141
- "node.js: CVE-2021-22939 - Status: Fixed - Fixed package: nodejs v14" ,
142
- "node.js: CVE-2021-22939 - Status: Not affected - Related package: nodejs v16" ,
143
- "node.js: CVE-2021-22940 - Status: Fixed - Fixed package: nodejs v12" ,
144
- "node.js: CVE-2021-22940 - Status: Fixed - Fixed package: nodejs v14" ,
145
- "node.js: CVE-2021-22940 - Status: Not affected - Related package: nodejs v16" ,
146
- ]
227
+ MOCK_RH_API = {
228
+ "affected_release" : [
229
+ {
230
+ "product_name" : "Red Hat Enterprise Linux 8" ,
231
+ "package" : "nodejs:12-8040020210708131418.522a0ee4" ,
232
+ },
233
+ {
234
+ "product_name" : "Red Hat Enterprise Linux 8" ,
235
+ "package" : "nodejs:14-8040020210708154809.522a0ee4" ,
236
+ },
237
+ {
238
+ "product_name" : "Red Hat Enterprise Linux 8" ,
239
+ "package" : "libuv-1:1.41.1-1.el8_4" ,
240
+ },
241
+ ],
242
+ "package_state" : [
243
+ {
244
+ "product_name" : "Red Hat Enterprise Linux 8" ,
245
+ "fix_state" : "Not affected" ,
246
+ "package_name" : "nodejs:16/nodejs" ,
247
+ }
248
+ ],
249
+ }
147
250
148
- assert expected_output == [rec .message for rec in caplog .records ]
251
+ MOCK_DEBIAN_API = {
252
+ "pspp" : {
253
+ "CVE-2018-20230" : {
254
+ "releases" : {
255
+ "bullseye" : {
256
+ "status" : "resolved" ,
257
+ "fixed_version" : "1.2.0-3" ,
258
+ },
259
+ },
260
+ },
261
+ "CVE-2019-9211" : {
262
+ "releases" : {
263
+ "bullseye" : {
264
+ "status" : "resolved" ,
265
+ "fixed_version" : "1.2.0-4" ,
266
+ },
267
+ },
268
+ },
269
+ },
270
+ "avahi" : {
271
+ "CVE-2010-2244" : {
272
+ "releases" : {
273
+ "bullseye" : {
274
+ "status" : "resolved" ,
275
+ "fixed_version" : "0.6.26-1" ,
276
+ },
277
+ },
278
+ },
279
+ "CVE-2011-1002" : {
280
+ "releases" : {
281
+ "bullseye" : {
282
+ "status" : "resolved" ,
283
+ "fixed_version" : "0.6.28-4" ,
284
+ },
285
+ },
286
+ },
287
+ "CVE-2017-6519" : {
288
+ "releases" : {
289
+ "bullseye" : {
290
+ "status" : "resolved" ,
291
+ "fixed_version" : "0.7-5" ,
292
+ },
293
+ },
294
+ },
295
+ "CVE-2021-26720" : {
296
+ "releases" : {
297
+ "bullseye" : {
298
+ "status" : "resolved" ,
299
+ "fixed_version" : "0.8-4" ,
300
+ },
301
+ },
302
+ },
303
+ "CVE-2021-3468" : {
304
+ "releases" : {
305
+ "bullseye" : {
306
+ "status" : "open" ,
307
+ },
308
+ }
309
+ },
310
+ },
311
+ }
0 commit comments