2828import org .apache .iceberg .DataFile ;
2929import org .apache .iceberg .DeleteFile ;
3030import org .apache .iceberg .FileFormat ;
31- import org .apache .iceberg .Parameter ;
32- import org .apache .iceberg .ParameterizedTestExtension ;
33- import org .apache .iceberg .Parameters ;
3431import org .apache .iceberg .PartitionSpec ;
3532import org .apache .iceberg .Schema ;
3633import org .apache .iceberg .TestBase ;
4643import org .apache .iceberg .io .CloseableIterable ;
4744import org .apache .iceberg .io .DataWriter ;
4845import org .apache .iceberg .io .InputFile ;
49- import org .apache .iceberg .io .OutputFile ;
5046import org .apache .iceberg .relocated .com .google .common .collect .ImmutableList ;
5147import org .junit .jupiter .api .AfterEach ;
5248import org .junit .jupiter .api .BeforeEach ;
53- import org .junit .jupiter .api .TestTemplate ;
54- import org .junit .jupiter .api .extension .ExtendWith ;
5549import org .junit .jupiter .api .io .TempDir ;
50+ import org .junit .jupiter .params .ParameterizedTest ;
51+ import org .junit .jupiter .params .provider .FieldSource ;
5652
57- @ ExtendWith (ParameterizedTestExtension .class )
5853public class TestGenericFormatModels {
59- @ Parameters (name = "fileFormat = {0}" )
60- protected static List <Object > parameters () {
61- return List .of (FileFormat .PARQUET );
62- }
63-
6454 private static final List <Record > TEST_RECORDS =
65- ImmutableList .of (
66- GenericRecord .create (TestBase .SCHEMA ).copy ("id" , 1 , "data" , "hello" ),
67- GenericRecord .create (TestBase .SCHEMA ).copy ("id" , 2 , "data" , "world" ));
55+ RandomGenericData .generate (TestBase .SCHEMA , 10 , 1L );
6856
69- @ Parameter (index = 0 )
70- private FileFormat fileFormat ;
57+ private static final FileFormat [] FILE_FORMATS = new FileFormat [] {FileFormat .PARQUET };
7158
7259 @ TempDir protected Path temp ;
7360
@@ -77,8 +64,9 @@ protected static List<Object> parameters() {
7764 @ BeforeEach
7865 public void before () {
7966 this .fileIO = new InMemoryFileIO ();
80- OutputFile outputFile = fileIO .newOutputFile ("test-file." + fileFormat .name ().toLowerCase ());
81- this .encryptedFile = EncryptedFiles .encryptedOutput (outputFile , EncryptionKeyMetadata .EMPTY );
67+ this .encryptedFile =
68+ EncryptedFiles .encryptedOutput (
69+ fileIO .newOutputFile ("test-file" ), EncryptionKeyMetadata .EMPTY );
8270 }
8371
8472 @ AfterEach
@@ -90,8 +78,9 @@ public void after() throws IOException {
9078 }
9179 }
9280
93- @ TestTemplate
94- public void testDataWriter () throws IOException {
81+ @ ParameterizedTest
82+ @ FieldSource ("FILE_FORMATS" )
83+ public void testDataWriter (FileFormat fileFormat ) throws IOException {
9584 FileWriterBuilder <DataWriter <Record >, Schema > writerBuilder =
9685 FormatModelRegistry .dataWriteBuilder (fileFormat , Record .class , encryptedFile );
9786
@@ -107,11 +96,11 @@ public void testDataWriter() throws IOException {
10796 dataFile = writer .toDataFile ();
10897
10998 assertThat (dataFile ).isNotNull ();
110- assertThat (dataFile .recordCount ()).isEqualTo (2 );
99+ assertThat (dataFile .recordCount ()).isEqualTo (TEST_RECORDS . size () );
111100 assertThat (dataFile .format ()).isEqualTo (fileFormat );
112101
113102 // Verify the file content by reading it back
114- InputFile inputFile = fileIO . newInputFile ( encryptedFile .encryptingOutputFile ().location () );
103+ InputFile inputFile = encryptedFile .encryptingOutputFile ().toInputFile ( );
115104 List <Record > readRecords ;
116105 try (CloseableIterable <Record > reader =
117106 FormatModelRegistry .readBuilder (fileFormat , Record .class , inputFile )
@@ -120,15 +109,12 @@ public void testDataWriter() throws IOException {
120109 readRecords = ImmutableList .copyOf (reader );
121110 }
122111
123- assertThat (readRecords ).hasSize (2 );
124- DataTestHelpers .assertEquals (
125- TestBase .SCHEMA .asStruct (), TEST_RECORDS .get (0 ), readRecords .get (0 ));
126- DataTestHelpers .assertEquals (
127- TestBase .SCHEMA .asStruct (), TEST_RECORDS .get (1 ), readRecords .get (1 ));
112+ DataTestHelpers .assertEquals (TestBase .SCHEMA .asStruct (), TEST_RECORDS , readRecords );
128113 }
129114
130- @ TestTemplate
131- public void testEqualityDeleteWriter () throws IOException {
115+ @ ParameterizedTest
116+ @ FieldSource ("FILE_FORMATS" )
117+ public void testEqualityDeleteWriter (FileFormat fileFormat ) throws IOException {
132118 FileWriterBuilder <EqualityDeleteWriter <Record >, Schema > writerBuilder =
133119 FormatModelRegistry .equalityDeleteWriteBuilder (fileFormat , Record .class , encryptedFile );
134120
@@ -148,12 +134,12 @@ public void testEqualityDeleteWriter() throws IOException {
148134 deleteFile = writer .toDeleteFile ();
149135
150136 assertThat (deleteFile ).isNotNull ();
151- assertThat (deleteFile .recordCount ()).isEqualTo (2 );
137+ assertThat (deleteFile .recordCount ()).isEqualTo (TEST_RECORDS . size () );
152138 assertThat (deleteFile .format ()).isEqualTo (fileFormat );
153139 assertThat (deleteFile .equalityFieldIds ()).containsExactly (3 );
154140
155141 // Verify the file content by reading it back
156- InputFile inputFile = fileIO . newInputFile ( encryptedFile .encryptingOutputFile ().location () );
142+ InputFile inputFile = encryptedFile .encryptingOutputFile ().toInputFile ( );
157143 List <Record > readRecords ;
158144 try (CloseableIterable <Record > reader =
159145 FormatModelRegistry .readBuilder (fileFormat , Record .class , inputFile )
@@ -162,25 +148,22 @@ public void testEqualityDeleteWriter() throws IOException {
162148 readRecords = ImmutableList .copyOf (reader );
163149 }
164150
165- assertThat (readRecords ).hasSize (2 );
166- DataTestHelpers .assertEquals (
167- TestBase .SCHEMA .asStruct (), TEST_RECORDS .get (0 ), readRecords .get (0 ));
168- DataTestHelpers .assertEquals (
169- TestBase .SCHEMA .asStruct (), TEST_RECORDS .get (1 ), readRecords .get (1 ));
151+ DataTestHelpers .assertEquals (TestBase .SCHEMA .asStruct (), TEST_RECORDS , readRecords );
170152 }
171153
172- @ TestTemplate
173- public void testPositionDeleteWriter () throws IOException {
154+ @ ParameterizedTest
155+ @ FieldSource ("FILE_FORMATS" )
156+ public void testPositionDeleteWriter (FileFormat fileFormat ) throws IOException {
174157 Schema positionDeleteSchema = new Schema (DELETE_FILE_PATH , DELETE_FILE_POS );
175158
176159 FileWriterBuilder <PositionDeleteWriter <Record >, ?> writerBuilder =
177160 FormatModelRegistry .positionDeleteWriteBuilder (fileFormat , encryptedFile );
178161
179162 PositionDelete <Record > delete1 = PositionDelete .create ();
180- delete1 .set ("data-file-1.parquet" , 0L , null );
163+ delete1 .set ("data-file-1.parquet" , 0L );
181164
182165 PositionDelete <Record > delete2 = PositionDelete .create ();
183- delete2 .set ("data-file-1.parquet" , 1L , null );
166+ delete2 .set ("data-file-1.parquet" , 1L );
184167
185168 List <PositionDelete <Record >> positionDeletes = ImmutableList .of (delete1 , delete2 );
186169
@@ -199,7 +182,7 @@ public void testPositionDeleteWriter() throws IOException {
199182 assertThat (deleteFile .format ()).isEqualTo (fileFormat );
200183
201184 // Verify the file content by reading it back
202- InputFile inputFile = fileIO . newInputFile ( encryptedFile .encryptingOutputFile ().location () );
185+ InputFile inputFile = encryptedFile .encryptingOutputFile ().toInputFile ( );
203186 List <Record > readRecords ;
204187 try (CloseableIterable <Record > reader =
205188 FormatModelRegistry .readBuilder (fileFormat , Record .class , inputFile )
@@ -208,10 +191,13 @@ public void testPositionDeleteWriter() throws IOException {
208191 readRecords = ImmutableList .copyOf (reader );
209192 }
210193
211- assertThat (readRecords ).hasSize (2 );
212- assertThat (readRecords .get (0 ).getField ("file_path" )).isEqualTo ("data-file-1.parquet" );
213- assertThat (readRecords .get (0 ).getField ("pos" )).isEqualTo (0L );
214- assertThat (readRecords .get (1 ).getField ("file_path" )).isEqualTo ("data-file-1.parquet" );
215- assertThat (readRecords .get (1 ).getField ("pos" )).isEqualTo (1L );
194+ List <Record > expected =
195+ ImmutableList .of (
196+ GenericRecord .create (positionDeleteSchema )
197+ .copy (DELETE_FILE_PATH .name (), "data-file-1.parquet" , DELETE_FILE_POS .name (), 0L ),
198+ GenericRecord .create (positionDeleteSchema )
199+ .copy (DELETE_FILE_PATH .name (), "data-file-1.parquet" , DELETE_FILE_POS .name (), 1L ));
200+
201+ DataTestHelpers .assertEquals (positionDeleteSchema .asStruct (), expected , readRecords );
216202 }
217203}
0 commit comments