This is an automated email from the ASF dual-hosted git repository.
gangwu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg-cpp.git
The following commit(s) were added to refs/heads/main by this push:
new aabf3d07 refactor(test): unify test resource (#381)
aabf3d07 is described below
commit aabf3d073fdbda83bda97106b00ebe1e1bda7e5c
Author: Gang Wu <[email protected]>
AuthorDate: Tue Dec 2 12:04:14 2025 +0800
refactor(test): unify test resource (#381)
---
src/iceberg/test/CMakeLists.txt | 16 ++----
src/iceberg/test/in_memory_catalog_test.cc | 9 ++-
src/iceberg/test/meson.build | 2 -
src/iceberg/test/metadata_serde_test.cc | 28 +++++-----
src/iceberg/test/table_test.cc | 11 ++--
src/iceberg/test/test_common.cc | 64 ----------------------
.../test/{test_common.h => test_resource.h} | 34 ++++++++----
7 files changed, 51 insertions(+), 113 deletions(-)
diff --git a/src/iceberg/test/CMakeLists.txt b/src/iceberg/test/CMakeLists.txt
index 00c27147..54e69ac6 100644
--- a/src/iceberg/test/CMakeLists.txt
+++ b/src/iceberg/test/CMakeLists.txt
@@ -85,8 +85,7 @@ add_iceberg_test(table_test
table_test.cc
table_metadata_builder_test.cc
table_requirement_test.cc
- table_update_test.cc
- test_common.cc)
+ table_update_test.cc)
add_iceberg_test(expression_test
SOURCES
@@ -98,7 +97,6 @@ add_iceberg_test(expression_test
add_iceberg_test(json_serde_test
SOURCES
- test_common.cc
json_internal_test.cc
metadata_serde_test.cc
schema_json_test.cc)
@@ -126,8 +124,7 @@ if(ICEBERG_BUILD_BUNDLE)
avro_schema_test.cc
avro_stream_test.cc
manifest_list_versions_test.cc
- manifest_writer_versions_test.cc
- test_common.cc)
+ manifest_writer_versions_test.cc)
add_iceberg_test(arrow_test
USE_BUNDLE
@@ -138,18 +135,13 @@ if(ICEBERG_BUILD_BUNDLE)
metadata_io_test.cc
struct_like_test.cc)
- add_iceberg_test(catalog_test
- USE_BUNDLE
- SOURCES
- test_common.cc
- in_memory_catalog_test.cc)
+ add_iceberg_test(catalog_test USE_BUNDLE SOURCES in_memory_catalog_test.cc)
add_iceberg_test(eval_expr_test
USE_BUNDLE
SOURCES
eval_expr_test.cc
- evaluator_test.cc
- test_common.cc)
+ evaluator_test.cc)
add_iceberg_test(parquet_test
USE_BUNDLE
diff --git a/src/iceberg/test/in_memory_catalog_test.cc
b/src/iceberg/test/in_memory_catalog_test.cc
index adcf5fb4..f7e2f50a 100644
--- a/src/iceberg/test/in_memory_catalog_test.cc
+++ b/src/iceberg/test/in_memory_catalog_test.cc
@@ -31,15 +31,14 @@
#include "iceberg/table_metadata.h"
#include "iceberg/test/matchers.h"
#include "iceberg/test/mock_catalog.h"
-#include "iceberg/test/test_common.h"
+#include "iceberg/test/test_resource.h"
namespace iceberg {
class InMemoryCatalogTest : public ::testing::Test {
protected:
void SetUp() override {
- file_io_ = std::make_shared<iceberg::arrow::ArrowFileSystemFileIO>(
- std::make_shared<::arrow::fs::LocalFileSystem>());
+ file_io_ = arrow::ArrowFileSystemFileIO::MakeLocalFileIO();
std::unordered_map<std::string, std::string> properties = {{"prop1",
"val1"}};
catalog_ = std::make_shared<InMemoryCatalog>("test_catalog", file_io_,
"/tmp/warehouse/",
properties);
@@ -103,8 +102,8 @@ TEST_F(InMemoryCatalogTest, TableExists) {
TEST_F(InMemoryCatalogTest, RegisterTable) {
TableIdentifier tableIdent{.ns = {}, .name = "t1"};
- std::unique_ptr<TableMetadata> metadata;
- ASSERT_NO_FATAL_FAILURE(ReadTableMetadata("TableMetadataV2Valid.json",
&metadata));
+ ICEBERG_UNWRAP_OR_FAIL(auto metadata,
+
ReadTableMetadataFromResource("TableMetadataV2Valid.json"));
auto table_location = GenerateTestTableLocation(tableIdent.name);
auto metadata_location = std::format("{}v1.metadata.json", table_location);
diff --git a/src/iceberg/test/meson.build b/src/iceberg/test/meson.build
index c3a401b5..a6a23238 100644
--- a/src/iceberg/test/meson.build
+++ b/src/iceberg/test/meson.build
@@ -52,7 +52,6 @@ iceberg_tests = {
'table_requirement_test.cc',
'table_test.cc',
'table_update_test.cc',
- 'test_common.cc',
),
},
'expression_test': {
@@ -69,7 +68,6 @@ iceberg_tests = {
'json_internal_test.cc',
'metadata_serde_test.cc',
'schema_json_test.cc',
- 'test_common.cc',
),
},
'util_test': {
diff --git a/src/iceberg/test/metadata_serde_test.cc
b/src/iceberg/test/metadata_serde_test.cc
index a5ccce29..51126b27 100644
--- a/src/iceberg/test/metadata_serde_test.cc
+++ b/src/iceberg/test/metadata_serde_test.cc
@@ -32,7 +32,7 @@
#include "iceberg/statistics_file.h"
#include "iceberg/table_metadata.h"
#include "iceberg/test/matchers.h"
-#include "iceberg/test/test_common.h"
+#include "iceberg/test/test_resource.h"
#include "iceberg/transform.h"
#include "iceberg/type.h"
@@ -42,7 +42,7 @@ namespace {
void ReadTableMetadataExpectError(const std::string& file_name,
const std::string& expected_error_substr) {
- auto result = ReadTableMetadata(file_name);
+ auto result = ReadTableMetadataFromResource(file_name);
ASSERT_FALSE(result.has_value()) << "Expected parsing to fail for " <<
file_name;
EXPECT_THAT(result, HasErrorMessage(expected_error_substr));
}
@@ -90,8 +90,8 @@ void AssertSnapshotById(const TableMetadata& metadata,
int64_t snapshot_id,
} // namespace
TEST(MetadataSerdeTest, DeserializeV1Valid) {
- std::unique_ptr<TableMetadata> metadata;
- ASSERT_NO_FATAL_FAILURE(ReadTableMetadata("TableMetadataV1Valid.json",
&metadata));
+ ICEBERG_UNWRAP_OR_FAIL(auto metadata,
+
ReadTableMetadataFromResource("TableMetadataV1Valid.json"));
auto expected_schema = std::make_shared<Schema>(
std::vector<SchemaField>{SchemaField::MakeRequired(1, "x", int64()),
@@ -132,8 +132,8 @@ TEST(MetadataSerdeTest, DeserializeV1Valid) {
}
TEST(MetadataSerdeTest, DeserializeV2Valid) {
- std::unique_ptr<TableMetadata> metadata;
- ASSERT_NO_FATAL_FAILURE(ReadTableMetadata("TableMetadataV2Valid.json",
&metadata));
+ ICEBERG_UNWRAP_OR_FAIL(auto metadata,
+
ReadTableMetadataFromResource("TableMetadataV2Valid.json"));
auto expected_schema_1 = std::make_shared<Schema>(
std::vector<SchemaField>{SchemaField(/*field_id=*/1, "x", int64(),
@@ -224,9 +224,8 @@ TEST(MetadataSerdeTest, DeserializeV2Valid) {
}
TEST(MetadataSerdeTest, DeserializeV2ValidMinimal) {
- std::unique_ptr<TableMetadata> metadata;
- ASSERT_NO_FATAL_FAILURE(
- ReadTableMetadata("TableMetadataV2ValidMinimal.json", &metadata));
+ ICEBERG_UNWRAP_OR_FAIL(
+ auto metadata,
ReadTableMetadataFromResource("TableMetadataV2ValidMinimal.json"));
auto expected_schema = std::make_shared<Schema>(
std::vector<SchemaField>{SchemaField::MakeRequired(1, "x", int64()),
@@ -281,9 +280,8 @@ TEST(MetadataSerdeTest, DeserializeV2ValidMinimal) {
}
TEST(MetadataSerdeTest, DeserializeStatisticsFiles) {
- std::unique_ptr<TableMetadata> metadata;
- ASSERT_NO_FATAL_FAILURE(
- ReadTableMetadata("TableMetadataStatisticsFiles.json", &metadata));
+ ICEBERG_UNWRAP_OR_FAIL(
+ auto metadata,
ReadTableMetadataFromResource("TableMetadataStatisticsFiles.json"));
auto expected_schema = std::make_shared<Schema>(
std::vector<SchemaField>{SchemaField(/*field_id=*/1, "x", int64(),
@@ -353,9 +351,9 @@ TEST(MetadataSerdeTest, DeserializeStatisticsFiles) {
}
TEST(MetadataSerdeTest, DeserializePartitionStatisticsFiles) {
- std::unique_ptr<TableMetadata> metadata;
- ASSERT_NO_FATAL_FAILURE(
- ReadTableMetadata("TableMetadataPartitionStatisticsFiles.json",
&metadata));
+ ICEBERG_UNWRAP_OR_FAIL(
+ auto metadata,
+
ReadTableMetadataFromResource("TableMetadataPartitionStatisticsFiles.json"));
TableMetadata expected{
.format_version = 2,
diff --git a/src/iceberg/test/table_test.cc b/src/iceberg/test/table_test.cc
index 362add9b..59b89f99 100644
--- a/src/iceberg/test/table_test.cc
+++ b/src/iceberg/test/table_test.cc
@@ -32,13 +32,14 @@
#include "iceberg/schema.h"
#include "iceberg/snapshot.h"
#include "iceberg/table_metadata.h"
-#include "iceberg/test/test_common.h"
+#include "iceberg/test/matchers.h"
+#include "iceberg/test/test_resource.h"
namespace iceberg {
TEST(Table, TableV1) {
- std::unique_ptr<TableMetadata> metadata;
- ASSERT_NO_FATAL_FAILURE(ReadTableMetadata("TableMetadataV1Valid.json",
&metadata));
+ ICEBERG_UNWRAP_OR_FAIL(auto metadata,
+
ReadTableMetadataFromResource("TableMetadataV1Valid.json"));
TableIdentifier tableIdent{.ns = {}, .name = "test_table_v1"};
Table table(tableIdent, std::move(metadata),
"s3://bucket/test/location/meta/", nullptr,
nullptr);
@@ -76,8 +77,8 @@ TEST(Table, TableV1) {
}
TEST(Table, TableV2) {
- std::unique_ptr<TableMetadata> metadata;
- ASSERT_NO_FATAL_FAILURE(ReadTableMetadata("TableMetadataV2Valid.json",
&metadata));
+ ICEBERG_UNWRAP_OR_FAIL(auto metadata,
+
ReadTableMetadataFromResource("TableMetadataV2Valid.json"));
TableIdentifier tableIdent{.ns = {}, .name = "test_table_v2"};
Table table(tableIdent, std::move(metadata),
"s3://bucket/test/location/meta/", nullptr,
diff --git a/src/iceberg/test/test_common.cc b/src/iceberg/test/test_common.cc
deleted file mode 100644
index eb0bbe93..00000000
--- a/src/iceberg/test/test_common.cc
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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 "iceberg/test/test_common.h"
-
-#include <filesystem>
-#include <fstream>
-#include <sstream>
-
-#include <gtest/gtest.h>
-#include <nlohmann/json.hpp>
-
-#include "iceberg/json_internal.h"
-#include "iceberg/test/test_config.h"
-
-namespace iceberg {
-
-std::string GetResourcePath(const std::string& file_name) {
- return std::string(ICEBERG_TEST_RESOURCES) + "/" + file_name;
-}
-
-void ReadJsonFile(const std::string& file_name, std::string* content) {
- std::filesystem::path path{GetResourcePath(file_name)};
- ASSERT_TRUE(std::filesystem::exists(path)) << "File does not exist: " <<
path.string();
-
- std::ifstream file(path);
- std::stringstream buffer;
- buffer << file.rdbuf();
- *content = buffer.str();
-}
-
-void ReadTableMetadata(const std::string& file_name,
- std::unique_ptr<TableMetadata>* metadata) {
- auto result = ReadTableMetadata(file_name);
- ASSERT_TRUE(result.has_value()) << "Failed to parse table metadata from " <<
file_name
- << ": " << result.error().message;
- *metadata = std::move(result.value());
-}
-
-Result<std::unique_ptr<TableMetadata>> ReadTableMetadata(const std::string&
file_name) {
- std::string json_content;
- ReadJsonFile(file_name, &json_content);
-
- nlohmann::json json = nlohmann::json::parse(json_content);
- return TableMetadataFromJson(json);
-}
-
-} // namespace iceberg
diff --git a/src/iceberg/test/test_common.h b/src/iceberg/test/test_resource.h
similarity index 58%
rename from src/iceberg/test/test_common.h
rename to src/iceberg/test/test_resource.h
index e41a3f3e..2b20a0e7 100644
--- a/src/iceberg/test/test_common.h
+++ b/src/iceberg/test/test_resource.h
@@ -19,25 +19,39 @@
#pragma once
+#include <filesystem>
+#include <fstream>
#include <memory>
+#include <sstream>
#include <string>
+#include <nlohmann/json.hpp>
+
+#include "iceberg/json_internal.h"
#include "iceberg/result.h"
-#include "iceberg/type_fwd.h"
+#include "iceberg/table_metadata.h"
+#include "iceberg/test/test_config.h"
namespace iceberg {
/// \brief Get the full path to a resource file in the test resources directory
-std::string GetResourcePath(const std::string& file_name);
-
-/// \brief Read a JSON file from the test resources directory
-void ReadJsonFile(const std::string& file_name, std::string* content);
-
-/// \brief Read table metadata from a JSON file in the test resources directory
-void ReadTableMetadata(const std::string& file_name,
- std::unique_ptr<TableMetadata>* metadata);
+static std::string GetResourcePath(const std::string& file_name) {
+ return std::string(ICEBERG_TEST_RESOURCES) + "/" + file_name;
+}
/// \brief Read table metadata from a JSON file and return the Result directly
-Result<std::unique_ptr<TableMetadata>> ReadTableMetadata(const std::string&
file_name);
+static Result<std::unique_ptr<TableMetadata>> ReadTableMetadataFromResource(
+ const std::string& file_name) {
+ std::filesystem::path path{GetResourcePath(file_name)};
+ if (!std::filesystem::exists(path)) {
+ return InvalidArgument("File does not exist: {}", path.string());
+ }
+
+ std::ifstream file(path);
+ std::stringstream buffer;
+ buffer << file.rdbuf();
+
+ return TableMetadataFromJson(nlohmann::json::parse(buffer.str()));
+}
} // namespace iceberg