Skip to content

Commit 2f856c0

Browse files
committed
TC-3071 add upload advisory and delete advisory scale test
1 parent 53c396b commit 2f856c0

File tree

5 files changed

+1714
-3
lines changed

5 files changed

+1714
-3
lines changed

scenarios/full-20250604.json5

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@
99
"sbom_license_ids": "urn:uuid:01973124-d4ab-7163-b104-331632a21144",
1010
"analyze_purl": "pkg:rpm/redhat/eap7-activemq-artemis-native@1.0.2-3.redhat_00004.1.el7eap?arch=noarch&epoch=1",
1111
"get_purl_details": "b00df2ca-df21-5c10-8874-304e9c54e2bd",
12-
"get_recommendations": ["pkg:rpm/redhat/eap7-activemq-artemis-native@1.0.2, pkg:maven/io.quarkus/quarkus-smallrye-metrics@2.13.8"]
12+
"get_recommendations": ["pkg:rpm/redhat/eap7-activemq-artemis-native@1.0.2, pkg:maven/io.quarkus/quarkus-smallrye-metrics@2.13.8"],
13+
"upload_advisory_file": "./test-data/advisories/rhba-2024_11505.json"
1314
}

src/main.rs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,30 @@ async fn main() -> Result<(), anyhow::Error> {
150150
"RestAPIUserSlow",
151151
wait_time_from,
152152
wait_time_to,
153-
custom_client,
153+
custom_client.clone(),
154154
)?
155155
.set_weight(1)?
156156
.register_transaction(tx!(search_licenses))
157157
.register_transaction(tx!(search_sboms_by_license))
158158
.register_transaction(tx!(search_purls_by_license))
159159
})
160+
.register_scenario({
161+
let mut s = create_scenario(
162+
"RestAPIUploadAndDeleteFiles",
163+
wait_time_from,
164+
wait_time_to,
165+
custom_client.clone(),
166+
)?
167+
.set_weight(1)?;
168+
169+
if let Some(file) = &scenario.upload_advisory_file {
170+
s = s.register_transaction(tx!(upload_advisories_and_delete_advisories(
171+
file.clone()
172+
)));
173+
}
174+
175+
s
176+
})
160177
// .register_scenario(
161178
// scenario!("GraphQLUser")
162179
// // .set_weight(1)?

src/restapi.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,27 @@
1-
use goose::goose::{GooseUser, TransactionResult};
1+
use goose::goose::{GooseUser, TransactionError, TransactionResult};
22
use serde_json::json;
33
use urlencoding::encode;
44

55
use crate::utils::DisplayVec;
66

7+
pub async fn upload_advisories_and_delete_advisories(
8+
advisory_file: String,
9+
user: &mut GooseUser,
10+
) -> TransactionResult {
11+
let file_bytes = tokio::fs::read(advisory_file.clone()).await.map_err(|e| {
12+
TransactionError::Custom(format!("Failed to read file {}: {:?}", advisory_file, e))
13+
})?;
14+
15+
let response = user.post("/api/v2/advisory", file_bytes).await?;
16+
let v = response.response?.json::<serde_json::Value>().await?;
17+
18+
let uri = format!("/api/v2/advisory/{}", v["id"].as_str().unwrap_or_default());
19+
20+
let _response = user.delete(&uri).await?;
21+
22+
Ok(())
23+
}
24+
725
pub async fn list_advisory(user: &mut GooseUser) -> TransactionResult {
826
let _response = user.get("/api/v2/advisory").await?;
927

src/scenario/mod.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ pub(crate) struct Scenario {
9393
pub get_purl_details: Option<String>,
9494

9595
pub get_recommendations: Option<DisplayVec<String>>,
96+
97+
#[serde(with = "required")]
98+
pub upload_advisory_file: Option<String>,
9699
}
97100

98101
impl Scenario {
@@ -125,6 +128,9 @@ impl Scenario {
125128
let get_purl_details = Some(loader.purl_details().await?);
126129
let recommendations_purl = Some(loader.purl_with_recommendations().await?);
127130

131+
// Load advisory files from UPLOAD_FILE_PATH directory
132+
let advisory_files = loader.load_advisory_files();
133+
128134
Ok(Self {
129135
get_sbom: large_sbom_digest.clone(),
130136
get_sbom_advisories: large_sbom_digest.clone(),
@@ -138,6 +144,7 @@ impl Scenario {
138144
analyze_purl,
139145
get_purl_details,
140146
get_recommendations: recommendations_purl,
147+
upload_advisory_file: advisory_files.first().cloned(),
141148
})
142149
}
143150
}
@@ -311,6 +318,29 @@ LIMIT 10;
311318
Ok(DisplayVec(result))
312319
})
313320
}
321+
322+
/// Load advisory files from UPLOAD_FILE_PATH directory
323+
fn load_advisory_files(&self) -> Vec<String> {
324+
std::env::var("UPLOAD_FILE_PATH")
325+
.ok()
326+
.and_then(|upload_file_path| {
327+
std::fs::read_dir(format!("{}/advisories", &upload_file_path))
328+
.ok()
329+
.map(|entries| {
330+
entries
331+
.filter_map(|entry| {
332+
let path = entry.ok()?.path();
333+
if path.extension()? == "json" {
334+
Some(path.to_string_lossy().to_string())
335+
} else {
336+
None
337+
}
338+
})
339+
.collect::<Vec<String>>()
340+
})
341+
})
342+
.unwrap_or_default()
343+
}
314344
}
315345

316346
#[cfg(test)]

0 commit comments

Comments
 (0)