Skip to content

Commit e0e85e5

Browse files
committed
Add a feature to randomly retrieve IDs from the ID pool.
1 parent 459689b commit e0e85e5

File tree

4 files changed

+115
-38
lines changed

4 files changed

+115
-38
lines changed

scenarios/full-20250604.json5

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,48 @@
114114
],
115115
"download_advisory": "24ae57c3-4b57-4f4e-82c1-83ae26059a89",
116116
"get_advisory": "24ae57c3-4b57-4f4e-82c1-83ae26059a89",
117-
"put_advisory_lables": "urn:uuid:24ae57c3-4b57-4f4e-82c1-83ae26059a89",
118-
"patch_advisory_lables": "urn:uuid:9ffb1a1b-14e0-4abb-943a-76906daa54aa"
117+
"put_advisory_lables": [
118+
"urn:uuid:24ae57c3-4b57-4f4e-82c1-83ae26059a89",
119+
"urn:uuid:9ffb1a1b-14e0-4abb-943a-76906daa54aa",
120+
"urn:uuid:7c932cc3-aa83-4bb4-bbaf-6030a198e271",
121+
"urn:uuid:cac4862f-c87a-4a7d-8d67-f2e0db8f0273",
122+
"urn:uuid:f80b5b7e-f2eb-4921-b254-a4873d69a9e9",
123+
"urn:uuid:858a53a2-347a-491e-a86a-e24b9a4c1436",
124+
"urn:uuid:15637501-2a0b-4076-aec3-d92fa2b959bf",
125+
"urn:uuid:5364258d-418e-4cd8-add7-248207c4836f",
126+
"urn:uuid:5066569d-c5a3-4d90-8cdc-d8680ee52db0",
127+
"urn:uuid:869b1646-2f27-4b7a-b4e0-f6783651135d",
128+
"urn:uuid:04313720-b5eb-40bc-b545-1f813f6e53b9",
129+
"urn:uuid:2c6d41c1-f39d-47df-b37f-12b08af41577",
130+
"urn:uuid:99bac490-3ff3-4c10-8466-2cc4947ac29c",
131+
"urn:uuid:90a53b25-118d-4c2a-9b8d-a38ac1a85ab0",
132+
"urn:uuid:4d3fd5be-eeb5-46f7-a55d-871be40c9837",
133+
"urn:uuid:fd88f7cd-8b9e-4bba-b92b-726732545e82",
134+
"urn:uuid:06a769a4-1f30-4fe5-9113-72080301e8ed",
135+
"urn:uuid:871263d1-e7c3-4f4e-98b2-04aedeae048c",
136+
"urn:uuid:35dc833f-fbb7-43f0-852a-9db14cd3a0f4",
137+
"urn:uuid:acfbea2f-08d0-4f2f-aa22-12e635956dce"
138+
],
139+
"patch_advisory_lables": [
140+
"urn:uuid:8a28d2fc-3e91-4989-add8-b9dd78fcf37d",
141+
"urn:uuid:9e3eee98-a032-424d-9d0d-1645faca9d24",
142+
"urn:uuid:66dde1a5-9575-46a4-8f7a-f6ab9904f0d1",
143+
"urn:uuid:2070a289-c6bb-4a6c-bdb2-6fc951743e55",
144+
"urn:uuid:59751bb1-b205-4ea4-9832-a48ab69e39e6",
145+
"urn:uuid:0dd5f452-af2b-4740-905e-a00f22fffa7e",
146+
"urn:uuid:08467200-8c82-4d38-9920-3cbf6c2d0568",
147+
"urn:uuid:be6b4acf-fe7b-46a2-9f4c-fdd497d43188",
148+
"urn:uuid:6ddb2cc0-bb10-4f23-96bf-cc409263d80d",
149+
"urn:uuid:3973cb57-325a-4574-a60c-1910a30b44ac",
150+
"urn:uuid:074881e9-d328-402c-8bd8-13df42a590e5",
151+
"urn:uuid:2e8008f1-e3d2-401d-8ef6-87bad7d328f0",
152+
"urn:uuid:d30949a9-1f9b-4005-93a8-288a3578e7f7",
153+
"urn:uuid:8aa4555d-3723-4c4f-aee8-69c4007ec5fd",
154+
"urn:uuid:6076bbcb-b352-4bcb-b2e3-8889e0310724",
155+
"urn:uuid:5390d139-c00c-4d3a-858a-833d4b571d9a",
156+
"urn:uuid:f1479e4b-839e-4d53-929c-d08b6b907430",
157+
"urn:uuid:96c1b100-ec62-46c0-9156-819c37bd0445",
158+
"urn:uuid:148db4ee-55ca-4292-b55d-a0c0a9d83b9c",
159+
"urn:uuid:e98e73ab-4cfe-4861-8b46-06df5a84198f"
160+
]
119161
}

