Skip to content

Commit

Permalink
Update non-existent network interface initialization test
Browse files Browse the repository at this point in the history
CRT was returning error during first operation before if it provided
with a non-existent network interface name. But with
awslabs/aws-c-s3#456, it started failing
during the client creation phase. Our tests were written for the
previous behaviour and was expecting client creation to succeed even
with an invalid network interface. The test is updated to expect
errors during client creation.

Signed-off-by: Burak Varlı <burakvar@amazon.co.uk>
  • Loading branch information
unexge committed Oct 17, 2024
1 parent e9f29c2 commit 6b3fa6c
Showing 1 changed file with 5 additions and 26 deletions.
31 changes: 5 additions & 26 deletions mountpoint-s3-client/tests/network_interface_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use test_case::test_case;

use common::*;
use mountpoint_s3_client::config::{EndpointConfig, S3ClientConfig};
use mountpoint_s3_client::error::{HeadObjectError, ObjectClientError::ClientError, ObjectClientError::ServiceError};
use mountpoint_s3_client::error::{HeadObjectError, ObjectClientError::ServiceError};
use mountpoint_s3_client::{ObjectClient, S3CrtClient};

#[tokio::test]
Expand Down Expand Up @@ -52,17 +52,11 @@ async fn test_one_interface_ok() {
);
}

/// This test demonstrates how the S3 client will fail today when configured with bad network interfaces.
/// The behavior isn't great, but this documents what happens.
///
/// TODO: How can we get to a point where S3 client creation fails when invalid interface names are provided?
/// This test demonstrates how the S3 client creation will fail today when configured with bad network interfaces.
#[test_case(true; "with one valid interface")]
#[test_case(false; "without any valid interface")]
#[tokio::test]
async fn test_nonexistent(with_valid_interface: bool) {
let (bucket, prefix) = get_test_bucket_and_prefix("test_empty_list");
let key = format!("{prefix}/no-such-key");

let primary_interface = get_primary_interface_name();
let non_existent_interface = String::from("none0");
let interface_names = if with_valid_interface {
Expand All @@ -73,24 +67,9 @@ async fn test_nonexistent(with_valid_interface: bool) {
let config = S3ClientConfig::new()
.endpoint_config(EndpointConfig::new(&get_test_region()))
.network_interface_names(interface_names);
let client = S3CrtClient::new(config).expect("client should create OK");

let mut socket_creation_failure = None;
for _ in 0..10 {
// It probably should only need two requests (round robin), but let's just do up to 10 if needed.
let err = client
.head_object(&bucket, &key)
.await
.expect_err("head_object should always fail as the object or the network interface didn't exist");
if let ClientError(_) = &err {
let error_message = format!("{err:?}");
if error_message.contains("AWS_IO_SOCKET_INVALID_OPTIONS") {
socket_creation_failure = Some(err);
break;
}
}
}
socket_creation_failure.expect("crt should return error on socket creation for non-existent interface");
S3CrtClient::new(config).expect_err(
"CRT should return an error during client creation if provided with non-existent network interface",
);
}

/// Retrieve the primary interface name used to route internet traffic.
Expand Down

0 comments on commit 6b3fa6c

Please sign in to comment.