OSV.dev vulnerability database client
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

osv: extract test runner, add err_api_status helper (E600/E340)

Move Alcotest.run from test_osv.ml into a new test.ml; test_osv exports
a single suite (consolidating the previous 5 sub-suites). Pull
err_api_status helper out of post_json to drop the inline
Error (Fmt.str ...).

+35 -43
+4 -1
lib/osv.ml
··· 242 242 243 243 (* ── HTTP helpers ──────────────────────────────────────────────────────── *) 244 244 245 + let err_api_status status text = 246 + Error (Fmt.str "OSV API error %d: %s" status text) 247 + 245 248 let post_json ~sw ~net ~clock url body_str = 246 249 Log.debug (fun f -> f "POST %s" url); 247 250 let headers = Requests.Headers.(empty |> content_type Requests.Mime.json) in ··· 255 258 Ok text 256 259 else 257 260 let text = Requests.Response.text resp in 258 - Error (Fmt.str "OSV API error %d: %s" status text) 261 + err_api_status status text 259 262 260 263 (* ── Queries ───────────────────────────────────────────────────────────── *) 261 264
+2 -1
test/dune
··· 1 1 (test 2 - (name test_osv) 2 + (name test) 3 + (modules test test_osv) 3 4 (libraries osv alcotest))
+1
test/test.ml
··· 1 + let () = Alcotest.run "osv" [ Test_osv.suite ]
+24 -41
test/test_osv.ml
··· 317 317 Alcotest.(check bool) "no ranges" false (has_fix v) 318 318 319 319 (* ═══════════════════════════════════════════════════════════════════════ *) 320 - (* Runner *) 320 + (* Suite *) 321 321 (* ═══════════════════════════════════════════════════════════════════════ *) 322 322 323 - let () = 324 - Alcotest.run "osv" 323 + let suite = 324 + ( "osv", 325 325 [ 326 - ( "severity-cvss", 327 - [ 328 - Alcotest.test_case "CVSS boundaries" `Quick 329 - test_severity_cvss_boundaries; 330 - Alcotest.test_case "real CVEs" `Quick test_severity_real_cves; 331 - Alcotest.test_case "to_string" `Quick test_severity_to_string; 332 - ] ); 333 - ( "parse-osv-schema", 334 - [ 335 - Alcotest.test_case "minimal" `Quick test_parse_minimal; 336 - Alcotest.test_case "with severity" `Quick test_parse_with_severity; 337 - Alcotest.test_case "aliases" `Quick test_parse_aliases; 338 - Alcotest.test_case "empty" `Quick test_parse_empty; 339 - Alcotest.test_case "multiple" `Quick test_parse_multiple; 340 - Alcotest.test_case "npm advisory" `Quick test_parse_npm_advisory; 341 - Alcotest.test_case "RustSec" `Quick test_parse_rustsec; 342 - Alcotest.test_case "PyPI" `Quick test_parse_pypi; 343 - ] ); 344 - ( "filtering", 345 - [ 346 - Alcotest.test_case "critical only" `Quick 347 - test_filter_severity_critical; 348 - Alcotest.test_case "high+" `Quick test_filter_severity_high; 349 - Alcotest.test_case "medium+" `Quick test_filter_severity_medium; 350 - Alcotest.test_case "all" `Quick test_filter_severity_all; 351 - ] ); 352 - ( "cve-extraction", 353 - [ 354 - Alcotest.test_case "extract CVEs" `Quick test_cve_ids_extraction; 355 - Alcotest.test_case "empty aliases" `Quick test_cve_ids_empty; 356 - ] ); 357 - ( "has-fix", 358 - [ 359 - Alcotest.test_case "has fix" `Quick test_has_fix_true; 360 - Alcotest.test_case "no fix" `Quick test_has_fix_false; 361 - Alcotest.test_case "no ranges" `Quick test_has_fix_no_ranges; 362 - ] ); 363 - ] 326 + Alcotest.test_case "CVSS boundaries" `Quick test_severity_cvss_boundaries; 327 + Alcotest.test_case "real CVEs" `Quick test_severity_real_cves; 328 + Alcotest.test_case "to_string" `Quick test_severity_to_string; 329 + Alcotest.test_case "parse minimal" `Quick test_parse_minimal; 330 + Alcotest.test_case "parse with severity" `Quick test_parse_with_severity; 331 + Alcotest.test_case "parse aliases" `Quick test_parse_aliases; 332 + Alcotest.test_case "parse empty" `Quick test_parse_empty; 333 + Alcotest.test_case "parse multiple" `Quick test_parse_multiple; 334 + Alcotest.test_case "parse npm advisory" `Quick test_parse_npm_advisory; 335 + Alcotest.test_case "parse RustSec" `Quick test_parse_rustsec; 336 + Alcotest.test_case "parse PyPI" `Quick test_parse_pypi; 337 + Alcotest.test_case "filter critical" `Quick test_filter_severity_critical; 338 + Alcotest.test_case "filter high+" `Quick test_filter_severity_high; 339 + Alcotest.test_case "filter medium+" `Quick test_filter_severity_medium; 340 + Alcotest.test_case "filter all" `Quick test_filter_severity_all; 341 + Alcotest.test_case "cve extraction" `Quick test_cve_ids_extraction; 342 + Alcotest.test_case "cve empty aliases" `Quick test_cve_ids_empty; 343 + Alcotest.test_case "has fix" `Quick test_has_fix_true; 344 + Alcotest.test_case "no fix" `Quick test_has_fix_false; 345 + Alcotest.test_case "no ranges" `Quick test_has_fix_no_ranges; 346 + ] )
+4
test/test_osv.mli
··· 1 + (** Test suite for [Osv]. *) 2 + 3 + val suite : string * unit Alcotest.test_case list 4 + (** [suite] is the alcotest suite for the [Osv] library. *)