@@ -30,14 +30,49 @@ pub fn init_props(config: &IcebergSinkConfig) -> Result<HashMap<String, String>,
3030fn get_props_s3 ( config : & IcebergSinkConfig ) -> Result < HashMap < String , String > , Error > {
3131 let mut props: HashMap < String , String > = HashMap :: new ( ) ;
3232 props. insert ( "s3.region" . to_string ( ) , config. store_region . clone ( ) ) ;
33- props. insert (
34- "s3.access-key-id" . to_string ( ) ,
35- config. store_access_key_id . clone ( ) ,
36- ) ;
37- props. insert (
38- "s3.secret-access-key" . to_string ( ) ,
39- config. store_secret_access_key . clone ( ) ,
40- ) ;
33+ if let Some ( access_key_id) = & config. store_access_key_id {
34+ props. insert ( "s3.access-key-id" . to_string ( ) , access_key_id. clone ( ) ) ;
35+ }
36+ if let Some ( secret_access_key) = & config. store_secret_access_key {
37+ props. insert (
38+ "s3.secret-access-key" . to_string ( ) ,
39+ secret_access_key. clone ( ) ,
40+ ) ;
41+ }
4142 props. insert ( "s3.endpoint" . to_string ( ) , config. store_url . clone ( ) ) ;
4243 Ok ( props)
4344}
45+
46+ #[ cfg( test) ]
47+ mod tests {
48+ use super :: * ;
49+ use crate :: { IcebergSinkConfig , IcebergSinkStoreClass , IcebergSinkTypes } ;
50+
51+ #[ test]
52+ fn test_get_props_s3 ( ) {
53+ let mut config = IcebergSinkConfig {
54+ tables : vec ! [ ] ,
55+ catalog_type : IcebergSinkTypes :: REST ,
56+ warehouse : "warehouse" . to_string ( ) ,
57+ uri : "http://localhost:8181" . to_string ( ) ,
58+ dynamic_routing : false ,
59+ dynamic_route_field : "" . to_string ( ) ,
60+ store_url : "http://localhost:9000" . to_string ( ) ,
61+ store_access_key_id : None ,
62+ store_secret_access_key : None ,
63+ store_region : "us-east-1" . to_string ( ) ,
64+ store_class : IcebergSinkStoreClass :: S3 ,
65+ } ;
66+
67+ let props_none = get_props_s3 ( & config) . expect ( "Should return S3 properties" ) ;
68+ assert ! ( !props_none. contains_key( "s3.access-key-id" ) ) ;
69+ assert ! ( !props_none. contains_key( "s3.secret-access-key" ) ) ;
70+
71+ config. store_access_key_id = Some ( "admin" . to_string ( ) ) ;
72+ config. store_secret_access_key = Some ( "password" . to_string ( ) ) ;
73+
74+ let props_some = get_props_s3 ( & config) . expect ( "Should return S3 properties" ) ;
75+ assert_eq ! ( props_some. get( "s3.access-key-id" ) . unwrap( ) , "admin" ) ;
76+ assert_eq ! ( props_some. get( "s3.secret-access-key" ) . unwrap( ) , "password" ) ;
77+ }
78+ }
0 commit comments