diff --git a/integration-tests/src/main/java/org/apache/polaris/service/it/test/PolarisRestCatalogIntegrationBase.java b/integration-tests/src/main/java/org/apache/polaris/service/it/test/PolarisRestCatalogIntegrationBase.java index 2bf55cd7ed..c8400e5baf 100644 --- a/integration-tests/src/main/java/org/apache/polaris/service/it/test/PolarisRestCatalogIntegrationBase.java +++ b/integration-tests/src/main/java/org/apache/polaris/service/it/test/PolarisRestCatalogIntegrationBase.java @@ -64,6 +64,7 @@ import org.apache.iceberg.exceptions.ForbiddenException; import org.apache.iceberg.exceptions.RESTException; import org.apache.iceberg.expressions.Expressions; +import org.apache.iceberg.io.FileIO; import org.apache.iceberg.io.ResolvingFileIO; import org.apache.iceberg.rest.RESTCatalog; import org.apache.iceberg.rest.RESTUtil; @@ -168,7 +169,7 @@ public abstract class PolarisRestCatalogIntegrationBase extends CatalogTests getConfigOverrides() { + return ImmutableMap.builder() + .put("polaris.storage.aws.access-key", MINIO_ACCESS_KEY) + .put("polaris.storage.aws.secret-key", MINIO_SECRET_KEY) + .put("polaris.features.\"SKIP_CREDENTIAL_SUBSCOPING_INDIRECTION\"", "false") + .build(); + } + } + + private static URI storageBase; + private static String endpoint; + + @BeforeAll + static void setup( + @Minio(accessKey = MINIO_ACCESS_KEY, secretKey = MINIO_SECRET_KEY) MinioAccess minioAccess) { + storageBase = minioAccess.s3BucketUri(BUCKET_URI_PREFIX); + endpoint = minioAccess.s3endpoint(); + } + + @Override + protected boolean shouldSkip() { + return false; + } + + @Override + protected void initializeClientFileIO(FileIO fileIO) { + fileIO.initialize( + ImmutableMap.builder() + .put(StorageAccessProperty.AWS_ENDPOINT.getPropertyName(), endpoint) + .put(StorageAccessProperty.AWS_PATH_STYLE_ACCESS.getPropertyName(), "true") + .put(StorageAccessProperty.AWS_KEY_ID.getPropertyName(), MINIO_ACCESS_KEY) + .put(StorageAccessProperty.AWS_SECRET_KEY.getPropertyName(), MINIO_SECRET_KEY) + .build()); + } + + @Override + protected StorageConfigInfo getStorageConfigInfo() { + AwsStorageConfigInfo.Builder storageConfig = + AwsStorageConfigInfo.builder() + .setRoleArn("arn:aws:iam::123456789012:role/polaris-test") + .setExternalId("externalId123") + .setUserArn("arn:aws:iam::123456789012:user/polaris-test") + .setStorageType(StorageConfigInfo.StorageTypeEnum.S3) + .setPathStyleAccess(true) + .setEndpoint(endpoint) + .setAllowedLocations(List.of(storageBase.toString())); + + return storageConfig.build(); + } +} diff --git a/runtime/service/src/intTest/java/org/apache/polaris/service/quarkus/it/QuarkusRestCatalogMinIoIT.java b/runtime/service/src/intTest/java/org/apache/polaris/service/quarkus/it/QuarkusRestCatalogMinIOSpecialIT.java similarity index 96% rename from runtime/service/src/intTest/java/org/apache/polaris/service/quarkus/it/QuarkusRestCatalogMinIoIT.java rename to runtime/service/src/intTest/java/org/apache/polaris/service/quarkus/it/QuarkusRestCatalogMinIOSpecialIT.java index 79c3751bf3..d75cf2d3a8 100644 --- a/runtime/service/src/intTest/java/org/apache/polaris/service/quarkus/it/QuarkusRestCatalogMinIoIT.java +++ b/runtime/service/src/intTest/java/org/apache/polaris/service/quarkus/it/QuarkusRestCatalogMinIOSpecialIT.java @@ -77,11 +77,16 @@ import software.amazon.awssdk.services.s3.model.GetObjectRequest; import software.amazon.awssdk.services.s3.model.GetObjectResponse; +/** + * These tests complement {@link QuarkusPolarisRestCatalogMinIOIT} to validate client-side access to + * MinIO storage via {@code FileIO} instances configured from catalog's {@code loadTable} responses + * with some S3-specific options. + */ @QuarkusIntegrationTest -@TestProfile(QuarkusRestCatalogMinIoIT.Profile.class) +@TestProfile(QuarkusRestCatalogMinIOSpecialIT.Profile.class) @ExtendWith(MinioExtension.class) @ExtendWith(PolarisIntegrationTestExtension.class) -public class QuarkusRestCatalogMinIoIT { +public class QuarkusRestCatalogMinIOSpecialIT { private static final String BUCKET_URI_PREFIX = "/minio-test"; private static final String MINIO_ACCESS_KEY = "test-ak-123";