diff --git a/rust_dev_preview/cross_service/photo_asset_management/Cargo.toml b/rust_dev_preview/cross_service/photo_asset_management/Cargo.toml index 63b49c2b350..7c7696f24be 100644 --- a/rust_dev_preview/cross_service/photo_asset_management/Cargo.toml +++ b/rust_dev_preview/cross_service/photo_asset_management/Cargo.toml @@ -19,10 +19,9 @@ aws-sdk-dynamodb = { git = "https://github.com/awslabs/aws-sdk-rust", branch = " aws-sdk-rekognition = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } aws-sdk-s3 = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } aws-sdk-sns = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } -aws-smithy-client = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next", features = [ - "test-util", -] } +aws-smithy-client = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } aws-smithy-http = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } +aws-smithy-runtime = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } aws-smithy-types-convert ={ git = "https://github.com/awslabs/aws-sdk-rust", branch = "next", features = ["convert-chrono"] } aws_lambda_events = { version = "0.10.0", features = ["s3", "apigw"], default-features = false } bytes = "1.4.0" @@ -35,6 +34,7 @@ lambda_runtime = "0.8.0" miniz_oxide = "0.7.1" pin-project = "1.0.12" pipe = "0.4.0" +sdk-examples-test-utils = { path = "../../test-utils" } serde = { version = "1.0.159", features = ["derive"] } serde_json = "1.0.95" streaming-zip = "0.5.0" diff --git a/rust_dev_preview/cross_service/photo_asset_management/src/handlers/labels.rs b/rust_dev_preview/cross_service/photo_asset_management/src/handlers/labels.rs index f2b137476db..da2fc45fd13 100644 --- a/rust_dev_preview/cross_service/photo_asset_management/src/handlers/labels.rs +++ b/rust_dev_preview/cross_service/photo_asset_management/src/handlers/labels.rs @@ -104,10 +104,9 @@ pub async fn handler( #[cfg(test)] mod test { + use sdk_examples_test_utils::single_shot_client; use serde_json::json; - use crate::single_shot_client; - use super::{get_labels, Labels}; #[tokio::test] diff --git a/rust_dev_preview/cross_service/photo_asset_management/src/lib.rs b/rust_dev_preview/cross_service/photo_asset_management/src/lib.rs index f634c83d9a6..3d0aca88324 100644 --- a/rust_dev_preview/cross_service/photo_asset_management/src/lib.rs +++ b/rust_dev_preview/cross_service/photo_asset_management/src/lib.rs @@ -1,5 +1,4 @@ pub mod chunked_uploader; pub mod common; pub mod handlers; -pub mod test_utils; pub mod uploader; diff --git a/rust_dev_preview/cross_service/photo_asset_management/src/test_utils/macros.rs b/rust_dev_preview/cross_service/photo_asset_management/src/test_utils/macros.rs deleted file mode 100644 index fbf286c6061..00000000000 --- a/rust_dev_preview/cross_service/photo_asset_management/src/test_utils/macros.rs +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. - * SPDX-License-Identifier: Apache-2.0. - */ - -//! Macros and functions that simplify making AWS SDK clients with a mocked request/response pair. - -/// Generate a single http::{Request, Response} pair. The first argument -/// is the expression to use as the value for SdkBody::from. The second -/// argument with the HTTP Status code and the response body. -/// -/// To create a number of events to use for a test client, create a vec![] -/// of many of these test_event pairs. -#[macro_export] -macro_rules! test_event { - ( - $req:expr, - ( - $status:expr, - $res:expr - ) - ) => {{ - ( - http::Request::builder() - .body(aws_smithy_http::body::SdkBody::from($req)) - .unwrap(), - http::Response::builder() - .status($status) - .body(aws_smithy_http::body::SdkBody::from($res)) - .unwrap(), - ) - }}; - ( - $req:expr, - ( - $status:expr, - $headers:expr, - $res:expr - ) - ) => {{ - ( - http::Request::builder() - .body(aws_smithy_http::body::SdkBody::from($req)) - .unwrap(), - { - let mut builder = http::Response::builder().status($status); - for (k, v) in $headers { - builder = builder.header(k, v); - } - builder - .body(aws_smithy_http::body::SdkBody::from($res)) - .unwrap() - }, - ) - }}; -} - -/// Create a hard-coded testing config for an AWS SDK. -#[macro_export] -macro_rules! client_config { - ( - $sdk_crate:ident - ) => { - $sdk_crate::Config::builder() - // TODO: replace after https://github.com/awslabs/smithy-rs/pull/2145 - // .credentials_provider($sdk_crate::config::Credentials::for_test()) - .credentials_provider($sdk_crate::config::Credentials::new( - "ATESTCLIENT", - "atestsecretkey", - Some("atestsessiontoken".to_string()), - None, - "", - )) - .region($sdk_crate::config::Region::new("us-east-1")) - }; -} - -/// Create a single-shot Client for `sdk_crate`. The `req` and `res` will be the -/// body of the request and the response, respectively. The `status` is the HTTP -/// status code for the response. The credentials are hardcoded test values. -#[macro_export] -macro_rules! single_shot_client { - (sdk: $sdk_crate:ident, status: $status:expr, response: $res:expr) => {{ - single_shot_client!($sdk_crate, "", $status, vec![], $res) - }}; - (sdk: $sdk_crate:ident, request: $req:expr, status: $status:expr, response: $res:expr) => {{ - single_shot_client!($sdk_crate, $res, $status, vec![], $res) - }}; - (sdk: $sdk_crate:ident, status: $status:expr, headers: $res_headers:expr, response: $res:expr) => {{ - single_shot_client!($sdk_crate, "", $status, $res_headers, $res) - }}; - // "Private" internal root macro. - ($sdk_crate:ident, $req:expr, $status:expr, $res_headers:expr, $res:expr) => {{ - $sdk_crate::Client::from_conf( - $crate::client_config!($sdk_crate) - .http_connector($crate::test_utils::single_shot( - $req.into(), - ($status.try_into().unwrap(), $res_headers, $res.into()), - )) - .build(), - ) - }}; -} diff --git a/rust_dev_preview/cross_service/photo_asset_management/src/test_utils/mod.rs b/rust_dev_preview/cross_service/photo_asset_management/src/test_utils/mod.rs deleted file mode 100644 index f3780b6d6bd..00000000000 --- a/rust_dev_preview/cross_service/photo_asset_management/src/test_utils/mod.rs +++ /dev/null @@ -1,17 +0,0 @@ -use aws_smithy_http::body::SdkBody; - -use crate::test_event; - -pub mod macros; - -/// Create a single-shot test connection. The arguments are the same as test_event, -/// but the expanded macro creates a TestConnection. The `TestConnection` can be -/// provided directly to a `Client::from_conf_conn`. -pub fn single_shot( - req: SdkBody, - res: (http::StatusCode, Vec<(&str, &str)>, SdkBody), -) -> aws_smithy_client::test_connection::TestConnection { - aws_smithy_client::test_connection::TestConnection::new(vec![ - (test_event!(req, (res.0, res.1, res.2))), - ]) -} diff --git a/rust_dev_preview/cross_service/rest_ses/Cargo.toml b/rust_dev_preview/cross_service/rest_ses/Cargo.toml index 9d6da1fe581..d429638a7cd 100644 --- a/rust_dev_preview/cross_service/rest_ses/Cargo.toml +++ b/rust_dev_preview/cross_service/rest_ses/Cargo.toml @@ -18,6 +18,7 @@ aws-config = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" aws-sdk-cloudwatchlogs = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } aws-sdk-rdsdata = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } aws-sdk-ses = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } +aws-smithy-runtime = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } chrono = { version = "0.4.22", default-features = false, features = [ "clock", "serde", diff --git a/rust_dev_preview/cross_service/rest_ses/src/client.rs b/rust_dev_preview/cross_service/rest_ses/src/client.rs index 8cf39561312..c9b119f82c7 100644 --- a/rust_dev_preview/cross_service/rest_ses/src/client.rs +++ b/rust_dev_preview/cross_service/rest_ses/src/client.rs @@ -64,23 +64,20 @@ impl RdsClient { #[cfg(test)] mod rds_client_for_test { - use aws_smithy_http::body::SdkBody; + use aws_smithy_runtime::client::http::test_util::ReplayEvent; use secrecy::Secret; use super::RdsClient; impl RdsClient { - pub fn for_test( - pairs: Vec<( - http::request::Request, - http::response::Response, - )>, - ) -> Self { + pub fn for_test(pairs: Vec) -> Self { RdsClient { client: aws_sdk_rdsdata::Client::from_conf( sdk_examples_test_utils::client_config!(aws_sdk_rdsdata) - .http_connector(aws_smithy_client::test_connection::TestConnection::new( - pairs, - )) + .http_client( + aws_smithy_runtime::client::http::test_util::StaticReplayClient::new( + pairs, + ), + ) .build(), ), secret_arn: Secret::from("secret".to_string()), diff --git a/rust_dev_preview/examples/dynamodb/Cargo.toml b/rust_dev_preview/examples/dynamodb/Cargo.toml index 94ce4ec7a45..94085e4ee72 100644 --- a/rust_dev_preview/examples/dynamodb/Cargo.toml +++ b/rust_dev_preview/examples/dynamodb/Cargo.toml @@ -12,30 +12,25 @@ edition = "2021" [dependencies] aws-config = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } -aws-sdk-dynamodb = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } aws-http = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } -aws-smithy-client = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next", features = [ - "client-hyper", - "rustls", - "rt-tokio", -] } -aws-smithy-http = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next", features = [ - "rt-tokio", -] } +aws-sdk-dynamodb = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } +aws-smithy-client = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next", features = [ "client-hyper", "rustls", "rt-tokio", ] } +aws-smithy-http = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next", features = [ "rt-tokio", ] } +aws-smithy-runtime = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next", features = ["test-util"] } aws-smithy-types = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } axum = "0.5.16" -http = "0.2.5" +clap = { version = "~4.2", features = ["derive"] } futures = "0.3" +http = "0.2.5" log = "0.4.17" rand = "0.8.3" sdk-examples-test-utils = { path = "../../test-utils" } serde = {version = "1.0", features = ["derive"]} -serde_json = "1" serde_dynamo = { version = "4", features = ["aws-sdk-dynamodb+0_22"] } -clap = { version = "~4.2", features = ["derive"] } -tracing = "0.1" +serde_json = "1" thiserror = "1.0" tokio = { version = "1.20.1", features = ["full"] } tokio-stream = "0.1.8" tower-http = { version = "0.3.0", features = ["cors"] } -tracing-subscriber = { version = "0.3.15", features = ["env-filter"] } +tracing = "0.1" +tracing-subscriber = { version = "0.3.15", features = ["env-filter"] } \ No newline at end of file diff --git a/rust_dev_preview/examples/dynamodb/src/scenario/list.rs b/rust_dev_preview/examples/dynamodb/src/scenario/list.rs index 6809d082fee..599f6cb32ce 100644 --- a/rust_dev_preview/examples/dynamodb/src/scenario/list.rs +++ b/rust_dev_preview/examples/dynamodb/src/scenario/list.rs @@ -119,8 +119,8 @@ mod test_list_more_tables { async fn test_list_tables_iterative() { let client = aws_sdk_dynamodb::Client::from_conf( sdk_examples_test_utils::client_config!(aws_sdk_dynamodb) - .http_connector(aws_smithy_client::test_connection::TestConnection::new( - vec![ + .http_client( + aws_smithy_runtime::client::http::test_util::StaticReplayClient::new(vec![ test_event!( "", ( @@ -136,8 +136,8 @@ mod test_list_more_tables { ) ), test_event!("", (200, r#"{"TableNames":["g","h"]}"#)), - ], - )) + ]), + ) .build(), ); diff --git a/rust_dev_preview/examples/s3/Cargo.toml b/rust_dev_preview/examples/s3/Cargo.toml index c15aab14f48..92d8b2ab198 100644 --- a/rust_dev_preview/examples/s3/Cargo.toml +++ b/rust_dev_preview/examples/s3/Cargo.toml @@ -30,6 +30,7 @@ aws-smithy-client = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "test-util", ] } aws-smithy-http = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next", features = ["rt-tokio"] } +aws-smithy-runtime = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } aws-smithy-types = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } sdk-examples-test-utils = { path = "../../test-utils" } bytes = "1.4.0" diff --git a/rust_dev_preview/examples/s3/src/s3-service-lib.rs b/rust_dev_preview/examples/s3/src/s3-service-lib.rs index d4039118e42..15a73906a99 100644 --- a/rust_dev_preview/examples/s3/src/s3-service-lib.rs +++ b/rust_dev_preview/examples/s3/src/s3-service-lib.rs @@ -163,7 +163,7 @@ pub async fn create_bucket( mod test { use std::env::temp_dir; - use aws_smithy_client::test_connection::TestConnection; + use aws_smithy_runtime::client::http::test_util::StaticReplayClient; use sdk_examples_test_utils::{client_config, single_shot_client, test_event}; use tokio::{fs::File, io::AsyncWriteExt}; use uuid::Uuid; @@ -190,7 +190,7 @@ mod test { async fn test_delete_objects() { let client = aws_sdk_s3::Client::from_conf( client_config!(aws_sdk_s3) - .http_connector(TestConnection::new(vec![ + .http_client(StaticReplayClient::new(vec![ // client.list_objects_v2().bucket(bucket_name) test_event!( r#""#, @@ -241,7 +241,7 @@ mod test { async fn test_delete_objects_failed() { let client = aws_sdk_s3::Client::from_conf( client_config!(aws_sdk_s3) - .http_connector(TestConnection::new(vec![ + .http_client(StaticReplayClient::new(vec![ // client.list_objects_v2().bucket(bucket_name) test_event!( r#""#, diff --git a/rust_dev_preview/run_all.sh b/rust_dev_preview/run_all.sh new file mode 100755 index 00000000000..413b3ad080a --- /dev/null +++ b/rust_dev_preview/run_all.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash + +DIRS=( + cross_service + examples + lambda + webassembly +) + +export RUSTFLAGS="-D warnings" ; +export APP_ENVIRONMENT="test" + +FAIL=() +for f in ${DIRS[@]} ; do + "$HOME/.cargo/bin/cargo" fmt --manifest-path rust_dev_preview/$f/Cargo.toml --all --check || FAIL+=("fmt $f") + "$HOME/.cargo/bin/cargo" clippy --manifest-path rust_dev_preview/$f/Cargo.toml --all || FAIL+=("clippy $f") + "$HOME/.cargo/bin/cargo" test --manifest-path rust_dev_preview/$f/Cargo.toml --all || FAIL+=("clippy $f") +done + +echo $FAIL + +exit "${#FAIL[@]}" diff --git a/rust_dev_preview/test-utils/Cargo.toml b/rust_dev_preview/test-utils/Cargo.toml index 25b0e0ddfe8..815d5cec597 100644 --- a/rust_dev_preview/test-utils/Cargo.toml +++ b/rust_dev_preview/test-utils/Cargo.toml @@ -10,10 +10,9 @@ edition = "2021" [dependencies] aws-config = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } -aws-smithy-client = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next", features = [ - "test-util", -] } +aws-smithy-client = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next", features = [ "test-util", ] } aws-smithy-http = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next" } +aws-smithy-runtime = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next", features = ["test-util"] } aws-types = { git = "https://github.com/awslabs/aws-sdk-rust", branch = "next"} http = "0.2" diff --git a/rust_dev_preview/test-utils/src/macros.rs b/rust_dev_preview/test-utils/src/macros.rs index 52f437496e3..e5532383a99 100644 --- a/rust_dev_preview/test-utils/src/macros.rs +++ b/rust_dev_preview/test-utils/src/macros.rs @@ -20,7 +20,7 @@ macro_rules! test_event { $res:expr ) ) => {{ - ( + aws_smithy_runtime::client::http::test_util::ReplayEvent::new( http::Request::builder() .body(aws_smithy_http::body::SdkBody::from($req)) .unwrap(), @@ -38,7 +38,7 @@ macro_rules! test_event { $res:expr ) ) => {{ - ( + aws_smithy_runtime::client::http::test_util::ReplayEvent::new( http::Request::builder() .body(aws_smithy_http::body::SdkBody::from($req)) .unwrap(), @@ -73,7 +73,7 @@ macro_rules! single_shot_client { ($sdk_crate:ident, $req:expr, $status:expr, $res_headers:expr, $res:expr) => {{ $sdk_crate::Client::from_conf( sdk_examples_test_utils::client_config!($sdk_crate) - .http_connector(sdk_examples_test_utils::single_shot( + .http_client(sdk_examples_test_utils::single_shot( $req.into(), ($status.try_into().unwrap(), $res_headers, $res.into()), )) diff --git a/rust_dev_preview/test-utils/src/mod.rs b/rust_dev_preview/test-utils/src/mod.rs index 40a301bdaa2..a8a97c6733e 100644 --- a/rust_dev_preview/test-utils/src/mod.rs +++ b/rust_dev_preview/test-utils/src/mod.rs @@ -8,8 +8,8 @@ pub mod macros; pub fn single_shot( req: SdkBody, res: (http::StatusCode, Vec<(&str, &str)>, SdkBody), -) -> aws_smithy_client::test_connection::TestConnection { - aws_smithy_client::test_connection::TestConnection::new(vec![ +) -> aws_smithy_runtime::client::http::test_util::StaticReplayClient { + aws_smithy_runtime::client::http::test_util::StaticReplayClient::new(vec![ (test_event!(req, (res.0, res.1, res.2))), ]) }