This is an automated email from the ASF dual-hosted git repository.
richox pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/auron.git
The following commit(s) were added to refs/heads/master by this push:
new 5d388f58 [AURON-1312] Add scalar coverage for spark_sha2 hashing
(#1313)
5d388f58 is described below
commit 5d388f58d087f5c75a718dc221638fca49d42be8
Author: huang qiwei <[email protected]>
AuthorDate: Thu Sep 18 22:33:08 2025 +0800
[AURON-1312] Add scalar coverage for spark_sha2 hashing (#1313)
* Add Unit Test for the sha2 function
* Update native-engine/datafusion-ext-functions/src/spark_sha2.rs
Co-authored-by: Copilot <[email protected]>
---------
Co-authored-by: Copilot <[email protected]>
---
.../datafusion-ext-functions/src/spark_sha2.rs | 89 ++++++++++++++++++++++
1 file changed, 89 insertions(+)
diff --git a/native-engine/datafusion-ext-functions/src/spark_sha2.rs
b/native-engine/datafusion-ext-functions/src/spark_sha2.rs
index 9764b49a..741c1b3e 100644
--- a/native-engine/datafusion-ext-functions/src/spark_sha2.rs
+++ b/native-engine/datafusion-ext-functions/src/spark_sha2.rs
@@ -93,3 +93,92 @@ fn hex_encode<T: AsRef<[u8]>>(data: T) -> String {
}
s
}
+
+#[cfg(test)]
+mod tests {
+ use std::error::Error;
+
+ use datafusion::{
+ common::ScalarValue, error::Result as DataFusionResult,
physical_plan::ColumnarValue,
+ };
+
+ use crate::spark_sha2::{spark_sha224, spark_sha256, spark_sha384,
spark_sha512};
+
+ /// Helper function to run a test for a given hash function and scalar
+ /// input.
+ fn run_scalar_test(
+ // Accepts any function that matches the signature of the spark_sha*
functions.
+ hash_fn: impl Fn(&[ColumnarValue]) -> DataFusionResult<ColumnarValue>,
+ input_value: ColumnarValue,
+ expected_output: &str,
+ ) -> Result<(), Box<dyn Error>> {
+ // 1. Call the provided hash function.
+ let result = hash_fn(&[input_value])?;
+
+ // 2. Unwrap the result, panicking if it's not the expected type.
+ let ColumnarValue::Scalar(ScalarValue::Utf8(actual)) = result else {
+ panic!("expected UTF-8 scalar");
+ };
+
+ // 3. Assert the actual output matches the expected output.
+ assert_eq!(actual.as_deref(), Some(expected_output));
+
+ Ok(())
+ }
+
+ #[test]
+ fn test_sha224_scalar_utf8() -> Result<(), Box<dyn Error>> {
+ let input =
ColumnarValue::Scalar(ScalarValue::Utf8(Some("ABC".to_string())));
+ let expected =
"107c5072b799c4771f328304cfe1ebb375eb6ea7f35a3aa753836fad";
+ run_scalar_test(spark_sha224, input, expected)
+ }
+
+ #[test]
+ fn test_sha256_scalar_utf8() -> Result<(), Box<dyn Error>> {
+ let input =
ColumnarValue::Scalar(ScalarValue::Utf8(Some("ABC".to_string())));
+ let expected =
"b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78";
+ run_scalar_test(spark_sha256, input, expected)
+ }
+
+ #[test]
+ fn test_sha384_scalar_utf8() -> Result<(), Box<dyn Error>> {
+ let input =
ColumnarValue::Scalar(ScalarValue::Utf8(Some("ABC".to_string())));
+ let expected =
"1e02dc92a41db610c9bcdc9b5935d1fb9be5639116f6c67e97bc1a3ac649753baba7ba021c813e1fe20c0480213ad371";
+ run_scalar_test(spark_sha384, input, expected)
+ }
+
+ #[test]
+ fn test_sha512_scalar_utf8() -> Result<(), Box<dyn Error>> {
+ let input =
ColumnarValue::Scalar(ScalarValue::Utf8(Some("ABC".to_string())));
+ let expected =
"397118fdac8d83ad98813c50759c85b8c47565d8268bf10da483153b747a74743a58a90e85aa9f705ce6984ffc128db567489817e4092d050d8a1cc596ddc119";
+ run_scalar_test(spark_sha512, input, expected)
+ }
+
+ #[test]
+ fn test_sha224_scalar_binary() -> Result<(), Box<dyn Error>> {
+ let input = ColumnarValue::Scalar(ScalarValue::Binary(Some(vec![1, 2,
3, 4, 5, 6])));
+ let expected =
"4225cbc32d17010d1a440de9e34504c1fae29b8ee5e527e191ff9a82";
+ run_scalar_test(spark_sha224, input, expected)
+ }
+
+ #[test]
+ fn test_sha256_scalar_binary() -> Result<(), Box<dyn Error>> {
+ let input = ColumnarValue::Scalar(ScalarValue::Binary(Some(vec![1, 2,
3, 4, 5, 6])));
+ let expected =
"7192385c3c0605de55bb9476ce1d90748190ecb32a8eed7f5207b30cf6a1fe89";
+ run_scalar_test(spark_sha256, input, expected)
+ }
+
+ #[test]
+ fn test_sha384_scalar_binary() -> Result<(), Box<dyn Error>> {
+ let input = ColumnarValue::Scalar(ScalarValue::Binary(Some(vec![1, 2,
3, 4, 5, 6])));
+ let expected =
"557cfe660c753b830efa61528fc350ef384a7a4b9d3467c6230049bc59548eb8a404874baff89cb0f9bd18400829fdc2";
+ run_scalar_test(spark_sha384, input, expected)
+ }
+
+ #[test]
+ fn test_sha512_scalar_binary() -> Result<(), Box<dyn Error>> {
+ let input = ColumnarValue::Scalar(ScalarValue::Binary(Some(vec![1, 2,
3, 4, 5, 6])));
+ let expected =
"178d767c364244ede054ebb3cc4af0ac2b307a86fba6a32706ce4f692642674d2ab8f51ee738ecb09bc296918aa85db48abe28fcaef7aa2da81a618cc6d891c3";
+ run_scalar_test(spark_sha512, input, expected)
+ }
+}