Coverage for tests / endpoints / test_cve_get_by_revision.py: 100%
61 statements
« prev ^ index » next coverage.py v7.13.1, created at 2025-12-29 22:06 +0000
« prev ^ index » next coverage.py v7.13.1, created at 2025-12-29 22:06 +0000
1import unittest
2from unittest.mock import patch, MagicMock
3import json
4from webapp.publisher.cve.cve_helper import CveHelper
5from werkzeug.exceptions import NotFound
8class CveHGetByRevisionTest(unittest.TestCase):
10 def setUp(self):
11 self.file_metadata = {"download_url": "https://example.com/file.json"}
13 self.file_content = {
14 "format": 1,
15 "published_at": "2025-01-26T20:30:16+00:00",
16 "security_issues": {
17 "cves": {
18 "CVE-2023-31486": {
19 "cvss_score": 5.5,
20 "cvss_severity": "medium",
21 "description": "description-1",
22 "ubuntu_priority": "critical",
23 },
24 "CVE-2014-9984": {
25 "cvss_score": 9,
26 "cvss_severity": "high",
27 "description": "description-2",
28 "ubuntu_priority": "negligible",
29 },
30 "CVE-2024-52005": {
31 "cvss_score": 2.1,
32 "cvss_severity": "negligible",
33 "description": "description-3",
34 "ubuntu_priority": "medium",
35 },
36 },
37 "usns": {
38 "3009-1": {
39 "description": "USN description",
40 "published_at": "2016-06-20T16:35:09+00:00",
41 "related_cves": ["CVE-2014-9984"],
42 "related_launchpad_bugs": None,
43 }
44 },
45 },
46 "snaps": {
47 "my-snap": {
48 "revisions": {
49 "3053": {
50 "channels": ["edge"],
51 "fixed-cves": {
52 "CVE-2014-9984": {
53 "affected_binaries": [
54 {
55 "fixed_version": "2.27-3ubuntu1.6",
56 "name": "libc-dev-bin",
57 "status": "fixed",
58 "version": "2.27-3ubuntu1.4",
59 },
60 {
61 "fixed_version": "2.27-3ubuntu1.6",
62 "name": "libc6-dev",
63 "status": "fixed",
64 "version": "2.27-3ubuntu1.4",
65 },
66 ],
67 "usns": ["3009-1"],
68 },
69 "CVE-2023-31486": {
70 "affected_binaries": [
71 {
72 "fixed_version": "2.27-3ubuntu1.6",
73 "name": "libc-dev-bin21",
74 "status": "fixed",
75 "version": "2.27-3ubuntu1.4",
76 },
77 ],
78 "channels_with_fix": [],
79 "usns": ["3009-1"],
80 },
81 },
82 "unfixed-cves": {
83 "CVE-2024-52005": {
84 "affected_binaries": [
85 {
86 "fixed_version": None,
87 "name": "git-man",
88 "status": "unfixed",
89 "version": "1:2.34.1-1ubuntu1.12",
90 }
91 ],
92 "channels_with_fix": None,
93 "usns": None,
94 }
95 },
96 }
97 }
98 }
99 },
100 }
102 @patch("requests.get")
103 def test_get_cve_by_revision(self, mock_get):
104 mock_get.side_effect = [
105 MagicMock(status_code=200, json=lambda: self.file_metadata),
106 MagicMock(status_code=200, text=json.dumps(self.file_content)),
107 ]
109 result = CveHelper.get_cve_with_revision("my-snap", "3053")
111 self.assertEqual(len(result), 3)
112 self.assertEqual(result[0]["id"], "CVE-2014-9984")
113 self.assertEqual(result[0]["status"], "fixed")
114 self.assertEqual(result[0]["cvss_score"], 9)
115 self.assertEqual(result[0]["cvss_severity"], "high")
116 self.assertEqual(result[0]["description"], "description-2")
117 self.assertEqual(result[0]["ubuntu_priority"], "negligible")
118 self.assertEqual(len(result[0]["affected_binaries"]), 2)
119 self.assertEqual(
120 result[0]["affected_binaries"][0]["name"], "libc-dev-bin"
121 )
122 self.assertEqual(
123 result[0]["affected_binaries"][1]["name"], "libc6-dev"
124 )
125 self.assertEqual(len(result[0]["usns"]), 1)
126 self.assertEqual(result[0]["usns"][0]["id"], "3009-1")
127 self.assertEqual(
128 result[0]["usns"][0]["description"], "USN description"
129 )
131 self.assertEqual(result[1]["id"], "CVE-2023-31486")
132 self.assertEqual(result[1]["status"], "fixed")
133 self.assertEqual(result[1]["cvss_score"], 5.5)
134 self.assertEqual(result[1]["cvss_severity"], "medium")
135 self.assertEqual(result[1]["description"], "description-1")
136 self.assertEqual(result[1]["ubuntu_priority"], "critical")
137 self.assertEqual(len(result[1]["affected_binaries"]), 1)
138 self.assertEqual(
139 result[1]["affected_binaries"][0]["name"], "libc-dev-bin21"
140 )
141 self.assertEqual(result[1]["affected_binaries"][0]["status"], "fixed")
142 self.assertEqual(
143 result[1]["affected_binaries"][0]["fixed_version"],
144 "2.27-3ubuntu1.6",
145 )
146 self.assertEqual(
147 result[1]["affected_binaries"][0]["version"], "2.27-3ubuntu1.4"
148 )
149 self.assertEqual(len(result[1]["usns"]), 1)
150 self.assertEqual(result[1]["usns"][0]["id"], "3009-1")
152 self.assertEqual(result[2]["id"], "CVE-2024-52005")
153 self.assertEqual(result[2]["status"], "unfixed")
154 self.assertEqual(result[2]["cvss_score"], 2.1)
155 self.assertEqual(result[2]["cvss_severity"], "negligible")
156 self.assertEqual(result[2]["description"], "description-3")
157 self.assertEqual(result[2]["ubuntu_priority"], "medium")
158 self.assertEqual(len(result[2]["affected_binaries"]), 1)
159 self.assertEqual(result[2]["affected_binaries"][0]["name"], "git-man")
160 self.assertEqual(
161 result[2]["affected_binaries"][0]["status"], "unfixed"
162 )
163 self.assertEqual(
164 result[2]["affected_binaries"][0]["fixed_version"], None
165 )
166 self.assertEqual(
167 result[2]["affected_binaries"][0]["version"],
168 "1:2.34.1-1ubuntu1.12",
169 )
170 self.assertEqual(len(result[2]["usns"]), 0)
172 @patch("requests.get")
173 def test_get_cve_by_revision_metadata_not_found(self, mock_get):
174 mock_get.side_effect = [
175 MagicMock(status_code=404, json=lambda: {}),
176 MagicMock(status_code=200, text=json.dumps(self.file_content)),
177 ]
178 with self.assertRaises(NotFound):
179 CveHelper.get_cve_with_revision("my-snap", "3053")
181 @patch("requests.get")
182 def test_get_cve_by_revision_file_content_not_found(self, mock_get):
183 mock_get.side_effect = [
184 MagicMock(status_code=200, json=lambda: self.file_metadata),
185 MagicMock(status_code=404, text=json.dumps(self.file_content)),
186 ]
187 with self.assertRaises(NotFound):
188 CveHelper.get_cve_with_revision("my-snap", "3053")