()
| 3548 | #[cfg(feature = "parquet_encryption")] |
| 3549 | #[test] |
| 3550 | fn parquet_table_encryption() { |
| 3551 | use crate::config::{ |
| 3552 | ConfigFileDecryptionProperties, ConfigFileEncryptionProperties, |
| 3553 | }; |
| 3554 | use parquet::encryption::decrypt::FileDecryptionProperties; |
| 3555 | use parquet::encryption::encrypt::FileEncryptionProperties; |
| 3556 | use std::sync::Arc; |
| 3557 | |
| 3558 | let footer_key = b"0123456789012345".to_vec(); // 128bit/16 |
| 3559 | let column_names = vec!["double_field", "float_field"]; |
| 3560 | let column_keys = |
| 3561 | vec![b"1234567890123450".to_vec(), b"1234567890123451".to_vec()]; |
| 3562 | |
| 3563 | let file_encryption_properties = |
| 3564 | FileEncryptionProperties::builder(footer_key.clone()) |
| 3565 | .with_column_keys(column_names.clone(), column_keys.clone()) |
| 3566 | .unwrap() |
| 3567 | .build() |
| 3568 | .unwrap(); |
| 3569 | |
| 3570 | let decryption_properties = FileDecryptionProperties::builder(footer_key.clone()) |
| 3571 | .with_column_keys(column_names.clone(), column_keys.clone()) |
| 3572 | .unwrap() |
| 3573 | .build() |
| 3574 | .unwrap(); |
| 3575 | |
| 3576 | // Test round-trip |
| 3577 | let config_encrypt = |
| 3578 | ConfigFileEncryptionProperties::from(&file_encryption_properties); |
| 3579 | let encryption_properties_built = |
| 3580 | Arc::new(FileEncryptionProperties::try_from(config_encrypt.clone()).unwrap()); |
| 3581 | assert_eq!(file_encryption_properties, encryption_properties_built); |
| 3582 | |
| 3583 | let config_decrypt = |
| 3584 | ConfigFileDecryptionProperties::try_from(&decryption_properties).unwrap(); |
| 3585 | let decryption_properties_built = |
| 3586 | Arc::new(FileDecryptionProperties::try_from(config_decrypt.clone()).unwrap()); |
| 3587 | assert_eq!(decryption_properties, decryption_properties_built); |
| 3588 | |
| 3589 | /////////////////////////////////////////////////////////////////////////////////// |
| 3590 | // Test encryption config |
| 3591 | |
| 3592 | // Display original encryption config |
| 3593 | // println!("{:#?}", config_encrypt); |
| 3594 | |
| 3595 | let mut table_config = TableOptions::new(); |
| 3596 | table_config.set_config_format(ConfigFileType::PARQUET); |
| 3597 | table_config |
| 3598 | .parquet |
| 3599 | .set( |
| 3600 | "crypto.file_encryption.encrypt_footer", |
| 3601 | config_encrypt.encrypt_footer.to_string().as_str(), |
| 3602 | ) |
| 3603 | .unwrap(); |
| 3604 | table_config |
| 3605 | .parquet |
| 3606 | .set( |
| 3607 | "crypto.file_encryption.footer_key_as_hex", |
nothing calls this directly
no test coverage detected
searching dependent graphs…