diff --git a/services/s3/src/main/java/software/amazon/awssdk/services/s3/S3Configuration.java b/services/s3/src/main/java/software/amazon/awssdk/services/s3/S3Configuration.java index 74a2fd11523b..41ad17267030 100644 --- a/services/s3/src/main/java/software/amazon/awssdk/services/s3/S3Configuration.java +++ b/services/s3/src/main/java/software/amazon/awssdk/services/s3/S3Configuration.java @@ -15,12 +15,15 @@ package software.amazon.awssdk.services.s3; +import java.util.Optional; +import java.util.function.Supplier; import software.amazon.awssdk.annotations.Immutable; import software.amazon.awssdk.annotations.NotThreadSafe; import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.annotations.ThreadSafe; import software.amazon.awssdk.core.ServiceConfiguration; import software.amazon.awssdk.profiles.ProfileFile; +import software.amazon.awssdk.profiles.ProfileFileSupplier; import software.amazon.awssdk.profiles.ProfileFileSystemSetting; import software.amazon.awssdk.services.s3.internal.FieldWithDefault; import software.amazon.awssdk.services.s3.internal.settingproviders.DisableMultiRegionProviderChain; @@ -66,9 +69,9 @@ public final class S3Configuration implements ServiceConfiguration, ToCopyableBu private final FieldWithDefault dualstackEnabled; private final FieldWithDefault checksumValidationEnabled; private final FieldWithDefault chunkedEncodingEnabled; - private final FieldWithDefault useArnRegionEnabled; - private final FieldWithDefault multiRegionEnabled; - private final FieldWithDefault profileFile; + private final Boolean useArnRegionEnabled; + private final Boolean multiRegionEnabled; + private final FieldWithDefault> profileFile; private final FieldWithDefault profileName; private S3Configuration(DefaultS3ServiceConfigurationBuilder builder) { @@ -78,11 +81,11 @@ private S3Configuration(DefaultS3ServiceConfigurationBuilder builder) { this.checksumValidationEnabled = FieldWithDefault.create(builder.checksumValidationEnabled, DEFAULT_CHECKSUM_VALIDATION_ENABLED); this.chunkedEncodingEnabled = FieldWithDefault.create(builder.chunkedEncodingEnabled, DEFAULT_CHUNKED_ENCODING_ENABLED); - this.profileFile = FieldWithDefault.createLazy(builder.profileFile, ProfileFile::defaultProfileFile); + this.profileFile = FieldWithDefault.create(builder.profileFile, ProfileFile::defaultProfileFile); this.profileName = FieldWithDefault.create(builder.profileName, ProfileFileSystemSetting.AWS_PROFILE.getStringValueOrThrow()); - this.useArnRegionEnabled = FieldWithDefault.createLazy(builder.useArnRegionEnabled, this::resolveUseArnRegionEnabled); - this.multiRegionEnabled = FieldWithDefault.createLazy(builder.multiRegionEnabled, this::resolveMultiRegionEnabled); + this.useArnRegionEnabled = builder.useArnRegionEnabled; + this.multiRegionEnabled = builder.multiRegionEnabled; if (accelerateModeEnabled() && pathStyleAccessEnabled()) { throw new IllegalArgumentException("Accelerate mode cannot be used with path style addressing"); @@ -189,7 +192,8 @@ public boolean chunkedEncodingEnabled() { * @return True if a different region in the ARN can be used. */ public boolean useArnRegionEnabled() { - return useArnRegionEnabled.value(); + return Optional.ofNullable(useArnRegionEnabled) + .orElseGet(this::resolveUseArnRegionEnabled); } /** @@ -198,19 +202,20 @@ public boolean useArnRegionEnabled() { * @return True if multi-region ARNs is enabled. */ public boolean multiRegionEnabled() { - return multiRegionEnabled.value(); + return Optional.ofNullable(multiRegionEnabled) + .orElseGet(this::resolveMultiRegionEnabled); } @Override public Builder toBuilder() { return builder() .dualstackEnabled(dualstackEnabled.valueOrNullIfDefault()) - .multiRegionEnabled(multiRegionEnabled.valueOrNullIfDefault()) + .multiRegionEnabled(multiRegionEnabled) .accelerateModeEnabled(accelerateModeEnabled.valueOrNullIfDefault()) .pathStyleAccessEnabled(pathStyleAccessEnabled.valueOrNullIfDefault()) .checksumValidationEnabled(checksumValidationEnabled.valueOrNullIfDefault()) .chunkedEncodingEnabled(chunkedEncodingEnabled.valueOrNullIfDefault()) - .useArnRegionEnabled(useArnRegionEnabled.valueOrNullIfDefault()) + .useArnRegionEnabled(useArnRegionEnabled) .profileFile(profileFile.valueOrNullIfDefault()) .profileName(profileName.valueOrNullIfDefault()); } @@ -325,6 +330,19 @@ public interface Builder extends CopyableBuilder { */ Builder profileFile(ProfileFile profileFile); + Supplier profileFileSupplier(); + + /** + * The supplier of profile file instances that should be consulted to determine the default value of + * {@link #useArnRegionEnabled(Boolean)} or {@link #multiRegionEnabled(Boolean)}. + * This is not used, if those parameters are configured on the builder. + * + *

+ * By default, the {@link ProfileFile#defaultProfileFile()} is used. + *

+ */ + Builder profileFile(Supplier profileFile); + String profileName(); /** @@ -347,7 +365,7 @@ static final class DefaultS3ServiceConfigurationBuilder implements Builder { private Boolean chunkedEncodingEnabled; private Boolean useArnRegionEnabled; private Boolean multiRegionEnabled; - private ProfileFile profileFile; + private Supplier profileFile; private String profileName; @Override @@ -449,11 +467,25 @@ public Builder multiRegionEnabled(Boolean multiRegionEnabled) { @Override public ProfileFile profileFile() { - return profileFile; + return Optional.ofNullable(profileFile) + .map(Supplier::get) + .orElse(null); } @Override public Builder profileFile(ProfileFile profileFile) { + return profileFile(Optional.ofNullable(profileFile) + .map(ProfileFileSupplier::fixedProfileFile) + .orElse(null)); + } + + @Override + public Supplier profileFileSupplier() { + return profileFile; + } + + @Override + public Builder profileFile(Supplier profileFile) { this.profileFile = profileFile; return this; } diff --git a/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/settingproviders/DisableMultiRegionProviderChain.java b/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/settingproviders/DisableMultiRegionProviderChain.java index 9b5fb603054e..cda136d92edd 100644 --- a/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/settingproviders/DisableMultiRegionProviderChain.java +++ b/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/settingproviders/DisableMultiRegionProviderChain.java @@ -18,6 +18,7 @@ import java.util.Arrays; import java.util.List; import java.util.Optional; +import java.util.function.Supplier; import software.amazon.awssdk.annotations.SdkInternalApi; import software.amazon.awssdk.profiles.ProfileFile; import software.amazon.awssdk.profiles.ProfileFileSystemSetting; @@ -50,7 +51,7 @@ private DisableMultiRegionProviderChain(List provide * */ public static DisableMultiRegionProviderChain create() { - return create(ProfileFile.defaultProfileFile(), + return create(ProfileFile::defaultProfileFile, ProfileFileSystemSetting.AWS_PROFILE.getStringValueOrThrow()); } @@ -60,6 +61,12 @@ public static DisableMultiRegionProviderChain create(ProfileFile profileFile, St ProfileDisableMultiRegionProvider.create(profileFile, profileName))); } + public static DisableMultiRegionProviderChain create(Supplier profileFile, String profileName) { + return new DisableMultiRegionProviderChain(Arrays.asList( + SystemsSettingsDisableMultiRegionProvider.create(), + ProfileDisableMultiRegionProvider.create(profileFile, profileName))); + } + @Override public Optional resolve() { for (DisableMultiRegionProvider provider : providers) { diff --git a/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/settingproviders/ProfileDisableMultiRegionProvider.java b/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/settingproviders/ProfileDisableMultiRegionProvider.java index 4316baebda93..77889e7330cf 100644 --- a/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/settingproviders/ProfileDisableMultiRegionProvider.java +++ b/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/settingproviders/ProfileDisableMultiRegionProvider.java @@ -49,6 +49,10 @@ public static ProfileDisableMultiRegionProvider create(ProfileFile profileFile, return new ProfileDisableMultiRegionProvider(() -> profileFile, profileName); } + public static ProfileDisableMultiRegionProvider create(Supplier profileFile, String profileName) { + return new ProfileDisableMultiRegionProvider(profileFile, profileName); + } + @Override public Optional resolve() { return profileFile.get() diff --git a/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/settingproviders/ProfileUseArnRegionProvider.java b/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/settingproviders/ProfileUseArnRegionProvider.java index 23f54d98b018..8f35eebacf74 100644 --- a/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/settingproviders/ProfileUseArnRegionProvider.java +++ b/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/settingproviders/ProfileUseArnRegionProvider.java @@ -28,7 +28,7 @@ @SdkInternalApi public final class ProfileUseArnRegionProvider implements UseArnRegionProvider { /** - * Property name for specifying whether or not use arn region should be enabled. + * Property name for specifying whether or not to use arn region should be enabled. */ private static final String AWS_USE_ARN_REGION = "s3_use_arn_region"; @@ -49,6 +49,10 @@ public static ProfileUseArnRegionProvider create(ProfileFile profileFile, String return new ProfileUseArnRegionProvider(() -> profileFile, profileName); } + public static ProfileUseArnRegionProvider create(Supplier profileFile, String profileName) { + return new ProfileUseArnRegionProvider(profileFile, profileName); + } + @Override public Optional resolveUseArnRegion() { return profileFile.get() diff --git a/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/settingproviders/UseArnRegionProviderChain.java b/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/settingproviders/UseArnRegionProviderChain.java index a64fc440c354..d418d496d17b 100644 --- a/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/settingproviders/UseArnRegionProviderChain.java +++ b/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/settingproviders/UseArnRegionProviderChain.java @@ -18,6 +18,7 @@ import java.util.Arrays; import java.util.List; import java.util.Optional; +import java.util.function.Supplier; import software.amazon.awssdk.annotations.SdkInternalApi; import software.amazon.awssdk.profiles.ProfileFile; import software.amazon.awssdk.profiles.ProfileFileSystemSetting; @@ -49,7 +50,7 @@ private UseArnRegionProviderChain(List providers) { * */ public static UseArnRegionProviderChain create() { - return create(ProfileFile.defaultProfileFile(), + return create(ProfileFile::defaultProfileFile, ProfileFileSystemSetting.AWS_PROFILE.getStringValueOrThrow()); } @@ -58,6 +59,11 @@ public static UseArnRegionProviderChain create(ProfileFile profileFile, String p ProfileUseArnRegionProvider.create(profileFile, profileName))); } + public static UseArnRegionProviderChain create(Supplier profileFile, String profileName) { + return new UseArnRegionProviderChain(Arrays.asList(SystemsSettingsUseArnRegionProvider.create(), + ProfileUseArnRegionProvider.create(profileFile, profileName))); + } + @Override public Optional resolveUseArnRegion() { for (UseArnRegionProvider provider : providers) { diff --git a/services/s3/src/test/java/software/amazon/awssdk/services/s3/S3ConfigurationTest.java b/services/s3/src/test/java/software/amazon/awssdk/services/s3/S3ConfigurationTest.java index 42f7e567f1c2..d9a7ed6da7e0 100644 --- a/services/s3/src/test/java/software/amazon/awssdk/services/s3/S3ConfigurationTest.java +++ b/services/s3/src/test/java/software/amazon/awssdk/services/s3/S3ConfigurationTest.java @@ -87,4 +87,32 @@ public void multiRegionEnabled_notDisabledInProviders_shouldResolveToTrue() { assertThat(config.multiRegionEnabled()).isEqualTo(true); } + @Test + public void multiRegionEnabled_enabledInCProfile_shouldResolveToConfigCorrectlyOncePerCall() { + S3Configuration config = S3Configuration.builder().build(); + + String trueProfileConfig = getClass().getResource("internal/settingproviders/ProfileFile_true").getFile(); + System.setProperty(AWS_CONFIG_FILE.property(), trueProfileConfig); + assertThat(config.multiRegionEnabled()).isEqualTo(false); + + System.clearProperty(AWS_CONFIG_FILE.property()); + String falseProfileConfig = getClass().getResource("internal/settingproviders/ProfileFile_false").getFile(); + System.setProperty(AWS_CONFIG_FILE.property(), falseProfileConfig); + assertThat(config.multiRegionEnabled()).isEqualTo(true); + } + + @Test + public void useArnRegionEnabled_enabledInCProfile_shouldResolveToConfigCorrectlyOncePerCall() { + S3Configuration config = S3Configuration.builder().build(); + + String trueProfileConfig = getClass().getResource("internal/settingproviders/ProfileFile_true").getFile(); + System.setProperty(AWS_CONFIG_FILE.property(), trueProfileConfig); + assertThat(config.useArnRegionEnabled()).isEqualTo(true); + + System.clearProperty(AWS_CONFIG_FILE.property()); + String falseProfileConfig = getClass().getResource("internal/settingproviders/ProfileFile_false").getFile(); + System.setProperty(AWS_CONFIG_FILE.property(), falseProfileConfig); + assertThat(config.useArnRegionEnabled()).isEqualTo(false); + } + } diff --git a/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/settingproviders/DisableMultiRegionProviderChainTest.java b/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/settingproviders/DisableMultiRegionProviderChainTest.java index f2cd9efb87ad..fb018228e5a1 100644 --- a/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/settingproviders/DisableMultiRegionProviderChainTest.java +++ b/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/settingproviders/DisableMultiRegionProviderChainTest.java @@ -24,23 +24,23 @@ import org.junit.jupiter.api.Test; import software.amazon.awssdk.testutils.EnvironmentVariableHelper; -public class DisableMultiRegionProviderChainTest { +class DisableMultiRegionProviderChainTest { private final EnvironmentVariableHelper helper = new EnvironmentVariableHelper(); @AfterEach - public void clearSystemProperty() { + void clearSystemProperty() { System.clearProperty(AWS_S3_DISABLE_MULTIREGION_ACCESS_POINTS.property()); System.clearProperty(AWS_CONFIG_FILE.property()); helper.reset(); } @Test - public void notSpecified_shouldReturnEmptyOptional() { + void notSpecified_shouldReturnEmptyOptional() { assertThat(DisableMultiRegionProviderChain.create().resolve()).isEqualTo(Optional.empty()); } @Test - public void specifiedInBothProviders_systemPropertiesShouldTakePrecedence() { + void specifiedInBothProviders_systemPropertiesShouldTakePrecedence() { System.setProperty(AWS_S3_DISABLE_MULTIREGION_ACCESS_POINTS.property(), "false"); String configFile = getClass().getResource("ProfileFile_true").getFile(); System.setProperty(AWS_CONFIG_FILE.property(), configFile); @@ -49,7 +49,7 @@ public void specifiedInBothProviders_systemPropertiesShouldTakePrecedence() { } @Test - public void systemPropertiesThrowException_shouldUseConfigFile() { + void systemPropertiesThrowException_shouldUseConfigFile() { System.setProperty(AWS_S3_DISABLE_MULTIREGION_ACCESS_POINTS.property(), "foobar"); String configFile = getClass().getResource("ProfileFile_true").getFile(); System.setProperty(AWS_CONFIG_FILE.property(), configFile); @@ -58,7 +58,7 @@ public void systemPropertiesThrowException_shouldUseConfigFile() { } @Test - public void systemPropertiesNotSpecified_shouldUseConfigFile() { + void systemPropertiesNotSpecified_shouldUseConfigFile() { String configFile = getClass().getResource("ProfileFile_true").getFile(); System.setProperty(AWS_CONFIG_FILE.property(), configFile); @@ -66,7 +66,21 @@ public void systemPropertiesNotSpecified_shouldUseConfigFile() { } @Test - public void bothProvidersThrowException_shouldReturnEmpty() { + void resolve_systemPropertiesNotSpecified_shouldResolveOncePerCall() { + String trueConfigFile = getClass().getResource("ProfileFile_true").getFile(); + System.setProperty(AWS_CONFIG_FILE.property(), trueConfigFile); + + assertThat(DisableMultiRegionProviderChain.create().resolve()).isEqualTo(Optional.of(Boolean.TRUE)); + + System.clearProperty(AWS_CONFIG_FILE.property()); + String falseConfigFile = getClass().getResource("ProfileFile_false").getFile(); + System.setProperty(AWS_CONFIG_FILE.property(), falseConfigFile); + + assertThat(DisableMultiRegionProviderChain.create().resolve()).isEqualTo(Optional.of(Boolean.FALSE)); + } + + @Test + void bothProvidersThrowException_shouldReturnEmpty() { System.setProperty(AWS_S3_DISABLE_MULTIREGION_ACCESS_POINTS.property(), "foobar"); String configFile = getClass().getResource("ProfileFile_unsupportedValue").getFile(); System.setProperty(AWS_CONFIG_FILE.property(), configFile); diff --git a/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/settingproviders/ProfileDisableMultiRegionProviderTest.java b/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/settingproviders/ProfileDisableMultiRegionProviderTest.java index a7ca5fd7363c..b4948527e601 100644 --- a/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/settingproviders/ProfileDisableMultiRegionProviderTest.java +++ b/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/settingproviders/ProfileDisableMultiRegionProviderTest.java @@ -15,6 +15,7 @@ package software.amazon.awssdk.services.s3.internal.settingproviders; +import static java.lang.Boolean.FALSE; import static java.lang.Boolean.TRUE; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -72,6 +73,20 @@ public void unsupportedValue_shouldThrowException() { assertThatThrownBy(() -> provider.resolve()).isInstanceOf(IllegalArgumentException.class); } + @Test + public void resolve_specifiedMultipleValuesInConfigFile_shouldResolveOncePerCall() { + String trueConfigFile = getClass().getResource("ProfileFile_true").getFile(); + System.setProperty(AWS_CONFIG_FILE.property(), trueConfigFile); + + assertThat(provider.resolve()).isEqualTo(Optional.of(TRUE)); + + System.clearProperty(AWS_CONFIG_FILE.property()); + String falseConfigFile = getClass().getResource("ProfileFile_false").getFile(); + System.setProperty(AWS_CONFIG_FILE.property(), falseConfigFile); + + assertThat(provider.resolve()).isEqualTo(Optional.of(FALSE)); + } + @Test public void specifiedInOverrideConfig_shouldUse() { ExecutionInterceptor interceptor = Mockito.spy(AbstractExecutionInterceptor.class); diff --git a/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/settingproviders/ProfileUseArnRegionProviderTest.java b/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/settingproviders/ProfileUseArnRegionProviderTest.java index 044142d23103..362953f90b4c 100644 --- a/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/settingproviders/ProfileUseArnRegionProviderTest.java +++ b/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/settingproviders/ProfileUseArnRegionProviderTest.java @@ -81,6 +81,20 @@ public void commaNoSpace_shouldResolveCorrectly() { assertThat(provider.resolveUseArnRegion()).isEqualTo(Optional.of(FALSE)); } + @Test + public void resolveUseArnRegion_specifiedMultipleValuesInConfigFile_shouldResolveOncePerCall() { + String trueConfigFile = getClass().getResource("ProfileFile_true").getFile(); + System.setProperty(AWS_CONFIG_FILE.property(), trueConfigFile); + + assertThat(provider.resolveUseArnRegion()).isEqualTo(Optional.of(TRUE)); + + System.clearProperty(AWS_CONFIG_FILE.property()); + String falseConfigFile = getClass().getResource("ProfileFile_false").getFile(); + System.setProperty(AWS_CONFIG_FILE.property(), falseConfigFile); + + assertThat(provider.resolveUseArnRegion()).isEqualTo(Optional.of(FALSE)); + } + @Test public void specifiedInOverrideConfig_shouldUse() { ExecutionInterceptor interceptor = Mockito.spy(AbstractExecutionInterceptor.class); diff --git a/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/settingproviders/UseArnRegionProviderChainTest.java b/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/settingproviders/UseArnRegionProviderChainTest.java index 5f1e72b77492..43bede52b75a 100644 --- a/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/settingproviders/UseArnRegionProviderChainTest.java +++ b/services/s3/src/test/java/software/amazon/awssdk/services/s3/internal/settingproviders/UseArnRegionProviderChainTest.java @@ -24,23 +24,23 @@ import org.junit.jupiter.api.Test; import software.amazon.awssdk.testutils.EnvironmentVariableHelper; -public class UseArnRegionProviderChainTest { +class UseArnRegionProviderChainTest { private final EnvironmentVariableHelper helper = new EnvironmentVariableHelper(); @AfterEach - public void clearSystemProperty() { + void clearSystemProperty() { System.clearProperty(AWS_S3_USE_ARN_REGION.property()); System.clearProperty(AWS_CONFIG_FILE.property()); helper.reset(); } @Test - public void notSpecified_shouldReturnEmptyOptional() { + void notSpecified_shouldReturnEmptyOptional() { assertThat(UseArnRegionProviderChain.create().resolveUseArnRegion()).isEqualTo(Optional.empty()); } @Test - public void specifiedInBothProviders_systemPropertiesShouldTakePrecedence() { + void specifiedInBothProviders_systemPropertiesShouldTakePrecedence() { System.setProperty(AWS_S3_USE_ARN_REGION.property(), "false"); String configFile = getClass().getResource("ProfileFile_true").getFile(); System.setProperty(AWS_CONFIG_FILE.property(), configFile); @@ -49,7 +49,7 @@ public void specifiedInBothProviders_systemPropertiesShouldTakePrecedence() { } @Test - public void systemPropertiesThrowException_shouldUseConfigFile() { + void systemPropertiesThrowException_shouldUseConfigFile() { System.setProperty(AWS_S3_USE_ARN_REGION.property(), "foobar"); String configFile = getClass().getResource("ProfileFile_true").getFile(); System.setProperty(AWS_CONFIG_FILE.property(), configFile); @@ -58,7 +58,25 @@ public void systemPropertiesThrowException_shouldUseConfigFile() { } @Test - public void bothProvidersThrowException_shouldReturnEmpty() { + void resolveUseArnRegion_systemPropertiesNotSpecifiedConfigFileValueTrue_resolvesOncePerCall() { + String trueConfigFile = getClass().getResource("ProfileFile_true").getFile(); + System.setProperty(AWS_CONFIG_FILE.property(), trueConfigFile); + + UseArnRegionProviderChain providerChain = UseArnRegionProviderChain.create(); + assertThat(providerChain.resolveUseArnRegion()).isEqualTo(Optional.of(Boolean.TRUE)); + } + + @Test + void resolveUseArnRegion_systemPropertiesNotSpecifiedConfigFileValueFalse_resolvesOncePerCall() { + String falseConfigFile = getClass().getResource("ProfileFile_false").getFile(); + System.setProperty(AWS_CONFIG_FILE.property(), falseConfigFile); + + UseArnRegionProviderChain providerChain = UseArnRegionProviderChain.create(); + assertThat(providerChain.resolveUseArnRegion()).isEqualTo(Optional.of(Boolean.FALSE)); + } + + @Test + void bothProvidersThrowException_shouldReturnEmpty() { System.setProperty(AWS_S3_USE_ARN_REGION.property(), "foobar"); String configFile = getClass().getResource("ProfileFile_unsupportedValue").getFile(); System.setProperty(AWS_CONFIG_FILE.property(), configFile);