diff --git a/quarkus-test-cli/src/main/java/io/quarkus/test/util/QuarkusCLIUtils.java b/quarkus-test-cli/src/main/java/io/quarkus/test/util/QuarkusCLIUtils.java index d847e7995..430bcf605 100644 --- a/quarkus-test-cli/src/main/java/io/quarkus/test/util/QuarkusCLIUtils.java +++ b/quarkus-test-cli/src/main/java/io/quarkus/test/util/QuarkusCLIUtils.java @@ -28,7 +28,9 @@ import org.codehaus.plexus.util.xml.XmlStreamReader; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; +import io.quarkus.test.bootstrap.QuarkusCliClient; import io.quarkus.test.bootstrap.QuarkusCliRestService; +import io.quarkus.test.services.quarkus.model.QuarkusProperties; import io.smallrye.common.os.OS; public abstract class QuarkusCLIUtils { @@ -45,6 +47,16 @@ public abstract class QuarkusCLIUtils { */ private static final int GAV_FIELDS_LENGTH = 3; + public static IQuarkusCLIAppManager createAppManager(QuarkusCliClient cliClient, + DefaultArtifactVersion oldVersionStream, + DefaultArtifactVersion newVersionStream) { + if (QuarkusProperties.isRHBQ()) { + return new RHBQPlatformAppManager(cliClient, oldVersionStream, newVersionStream, + new DefaultArtifactVersion(QuarkusProperties.getVersion())); + } + return new DefaultQuarkusCLIAppManager(cliClient, oldVersionStream, newVersionStream); + } + /** * Create app, put properties into application.properties file, * then update the app and verify that properties are the expected ones. @@ -259,6 +271,33 @@ public static Properties getProperties(QuarkusCliRestService app) throws XmlPull return getPom(app).getProperties(); } + /** + * Change given properties in app's pom. + * Other properties are unchanged. + */ + public static void changePropertiesInPom(QuarkusCliRestService app, Properties properties) + throws XmlPullParserException, IOException { + Model pom = getPom(app); + Properties pomProperties = pom.getProperties(); + pomProperties.putAll(properties); + pom.setProperties(pomProperties); + savePom(app, pom); + } + + /** + * If tests are not on RHBQ it will set properties in app's pom to work with community quarkus BOM. + * Expects that app is using RHBQ by default. + */ + public static void setCommunityBomIfNotRunningRHBQ(QuarkusCliRestService app, String communityQuarkusVersion) + throws XmlPullParserException, IOException { + if (!QuarkusProperties.getVersion().contains("redhat")) { + Properties communityBomProperties = new Properties(); + communityBomProperties.put("quarkus.platform.group-id", "io.quarkus.platform"); + communityBomProperties.put("quarkus.platform.version", communityQuarkusVersion); + changePropertiesInPom(app, communityBomProperties); + } + } + /** * Get main pom of the application (the one in root dir). */ diff --git a/quarkus-test-cli/src/main/java/io/quarkus/test/util/RHBQPlatformAppManager.java b/quarkus-test-cli/src/main/java/io/quarkus/test/util/RHBQPlatformAppManager.java new file mode 100644 index 000000000..1bce4b78d --- /dev/null +++ b/quarkus-test-cli/src/main/java/io/quarkus/test/util/RHBQPlatformAppManager.java @@ -0,0 +1,60 @@ +package io.quarkus.test.util; + +import static io.quarkus.test.bootstrap.QuarkusCliClient.UpdateApplicationRequest.defaultUpdate; +import static io.quarkus.test.util.QuarkusCLIUtils.getQuarkusAppVersion; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.IOException; + +import org.apache.maven.artifact.versioning.DefaultArtifactVersion; +import org.codehaus.plexus.util.xml.pull.XmlPullParserException; + +import io.quarkus.test.bootstrap.QuarkusCliClient; +import io.quarkus.test.bootstrap.QuarkusCliRestService; +import io.quarkus.test.logging.Log; + +/** + * AppManager designed to update app to specific quarkus-bom version, instead of to stream as DefaultQuarkusCLIAppManager. + */ +public class RHBQPlatformAppManager extends DefaultQuarkusCLIAppManager { + protected final DefaultArtifactVersion newPlatformVersion; + + public RHBQPlatformAppManager(QuarkusCliClient cliClient, DefaultArtifactVersion oldStreamVersion, + DefaultArtifactVersion newStreamVersion, DefaultArtifactVersion newPlatformVersion) { + super(cliClient, oldStreamVersion, newStreamVersion); + this.newPlatformVersion = newPlatformVersion; + } + + @Override + public void updateApp(QuarkusCliRestService app) { + Log.info("Updating app to version: " + newPlatformVersion); + app.update(defaultUpdate() + .withPlatformVersion(newPlatformVersion.toString())); + } + + @Override + public QuarkusCliRestService createApplication() { + return assertIsUsingRHBQ(super.createApplication()); + } + + @Override + public QuarkusCliRestService createApplicationWithExtensions(String... extensions) { + return assertIsUsingRHBQ(super.createApplicationWithExtensions(extensions)); + } + + @Override + public QuarkusCliRestService createApplicationWithExtraArgs(String... extraArgs) { + return assertIsUsingRHBQ(super.createApplicationWithExtraArgs(extraArgs)); + } + + private QuarkusCliRestService assertIsUsingRHBQ(QuarkusCliRestService app) { + try { + // check that created application uses version with "redhat" suffix. + assertTrue(getQuarkusAppVersion(app).toString().contains("redhat"), + "Created Quarkus application does not use \"redhat\" version, while should be RHBQ"); + } catch (IOException | XmlPullParserException e) { + throw new RuntimeException(e); + } + return app; + } +} diff --git a/quarkus-test-core/src/main/java/io/quarkus/test/services/quarkus/model/QuarkusProperties.java b/quarkus-test-core/src/main/java/io/quarkus/test/services/quarkus/model/QuarkusProperties.java index e313d5d81..be49b8f6f 100644 --- a/quarkus-test-core/src/main/java/io/quarkus/test/services/quarkus/model/QuarkusProperties.java +++ b/quarkus-test-core/src/main/java/io/quarkus/test/services/quarkus/model/QuarkusProperties.java @@ -34,6 +34,10 @@ private QuarkusProperties() { } + public static boolean isRHBQ() { + return QuarkusProperties.getVersion().contains("redhat"); + } + public static String getVersion() { return defaultVersionIfEmpty(PLATFORM_VERSION.get()); }