test: eliminates some possible timing issues with watched secrets tests (#23975)

closes #23940
This commit is contained in:
Steven Hawkins 2023-10-18 02:55:31 -04:00 committed by GitHub
parent 77c3e7190c
commit 8f1234881d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -37,8 +37,12 @@ import java.util.Base64;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentSkipListSet;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.function.Function;
import java.util.concurrent.TimeoutException;
import java.util.stream.Collectors;
import static org.assertj.core.api.Assertions.assertThat;
@ -168,12 +172,33 @@ public class WatchedSecretsTest extends BaseOperatorTest {
var toBeRestarted = crsToBeRestarted.stream().collect(Collectors.toMap(Function.identity(), k -> getStatefulSet(k).getStatus().getUpdateRevision()));
var notToBeRestarted = crsNotToBeRestarted.stream().collect(Collectors.toMap(Function.identity(), k -> getStatefulSet(k).getStatus().getUpdateRevision()));
CompletableFuture<?> restartsCompleted = null;
ConcurrentSkipListSet<String> names = new ConcurrentSkipListSet<>(crsToBeRestarted.stream().map(k -> k.getMetadata().getName()).collect(Collectors.toSet()));
if (restartExpected) {
restartsCompleted = k8sclient.resources(Keycloak.class).informOnCondition(keycloaks -> {
for (Keycloak kc : keycloaks) {
if (!names.contains(kc.getMetadata().getName())) {
continue;
}
try {
assertKeycloakStatusCondition(kc.getStatus(), KeycloakStatusCondition.ROLLING_UPDATE, true, null, null);
names.remove(kc.getMetadata().getName());
} catch (Throwable e) {
// not rolling
}
}
return names.isEmpty();
});
}
action.run();
if (restartExpected) {
// this depends on the restart taking long enough to detect after the action is run
// we may want to switch to using an informer that runs before the action
assertRollingUpdate(crsToBeRestarted, true);
if (restartsCompleted != null) {
try {
restartsCompleted.get(5, TimeUnit.MINUTES);
} catch (InterruptedException | ExecutionException | TimeoutException e) {
throw new RuntimeException(names + " did not restart before an exception occurred", e);
}
}
Set<Keycloak> allCrs = new HashSet<>(crsToBeRestarted);