Skip to content

Commit 5411b4c

Browse files
authored
fix: Add AWS environment variable checks for S3 tests (#17519)
1 parent bb0c3ff commit 5411b4c

File tree

3 files changed

+60
-0
lines changed

3 files changed

+60
-0
lines changed

datafusion-cli/src/catalog.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,8 @@ pub fn substitute_tilde(cur: String) -> String {
230230
}
231231
#[cfg(test)]
232232
mod tests {
233+
use std::{env, vec};
234+
233235
use super::*;
234236

235237
use datafusion::catalog::SchemaProvider;
@@ -284,6 +286,19 @@ mod tests {
284286

285287
#[tokio::test]
286288
async fn query_s3_location_test() -> Result<()> {
289+
let aws_envs = vec![
290+
"AWS_ENDPOINT",
291+
"AWS_ACCESS_KEY_ID",
292+
"AWS_SECRET_ACCESS_KEY",
293+
"AWS_ALLOW_HTTP",
294+
];
295+
for aws_env in aws_envs {
296+
if env::var(aws_env).is_err() {
297+
eprint!("aws envs not set, skipping s3 test");
298+
return Ok(());
299+
}
300+
}
301+
287302
let bucket = "examples3bucket";
288303
let location = format!("s3://{bucket}/file.parquet");
289304

datafusion-cli/src/exec.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,19 @@ mod tests {
582582
}
583583
#[tokio::test]
584584
async fn copy_to_external_object_store_test() -> Result<()> {
585+
let aws_envs = vec![
586+
"AWS_ENDPOINT",
587+
"AWS_ACCESS_KEY_ID",
588+
"AWS_SECRET_ACCESS_KEY",
589+
"AWS_ALLOW_HTTP",
590+
];
591+
for aws_env in aws_envs {
592+
if std::env::var(aws_env).is_err() {
593+
eprint!("aws envs not set, skipping s3 test");
594+
return Ok(());
595+
}
596+
}
597+
585598
let locations = vec![
586599
"s3://bucket/path/file.parquet",
587600
"oss://bucket/path/file.parquet",

datafusion-cli/src/object_storage.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,12 @@ mod tests {
579579

580580
#[tokio::test]
581581
async fn s3_object_store_builder_default() -> Result<()> {
582+
if let Err(DataFusionError::Execution(e)) = check_aws_envs().await {
583+
// Skip test if AWS envs are not set
584+
eprintln!("{e}");
585+
return Ok(());
586+
}
587+
582588
let location = "s3://bucket/path/FAKE/file.parquet";
583589
// Set it to a non-existent file to avoid reading the default configuration file
584590
std::env::set_var("AWS_CONFIG_FILE", "data/aws.config");
@@ -733,6 +739,11 @@ mod tests {
733739

734740
#[tokio::test]
735741
async fn s3_object_store_builder_resolves_region_when_none_provided() -> Result<()> {
742+
if let Err(DataFusionError::Execution(e)) = check_aws_envs().await {
743+
// Skip test if AWS envs are not set
744+
eprintln!("{e}");
745+
return Ok(());
746+
}
736747
let expected_region = "eu-central-1";
737748
let location = "s3://test-bucket/path/file.parquet";
738749
// Set it to a non-existent file to avoid reading the default configuration file
@@ -759,6 +770,12 @@ mod tests {
759770
#[tokio::test]
760771
async fn s3_object_store_builder_overrides_region_when_resolve_region_enabled(
761772
) -> Result<()> {
773+
if let Err(DataFusionError::Execution(e)) = check_aws_envs().await {
774+
// Skip test if AWS envs are not set
775+
eprintln!("{e}");
776+
return Ok(());
777+
}
778+
762779
let original_region = "us-east-1";
763780
let expected_region = "eu-central-1"; // This should be the auto-detected region
764781
let location = "s3://test-bucket/path/file.parquet";
@@ -860,4 +877,19 @@ mod tests {
860877
.unwrap();
861878
table_options
862879
}
880+
881+
async fn check_aws_envs() -> Result<()> {
882+
let aws_envs = [
883+
"AWS_ACCESS_KEY_ID",
884+
"AWS_SECRET_ACCESS_KEY",
885+
"AWS_REGION",
886+
"AWS_ALLOW_HTTP",
887+
];
888+
for aws_env in aws_envs {
889+
std::env::var(aws_env).map_err(|_| {
890+
exec_datafusion_err!("aws envs not set, skipping s3 tests")
891+
})?;
892+
}
893+
Ok(())
894+
}
863895
}

0 commit comments

Comments
 (0)