@@ -51,4 +51,81 @@ TEST(ToAvroCompressionKindTest, HandlesInvalidCompression) {
5151TEST (ToAvroCompressionKindTest, HandlesEmptyString) {
5252 ASSERT_NOK (AvroWriterBuilder::ToAvroCompressionKind (" " ));
5353}
54+
55+ TEST (ToAvroCompressionKindTest, CheckAvroCodec) {
56+ arrow::FieldVector fields = {arrow::field (" f0" , arrow::int32 ())};
57+ auto schema = std::make_shared<arrow::Schema>(fields);
58+ AvroWriterBuilder builder (schema, -1 ,
59+ {{Options::FILE_FORMAT , " avro" }, {" avro.codec" , " snappy" }});
60+ ASSERT_OK_AND_ASSIGN (auto file_writer, builder.Build (nullptr , " zstd" ));
61+ auto * avro_file_writer = dynamic_cast <AvroFormatWriter*>(file_writer.get ());
62+ ASSERT_EQ (avro_file_writer->writer_ ->codec_ , ::avro::Codec::SNAPPY_CODEC );
63+ ASSERT_EQ (avro_file_writer->writer_ ->compressionLevel_ , std::nullopt );
64+
65+ AvroWriterBuilder builder2 (schema, -1 ,
66+ {{Options::FILE_FORMAT , " avro" }, {" avro.codec" , " deflate" }});
67+ ASSERT_OK_AND_ASSIGN (auto file_writer2, builder2.Build (nullptr , " zstd" ));
68+ auto * avro_file_writer2 = dynamic_cast <AvroFormatWriter*>(file_writer2.get ());
69+ ASSERT_EQ (avro_file_writer2->writer_ ->codec_ , ::avro::Codec::DEFLATE_CODEC );
70+ ASSERT_EQ (avro_file_writer2->writer_ ->compressionLevel_ , std::nullopt );
71+
72+ AvroWriterBuilder builder3 (schema, -1 ,
73+ {{Options::FILE_FORMAT , " avro" }, {" avro.codec" , " zstd" }});
74+ ASSERT_OK_AND_ASSIGN (auto file_writer3, builder3.Build (nullptr , " zstd" ));
75+ auto * avro_file_writer3 = dynamic_cast <AvroFormatWriter*>(file_writer3.get ());
76+ ASSERT_EQ (avro_file_writer3->writer_ ->codec_ , ::avro::Codec::ZSTD_CODEC );
77+ ASSERT_EQ (avro_file_writer3->writer_ ->compressionLevel_ , 1 );
78+
79+ AvroWriterBuilder builder4 (schema, -1 ,
80+ {{Options::FILE_FORMAT , " avro" },
81+ {" avro.codec" , " zstd" },
82+ {Options::FILE_COMPRESSION_ZSTD_LEVEL , " 3" }});
83+ ASSERT_OK_AND_ASSIGN (auto file_writer4, builder4.Build (nullptr , " zstd" ));
84+ auto * avro_file_writer4 = dynamic_cast <AvroFormatWriter*>(file_writer4.get ());
85+ ASSERT_EQ (avro_file_writer4->writer_ ->codec_ , ::avro::Codec::ZSTD_CODEC );
86+ ASSERT_EQ (avro_file_writer4->writer_ ->compressionLevel_ , 3 );
87+
88+ AvroWriterBuilder builder5 (schema, -1 ,
89+ {{Options::FILE_FORMAT , " avro" },
90+ {" avro.codec" , " null" },
91+ {Options::FILE_COMPRESSION_ZSTD_LEVEL , " 3" }});
92+ ASSERT_OK_AND_ASSIGN (auto file_writer5, builder5.Build (nullptr , " zstd" ));
93+ auto * avro_file_writer5 = dynamic_cast <AvroFormatWriter*>(file_writer5.get ());
94+ ASSERT_EQ (avro_file_writer5->writer_ ->codec_ , ::avro::Codec::NULL_CODEC );
95+ ASSERT_EQ (avro_file_writer5->writer_ ->compressionLevel_ , std::nullopt );
96+
97+ AvroWriterBuilder builder6 (schema, -1 ,
98+ {{Options::FILE_FORMAT , " avro" },
99+ {" avro.codec" , " test" },
100+ {Options::FILE_COMPRESSION_ZSTD_LEVEL , " 3" }});
101+ ASSERT_NOK (builder6.Build (nullptr , " zstd" ));
102+ }
103+
104+ TEST (ToAvroCompressionKindTest, CheckAvroCompressionLevel) {
105+ AvroWriterBuilder builder (nullptr , -1 , {{Options::FILE_FORMAT , " avro" }});
106+ ASSERT_OK_AND_ASSIGN (std::optional<int32_t > zstd_level,
107+ builder.GetAvroCompressionLevel (::avro::Codec::ZSTD_CODEC ));
108+ ASSERT_TRUE (zstd_level.has_value ());
109+ ASSERT_EQ (zstd_level.value (), 1 );
110+
111+ ASSERT_OK_AND_ASSIGN (std::optional<int32_t > compression_level1,
112+ builder.GetAvroCompressionLevel (::avro::Codec::SNAPPY_CODEC ));
113+ ASSERT_FALSE (compression_level1.has_value ());
114+
115+ ASSERT_OK_AND_ASSIGN (std::optional<int32_t > compression_level2,
116+ builder.GetAvroCompressionLevel (::avro::Codec::DEFLATE_CODEC ));
117+ ASSERT_FALSE (compression_level2.has_value ());
118+
119+ ASSERT_OK_AND_ASSIGN (std::optional<int32_t > compression_level3,
120+ builder.GetAvroCompressionLevel (::avro::Codec::NULL_CODEC ));
121+ ASSERT_FALSE (compression_level3.has_value ());
122+
123+ AvroWriterBuilder builder2 (
124+ nullptr , -1 , {{Options::FILE_FORMAT , " avro" }, {Options::FILE_COMPRESSION_ZSTD_LEVEL , " 3" }});
125+ ASSERT_OK_AND_ASSIGN (std::optional<int32_t > zstd_level2,
126+ builder2.GetAvroCompressionLevel (::avro::Codec::ZSTD_CODEC ));
127+ ASSERT_TRUE (zstd_level2.has_value ());
128+ ASSERT_EQ (zstd_level2.value (), 3 );
129+ }
130+
54131} // namespace paimon::avro::test
0 commit comments