Skip to content

Commit a161704

Browse files
committed
Make tests more resiliant
1 parent e4e9183 commit a161704

File tree

2 files changed

+22
-17
lines changed

2 files changed

+22
-17
lines changed

core/auth/src/test/java/software/amazon/awssdk/auth/credentials/ProfileCredentialsProviderTest.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.nio.file.Files;
2626
import java.nio.file.Path;
2727
import java.util.Optional;
28+
import java.util.concurrent.atomic.AtomicBoolean;
2829
import java.util.function.Supplier;
2930
import org.junit.jupiter.api.AfterAll;
3031
import org.junit.jupiter.api.BeforeAll;
@@ -33,6 +34,7 @@
3334
import software.amazon.awssdk.profiles.ProfileFile;
3435
import software.amazon.awssdk.profiles.ProfileFileSupplier;
3536
import software.amazon.awssdk.profiles.ProfileProperty;
37+
import software.amazon.awssdk.testutils.Waiter;
3638
import software.amazon.awssdk.utils.StringInputStream;
3739

3840
/**
@@ -244,29 +246,28 @@ void resolveCredentials_presentSupplierProfileFile_returnsCredentials() {
244246
}
245247

246248
@Test
247-
void resolveCredentials_defaultProfileFileSupplier_refreshesCredentials() throws InterruptedException {
248-
Path credentialsFile = generateTestCredentialsFile("defaultAccessKey", "defaultSecretAccessKey");
249+
void resolveCredentials_defaultProfileFileSupplier_refreshesCredentials() {
250+
AtomicBoolean firstCall = new AtomicBoolean(true);
251+
ProfileFile file1 = profileFile("[default]\naws_access_key_id = akid1\n"
252+
+ "aws_secret_access_key = sak1\n");
253+
ProfileFile file2 = profileFile("[default]\naws_access_key_id = akid2\n"
254+
+ "aws_secret_access_key = sak2\n");
255+
Supplier<ProfileFile> refreshingSupplier = () -> firstCall.getAndSet(false) ? file1 : file2;
249256

250257
ProfileCredentialsProvider provider = new ProfileCredentialsProvider
251258
.BuilderImpl()
252-
.defaultProfileFileLoader(ProfileFileSupplier.reloadWhenModified(credentialsFile, ProfileFile.Type.CREDENTIALS))
259+
.defaultProfileFileLoader(refreshingSupplier)
253260
.profileName("default")
254261
.build();
255262

256263
assertThat(provider.resolveCredentials()).satisfies(credentials -> {
257-
assertThat(credentials.accessKeyId()).isEqualTo("defaultAccessKey");
258-
assertThat(credentials.secretAccessKey()).isEqualTo("defaultSecretAccessKey");
264+
assertThat(credentials.accessKeyId()).isEqualTo("akid1");
265+
assertThat(credentials.secretAccessKey()).isEqualTo("sak1");
259266
});
260267

261-
// modify the file
262-
generateTestCredentialsFile("updatedAccessKey", "updatedSecretAccessKey");
263-
264-
// ProfileFileRefresher has a stale time of 1000 ms.
265-
Thread.sleep(1100);
266-
267268
assertThat(provider.resolveCredentials()).satisfies(credentials -> {
268-
assertThat(credentials.accessKeyId()).isEqualTo("updatedAccessKey");
269-
assertThat(credentials.secretAccessKey()).isEqualTo("updatedSecretAccessKey");
269+
assertThat(credentials.accessKeyId()).isEqualTo("akid2");
270+
assertThat(credentials.secretAccessKey()).isEqualTo("sak2");
270271
});
271272
}
272273

core/sdk-core/src/test/java/software/amazon/awssdk/core/client/builder/DefaultClientBuilderTest.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
import software.amazon.awssdk.metrics.MetricPublisher;
8989
import software.amazon.awssdk.profiles.ProfileFile;
9090
import software.amazon.awssdk.testutils.EnvironmentVariableHelper;
91+
import software.amazon.awssdk.testutils.Waiter;
9192
import software.amazon.awssdk.utils.AttributeMap;
9293
import software.amazon.awssdk.utils.StringInputStream;
9394

@@ -430,21 +431,24 @@ public void defaultProfileFileSupplier_isStaticOrHasIdentityCaching() {
430431
}
431432

432433
@Test
433-
public void defaultProfileFileSupplier_refreshesWhenFileModified() {
434+
public void defaultProfileFileSupplier_isRefreshing() {
434435
EnvironmentVariableHelper.run(env -> {
435436
try {
436437
File credentialFile = tempFolder.newFile();
437438
writeTestCredentialsFile(credentialFile, "akid1", "sak");
438439
env.set("AWS_SHARED_CREDENTIALS_FILE", credentialFile.getPath());
440+
env.set("AWS_CONFIG_FILE", tempFolder.getRoot().toPath().resolve("does-not-exist").toString());
439441
SdkClientConfiguration config =
440442
testClientBuilder().build().clientConfiguration;
441443

442444
Supplier<ProfileFile> defaultProfileFileSupplier = config.option(PROFILE_FILE_SUPPLIER);
443445
ProfileFile firstGet = defaultProfileFileSupplier.get();
444446

445447
writeTestCredentialsFile(credentialFile, "updatedAkid", "updatedSak");
446-
Thread.sleep(1100);
447-
ProfileFile secondGet = defaultProfileFileSupplier.get();
448+
449+
ProfileFile secondGet = Waiter.run(() -> defaultProfileFileSupplier.get())
450+
.until((p) -> !p.equals(firstGet))
451+
.orFailAfter(Duration.ofSeconds(10));
448452

449453
assertThat(secondGet).isNotSameAs(firstGet);
450454
assertThat(secondGet.profile("default")).isPresent();
@@ -456,7 +460,7 @@ public void defaultProfileFileSupplier_refreshesWhenFileModified() {
456460
});
457461

458462
}
459-
catch (IOException | InterruptedException e) {
463+
catch (IOException e) {
460464
throw new RuntimeException(e);
461465
}
462466
});

0 commit comments

Comments
 (0)