src/main.rs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -192,10 +192,20 @@ async fn main() -> Result<(), anyhow::Error> {
192192
tx!(s.post_vulnerability_analyze?(scenario.analyze_purl.clone()));
193193
tx!(s.get_purl_details?(scenario.get_purl_details.clone()));
194194
tx!(s.get_recommendations?(scenario.get_recommendations.clone()));
195-
tx!(s.put_advisory_labels?(scenario.put_advisory_lables.clone()));
196-
tx!(s.patch_advisory_labels?(
197-
scenario.patch_advisory_lables.clone()
198-
));
195+
196+
// Register put Advisory labels transaction if pool is available
197+
let put_advisory_labels_counter = Arc::new(std::sync::atomic::AtomicUsize::new(0));
198+
if let Some(_advisory_ids) = scenario.put_advisory_lables.clone() {
199+
tx!(s.put_advisory_labels?(scenario.put_advisory_lables.clone(),
200+
put_advisory_labels_counter.clone()),
201+
name: format!("put_advisory_labels_counter"));
202+
}
203+
204+
// Register patch Advisory labels transaction if pool is available
205+
let patch_advisory_labels_counter = Arc::new(std::sync::atomic::AtomicUsize::new(0));
206+
if let Some(_advisory_ids) = scenario.patch_advisory_lables.clone() {
207+
tx!(s.patch_advisory_labels?(scenario.patch_advisory_lables.clone(), patch_advisory_labels_counter.clone()),name: format!("patch_advisory_labels_counter"));
208+
}
199209

200210
tx!(s.download_advisory?(scenario.download_advisory.clone()));
201211
tx!(s.get_advisory?(scenario.get_advisory.clone()));
@@ -228,7 +238,8 @@ async fn main() -> Result<(), anyhow::Error> {
228238
tx!(s.delete_sbom_from_pool_sequential?(
229239
scenario.delete_sbom_pool.clone(),
230240
delete_counter.clone()
231-
), name: format!("delete_sbom_from_pool_sequential[{} SBOMs]", pool.len()))
241+
),
242+
name: format!("delete_sbom_from_pool_sequential[{} SBOMs]", pool.len()))
232243
}
233244
s
234245
})

src/restapi.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,13 @@ async fn send_advisory_label_request(
9797
Ok(())
9898
}
9999

