@@ -459,6 +459,29 @@ public void testS3FileIOWithEmptyPropsKryoSerialization() throws IOException {
459
459
assertThat (roundTripSerializedFileIO .properties ()).isEqualTo (testS3FileIO .properties ());
460
460
}
461
461
462
+ @ Test
463
+ public void fileIOWithStorageCredentialsKryoSerialization () throws IOException {
464
+ S3FileIO fileIO = new S3FileIO ();
465
+ fileIO .setCredentials (
466
+ ImmutableList .of (StorageCredential .create ("prefix" , Map .of ("key1" , "val1" ))));
467
+ fileIO .initialize (Map .of ());
468
+
469
+ assertThat (TestHelpers .KryoHelpers .roundTripSerialize (fileIO ).credentials ())
470
+ .isEqualTo (fileIO .credentials ());
471
+ }
472
+
473
+ @ Test
474
+ public void fileIOWithStorageCredentialsJavaSerialization ()
475
+ throws IOException , ClassNotFoundException {
476
+ S3FileIO fileIO = new S3FileIO ();
477
+ fileIO .setCredentials (
478
+ ImmutableList .of (StorageCredential .create ("prefix" , Map .of ("key1" , "val1" ))));
479
+ fileIO .initialize (Map .of ());
480
+
481
+ assertThat (TestHelpers .roundTripSerialize (fileIO ).credentials ())
482
+ .isEqualTo (fileIO .credentials ());
483
+ }
484
+
462
485
@ Test
463
486
public void testS3FileIOJavaSerialization () throws IOException , ClassNotFoundException {
464
487
FileIO testS3FileIO = new S3FileIO ();
@@ -543,6 +566,55 @@ public void testInputFileWithManifest() throws IOException {
543
566
verify (s3mock , never ()).headObject (any (HeadObjectRequest .class ));
544
567
}
545
568
569
+ @ Test
570
+ public void resolvingFileIOLoadWithStorageCredentials ()
571
+ throws IOException , ClassNotFoundException {
572
+ StorageCredential credential = StorageCredential .create ("prefix" , Map .of ("key1" , "val1" ));
573
+ List <StorageCredential > storageCredentials = ImmutableList .of (credential );
574
+ ResolvingFileIO resolvingFileIO = new ResolvingFileIO ();
575
+ resolvingFileIO .setCredentials (storageCredentials );
576
+ resolvingFileIO .initialize (ImmutableMap .of ());
577
+
578
+ FileIO result =
579
+ DynMethods .builder ("io" )
580
+ .hiddenImpl (ResolvingFileIO .class , String .class )
581
+ .build (resolvingFileIO )
582
+ .invoke ("s3://foo/bar" );
583
+ assertThat (result )
584
+ .isInstanceOf (S3FileIO .class )
585
+ .asInstanceOf (InstanceOfAssertFactories .type (S3FileIO .class ))
586
+ .extracting (S3FileIO ::credentials )
587
+ .isEqualTo (storageCredentials );
588
+
589
+ // make sure credentials are still present after kryo serde
590
+ ResolvingFileIO io = TestHelpers .KryoHelpers .roundTripSerialize (resolvingFileIO );
591
+ assertThat (io .credentials ()).isEqualTo (storageCredentials );
592
+ result =
593
+ DynMethods .builder ("io" )
594
+ .hiddenImpl (ResolvingFileIO .class , String .class )
595
+ .build (io )
596
+ .invoke ("s3://foo/bar" );
597
+ assertThat (result )
598
+ .isInstanceOf (S3FileIO .class )
599
+ .asInstanceOf (InstanceOfAssertFactories .type (S3FileIO .class ))
600
+ .extracting (S3FileIO ::credentials )
601
+ .isEqualTo (storageCredentials );
602
+
603
+ // make sure credentials are still present after java serde
604
+ io = TestHelpers .roundTripSerialize (resolvingFileIO );
605
+ assertThat (io .credentials ()).isEqualTo (storageCredentials );
606
+ result =
607
+ DynMethods .builder ("io" )
608
+ .hiddenImpl (ResolvingFileIO .class , String .class )
609
+ .build (io )
610
+ .invoke ("s3://foo/bar" );
611
+ assertThat (result )
612
+ .isInstanceOf (S3FileIO .class )
613
+ .asInstanceOf (InstanceOfAssertFactories .type (S3FileIO .class ))
614
+ .extracting (S3FileIO ::credentials )
615
+ .isEqualTo (storageCredentials );
616
+ }
617
+
546
618
@ Test
547
619
public void noStorageCredentialConfigured () {
548
620
S3FileIO fileIO = new S3FileIO ();
0 commit comments