()
| 662 | |
| 663 | #[tokio::test] |
| 664 | async fn s3_object_store_builder() -> Result<()> { |
| 665 | // "fake" is uppercase to ensure the values are not lowercased when parsed |
| 666 | let access_key_id = "FAKE_access_key_id"; |
| 667 | let secret_access_key = "FAKE_secret_access_key"; |
| 668 | let region = "fake_us-east-2"; |
| 669 | let endpoint = "endpoint33"; |
| 670 | let session_token = "FAKE_session_token"; |
| 671 | let location = "s3://bucket/path/FAKE/file.parquet"; |
| 672 | |
| 673 | let table_url = ListingTableUrl::parse(location)?; |
| 674 | let scheme = table_url.scheme(); |
| 675 | let sql = format!( |
| 676 | "CREATE EXTERNAL TABLE test STORED AS PARQUET OPTIONS\ |
| 677 | ('aws.access_key_id' '{access_key_id}', \ |
| 678 | 'aws.secret_access_key' '{secret_access_key}', \ |
| 679 | 'aws.region' '{region}', \ |
| 680 | 'aws.session_token' {session_token}, \ |
| 681 | 'aws.endpoint' '{endpoint}'\ |
| 682 | ) LOCATION '{location}'" |
| 683 | ); |
| 684 | |
| 685 | let ctx = SessionContext::new(); |
| 686 | ctx.register_table_options_extension_from_scheme(scheme); |
| 687 | let table_options = get_table_options(&ctx, &sql).await; |
| 688 | let aws_options = table_options.extensions.get::<AwsOptions>().unwrap(); |
| 689 | let builder = |
| 690 | get_s3_object_store_builder(table_url.as_ref(), aws_options, false).await?; |
| 691 | // get the actual configuration information, then assert_eq! |
| 692 | let config = [ |
| 693 | (AmazonS3ConfigKey::AccessKeyId, access_key_id), |
| 694 | (AmazonS3ConfigKey::SecretAccessKey, secret_access_key), |
| 695 | (AmazonS3ConfigKey::Region, region), |
| 696 | (AmazonS3ConfigKey::Endpoint, endpoint), |
| 697 | (AmazonS3ConfigKey::Token, session_token), |
| 698 | ]; |
| 699 | for (key, value) in config { |
| 700 | assert_eq!(value, builder.get_config_value(&key).unwrap()); |
| 701 | } |
| 702 | // Should not skip signature when credentials are provided |
| 703 | assert_eq!( |
| 704 | builder.get_config_value(&AmazonS3ConfigKey::SkipSignature), |
| 705 | Some("false".into()) |
| 706 | ); |
| 707 | |
| 708 | Ok(()) |
| 709 | } |
| 710 | |
| 711 | #[tokio::test] |
| 712 | async fn s3_object_store_builder_allow_http_error() -> Result<()> { |
nothing calls this directly
no test coverage detected
searching dependent graphs…