100-
pub async fn put_advisory_labels(advisory_id: String, user: &mut GooseUser) -> TransactionResult {
100+
pub async fn put_advisory_labels(
101+
advisory_ids: Vec<String>,
102+
counter: Arc<AtomicUsize>,
103+
user: &mut GooseUser,
104+
) -> TransactionResult {
101105
send_advisory_label_request(
102-
advisory_id,
106+
advisory_ids[counter.fetch_add(1, Ordering::Relaxed) % advisory_ids.len()].clone(),
103107
user,
104108
GooseMethod::Put,
105109
"It's a put request",
@@ -108,9 +112,13 @@ pub async fn put_advisory_labels(advisory_id: String, user: &mut GooseUser) -> T
108112
.await
109113
}
110114

111-
pub async fn patch_advisory_labels(advisory_id: String, user: &mut GooseUser) -> TransactionResult {
115+
pub async fn patch_advisory_labels(
116+
advisory_ids: Vec<String>,
117+
counter: Arc<AtomicUsize>,
118+
user: &mut GooseUser,
119+
) -> TransactionResult {
112120
send_advisory_label_request(
113-
advisory_id,
121+
advisory_ids[counter.fetch_add(1, Ordering::Relaxed) % advisory_ids.len()].clone(),
114122
user,
115123
GooseMethod::Patch,
116124
"It's a patch request",

src/scenario/mod.rs

Lines changed: 43 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,11 @@ pub(crate) struct Scenario {
103103
#[serde(with = "required")]
104104
pub get_advisory: Option<String>,
105105

106-
pub put_advisory_lables: Option<String>,
106+
#[serde(default, skip_serializing_if = "Option::is_none")]
107+
pub put_advisory_lables: Option<Vec<String>>,
107108

108-
#[serde(with = "required")]
109-
pub patch_advisory_lables: Option<String>,
109+
#[serde(default, skip_serializing_if = "Option::is_none")]
110+
pub patch_advisory_lables: Option<Vec<String>>,
110111
}
111112

112113
impl Scenario {
@@ -149,11 +150,22 @@ impl Scenario {
149150
let download_advisory = Some(loader.download_advisory().await?);
150151
let get_advisory = Some(loader.download_advisory().await?);
151152

152-
let put_advisory_lables = Some(format!("urn:uuid:{}", loader.put_advisory_lables().await?));
153-
let patch_advisory_lables = Some(format!(
154-
"urn:uuid:{}",
155-
loader.patch_advisory_lables().await?
156-
));
153+
let put_advisory_lables = Some(
154+
loader
155+
.put_advisory_lables()
156+
.await?
157+
.iter()
158+
.map(|sbom_id| format!("urn:uuid:{sbom_id}"))
159+
.collect(),
160+
);
161+
let patch_advisory_lables = Some(
162+
loader
163+
.patch_advisory_lables()
164+
.await?
165+
.iter()
166+
.map(|sbom_id| format!("urn:uuid:{sbom_id}"))
167+
.collect(),
168+
);
157169

158170
Ok(Self {
159171
get_sbom: large_sbom_digest.clone(),
@@ -389,27 +401,31 @@ FROM public.advisory order by modified desc limit 1;"#,
389401
)
390402
.await
391403
}
392-
393-
/// A advisory ID for put labels
394-
pub async fn put_advisory_lables(&self) -> anyhow::Result<String> {
395-
self.find(
396-
r#"
397-
SELECT id::text as result
398-
FROM public.advisory where labels is not null order by modified desc limit 1;
399-
"#,
400-
)
401-
.await
404+
405+
/// Advisory IDs for put labels
406+
pub async fn put_advisory_lables(&self) -> anyhow::Result<Vec<String>> {
407+
let mut db = crate::db::connect(&self.db).await?;
408+
409+
let rows = sqlx::query("SELECT id::text as id FROM public.advisory where labels is not null order by modified desc limit 20;")
410+
.fetch_all(&mut db)
411+
.await?;
412+
Ok(rows
413+
.into_iter()
414+
.map(|row| row.get::<String, _>("id"))
415+
.collect())
402416
}
403417

404-
/// A advisory ID for patch labels
405-
pub async fn patch_advisory_lables(&self) -> anyhow::Result<String> {
406-
self.find(
407-
r#"
408-
SELECT id::text as result
409-
FROM public.advisory where labels is not null order by modified desc OFFSET 1 limit 1;
410-
"#,
411-
)
412-
.await
418+
/// Advisory IDs for patch labels
419+
pub async fn patch_advisory_lables(&self) -> anyhow::Result<Vec<String>> {
420+
let mut db = crate::db::connect(&self.db).await?;
421+
422+
let rows = sqlx::query("SELECT id::text as id FROM public.advisory where labels is not null order by modified desc OFFSET 20 limit 20;")
423+
.fetch_all(&mut db)
424+
.await?;
425+
Ok(rows
426+
.into_iter()
427+
.map(|row| row.get::<String, _>("id"))
428+
.collect())
413429
}
414430
}
415431

0 commit comments

Comments
 (0)