Coverage for tests/endpoints/test_cve_get_by_revision.py: 100%

61 statements  

« prev     ^ index     » next       coverage.py v7.10.5, created at 2025-08-26 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 

6 

7 

8class CveHGetByRevisionTest(unittest.TestCase): 

9 

10 def setUp(self): 

11 

12 self.file_metadata = {"download_url": "https://example.com/file.json"} 

13 

14 self.file_content = { 

15 "format": 1, 

16 "published_at": "2025-01-26T20:30:16+00:00", 

17 "security_issues": { 

18 "cves": { 

19 "CVE-2023-31486": { 

20 "cvss_score": 5.5, 

21 "cvss_severity": "medium", 

22 "description": "description-1", 

23 "ubuntu_priority": "critical", 

24 }, 

25 "CVE-2014-9984": { 

26 "cvss_score": 9, 

27 "cvss_severity": "high", 

28 "description": "description-2", 

29 "ubuntu_priority": "negligible", 

30 }, 

31 "CVE-2024-52005": { 

32 "cvss_score": 2.1, 

33 "cvss_severity": "negligible", 

34 "description": "description-3", 

35 "ubuntu_priority": "medium", 

36 }, 

37 }, 

38 "usns": { 

39 "3009-1": { 

40 "description": "USN description", 

41 "published_at": "2016-06-20T16:35:09+00:00", 

42 "related_cves": ["CVE-2014-9984"], 

43 "related_launchpad_bugs": None, 

44 } 

45 }, 

46 }, 

47 "snaps": { 

48 "my-snap": { 

49 "revisions": { 

50 "3053": { 

51 "channels": ["edge"], 

52 "fixed-cves": { 

53 "CVE-2014-9984": { 

54 "affected_binaries": [ 

55 { 

56 "fixed_version": "2.27-3ubuntu1.6", 

57 "name": "libc-dev-bin", 

58 "status": "fixed", 

59 "version": "2.27-3ubuntu1.4", 

60 }, 

61 { 

62 "fixed_version": "2.27-3ubuntu1.6", 

63 "name": "libc6-dev", 

64 "status": "fixed", 

65 "version": "2.27-3ubuntu1.4", 

66 }, 

67 ], 

68 "usns": ["3009-1"], 

69 }, 

70 "CVE-2023-31486": { 

71 "affected_binaries": [ 

72 { 

73 "fixed_version": "2.27-3ubuntu1.6", 

74 "name": "libc-dev-bin21", 

75 "status": "fixed", 

76 "version": "2.27-3ubuntu1.4", 

77 }, 

78 ], 

79 "channels_with_fix": [], 

80 "usns": ["3009-1"], 

81 }, 

82 }, 

83 "unfixed-cves": { 

84 "CVE-2024-52005": { 

85 "affected_binaries": [ 

86 { 

87 "fixed_version": None, 

88 "name": "git-man", 

89 "status": "unfixed", 

90 "version": "1:2.34.1-1ubuntu1.12", 

91 } 

92 ], 

93 "channels_with_fix": None, 

94 "usns": None, 

95 } 

96 }, 

97 } 

98 } 

99 } 

100 }, 

101 } 

102 

103 @patch("requests.get") 

104 def test_get_cve_by_revision(self, mock_get): 

105 mock_get.side_effect = [ 

106 MagicMock(status_code=200, json=lambda: self.file_metadata), 

107 MagicMock(status_code=200, text=json.dumps(self.file_content)), 

108 ] 

109 

110 result = CveHelper.get_cve_with_revision("my-snap", "3053") 

111 

112 self.assertEqual(len(result), 3) 

113 self.assertEqual(result[0]["id"], "CVE-2014-9984") 

114 self.assertEqual(result[0]["status"], "fixed") 

115 self.assertEqual(result[0]["cvss_score"], 9) 

116 self.assertEqual(result[0]["cvss_severity"], "high") 

