diff options
Diffstat (limited to 'src/arrow/cpp/src/parquet/encryption/key_metadata_test.cc')
-rw-r--r-- | src/arrow/cpp/src/parquet/encryption/key_metadata_test.cc | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/arrow/cpp/src/parquet/encryption/key_metadata_test.cc b/src/arrow/cpp/src/parquet/encryption/key_metadata_test.cc new file mode 100644 index 000000000..3f891ef26 --- /dev/null +++ b/src/arrow/cpp/src/parquet/encryption/key_metadata_test.cc @@ -0,0 +1,77 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +#include <string> + +#include <gtest/gtest.h> + +#include "parquet/encryption/key_material.h" +#include "parquet/encryption/key_metadata.h" + +namespace parquet { +namespace encryption { +namespace test { + +TEST(KeyMetadataTest, InternalMaterialStorage) { + bool is_footer_key = true; + std::string kms_instance_id = "DEFAULT"; + std::string kms_instance_url = "DEFAULT"; + std::string master_key_id = "kf"; + bool double_wrapped = true; + std::string kek_id = "FANqyCuxfU1c526Uzb+MTA=="; + std::string encoded_wrapped_kek = + "{\"masterKeyVersion\":\"NO_VERSION\",\"encryptedKey\":\"LAAAAGaoSfMV1YH/" + "oxwG2ES8Phva8wimEZcT7zi5bpuK5Jdvw9/zJuqDeIPGGFXd\"}"; + std::string encoded_wrapped_dek = + "LAAAAA3RcNYT1Rxb/gqhA1KvBgHcjvEppST9+cV3bU5nLmtaZHJhsZakR20qRErX"; + bool internal_storage = true; + std::string json = KeyMaterial::SerializeToJson( + is_footer_key, kms_instance_id, kms_instance_url, master_key_id, double_wrapped, + kek_id, encoded_wrapped_kek, encoded_wrapped_dek, internal_storage); + + KeyMetadata key_metadata = KeyMetadata::Parse(json); + + ASSERT_EQ(key_metadata.key_material_stored_internally(), true); + + const KeyMaterial& key_material = key_metadata.key_material(); + ASSERT_EQ(key_material.is_footer_key(), is_footer_key); + ASSERT_EQ(key_material.kms_instance_id(), kms_instance_id); + ASSERT_EQ(key_material.kms_instance_url(), kms_instance_url); + ASSERT_EQ(key_material.master_key_id(), master_key_id); + ASSERT_EQ(key_material.is_double_wrapped(), double_wrapped); + ASSERT_EQ(key_material.kek_id(), kek_id); + ASSERT_EQ(key_material.wrapped_kek(), encoded_wrapped_kek); + ASSERT_EQ(key_material.wrapped_dek(), encoded_wrapped_dek); +} + +TEST(KeyMetadataTest, ExternalMaterialStorage) { + const std::string key_reference = "X44KIHSxDSFAS5q2223"; + + // generate key_metadata string in parquet file + std::string key_metadata_str = + KeyMetadata::CreateSerializedForExternalMaterial(key_reference); + + // parse key_metadata string back + KeyMetadata key_metadata = KeyMetadata::Parse(key_metadata_str); + + ASSERT_EQ(key_metadata.key_material_stored_internally(), false); + ASSERT_EQ(key_metadata.key_reference(), key_reference); +} + +} // namespace test +} // namespace encryption +} // namespace parquet |