You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by gi...@apache.org on 2026/10/16 17:40:55 UTC

(iceberg-rust) 01/01: test(glue): cover KMS property forwarding (#3478)

This is an automated email from the ASF dual-hosted git repository.

github-merge-queue[bot] pushed a commit to branch gh-readonly-queue/main/pr-3478-061925453a91c2e505dece727c8873eb408b8f37
in repository https://gitbox.apache.org/repos/asf/iceberg-rust.git

commit 8b59642650d1da12270a8a570e0ae7acfa86a9c6
Author: blackmwk <25...@users.noreply.github.com>
AuthorDate: Fri Oct 16 17:40:33 2026 +0000

    test(glue): cover KMS property forwarding (#3478)
    
    Record the full map received by the KMS factory and check initialization error propagation. Label missing and empty warehouse cases and document the crate-private Glue properties.
    
    Follow-up to apache/iceberg-rust#3102.
    
    Generated-by: Codex
---
 crates/catalog/glue/src/catalog.rs | 68 +++++++++++++++++++++++++++++++++++---
 1 file changed, 63 insertions(+), 5 deletions(-)

diff --git a/crates/catalog/glue/src/catalog.rs b/crates/catalog/glue/src/catalog.rs
index 06e8b8400..99fb2a51e 100644
--- a/crates/catalog/glue/src/catalog.rs
+++ b/crates/catalog/glue/src/catalog.rs
@@ -118,6 +118,7 @@ impl CatalogBuilder for GlueCatalogBuilder {
     }
 }
 
+/// Glue catalog properties parsed from the `load` property map.
 #[derive(Debug, Properties)]
 pub(crate) struct GlueCatalogProperties {
     #[property(key = GLUE_CATALOG_PROP_URI, default = None)]
@@ -928,6 +929,8 @@ impl Catalog for GlueCatalog {
 
 #[cfg(test)]
 mod tests {
+    use std::sync::Mutex;
+
     use super::*;
 
     #[test]
@@ -964,17 +967,72 @@ mod tests {
 
     #[tokio::test]
     async fn test_load_rejects_missing_or_empty_warehouse() {
-        for props in [
-            HashMap::new(),
-            HashMap::from([(GLUE_CATALOG_PROP_WAREHOUSE.to_string(), String::new())]),
+        for (case, props) in [
+            ("missing", HashMap::new()),
+            (
+                "empty",
+                HashMap::from([(GLUE_CATALOG_PROP_WAREHOUSE.to_string(), String::new())]),
+            ),
         ] {
             let error = GlueCatalogBuilder::default()
                 .load("glue", props)
                 .await
                 .unwrap_err();
 
-            assert_eq!(error.kind(), ErrorKind::DataInvalid);
-            assert_eq!(error.message(), "Catalog warehouse is required");
+            assert_eq!(
+                (error.kind(), error.message()),
+                (ErrorKind::DataInvalid, "Catalog warehouse is required"),
+                "{case}"
+            );
         }
     }
+
+    #[tokio::test]
+    async fn test_load_forwards_all_properties_to_kms_factory() {
+        #[derive(Debug, Default)]
+        struct RecordingKmsClientFactory(Mutex<HashMap<String, String>>);
+
+        #[async_trait]
+        impl KmsClientFactory for RecordingKmsClientFactory {
+            async fn create_kms_client(
+                &self,
+                properties: &HashMap<String, String>,
+            ) -> Result<Arc<dyn KeyManagementClient>> {
+                *self.0.lock().unwrap() = properties.clone();
+                Err(Error::new(
+                    ErrorKind::Unexpected,
+                    "KMS initialization failed",
+                ))
+            }
+        }
+
+        let properties = HashMap::from([
+            (
+                GLUE_CATALOG_PROP_URI.to_string(),
+                "http://localhost".to_string(),
+            ),
+            (
+                GLUE_CATALOG_PROP_CATALOG_ID.to_string(),
+                "catalog".to_string(),
+            ),
+            (
+                GLUE_CATALOG_PROP_WAREHOUSE.to_string(),
+                "s3://warehouse".to_string(),
+            ),
+            (AWS_REGION_NAME.to_string(), "us-east-1".to_string()),
+            ("custom.property".to_string(), "value".to_string()),
+        ]);
+        let factory = Arc::new(RecordingKmsClientFactory::default());
+        let error = GlueCatalogBuilder::default()
+            .with_kms_client_factory(factory.clone())
+            .load("glue", properties.clone())
+            .await
+            .unwrap_err();
+
+        assert_eq!(*factory.0.lock().unwrap(), properties);
+        assert_eq!(
+            (error.kind(), error.message()),
+            (ErrorKind::Unexpected, "KMS initialization failed")
+        );
+    }
 }