|
| 1 | +/* |
| 2 | + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. |
| 3 | + * SPDX-License-Identifier: Apache-2.0 |
| 4 | + */ |
| 5 | + |
| 6 | +/// The SDK defaults to using RusTLS by default but you can also use [`native_tls`](https://github.com/sfackler/rust-native-tls) |
| 7 | +/// which will choose a TLS implementation appropriate for your platform. This test looks much like |
| 8 | +/// any other. Activating and deactivating `features` in your app's `Cargo.toml` is all that's needed. |
| 9 | +
|
| 10 | +async fn list_buckets() -> Result<(), aws_sdk_s3::Error> { |
| 11 | + let sdk_config = aws_config::load_from_env().await; |
| 12 | + let client = aws_sdk_s3::Client::new(&sdk_config); |
| 13 | + |
| 14 | + let _resp = client.list_buckets().send().await?; |
| 15 | + |
| 16 | + Ok(()) |
| 17 | +} |
| 18 | + |
| 19 | +/// You can run this test to ensure that it is only using `native-tls` and |
| 20 | +/// that nothing is pulling in `rustls` as a dependency |
| 21 | +#[test] |
| 22 | +#[should_panic = "error: package ID specification `rustls` did not match any packages"] |
| 23 | +fn test_rustls_is_not_in_dependency_tree() { |
| 24 | + let cargo_location = std::env::var("CARGO").unwrap(); |
| 25 | + let cargo_command = std::process::Command::new(&cargo_location) |
| 26 | + .arg("tree") |
| 27 | + .arg("--invert") |
| 28 | + .arg("rustls") |
| 29 | + .output() |
| 30 | + .expect("failed to run 'cargo tree'"); |
| 31 | + |
| 32 | + let stderr = String::from_utf8_lossy(&cargo_command.stderr); |
| 33 | + |
| 34 | + // We expect the call to `cargo tree` to error out. If it did, we panic with the resulting |
| 35 | + // message here. In the case that no error message is set, that's bad. |
| 36 | + if !stderr.is_empty() { |
| 37 | + panic!("{}", stderr); |
| 38 | + } |
| 39 | + |
| 40 | + // Uh oh. We expected an error message but got none, likely because `cargo tree` found |
| 41 | + // `rustls` in our dependencies. We'll print out the message we got to see what went wrong. |
| 42 | + let stdout = String::from_utf8_lossy(&cargo_command.stdout); |
| 43 | + |
| 44 | + println!("{}", stdout) |
| 45 | +} |
| 46 | + |
| 47 | +// NOTE: not currently run in CI, separate PR will set up a with-creds CI runner |
| 48 | +#[tokio::test] |
| 49 | +#[ignore] |
| 50 | +async fn needs_creds_native_tls_works() { |
| 51 | + list_buckets().await.expect("should succeed") |
| 52 | +} |
0 commit comments