diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 60025a961..b7f0ea4d8 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -18,7 +18,7 @@ jobs: matrix: # test against latest update of each major Java version, as well as specific updates of LTS versions: RUNTIME: [ol, wlp] - RUNTIME_VERSION: [24.0.0.6] + RUNTIME_VERSION: [24.0.0.9] java: [21, 17, 11, 8] exclude: - java: 8 @@ -101,7 +101,7 @@ jobs: matrix: # test against latest update of each major Java version, as well as specific updates of LTS versions: RUNTIME: [ol, wlp] - RUNTIME_VERSION: [24.0.0.6] + RUNTIME_VERSION: [24.0.0.9] java: [21, 17, 11, 8] exclude: - java: 8 diff --git a/src/test/groovy/io/openliberty/tools/gradle/KernelInstallVersionlessFeatureTest.groovy b/src/test/groovy/io/openliberty/tools/gradle/KernelInstallVersionlessFeatureTest.groovy new file mode 100644 index 000000000..c6cc7f6e0 --- /dev/null +++ b/src/test/groovy/io/openliberty/tools/gradle/KernelInstallVersionlessFeatureTest.groovy @@ -0,0 +1,99 @@ +/* + * (C) Copyright IBM Corporation 2024. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.openliberty.tools.gradle + +import static junit.framework.Assert.assertEquals +import static org.junit.Assert.* + +import org.junit.Before +import org.junit.BeforeClass +import org.junit.Test + +import io.openliberty.tools.common.plugins.util.InstallFeatureUtil + +class KernelInstallVersionlessFeatureTest extends AbstractIntegrationTest{ + static File resourceDir = new File("build/resources/test/kernel-install-versionless-feature-test") + static File buildDir = new File(integTestDir, "/kernel-install-versionless-feature-test") + static String buildFilename = "build.gradle" + + @BeforeClass + public static void setup() { + createDir(buildDir) + createTestProject(buildDir, resourceDir, buildFilename) + } + + @Before + public void before() { + runTasks(buildDir, "libertyCreate") + copyServer("server_empty.xml") + deleteDir(new File(buildDir, "build/wlp/lib/features")) + } + + @Test + /** + * Install with only server.xml features + */ + public void testInstallVersionlessFeaturesServer() { + copyBuildFiles(new File(resourceDir, "install_features_server.gradle"), buildDir) + runTasks(buildDir, "libertyCreate") + copyServer("server_versionless_feature.xml") + runTasks(buildDir, "installFeature") + assertInstalled("beanValidation-2.0") + assertInstalled("servlet-4.0") + assertInstalled("jpa-2.2") + assertInstalled("ejb-3.2") + assertNotInstalled("couchdb-1.0") + assertNotInstalled("distributedMap-1.0") + } + + private copyServer(String serverFile) { + copyFile(new File(resourceDir, serverFile), new File(buildDir, "build/wlp/usr/servers/defaultServer/server.xml")) + } + + private void assertInstallStatus(String feature, boolean expectation) throws Exception { + String expectationString = (expectation ? "installed" : "not installed"); + assertEquals("Feature " + feature + " was expected to be " + expectationString + " in the lib/features directory", expectation, existsInFeaturesDirectory(feature)); + String featureInfo = getFeatureInfo(); + assertEquals("Feature " + feature + " was expected to be " + expectationString + " according to productInfo featureInfo: " + featureInfo, expectation, featureInfo.contains(feature)); + } + + protected void assertInstalled(String feature) throws Exception { + assertInstallStatus(feature, true); + } + + protected void assertNotInstalled(String feature) throws Exception { + assertInstallStatus(feature, false); + } + + private boolean existsInFeaturesDirectory(String feature) { + File[] features; + File featuresDir = new File(buildDir, "build/wlp/lib/features") + + features = featuresDir.listFiles(new FilenameFilter() { + public boolean accept(File dir, String name) { + return name.toLowerCase().equals("com.ibm.websphere.appserver." + feature.toLowerCase() + ".mf"); + } + }); + + return features.size() >= 1; + } + + private String getFeatureInfo() throws Exception { + File installDirectory = new File(buildDir, "build/wlp") + return InstallFeatureUtil.productInfo(installDirectory, "featureInfo"); + } + +} diff --git a/src/test/resources/kernel-install-feature-test/server_versionless_feature.xml b/src/test/resources/kernel-install-feature-test/server_versionless_feature.xml new file mode 100644 index 000000000..2435856c5 --- /dev/null +++ b/src/test/resources/kernel-install-feature-test/server_versionless_feature.xml @@ -0,0 +1,9 @@ + + + beanValidation + servlet + jpa + ejb + javaee-8.0 + + diff --git a/src/test/resources/kernel-install-versionless-feature-test/build.gradle b/src/test/resources/kernel-install-versionless-feature-test/build.gradle new file mode 100644 index 000000000..ab4fdcb8f --- /dev/null +++ b/src/test/resources/kernel-install-versionless-feature-test/build.gradle @@ -0,0 +1,24 @@ +apply plugin: 'liberty' + +buildscript { + repositories{ + mavenLocal() + mavenCentral() + maven { + name = 'Sonatype Nexus Snapshots' + url = 'https://oss.sonatype.org/content/repositories/snapshots/' + } + } + dependencies { + classpath "io.openliberty.tools:liberty-gradle-plugin:$lgpVersion" + } +} + +repositories { + mavenLocal() + mavenCentral() +} + +liberty { + runtime = ['group': runtimeGroup,'name':kernelArtifactId,'version':runtimeVersion] +} diff --git a/src/test/resources/kernel-install-versionless-feature-test/build_wlp.gradle b/src/test/resources/kernel-install-versionless-feature-test/build_wlp.gradle new file mode 100644 index 000000000..f37474797 --- /dev/null +++ b/src/test/resources/kernel-install-versionless-feature-test/build_wlp.gradle @@ -0,0 +1,24 @@ +apply plugin: 'liberty' + +buildscript { + repositories{ + mavenLocal() + mavenCentral() + maven { + name = 'Sonatype Nexus Snapshots' + url = 'https://oss.sonatype.org/content/repositories/snapshots/' + } + } + dependencies { + classpath "io.openliberty.tools:liberty-gradle-plugin:$lgpVersion" + } +} + +repositories { + mavenLocal() + mavenCentral() +} + +dependencies { + libertyRuntime group: 'com.ibm.websphere.appserver.runtime', name: 'wlp-kernel', version: runtimeVersion +} diff --git a/src/test/resources/kernel-install-versionless-feature-test/install_features_server.gradle b/src/test/resources/kernel-install-versionless-feature-test/install_features_server.gradle new file mode 100644 index 000000000..09ab788b7 --- /dev/null +++ b/src/test/resources/kernel-install-versionless-feature-test/install_features_server.gradle @@ -0,0 +1,31 @@ +buildscript { + repositories { + mavenLocal() + mavenCentral() + maven { + name = 'Sonatype Nexus Snapshots' + url = 'https://oss.sonatype.org/content/repositories/snapshots/' + } + } + dependencies { + classpath "io.openliberty.tools:liberty-gradle-plugin:$lgpVersion" + } +} + +apply plugin: 'liberty' + +repositories { + mavenCentral() +} + +dependencies { + libertyRuntime group: runtimeGroup, name: kernelArtifactId, version: runtimeVersion +} + +liberty { + server{ + features { + acceptLicense = true + } + } +} diff --git a/src/test/resources/kernel-install-versionless-feature-test/server_empty.xml b/src/test/resources/kernel-install-versionless-feature-test/server_empty.xml new file mode 100644 index 000000000..3bd4b2b88 --- /dev/null +++ b/src/test/resources/kernel-install-versionless-feature-test/server_empty.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/test/resources/kernel-install-versionless-feature-test/server_versionless_feature.xml b/src/test/resources/kernel-install-versionless-feature-test/server_versionless_feature.xml new file mode 100644 index 000000000..2435856c5 --- /dev/null +++ b/src/test/resources/kernel-install-versionless-feature-test/server_versionless_feature.xml @@ -0,0 +1,9 @@ + + + beanValidation + servlet + jpa + ejb + javaee-8.0 + + diff --git a/src/test/resources/kernel-install-versionless-feature-test/settings.gradle b/src/test/resources/kernel-install-versionless-feature-test/settings.gradle new file mode 100644 index 000000000..c2d3edc19 --- /dev/null +++ b/src/test/resources/kernel-install-versionless-feature-test/settings.gradle @@ -0,0 +1 @@ +//Empty \ No newline at end of file