use cvssrust::v3::{MinorVersion, V3Vector};
use cvssrust::{CVSSScore, Severity};
use std::str::FromStr;
macro_rules! test_v3_1 {
($name:ident, $params:expr) => {
#[test]
fn $name() {
let (
vector,
expected_base_score,
expected_severity,
expected_temp_score,
expected_env_score,
) = $params;
let cvss = V3Vector::from_str(vector).unwrap();
assert_eq!(cvss.to_string(), String::from(vector));
assert_eq!(cvss.minor_version, MinorVersion::V1);
assert_eq!(cvss.base_score().value(), expected_base_score);
assert_eq!(cvss.base_score().severity(), expected_severity);
assert_eq!(cvss.temporal_score().value(), expected_temp_score);
assert_eq!(cvss.environmental_score().value(), expected_env_score);
}
};
}
test_v3_1!(
test_v31_cve_2020_0601,
(
"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N",
8.1,
Severity::High,
8.1,
8.1,
)
);
test_v3_1!(
test_v31_cve_2014_0011,
(
"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
9.8,
Severity::Critical,
9.8,
9.8,
)
);
test_v3_1!(
test_v31_cve_difference,
(
"CVSS:3.1/AV:P/AC:H/PR:L/UI:R/S:U/C:L/I:L/A:H/E:H/RL:U/RC:U",
5.0,
Severity::Medium,
4.6,
4.6,
)
);
test_v3_1!(
test_v31_cve_2019_11510,
(
"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H",
10.0,
Severity::Critical,
10.0,
10.0,
)
);
test_v3_1!(
test_v31_cve_2019_15001,
(
"CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H",
7.2,
Severity::High,
7.2,
7.2,
)
);
test_v3_1!(
test_v31_cve_2019_1040,
(
"CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:H/A:N",
5.9,
Severity::Medium,
5.9,
5.9,
)
);