Skip to content

Commit aabf3d0

Browse files
authored
refactor(test): unify test resource (#381)
1 parent b8f5c49 commit aabf3d0

File tree

7 files changed

+51
-113
lines changed

7 files changed

+51
-113
lines changed

src/iceberg/test/CMakeLists.txt

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,7 @@ add_iceberg_test(table_test
8585
table_test.cc
8686
table_metadata_builder_test.cc
8787
table_requirement_test.cc
88-
table_update_test.cc
89-
test_common.cc)
88+
table_update_test.cc)
9089

9190
add_iceberg_test(expression_test
9291
SOURCES
@@ -98,7 +97,6 @@ add_iceberg_test(expression_test
9897

9998
add_iceberg_test(json_serde_test
10099
SOURCES
101-
test_common.cc
102100
json_internal_test.cc
103101
metadata_serde_test.cc
104102
schema_json_test.cc)
@@ -126,8 +124,7 @@ if(ICEBERG_BUILD_BUNDLE)
126124
avro_schema_test.cc
127125
avro_stream_test.cc
128126
manifest_list_versions_test.cc
129-
manifest_writer_versions_test.cc
130-
test_common.cc)
127+
manifest_writer_versions_test.cc)
131128

132129
add_iceberg_test(arrow_test
133130
USE_BUNDLE
@@ -138,18 +135,13 @@ if(ICEBERG_BUILD_BUNDLE)
138135
metadata_io_test.cc
139136
struct_like_test.cc)
140137

141-
add_iceberg_test(catalog_test
142-
USE_BUNDLE
143-
SOURCES
144-
test_common.cc
145-
in_memory_catalog_test.cc)
138+
add_iceberg_test(catalog_test USE_BUNDLE SOURCES in_memory_catalog_test.cc)
146139

147140
add_iceberg_test(eval_expr_test
148141
USE_BUNDLE
149142
SOURCES
150143
eval_expr_test.cc
151-
evaluator_test.cc
152-
test_common.cc)
144+
evaluator_test.cc)
153145

