Skip to content

Commit cddd816

Browse files
committed
feat: allow controlling each test individually
To allow controlling/enabling each test (which requires an additional value) individually, this change creates dedicated field in the scenario file.
1 parent 7d90a50 commit cddd816

File tree

4 files changed

+47
-17
lines changed

4 files changed

+47
-17
lines changed

empty.json5

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
// an empty file, disabling all tests
22

33
{
4-
"large_sbom": null,
4+
"get_sbom": null,
5+
"get_sbom_advisories": null,
6+
"get_sbom_packages": null,
7+
"get_sbom_related": null,
8+
"get_vulnerability": null
59
}

src/main.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -113,16 +113,20 @@ async fn main() -> Result<(), anyhow::Error> {
113113
.register_transaction(tx!(list_sboms))
114114
.register_transaction(tx!(list_sboms_paginated));
115115

116-
if let Some(large_sbom) = scenario.large_sbom.clone() {
117-
s = s
118-
.register_transaction(tx!(get_sbom_info(large_sbom.clone())))
119-
.register_transaction(tx!(get_sbom_advisories(large_sbom.clone())))
120-
.register_transaction(tx!(get_sbom_packages(large_sbom.clone())))
121-
.register_transaction(tx!(get_sbom_related(large_sbom.clone())))
116+
if let Some(value) = scenario.get_sbom.clone() {
117+
s = s.register_transaction(tx!(get_sbom(value.clone())));
122118
}
123-
124-
if let Some(max_vuln) = scenario.max_vuln.clone() {
125-
s = s.register_transaction(tx!(get_vulnerability(max_vuln.clone())))
119+
if let Some(value) = scenario.get_sbom_advisories.clone() {
120+
s = s.register_transaction(tx!(get_sbom_advisories(value.clone())));
121+
}
122+
if let Some(value) = scenario.get_sbom_packages.clone() {
123+
s = s.register_transaction(tx!(get_sbom_packages(value.clone())));
124+
}
125+
if let Some(value) = scenario.get_sbom_related.clone() {
126+
s = s.register_transaction(tx!(get_sbom_related(value.clone())));
127+
}
128+
if let Some(value) = scenario.get_vulnerability.clone() {
129+
s = s.register_transaction(tx!(get_vulnerability(value.clone())))
126130
}
127131

128132
s

src/restapi.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ pub async fn list_vulnerabilities_paginated(user: &mut GooseUser) -> Transaction
8888
Ok(())
8989
}
9090

91-
pub async fn get_sbom_info(sbom_id: String, user: &mut GooseUser) -> TransactionResult {
91+
pub async fn get_sbom(sbom_id: String, user: &mut GooseUser) -> TransactionResult {
9292
let _response = user.get(&format!("/api/v2/sbom/{sbom_id}")).await?;
9393

9494
Ok(())

src/scenario.rs

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,19 @@ mod required {
6262
#[derive(Clone, PartialEq, Eq, Debug, serde::Serialize, serde::Deserialize)]
6363
pub(crate) struct Scenario {
6464
#[serde(with = "required")]
65-
pub large_sbom: Option<String>,
65+
pub get_sbom: Option<String>,
6666

6767
#[serde(with = "required")]
68-
pub max_vuln: Option<String>,
68+
pub get_sbom_advisories: Option<String>,
69+
70+
#[serde(with = "required")]
71+
pub get_sbom_packages: Option<String>,
72+
73+
#[serde(with = "required")]
74+
pub get_sbom_related: Option<String>,
75+
76+
#[serde(with = "required")]
77+
pub get_vulnerability: Option<String>,
6978
}
7079

7180
impl Scenario {
@@ -88,9 +97,16 @@ impl Scenario {
8897

8998
let loader = Loader::new(db);
9099

100+
let large_sbom = Some(loader.large_sbom().await?);
101+
let max_vuln = Some(loader.max_vuln().await?);
102+
91103
Ok(Self {
92-
large_sbom: Some(loader.large_sbom().await?),
93-
max_vuln: Some(loader.max_vuln().await?),
104+
get_sbom: large_sbom.clone(),
105+
get_sbom_advisories: large_sbom.clone(),
106+
get_sbom_related: large_sbom.clone(),
107+
get_sbom_packages: large_sbom,
108+
109+
get_vulnerability: max_vuln,
94110
})
95111
}
96112
}
@@ -154,6 +170,12 @@ order by num desc
154170
mod test {
155171
use super::*;
156172

173+
#[derive(Clone, PartialEq, Eq, Debug, serde::Serialize, serde::Deserialize)]
174+
pub(crate) struct Scenario {
175+
#[serde(with = "required")]
176+
pub large_sbom: Option<String>,
177+
}
178+
157179
#[test]
158180
fn missing() {
159181
let err = serde_json::from_str::<Scenario>(r#"{}"#).expect_err("Must be an error");
@@ -196,7 +218,7 @@ mod test {
196218
// Ensure the empty file parses
197219
#[test]
198220
fn empty() {
199-
let _ =
200-
serde_json5::from_str::<Scenario>(include_str!("../empty.json5")).expect("Must be ok");
221+
let _ = serde_json5::from_str::<super::Scenario>(include_str!("../empty.json5"))
222+
.expect("Must be ok");
201223
}
202224
}

0 commit comments

Comments
 (0)