117 self.assertEqual(result[0]["description"], "description-2") 

118 self.assertEqual(result[0]["ubuntu_priority"], "negligible") 

119 self.assertEqual(len(result[0]["affected_binaries"]), 2) 

120 self.assertEqual( 

121 result[0]["affected_binaries"][0]["name"], "libc-dev-bin" 

122 ) 

123 self.assertEqual( 

124 result[0]["affected_binaries"][1]["name"], "libc6-dev" 

125 ) 

126 self.assertEqual(len(result[0]["usns"]), 1) 

127 self.assertEqual(result[0]["usns"][0]["id"], "3009-1") 

128 self.assertEqual( 

129 result[0]["usns"][0]["description"], "USN description" 

130 ) 

131 

132 self.assertEqual(result[1]["id"], "CVE-2023-31486") 

133 self.assertEqual(result[1]["status"], "fixed") 

134 self.assertEqual(result[1]["cvss_score"], 5.5) 

135 self.assertEqual(result[1]["cvss_severity"], "medium") 

136 self.assertEqual(result[1]["description"], "description-1") 

137 self.assertEqual(result[1]["ubuntu_priority"], "critical") 

138 self.assertEqual(len(result[1]["affected_binaries"]), 1) 

139 self.assertEqual( 

140 result[1]["affected_binaries"][0]["name"], "libc-dev-bin21" 

141 ) 

142 self.assertEqual(result[1]["affected_binaries"][0]["status"], "fixed") 

143 self.assertEqual( 

144 result[1]["affected_binaries"][0]["fixed_version"], 

145 "2.27-3ubuntu1.6", 

146 ) 

147 self.assertEqual( 

148 result[1]["affected_binaries"][0]["version"], "2.27-3ubuntu1.4" 

149 ) 

150 self.assertEqual(len(result[1]["usns"]), 1) 

151 self.assertEqual(result[1]["usns"][0]["id"], "3009-1") 

152 

153 self.assertEqual(result[2]["id"], "CVE-2024-52005") 

154 self.assertEqual(result[2]["status"], "unfixed") 

155 self.assertEqual(result[2]["cvss_score"], 2.1) 

156 self.assertEqual(result[2]["cvss_severity"], "negligible") 

157 self.assertEqual(result[2]["description"], "description-3") 

158 self.assertEqual(result[2]["ubuntu_priority"], "medium") 

159 self.assertEqual(len(result[2]["affected_binaries"]), 1) 

160 self.assertEqual(result[2]["affected_binaries"][0]["name"], "git-man") 

161 self.assertEqual( 

162 result[2]["affected_binaries"][0]["status"], "unfixed" 

163 ) 

164 self.assertEqual( 

165 result[2]["affected_binaries"][0]["fixed_version"], None 

166 ) 

167 self.assertEqual( 

168 result[2]["affected_binaries"][0]["version"], 

169 "1:2.34.1-1ubuntu1.12", 

170 ) 

171 self.assertEqual(len(result[2]["usns"]), 0) 

172 

173 @patch("requests.get") 

174 def test_get_cve_by_revision_metadata_not_found(self, mock_get): 

175 mock_get.side_effect = [ 

176 MagicMock(status_code=404, json=lambda: {}), 

177 MagicMock(status_code=200, text=json.dumps(self.file_content)), 

178 ] 

179 with self.assertRaises(NotFound): 

180 CveHelper.get_cve_with_revision("my-snap", "3053") 

181 

182 @patch("requests.get") 

183 def test_get_cve_by_revision_file_content_not_found(self, mock_get): 

184 mock_get.side_effect = [ 

185 MagicMock(status_code=200, json=lambda: self.file_metadata), 

186 MagicMock(status_code=404, text=json.dumps(self.file_content)), 

187 ] 

188 with self.assertRaises(NotFound): 

189 CveHelper.get_cve_with_revision("my-snap", "3053")