use cvssrust::v2::V2Vector;
use cvssrust::{CVSSScore, Severity};
use std::str::FromStr;
macro_rules! test_v2 {
($name:ident, $params:expr) => {
#[test]
fn $name() {
let (
vector,
expected_base_score,
expected_severity,
expected_temp_score,
expected_env_score,
) = $params;
let cvss = V2Vector::from_str(vector).unwrap();
assert_eq!(cvss.to_string(), String::from(vector));
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_v2!(
test_v2_cve_2020_0601,
(
"AV:N/AC:M/Au:N/C:P/I:P/A:N",
5.8,
Severity::Medium,
5.8,
5.8,
)
);
test_v2!(
test_v2_cve_2014_0011,
("AV:N/AC:L/Au:N/C:P/I:P/A:P", 7.5, Severity::High, 7.5, 7.5)
);
test_v2!(
test_v2_cve_2019_11510,
("AV:N/AC:L/Au:N/C:P/I:P/A:P", 7.5, Severity::High, 7.5, 7.5,)
);
test_v2!(
test_v2_cve_2019_15001,
(
"AV:N/AC:L/Au:S/C:C/I:C/A:C",
9.1,
Severity::Critical,
9.1,
9.1,
)
);
test_v2!(
test_v2_cve_2019_1040,
(
"AV:N/AC:M/Au:N/C:N/I:P/A:N",
4.3,
Severity::Medium,
4.3,
4.3,
)
);
test_v2!(
test_v2_example_1,
(
"AV:A/AC:L/Au:S/C:P/I:P/A:C/E:POC/RL:W/RC:UR",
6.7,
Severity::Medium,
5.5,
5.5,
)
);
test_v2!(
test_v2_example_2,
(
"AV:A/AC:L/Au:S/C:P/I:P/A:C/E:POC/RL:W/RC:UR/CDP:LM/TD:H/CR:M/IR:M/AR:M",
6.7,
Severity::Medium,
5.5,
6.9,
)
);