From 5ef7836ad3ddcea280f0106f2887dac4774c9d32 Mon Sep 17 00:00:00 2001 From: Egyed Tamas Date: Thu, 19 Sep 2024 11:56:01 +0200 Subject: [PATCH] Fix testUpgradeAcrossVersionsWithUnsupportedKafkaVersion test to run only when there is really an unsupported Kafka version across versions --- .../upgrade/UpgradeKafkaVersion.java | 49 +++++++++++++++---- .../systemtest/utils/TestKafkaVersion.java | 6 ++- .../upgrade/regular/StrimziUpgradeST.java | 20 ++++---- 3 files changed, 56 insertions(+), 19 deletions(-) diff --git a/systemtest/src/main/java/io/strimzi/systemtest/upgrade/UpgradeKafkaVersion.java b/systemtest/src/main/java/io/strimzi/systemtest/upgrade/UpgradeKafkaVersion.java index 78719755b63..5f95a03640c 100644 --- a/systemtest/src/main/java/io/strimzi/systemtest/upgrade/UpgradeKafkaVersion.java +++ b/systemtest/src/main/java/io/strimzi/systemtest/upgrade/UpgradeKafkaVersion.java @@ -6,6 +6,10 @@ import io.strimzi.systemtest.utils.TestKafkaVersion; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + /** * Class for representing Kafka version, with LMFV and IBPV for our upgrade/downgrade tests * Represents "procedures" which should be done after upgrade of operator/before downgrade of operator @@ -23,21 +27,21 @@ public UpgradeKafkaVersion(TestKafkaVersion testKafkaVersion) { public UpgradeKafkaVersion(String version, String desiredMetadataVersion) { this.version = version; - this.metadataVersion = desiredMetadataVersion; + metadataVersion = desiredMetadataVersion; } public UpgradeKafkaVersion(String version) { String shortVersion = version; - if (version != null && !version.equals("")) { + if (version != null && !version.isEmpty()) { String[] versionSplit = version.split("\\."); shortVersion = String.format("%s.%s", versionSplit[0], versionSplit[1]); } this.version = version; - this.logMessageVersion = shortVersion; - this.interBrokerVersion = shortVersion; - this.metadataVersion = shortVersion; + logMessageVersion = shortVersion; + interBrokerVersion = shortVersion; + metadataVersion = shortVersion; } /** @@ -71,19 +75,19 @@ public String getVersion() { } public String getLogMessageVersion() { - return this.logMessageVersion; + return logMessageVersion; } public String getInterBrokerVersion() { - return this.interBrokerVersion; + return interBrokerVersion; } public String getMetadataVersion() { - return this.metadataVersion; + return metadataVersion; } public static UpgradeKafkaVersion getKafkaWithVersionFromUrl(String kafkaVersionsUrl, String kafkaVersion) { - if (kafkaVersionsUrl.equals("HEAD")) { + if ("HEAD".equals(kafkaVersionsUrl)) { return new UpgradeKafkaVersion(TestKafkaVersion.getSpecificVersion(kafkaVersion)); } else { try { @@ -96,4 +100,31 @@ public static UpgradeKafkaVersion getKafkaWithVersionFromUrl(String kafkaVersion } } } + + public static Optional getKafkaVersionSupportedBeforeUnsupportedAfterUpgrade(String fromKafkaVersionsUrl) { + List supportedKafkaVersionsBeforeUpgrade = getSupportedKafkaVersions(fromKafkaVersionsUrl); + List supportedKafkaVersionsAfterUpgrade = getSupportedKafkaVersions("HEAD") + .stream() + .map(TestKafkaVersion::version) + .collect(Collectors.toList()); + + return supportedKafkaVersionsBeforeUpgrade + .stream() + .filter(version -> !supportedKafkaVersionsAfterUpgrade.contains(version.version())) + .map(UpgradeKafkaVersion::new) + .findFirst(); + } + + private static List getSupportedKafkaVersions(String kafkaVersionsUrl) { + if ("HEAD".equals(kafkaVersionsUrl)) { + return TestKafkaVersion.getSupportedKafkaVersions(); + } else { + try { + List kafkaVersions = TestKafkaVersion.parseKafkaVersionsFromUrl(kafkaVersionsUrl); + return TestKafkaVersion.getSupportedKafkaVersionsFromAllVersions(kafkaVersions); + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } + } + } } diff --git a/systemtest/src/main/java/io/strimzi/systemtest/utils/TestKafkaVersion.java b/systemtest/src/main/java/io/strimzi/systemtest/utils/TestKafkaVersion.java index 8bf3469ddcf..9b2530f0199 100644 --- a/systemtest/src/main/java/io/strimzi/systemtest/utils/TestKafkaVersion.java +++ b/systemtest/src/main/java/io/strimzi/systemtest/utils/TestKafkaVersion.java @@ -29,7 +29,7 @@ public class TestKafkaVersion implements Comparable { static { try { kafkaVersions = parseKafkaVersions(TestUtils.USER_PATH + "/../kafka-versions.yaml"); - supportedKafkaVersions = kafkaVersions.stream().filter(TestKafkaVersion::isSupported).collect(Collectors.toList()); + supportedKafkaVersions = getSupportedKafkaVersionsFromAllVersions(kafkaVersions); Collections.sort(kafkaVersions); Collections.sort(supportedKafkaVersions); @@ -181,6 +181,10 @@ public static List getSupportedKafkaVersions() { return supportedKafkaVersions; } + public static List getSupportedKafkaVersionsFromAllVersions(List kafkaVersions) { + return kafkaVersions.stream().filter(TestKafkaVersion::isSupported).collect(Collectors.toList()); + } + /** * Parse the version information present in the {@code /kafka-versions} classpath resource and return a map * of kafka versions data with a version as key diff --git a/systemtest/src/test/java/io/strimzi/systemtest/upgrade/regular/StrimziUpgradeST.java b/systemtest/src/test/java/io/strimzi/systemtest/upgrade/regular/StrimziUpgradeST.java index bf20d348d36..02787216a75 100644 --- a/systemtest/src/test/java/io/strimzi/systemtest/upgrade/regular/StrimziUpgradeST.java +++ b/systemtest/src/test/java/io/strimzi/systemtest/upgrade/regular/StrimziUpgradeST.java @@ -31,6 +31,7 @@ import java.io.IOException; import java.util.Map; +import java.util.Optional; import static io.strimzi.systemtest.Environment.TEST_SUITE_NAMESPACE; import static io.strimzi.systemtest.TestConstants.CO_NAMESPACE; @@ -55,7 +56,7 @@ public class StrimziUpgradeST extends AbstractUpgradeST { @ParameterizedTest(name = "from: {0} (using FG <{2}>) to: {1} (using FG <{3}>)") @MethodSource("io.strimzi.systemtest.upgrade.VersionModificationDataLoader#loadYamlUpgradeData") void testUpgradeOfKafkaKafkaConnectAndKafkaConnector(String fromVersion, String toVersion, String fgBefore, String fgAfter, BundleVersionModificationData upgradeData) throws IOException { - final TestStorage testStorage = new TestStorage(ResourceManager.getTestContext()); + TestStorage testStorage = new TestStorage(ResourceManager.getTestContext()); UpgradeKafkaVersion upgradeKafkaVersion = new UpgradeKafkaVersion(upgradeData.getOldestKafka()); // setting log message version to null, similarly to the examples, which are not configuring LMFV upgradeKafkaVersion.setLogMessageVersion(null); @@ -73,14 +74,14 @@ void testUpgradeKafkaWithoutVersion() throws IOException { UpgradeKafkaVersion upgradeKafkaVersion = UpgradeKafkaVersion.getKafkaWithVersionFromUrl(acrossUpgradeData.getFromKafkaVersionsUrl(), acrossUpgradeData.getStartingKafkaVersion()); upgradeKafkaVersion.setVersion(null); - final TestStorage testStorage = new TestStorage(ResourceManager.getTestContext()); + TestStorage testStorage = new TestStorage(ResourceManager.getTestContext()); // Setup env setupEnvAndUpgradeClusterOperator(CO_NAMESPACE, testStorage, acrossUpgradeData, upgradeKafkaVersion); - final Map zooSnapshot = PodUtils.podSnapshot(testStorage.getNamespaceName(), controllerSelector); - final Map kafkaSnapshot = PodUtils.podSnapshot(testStorage.getNamespaceName(), brokerSelector); - final Map eoSnapshot = DeploymentUtils.depSnapshot(testStorage.getNamespaceName(), KafkaResources.entityOperatorDeploymentName(clusterName)); + Map zooSnapshot = PodUtils.podSnapshot(testStorage.getNamespaceName(), controllerSelector); + Map kafkaSnapshot = PodUtils.podSnapshot(testStorage.getNamespaceName(), brokerSelector); + Map eoSnapshot = DeploymentUtils.depSnapshot(testStorage.getNamespaceName(), KafkaResources.entityOperatorDeploymentName(clusterName)); // Make snapshots of all Pods makeComponentsSnapshots(testStorage.getNamespaceName()); @@ -109,11 +110,12 @@ void testUpgradeKafkaWithoutVersion() throws IOException { @IsolatedTest void testUpgradeAcrossVersionsWithUnsupportedKafkaVersion() throws IOException { - final TestStorage testStorage = new TestStorage(ResourceManager.getTestContext()); - UpgradeKafkaVersion upgradeKafkaVersion = UpgradeKafkaVersion.getKafkaWithVersionFromUrl(acrossUpgradeData.getFromKafkaVersionsUrl(), acrossUpgradeData.getStartingKafkaVersion()); + TestStorage testStorage = new TestStorage(ResourceManager.getTestContext()); + Optional upgradeKafkaVersion = UpgradeKafkaVersion.getKafkaVersionSupportedBeforeUnsupportedAfterUpgrade(acrossUpgradeData.getFromKafkaVersionsUrl()); + assumeTrue(upgradeKafkaVersion.isPresent(), "Supported Kafka versions after upgrade contains all supported Kafka versions before upgrade so test is skipped"); // Setup env - setupEnvAndUpgradeClusterOperator(CO_NAMESPACE, testStorage, acrossUpgradeData, upgradeKafkaVersion); + setupEnvAndUpgradeClusterOperator(CO_NAMESPACE, testStorage, acrossUpgradeData, upgradeKafkaVersion.get()); // Make snapshots of all Pods makeComponentsSnapshots(TEST_SUITE_NAMESPACE); @@ -136,7 +138,7 @@ void testUpgradeAcrossVersionsWithUnsupportedKafkaVersion() throws IOException { @IsolatedTest void testUpgradeAcrossVersionsWithNoKafkaVersion() throws IOException { - final TestStorage testStorage = new TestStorage(ResourceManager.getTestContext()); + TestStorage testStorage = new TestStorage(ResourceManager.getTestContext()); // Setup env setupEnvAndUpgradeClusterOperator(CO_NAMESPACE, testStorage, acrossUpgradeData, null);