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

yihua pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/hudi-rs.git


The following commit(s) were added to refs/heads/main by this push:
     new 67640b5d test(core): add hfile compression codec coverage. (#622)
67640b5d is described below

commit 67640b5def0596409daa527b108d3187dcaf1e67
Author: slfan1989 <[email protected]>
AuthorDate: Fri Sep 4 05:34:39 2026 +0800

    test(core): add hfile compression codec coverage. (#622)
---
 crates/core/src/hfile/compression.rs | 70 ++++++++++++++++++++++++++++++++++++
 1 file changed, 70 insertions(+)

diff --git a/crates/core/src/hfile/compression.rs 
b/crates/core/src/hfile/compression.rs
index 77d70eb3..23920b68 100644
--- a/crates/core/src/hfile/compression.rs
+++ b/crates/core/src/hfile/compression.rs
@@ -95,3 +95,73 @@ impl CompressionCodec {
         }
     }
 }
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use flate2::Compression;
+    use flate2::write::GzEncoder;
+    use std::io::Write;
+
+    #[test]
+    fn test_from_id_maps_known_codec_ids() -> Result<()> {
+        assert_eq!(CompressionCodec::from_id(0)?, CompressionCodec::Lzo);
+        assert_eq!(CompressionCodec::from_id(1)?, CompressionCodec::Gzip);
+        assert_eq!(CompressionCodec::from_id(2)?, CompressionCodec::None);
+        assert_eq!(CompressionCodec::from_id(3)?, CompressionCodec::Snappy);
+        assert_eq!(CompressionCodec::from_id(4)?, CompressionCodec::Lz4);
+        assert_eq!(CompressionCodec::from_id(5)?, CompressionCodec::Bzip2);
+        assert_eq!(CompressionCodec::from_id(6)?, CompressionCodec::Zstd);
+        Ok(())
+    }
+
+    #[test]
+    fn test_from_id_rejects_unknown_codec_id() {
+        let err = CompressionCodec::from_id(42).unwrap_err();
+        assert!(matches!(err, HFileError::UnsupportedCompression(42)));
+    }
+
+    #[test]
+    fn test_decompress_none_returns_input_bytes() -> Result<()> {
+        let input = b"uncompressed hfile block";
+        let output = CompressionCodec::None.decompress(input, input.len())?;
+        assert_eq!(output, input);
+        Ok(())
+    }
+
+    #[test]
+    fn test_decompress_gzip_decodes_payload() -> Result<()> {
+        let input = b"gzip-compressed hfile block";
+        let mut encoder = GzEncoder::new(Vec::new(), Compression::default());
+        encoder.write_all(input)?;
+        let compressed = encoder.finish()?;
+
+        let output = CompressionCodec::Gzip.decompress(&compressed, 
input.len())?;
+        assert_eq!(output, input);
+        Ok(())
+    }
+
+    #[test]
+    fn test_decompress_gzip_rejects_invalid_payload() {
+        let err = CompressionCodec::Gzip
+            .decompress(b"not gzip data", 0)
+            .unwrap_err();
+        assert!(matches!(err, HFileError::DecompressionError(message) if 
message.contains("GZIP")));
+    }
+
+    #[test]
+    fn test_decompress_unsupported_codecs_return_errors() {
+        for codec in [
+            CompressionCodec::Lzo,
+            CompressionCodec::Snappy,
+            CompressionCodec::Lz4,
+            CompressionCodec::Bzip2,
+            CompressionCodec::Zstd,
+        ] {
+            let err = codec.decompress(b"compressed", 0).unwrap_err();
+            assert!(
+                matches!(err, HFileError::DecompressionError(message) if 
message.contains("not yet supported"))
+            );
+        }
+    }
+}

Reply via email to