@@ -252,7 +252,31 @@ TEST(EncryptionSequencer, InputValidation) {
252252 EXPECT_FALSE (result) << " Empty key_id test should have failed" ;
253253 EXPECT_EQ (sequencer.error_stage_ , " validation" ) << " Wrong error stage for empty key_id" ;
254254 }
255-
255+
256+ // Test 4: Missing encryption_metadata
257+ {
258+ DataBatchEncryptionSequencer sequencer (
259+ " test_column" , Type::BYTE_ARRAY , std::nullopt , CompressionCodec::UNCOMPRESSED , Format::PLAIN , {{" page_type" , " DICTIONARY_PAGE" }}, CompressionCodec::UNCOMPRESSED , " test_key" , " test_user" , " {}" ,
260+ {} // encryption_metadata, setting it to empty map.
261+ );
262+ bool result = sequencer.ConvertAndDecrypt (HELLO_WORLD_DATA );
263+ EXPECT_FALSE (result) << " Missing encryption_metadata test should have failed" ;
264+ EXPECT_EQ (sequencer.error_stage_ , " decrypt_version_check" ) << " Wrong error stage for missing encryption_metadata" ;
265+ EXPECT_TRUE (sequencer.error_message_ .find (" encryption_metadata must contain key" ) != std::string::npos) << " Wrong error message for missing encryption_metadata" ;
266+ }
267+
268+ // Test 5: Incorrect encryption_metadata version
269+ {
270+ DataBatchEncryptionSequencer sequencer (
271+ " test_column" , Type::BYTE_ARRAY , std::nullopt , CompressionCodec::UNCOMPRESSED , Format::PLAIN , {{" page_type" , " DICTIONARY_PAGE" }}, CompressionCodec::UNCOMPRESSED , " test_key" , " test_user" , " {}" ,
272+ {{" dbps_agent_version" , " v0.09" }} // encryption_metadata, setting it to incorrect version.
273+ );
274+ bool result = sequencer.ConvertAndDecrypt (HELLO_WORLD_DATA );
275+ EXPECT_FALSE (result) << " Incorrect encryption_metadata version test should have failed" ;
276+ EXPECT_EQ (sequencer.error_stage_ , " decrypt_version_check" ) << " Wrong error stage for incorrect encryption_metadata version" ;
277+ EXPECT_TRUE (sequencer.error_message_ .find (" must match" ) != std::string::npos) << " Wrong error message for incorrect encryption_metadata version" ;
278+ }
279+
256280}
257281
258282// Test round-trip encryption/decryption
@@ -267,8 +291,8 @@ TEST(EncryptionSequencer, RoundTripEncryption) {
267291 bool encrypt_result = sequencer.ConvertAndEncrypt (HELLO_WORLD_DATA );
268292 ASSERT_TRUE (encrypt_result) << " Round trip encryption failed: " << sequencer.error_stage_ << " - " << sequencer.error_message_ ;
269293
270- // Decrypt the encrypted result - need encryption_metadata with dbps_version
271- ASSERT_TRUE (sequencer.encryption_metadata_ .size () > 0 && sequencer.encryption_metadata_ .at (" dbps_version " ).length () > 0 );
294+ // Decrypt the encrypted result - need encryption_metadata with dbps_agent_version
295+ ASSERT_TRUE (sequencer.encryption_metadata_ .size () > 0 && sequencer.encryption_metadata_ .at (" dbps_agent_version " ).length () > 0 );
272296 bool decrypt_result = sequencer.ConvertAndDecrypt (sequencer.encrypted_result_ );
273297 ASSERT_TRUE (decrypt_result) << " Round trip decryption failed: " << sequencer.error_stage_ << " - " << sequencer.error_message_ ;
274298
@@ -286,8 +310,8 @@ TEST(EncryptionSequencer, RoundTripEncryption) {
286310 bool encrypt_result = sequencer.ConvertAndEncrypt (BINARY_DATA ); // Binary data: 0x00, 0x01, 0x02, 0x03, 0x04, 0x05
287311 ASSERT_TRUE (encrypt_result) << " Binary round trip encryption failed: " << sequencer.error_stage_ << " - " << sequencer.error_message_ ;
288312
289- // Decrypt the encrypted result - need encryption_metadata with dbps_version
290- ASSERT_TRUE (sequencer.encryption_metadata_ .size () > 0 && sequencer.encryption_metadata_ .at (" dbps_version " ).length () > 0 );
313+ // Decrypt the encrypted result - need encryption_metadata with dbps_agent_version
314+ ASSERT_TRUE (sequencer.encryption_metadata_ .size () > 0 && sequencer.encryption_metadata_ .at (" dbps_agent_version " ).length () > 0 );
291315 bool decrypt_result = sequencer.ConvertAndDecrypt (sequencer.encrypted_result_ );
292316 ASSERT_TRUE (decrypt_result) << " Binary round trip decryption failed: " << sequencer.error_stage_ << " - " << sequencer.error_message_ ;
293317
@@ -307,8 +331,8 @@ TEST(EncryptionSequencer, RoundTripEncryption) {
307331 bool encrypt_result = sequencer.ConvertAndEncrypt (SINGLE_CHAR_DATA );
308332 ASSERT_TRUE (encrypt_result) << " Single char round trip encryption failed: " << sequencer.error_stage_ << " - " << sequencer.error_message_ ;
309333
310- // Decrypt the encrypted result - need encryption_metadata with dbps_version
311- ASSERT_TRUE (sequencer.encryption_metadata_ .size () > 0 && sequencer.encryption_metadata_ .at (" dbps_version " ).length () > 0 );
334+ // Decrypt the encrypted result - need encryption_metadata with dbps_agent_version
335+ ASSERT_TRUE (sequencer.encryption_metadata_ .size () > 0 && sequencer.encryption_metadata_ .at (" dbps_agent_version " ).length () > 0 );
312336 bool decrypt_result = sequencer.ConvertAndDecrypt (sequencer.encrypted_result_ );
313337 ASSERT_TRUE (decrypt_result) << " Single char round trip decryption failed: " << sequencer.error_stage_ << " - " << sequencer.error_message_ ;
314338
@@ -335,9 +359,9 @@ TEST(EncryptionSequencer, RoundTripEncryption) {
335359 // Key-aware XOR encryption should produce different results for different keys
336360 EXPECT_NE (sequencer1.encrypted_result_ , sequencer2.encrypted_result_ );
337361
338- // But both should decrypt back to the same original - need encryption_metadata with dbps_version
339- ASSERT_TRUE (sequencer1.encryption_metadata_ .size () > 0 && sequencer1.encryption_metadata_ .at (" dbps_version " ).length () > 0 );
340- ASSERT_TRUE (sequencer2.encryption_metadata_ .size () > 0 && sequencer2.encryption_metadata_ .at (" dbps_version " ).length () > 0 );
362+ // But both should decrypt back to the same original - need encryption_metadata with dbps_agent_version
363+ ASSERT_TRUE (sequencer1.encryption_metadata_ .size () > 0 && sequencer1.encryption_metadata_ .at (" dbps_agent_version " ).length () > 0 );
364+ ASSERT_TRUE (sequencer2.encryption_metadata_ .size () > 0 && sequencer2.encryption_metadata_ .at (" dbps_agent_version " ).length () > 0 );
341365 bool decrypt1 = sequencer1.ConvertAndDecrypt (sequencer1.encrypted_result_ );
342366 bool decrypt2 = sequencer2.ConvertAndDecrypt (sequencer2.encrypted_result_ );
343367
@@ -376,8 +400,8 @@ TEST(EncryptionSequencer, ResultStorage) {
376400 bool encrypt_result = sequencer.ConvertAndEncrypt (HELLO_WORLD_DATA );
377401 ASSERT_TRUE (encrypt_result) << " Result storage decryption test failed during encryption" ;
378402
379- // Then decrypt it - need encryption_metadata with dbps_version
380- ASSERT_TRUE (sequencer.encryption_metadata_ .size () > 0 && sequencer.encryption_metadata_ .at (" dbps_version " ).length () > 0 );
403+ // Then decrypt it - need encryption_metadata with dbps_agent_version
404+ ASSERT_TRUE (sequencer.encryption_metadata_ .size () > 0 && sequencer.encryption_metadata_ .at (" dbps_agent_version " ).length () > 0 );
381405 bool decrypt_result = sequencer.ConvertAndDecrypt (sequencer.encrypted_result_ );
382406 ASSERT_TRUE (decrypt_result) << " Result storage decryption test failed: " << sequencer.error_stage_ << " - " << sequencer.error_message_ ;
383407
0 commit comments