diff --git a/src/main.rs b/src/main.rs index 2d8543d..867a3e7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -26,7 +26,7 @@ const MAX_ID_DISPLAY: usize = 32; /// variant its own stable row in the load-test report. /// /// # Arguments -/// * `path` — The URL path, e.g. `"/api/v2/advisory"`. +/// * `path` — The URL path, e.g. `"/api/v3/advisory"`. /// * `query` — The pre-encoded query string without the leading `?`, /// e.g. `"q=title~openssl"`, or `""` for no query string. fn list_tx(path: &'static str, query: &'static str) -> Transaction { @@ -192,30 +192,30 @@ async fn main() -> Result<(), anyhow::Error> { custom_client.clone(), )? .set_weight(5)? - .register_transaction(list_tx("/api/v2/organization", "")) + .register_transaction(list_tx("/api/v3/organization", "")) .register_transaction(list_tx("/api/v3/advisory", "")) .register_transaction(list_tx("/api/v3/advisory", "offset=100&limit=10")) .register_transaction(list_tx("/api/v3/advisory", "q=identifier%3dCVE-2022-0981")) .register_transaction(list_tx("/api/v3/advisory", "q=CVE-2021-")) .register_transaction(list_tx("/api/v3/vulnerability", "")) .register_transaction(list_tx("/api/v3/vulnerability", "offset=100&limit=10")) - .register_transaction(list_tx("/api/v2/importer", "")) - .register_transaction(list_tx("/api/v2/purl", "")) - .register_transaction(list_tx("/api/v2/purl", "offset=100&limit=10")) - .register_transaction(list_tx("/api/v2/purl", "q=curl")) - .register_transaction(list_tx("/api/v2/purl", "q=name=curl")) - .register_transaction(list_tx("/api/v2/product", "")) + .register_transaction(list_tx("/api/v3/importer", "")) + .register_transaction(list_tx("/api/v3/purl", "")) + .register_transaction(list_tx("/api/v3/purl", "offset=100&limit=10")) + .register_transaction(list_tx("/api/v3/purl", "q=curl")) + .register_transaction(list_tx("/api/v3/purl", "q=name=curl")) + .register_transaction(list_tx("/api/v3/product", "")) .register_transaction(list_tx("/api/v3/sbom", "")) - .register_transaction(list_tx("/api/v2/sbom", "")) + .register_transaction(list_tx("/api/v3/sbom", "")) + .register_transaction(list_tx("/api/v3/sbom", "offset=100&limit=10")) .register_transaction(list_tx("/api/v3/sbom", "offset=100&limit=10")) - .register_transaction(list_tx("/api/v2/sbom", "offset=100&limit=10")) .register_transaction(tx!(list_advisory_labels)) - .register_transaction(list_tx("/api/v2/sbom-labels", "")) - .register_transaction(list_tx("/api/v2/purl/base", "")) - .register_transaction(list_tx("/api/v2/license", "")) - .register_transaction(list_tx("/api/v2/license/spdx/license", "")) - .register_transaction(list_tx("/api/v2/weakness", "")) - .register_transaction(list_tx("/api/v2/group/sbom", "")) + .register_transaction(list_tx("/api/v3/sbom-labels", "")) + .register_transaction(list_tx("/api/v3/purl/base", "")) + .register_transaction(list_tx("/api/v3/license", "")) + .register_transaction(list_tx("/api/v3/license/spdx/license", "")) + .register_transaction(list_tx("/api/v3/weakness", "")) + .register_transaction(list_tx("/api/v3/group/sbom", "")) .register_transaction(tx!(post_vulnerability_analyze_v3)) .register_transaction(list_tx("/.well-known/trustify", "")) .register_transaction(tx!(post_extract_sbom_purls)) @@ -231,19 +231,19 @@ async fn main() -> Result<(), anyhow::Error> { .register_transaction(list_tx("/api/v3/vulnerability", "q=base_score>=7.0")) .register_transaction(list_tx("/api/v3/vulnerability", "q=cwes=CWE-79")) .register_transaction(list_tx("/api/v3/vulnerability", "sort=base_score:desc")) - .register_transaction(list_tx("/api/v2/purl", "q=purl:ty=rpm")) - .register_transaction(list_tx("/api/v2/purl", "q=purl:namespace=redhat")) - .register_transaction(list_tx("/api/v2/purl", "sort=purl:name:asc")) - .register_transaction(list_tx("/api/v2/purl/base", "q=type=rpm")) - .register_transaction(list_tx("/api/v2/purl/base", "q=namespace=redhat")) - .register_transaction(list_tx("/api/v2/purl/base", "sort=name:asc")) - .register_transaction(list_tx("/api/v2/organization", "sort=name:asc")) - .register_transaction(list_tx("/api/v2/product", "q=name~openshift")) - .register_transaction(list_tx("/api/v2/product", "sort=name:asc")) - .register_transaction(list_tx("/api/v2/weakness", "q=description~injection")) - .register_transaction(list_tx("/api/v2/weakness", "sort=id:asc")) - .register_transaction(list_tx("/api/v2/group/sbom", "totals=true")) - .register_transaction(list_tx("/api/v2/group/sbom", "parents=resolve")); + .register_transaction(list_tx("/api/v3/purl", "q=purl:ty=rpm")) + .register_transaction(list_tx("/api/v3/purl", "q=purl:namespace=redhat")) + .register_transaction(list_tx("/api/v3/purl", "sort=purl:name:asc")) + .register_transaction(list_tx("/api/v3/purl/base", "q=type=rpm")) + .register_transaction(list_tx("/api/v3/purl/base", "q=namespace=redhat")) + .register_transaction(list_tx("/api/v3/purl/base", "sort=name:asc")) + .register_transaction(list_tx("/api/v3/organization", "sort=name:asc")) + .register_transaction(list_tx("/api/v3/product", "q=name~openshift")) + .register_transaction(list_tx("/api/v3/product", "sort=name:asc")) + .register_transaction(list_tx("/api/v3/weakness", "q=description~injection")) + .register_transaction(list_tx("/api/v3/weakness", "sort=id:asc")) + .register_transaction(list_tx("/api/v3/group/sbom", "totals=true")) + .register_transaction(list_tx("/api/v3/group/sbom", "parents=resolve")); tx!(s.get_sbom?(scenario.get_sbom.clone())); tx!(s.get_sbom_advisories?(scenario.get_sbom_advisories.clone())); @@ -297,13 +297,13 @@ async fn main() -> Result<(), anyhow::Error> { custom_client.clone(), )? .set_weight(1)? - .register_transaction(list_tx("/api/v2/license", "q=ASL&sort=license:desc")) - .register_transaction(list_tx("/api/v2/sbom", "q=license~GPL&sort=name:desc")) - .register_transaction(list_tx("/api/v2/purl", "q=license~GPLv3+ with exceptions|Apache&sort=name:desc")) - .register_transaction(list_tx("/api/v2/license", "q=license~Apache")) - .register_transaction(list_tx("/api/v2/license", "q=license~GPL")) - .register_transaction(list_tx("/api/v2/license/spdx/license", "q=apache")) - .register_transaction(list_tx("/api/v2/license/spdx/license", "q=gpl")) + .register_transaction(list_tx("/api/v3/license", "q=ASL&sort=license:desc")) + .register_transaction(list_tx("/api/v3/sbom", "q=license~GPL&sort=name:desc")) + .register_transaction(list_tx("/api/v3/purl", "q=license~GPLv3+ with exceptions|Apache&sort=name:desc")) + .register_transaction(list_tx("/api/v3/license", "q=license~Apache")) + .register_transaction(list_tx("/api/v3/license", "q=license~GPL")) + .register_transaction(list_tx("/api/v3/license/spdx/license", "q=apache")) + .register_transaction(list_tx("/api/v3/license/spdx/license", "q=gpl")) }) .register_scenario({ let mut s = create_scenario( @@ -313,12 +313,12 @@ async fn main() -> Result<(), anyhow::Error> { custom_client.clone(), )? .set_weight(2)? - .register_transaction(list_tx("/api/v2/analysis/status", "")) - .register_transaction(list_tx("/api/v2/analysis/latest/component/cpe%3A%2Fa%3Aredhat%3Aopenshift_builds%3A1.3%3A%3Ael9", "")) + .register_transaction(list_tx("/api/v3/analysis/status", "")) + .register_transaction(list_tx("/api/v3/analysis/latest/component/cpe%3A%2Fa%3Aredhat%3Aopenshift_builds%3A1.3%3A%3Ael9", "")) // TODO: .register_transaction(tx!(search_analysis_component)) // TODO: .register_transaction(tx!(search_latest_component)) - // TODO: .register_transaction(search_tx("/api/v2/analysis/component","q=openssl&descendants=1")) - // TODO: .register_transaction(search_tx("/api/v2/analysis/component", "q=curl&relationships=contains,dependency")) + // TODO: .register_transaction(search_tx("/api/v3/analysis/component","q=openssl&descendants=1")) + // TODO: .register_transaction(search_tx("/api/v3/analysis/component", "q=curl&relationships=contains,dependency")) ; tx!(s.get_analysis_component?( diff --git a/src/restapi/advisory.rs b/src/restapi/advisory.rs index 3c587ef..14f7989 100644 --- a/src/restapi/advisory.rs +++ b/src/restapi/advisory.rs @@ -76,7 +76,7 @@ pub async fn download_advisory(id: String, user: &mut GooseUser) -> TransactionR pub async fn list_advisory_labels(user: &mut GooseUser) -> TransactionResult { let uri = format!( - "/api/v2/advisory-labels?filter_text={}&limit={}", + "/api/v3/advisory-labels?filter_text={}&limit={}", encode("type"), 1000 ); @@ -93,7 +93,7 @@ async fn send_advisory_label_request( source: &str, client_method: fn(&Client, String) -> RequestBuilder, ) -> TransactionResult { - let path = format!("/api/v2/advisory/{}/label", advisory_id); + let path = format!("/api/v3/advisory/{}/label", advisory_id); let json = json!({ "source": source, "foo": "bar", diff --git a/src/restapi/analysis.rs b/src/restapi/analysis.rs index c833383..3e52cc5 100644 --- a/src/restapi/analysis.rs +++ b/src/restapi/analysis.rs @@ -4,14 +4,14 @@ use goose::goose::{GooseUser, TransactionResult}; use urlencoding::encode; pub async fn search_analysis_component(user: &mut GooseUser) -> TransactionResult { - let _response = user.get("/api/v2/analysis/component?q=openssl").await?; + let _response = user.get("/api/v3/analysis/component?q=openssl").await?; Ok(()) } pub async fn get_analysis_component(key: String, user: &mut GooseUser) -> TransactionResult { let _response = user - .get(&format!("/api/v2/analysis/component/{}", encode(&key))) + .get(&format!("/api/v3/analysis/component/{}", encode(&key))) .await?; Ok(()) @@ -19,7 +19,7 @@ pub async fn get_analysis_component(key: String, user: &mut GooseUser) -> Transa pub async fn search_latest_component(user: &mut GooseUser) -> TransactionResult { let _response = user - .get("/api/v2/analysis/latest/component?q=openssl") + .get("/api/v3/analysis/latest/component?q=openssl") .await?; Ok(()) @@ -27,7 +27,7 @@ pub async fn search_latest_component(user: &mut GooseUser) -> TransactionResult pub async fn render_sbom_graph_dot(id: String, user: &mut GooseUser) -> TransactionResult { let _response = user - .get(&format!("/api/v2/analysis/sbom/{}/render.dot", encode(&id))) + .get(&format!("/api/v3/analysis/sbom/{}/render.dot", encode(&id))) .await?; Ok(()) diff --git a/src/restapi/misc.rs b/src/restapi/misc.rs index b0f13c6..2f18f29 100644 --- a/src/restapi/misc.rs +++ b/src/restapi/misc.rs @@ -2,39 +2,39 @@ use goose::goose::{GooseUser, TransactionResult}; use serde_json::json; pub async fn get_product(id: String, user: &mut GooseUser) -> TransactionResult { - let _response = user.get(&format!("/api/v2/product/{id}")).await?; + let _response = user.get(&format!("/api/v3/product/{id}")).await?; Ok(()) } pub async fn get_organization(id: String, user: &mut GooseUser) -> TransactionResult { - let _response = user.get(&format!("/api/v2/organization/{id}")).await?; + let _response = user.get(&format!("/api/v3/organization/{id}")).await?; Ok(()) } pub async fn get_importer(name: String, user: &mut GooseUser) -> TransactionResult { - let _response = user.get(&format!("/api/v2/importer/{name}")).await?; + let _response = user.get(&format!("/api/v3/importer/{name}")).await?; Ok(()) } pub async fn get_importer_report(name: String, user: &mut GooseUser) -> TransactionResult { - let _response = user.get(&format!("/api/v2/importer/{name}/report")).await?; + let _response = user.get(&format!("/api/v3/importer/{name}/report")).await?; Ok(()) } pub async fn get_spdx_license(id: String, user: &mut GooseUser) -> TransactionResult { let _response = user - .get(&format!("/api/v2/license/spdx/license/{id}")) + .get(&format!("/api/v3/license/spdx/license/{id}")) .await?; Ok(()) } pub async fn get_weakness(id: String, user: &mut GooseUser) -> TransactionResult { - let _response = user.get(&format!("/api/v2/weakness/{id}")).await?; + let _response = user.get(&format!("/api/v3/weakness/{id}")).await?; Ok(()) } @@ -42,7 +42,7 @@ pub async fn get_weakness(id: String, user: &mut GooseUser) -> TransactionResult pub async fn post_extract_sbom_purls(user: &mut GooseUser) -> TransactionResult { let _response = user .post_json( - "/api/v2/ui/extract-sbom-purls", + "/api/v3/ui/extract-sbom-purls", &json!({ "spdxVersion": "SPDX-2.3", "dataLicense": "CC0-1.0", diff --git a/src/restapi/purl.rs b/src/restapi/purl.rs index a42fac2..1e27835 100644 --- a/src/restapi/purl.rs +++ b/src/restapi/purl.rs @@ -11,7 +11,7 @@ pub async fn get_purl_details(purl_id: String, user: &mut GooseUser) -> Transact pub async fn get_base_purl(key: String, user: &mut GooseUser) -> TransactionResult { let _response = user - .get(&format!("/api/v2/purl/base/{}", encode(&key))) + .get(&format!("/api/v3/purl/base/{}", encode(&key))) .await?; Ok(()) @@ -26,7 +26,7 @@ pub async fn get_recommendations( let batch: Vec<&String> = purls.0.iter().take(batch_size).collect(); let _response = user .post_json( - "/api/v2/purl/recommend", + "/api/v3/purl/recommend", &json!({ "purls": batch }), diff --git a/src/restapi/sbom.rs b/src/restapi/sbom.rs index 40ee96d..a884b56 100644 --- a/src/restapi/sbom.rs +++ b/src/restapi/sbom.rs @@ -8,7 +8,7 @@ use std::sync::{ use urlencoding::encode; pub async fn get_sbom(sbom_id: String, user: &mut GooseUser) -> TransactionResult { - let _response = user.get(&format!("/api/v2/sbom/{sbom_id}")).await?; + let _response = user.get(&format!("/api/v3/sbom/{sbom_id}")).await?; Ok(()) } @@ -23,21 +23,21 @@ pub async fn get_sbom_advisories(sbom_id: String, user: &mut GooseUser) -> Trans pub async fn get_sbom_packages(sbom_id: String, user: &mut GooseUser) -> TransactionResult { let _response = user - .get(&format!("/api/v2/sbom/{sbom_id}/packages")) + .get(&format!("/api/v3/sbom/{sbom_id}/packages")) .await?; Ok(()) } pub async fn get_sbom_related(sbom_id: String, user: &mut GooseUser) -> TransactionResult { - let _response = user.get(&format!("/api/v2/sbom/{sbom_id}/related")).await?; + let _response = user.get(&format!("/api/v3/sbom/{sbom_id}/related")).await?; Ok(()) } pub async fn sbom_by_package(purl: String, user: &mut GooseUser) -> TransactionResult { let _response = user - .get(&format!("/api/v2/sbom/by-package?purl={}", encode(&purl))) + .get(&format!("/api/v3/sbom/by-package?purl={}", encode(&purl))) .await?; Ok(()) @@ -46,7 +46,7 @@ pub async fn sbom_by_package(purl: String, user: &mut GooseUser) -> TransactionR pub async fn get_sbom_license_ids(sbom_id: String, user: &mut GooseUser) -> TransactionResult { let _response = user .get(&format!( - "/api/v2/sbom/{}/all-license-ids", + "/api/v3/sbom/{}/all-license-ids", encode(&sbom_id) )) .await?; @@ -56,7 +56,7 @@ pub async fn get_sbom_license_ids(sbom_id: String, user: &mut GooseUser) -> Tran pub async fn download_sbom(key: String, user: &mut GooseUser) -> TransactionResult { let _response = user - .get(&format!("/api/v2/sbom/{}/download", encode(&key))) + .get(&format!("/api/v3/sbom/{}/download", encode(&key))) .await?; Ok(()) @@ -64,17 +64,17 @@ pub async fn download_sbom(key: String, user: &mut GooseUser) -> TransactionResu pub async fn get_sbom_license_export(id: String, user: &mut GooseUser) -> TransactionResult { let _response = user - .get(&format!("/api/v2/sbom/{}/license-export", encode(&id))) + .get(&format!("/api/v3/sbom/{}/license-export", encode(&id))) .await?; Ok(()) } pub async fn count_sbom_by_package(purl: String, user: &mut GooseUser) -> TransactionResult { - let url = user.build_url("/api/v2/sbom/count-by-package")?; + let url = user.build_url("/api/v3/sbom/count-by-package")?; let goose_request = GooseRequest::builder() .method(GooseMethod::Get) - .path("/api/v2/sbom/count-by-package") + .path("/api/v3/sbom/count-by-package") .set_request_builder(Client::get(&user.client, url).json(&json!([{"purl": purl}]))) .build(); let _response = user.request(goose_request).await?; @@ -105,7 +105,7 @@ async fn send_sbom_label_request( client_method: fn(&Client, String) -> reqwest_12::RequestBuilder, ) -> TransactionResult { use serde_json::json; - let path = format!("/api/v2/sbom/{}/label", encode(&sbom_id)); + let path = format!("/api/v3/sbom/{}/label", encode(&sbom_id)); let json = json!({ "source": source, "load-test": "true", @@ -131,7 +131,7 @@ pub async fn delete_sbom_from_pool_sequential( let index = counter.fetch_add(1, Ordering::Relaxed); if index < pool.len() { let sbom_id = &pool[index]; - let _response = user.delete(&format!("/api/v2/sbom/{sbom_id}")).await?; + let _response = user.delete(&format!("/api/v3/sbom/{sbom_id}")).await?; } Ok(()) } diff --git a/src/restapi/sbom_group.rs b/src/restapi/sbom_group.rs index 5a450f9..9d2eb02 100644 --- a/src/restapi/sbom_group.rs +++ b/src/restapi/sbom_group.rs @@ -1,14 +1,14 @@ use goose::goose::{GooseUser, TransactionResult}; pub async fn get_sbom_group(id: String, user: &mut GooseUser) -> TransactionResult { - let _response = user.get(&format!("/api/v2/group/sbom/{id}")).await?; + let _response = user.get(&format!("/api/v3/group/sbom/{id}")).await?; Ok(()) } pub async fn get_sbom_group_assignments(id: String, user: &mut GooseUser) -> TransactionResult { let _response = user - .get(&format!("/api/v2/group/sbom-assignment/{id}")) + .get(&format!("/api/v3/group/sbom-assignment/{id}")) .await?; Ok(()) diff --git a/src/restapi/vulnerability.rs b/src/restapi/vulnerability.rs index 6926fd2..51dfbc0 100644 --- a/src/restapi/vulnerability.rs +++ b/src/restapi/vulnerability.rs @@ -18,7 +18,7 @@ pub async fn get_vulnerability_scores(id: String, user: &mut GooseUser) -> Trans pub async fn post_vulnerability_analyze(purl: String, user: &mut GooseUser) -> TransactionResult { let _response = user .post_json( - "/api/v2/vulnerability/analyze", + "/api/v3/vulnerability/analyze", &json!({ "purls": [ purl