154146
add_iceberg_test(parquet_test
155147
USE_BUNDLE

src/iceberg/test/in_memory_catalog_test.cc

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,14 @@
3131
#include "iceberg/table_metadata.h"
3232
#include "iceberg/test/matchers.h"
3333
#include "iceberg/test/mock_catalog.h"
34-
#include "iceberg/test/test_common.h"
34+
#include "iceberg/test/test_resource.h"
3535

3636
namespace iceberg {
3737

3838
class InMemoryCatalogTest : public ::testing::Test {
3939
protected:
4040
void SetUp() override {
41-
file_io_ = std::make_shared<iceberg::arrow::ArrowFileSystemFileIO>(
42-
std::make_shared<::arrow::fs::LocalFileSystem>());
41+
file_io_ = arrow::ArrowFileSystemFileIO::MakeLocalFileIO();
4342
std::unordered_map<std::string, std::string> properties = {{"prop1", "val1"}};
4443
catalog_ = std::make_shared<InMemoryCatalog>("test_catalog", file_io_,
4544
"/tmp/warehouse/", properties);
@@ -103,8 +102,8 @@ TEST_F(InMemoryCatalogTest, TableExists) {
103102
TEST_F(InMemoryCatalogTest, RegisterTable) {
104103
TableIdentifier tableIdent{.ns = {}, .name = "t1"};
105104

106-
std::unique_ptr<TableMetadata> metadata;
107-
ASSERT_NO_FATAL_FAILURE(ReadTableMetadata("TableMetadataV2Valid.json", &metadata));
105+
ICEBERG_UNWRAP_OR_FAIL(auto metadata,
106+
ReadTableMetadataFromResource("TableMetadataV2Valid.json"));
108107

109108
auto table_location = GenerateTestTableLocation(tableIdent.name);
110109
auto metadata_location = std::format("{}v1.metadata.json", table_location);

src/iceberg/test/meson.build

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ iceberg_tests = {
5252
'table_requirement_test.cc',
5353
'table_test.cc',
5454
'table_update_test.cc',
55-
'test_common.cc',
5655
),
5756
},
5857
'expression_test': {
@@ -69,7 +68,6 @@ iceberg_tests = {
6968
'json_internal_test.cc',
7069
'metadata_serde_test.cc',
7170
'schema_json_test.cc',
72-
'test_common.cc',
7371
),
7472
},
7573
'util_test': {

src/iceberg/test/metadata_serde_test.cc

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
#include "iceberg/statistics_file.h"
3333
#include "iceberg/table_metadata.h"
3434
#include "iceberg/test/matchers.h"
35-
#include "iceberg/test/test_common.h"
35+
#include "iceberg/test/test_resource.h"
3636
#include "iceberg/transform.h"
3737
#include "iceberg/type.h"
3838

@@ -42,7 +42,7 @@ namespace {
4242

4343
void ReadTableMetadataExpectError(const std::string& file_name,
4444
const std::string& expected_error_substr) {
45-
auto result = ReadTableMetadata(file_name);
45+
auto result = ReadTableMetadataFromResource(file_name);
4646
ASSERT_FALSE(result.has_value()) << "Expected parsing to fail for " << file_name;
4747
EXPECT_THAT(result, HasErrorMessage(expected_error_substr));
4848
}
@@ -90,8 +90,8 @@ void AssertSnapshotById(const TableMetadata& metadata, int64_t snapshot_id,
9090
} // namespace
9191

9292
TEST(MetadataSerdeTest, DeserializeV1Valid) {
93-
std::unique_ptr<TableMetadata> metadata;
94-
ASSERT_NO_FATAL_FAILURE(ReadTableMetadata("TableMetadataV1Valid.json", &metadata));
93+
ICEBERG_UNWRAP_OR_FAIL(auto metadata,
94+
ReadTableMetadataFromResource("TableMetadataV1Valid.json"));
9595

9696
auto expected_schema = std::make_shared<Schema>(
9797
std::vector<SchemaField>{SchemaField::MakeRequired(1, "x", int64()),
@@ -132,8 +132,8 @@ TEST(MetadataSerdeTest, DeserializeV1Valid) {
132132
}
133133

134134
TEST(MetadataSerdeTest, DeserializeV2Valid) {
135-
std::unique_ptr<TableMetadata> metadata;
136-
ASSERT_NO_FATAL_FAILURE(ReadTableMetadata("TableMetadataV2Valid.json", &metadata));
135+
ICEBERG_UNWRAP_OR_FAIL(auto metadata,
136+
ReadTableMetadataFromResource("TableMetadataV2Valid.json"));
137137

138138
auto expected_schema_1 = std::make_shared<Schema>(
139139
std::vector<SchemaField>{SchemaField(/*field_id=*/1, "x", int64(),
@@ -224,9 +224,8 @@ TEST(MetadataSerdeTest, DeserializeV2Valid) {
224224
}
225225

226226
TEST(MetadataSerdeTest, DeserializeV2ValidMinimal) {
227-
std::unique_ptr<TableMetadata> metadata;
228-
ASSERT_NO_FATAL_FAILURE(
229-
ReadTableMetadata("TableMetadataV2ValidMinimal.json", &metadata));
227+
ICEBERG_UNWRAP_OR_FAIL(
228+
auto metadata, ReadTableMetadataFromResource("TableMetadataV2ValidMinimal.json"));
230229

231230
auto expected_schema = std::make_shared<Schema>(
232231
std::vector<SchemaField>{SchemaField::MakeRequired(1, "x", int64()),
@@ -281,9 +280,8 @@ TEST(MetadataSerdeTest, DeserializeV2ValidMinimal) {
281280
}
282281

283282
TEST(MetadataSerdeTest, DeserializeStatisticsFiles) {
284-
std::unique_ptr<TableMetadata> metadata;
285-
ASSERT_NO_FATAL_FAILURE(
286-
ReadTableMetadata("TableMetadataStatisticsFiles.json", &metadata));
283+
ICEBERG_UNWRAP_OR_FAIL(
284+
auto metadata, ReadTableMetadataFromResource("TableMetadataStatisticsFiles.json"));
287285

288286
auto expected_schema = std::make_shared<Schema>(
289287
std::vector<SchemaField>{SchemaField(/*field_id=*/1, "x", int64(),
@@ -353,9 +351,9 @@ TEST(MetadataSerdeTest, DeserializeStatisticsFiles) {
353351
}
354352

355353
TEST(MetadataSerdeTest, DeserializePartitionStatisticsFiles) {
356-
std::unique_ptr<TableMetadata> metadata;
357-
ASSERT_NO_FATAL_FAILURE(
358-
ReadTableMetadata("TableMetadataPartitionStatisticsFiles.json", &metadata));
354+
ICEBERG_UNWRAP_OR_FAIL(
355+
auto metadata,
356+
ReadTableMetadataFromResource("TableMetadataPartitionStatisticsFiles.json"));
359357

360358
TableMetadata expected{
361359
.format_version = 2,

src/iceberg/test/table_test.cc

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,14 @@
3232
#include "iceberg/schema.h"
3333
#include "iceberg/snapshot.h"
3434
#include "iceberg/table_metadata.h"
35-
#include "iceberg/test/test_common.h"
35+
#include "iceberg/test/matchers.h"
36+
#include "iceberg/test/test_resource.h"
3637

3738
namespace iceberg {
3839

3940
TEST(Table, TableV1) {
40-
std::unique_ptr<TableMetadata> metadata;
41-
ASSERT_NO_FATAL_FAILURE(ReadTableMetadata("TableMetadataV1Valid.json", &metadata));
41+
ICEBERG_UNWRAP_OR_FAIL(auto metadata,
42+
ReadTableMetadataFromResource("TableMetadataV1Valid.json"));
4243
TableIdentifier tableIdent{.ns = {}, .name = "test_table_v1"};
4344
Table table(tableIdent, std::move(metadata), "s3://bucket/test/location/meta/", nullptr,
4445
nullptr);
@@ -76,8 +77,8 @@ TEST(Table, TableV1) {
7677
}
7778

7879
TEST(Table, TableV2) {
79-
std::unique_ptr<TableMetadata> metadata;
80-
ASSERT_NO_FATAL_FAILURE(ReadTableMetadata("TableMetadataV2Valid.json", &metadata));
80+
ICEBERG_UNWRAP_OR_FAIL(auto metadata,
81+
ReadTableMetadataFromResource("TableMetadataV2Valid.json"));
8182
TableIdentifier tableIdent{.ns = {}, .name = "test_table_v2"};
8283

8384
Table table(tableIdent, std::move(metadata), "s3://bucket/test/location/meta/", nullptr,

src/iceberg/test/test_common.cc

Lines changed: 0 additions & 64 deletions
This file was deleted.

src/iceberg/test/test_common.h renamed to src/iceberg/test/test_resource.h

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,39 @@
1919

2020
#pragma once
2121

22+
#include <filesystem>
23+
#include <fstream>
2224
#include <memory>
25+
#include <sstream>
2326
#include <string>
2427

28+
#include <nlohmann/json.hpp>
29+
30+
#include "iceberg/json_internal.h"
2531
#include "iceberg/result.h"
26-
#include "iceberg/type_fwd.h"
32+
#include "iceberg/table_metadata.h"
33+
#include "iceberg/test/test_config.h"
2734

2835
namespace iceberg {
2936

3037
/// \brief Get the full path to a resource file in the test resources directory
31-
std::string GetResourcePath(const std::string& file_name);
32-
33-
/// \brief Read a JSON file from the test resources directory
34-
void ReadJsonFile(const std::string& file_name, std::string* content);
35-
36-
/// \brief Read table metadata from a JSON file in the test resources directory
37-
void ReadTableMetadata(const std::string& file_name,
38-
std::unique_ptr<TableMetadata>* metadata);
38+
static std::string GetResourcePath(const std::string& file_name) {
39+
return std::string(ICEBERG_TEST_RESOURCES) + "/" + file_name;
40+
}
3941

4042
/// \brief Read table metadata from a JSON file and return the Result directly
41-
Result<std::unique_ptr<TableMetadata>> ReadTableMetadata(const std::string& file_name);
43+
static Result<std::unique_ptr<TableMetadata>> ReadTableMetadataFromResource(
44+
const std::string& file_name) {
45+
std::filesystem::path path{GetResourcePath(file_name)};
46+
if (!std::filesystem::exists(path)) {
47+
return InvalidArgument("File does not exist: {}", path.string());
48+
}
49+
50+
std::ifstream file(path);
51+
std::stringstream buffer;
52+
buffer << file.rdbuf();
53+
54+
return TableMetadataFromJson(nlohmann::json::parse(buffer.str()));
55+
}
4256

4357
} // namespace iceberg

0 commit comments

Comments
 (0)