test: eliminates some possible timing issues with watched secrets tests (#23975)
closes #23940
This commit is contained in:
parent
77c3e7190c
commit
8f1234881d
1 changed files with 29 additions and 4 deletions
|
@ -37,8 +37,12 @@ import java.util.Base64;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
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.concurrent.TimeUnit;
|
||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
import java.util.concurrent.TimeoutException;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
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 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()));
|
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();
|
action.run();
|
||||||
|
|
||||||
if (restartExpected) {
|
if (restartsCompleted != null) {
|
||||||
// this depends on the restart taking long enough to detect after the action is run
|
try {
|
||||||
// we may want to switch to using an informer that runs before the action
|
restartsCompleted.get(5, TimeUnit.MINUTES);
|
||||||
assertRollingUpdate(crsToBeRestarted, true);
|
} catch (InterruptedException | ExecutionException | TimeoutException e) {
|
||||||
|
throw new RuntimeException(names + " did not restart before an exception occurred", e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Set<Keycloak> allCrs = new HashSet<>(crsToBeRestarted);
|
Set<Keycloak> allCrs = new HashSet<>(crsToBeRestarted);
|
||||||
|
|
Loading…
Reference in a new issue