/* * JBoss, Home of Professional Open Source * Copyright 2016, Red Hat, Inc., and individual contributors as indicated * by the @authors tag. * * 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 org.jboss.as.test.integration.management.cli.modules; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.concurrent.TimeUnit; import javax.inject.Inject; import org.jboss.as.cli.Util; import org.jboss.as.controller.client.helpers.standalone.ServerDeploymentHelper; import org.jboss.as.test.integration.common.HttpRequest; import org.jboss.as.test.integration.management.base.AbstractCliTestBase; import org.jboss.as.test.shared.TestSuiteEnvironment; import org.jboss.msc.service.ServiceActivator; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.asset.StringAsset; import org.jboss.shrinkwrap.api.exporter.ZipExporter; import org.jboss.shrinkwrap.api.spec.JavaArchive; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.junit.runner.RunWith; import org.wildfly.core.testrunner.ManagementClient; import org.wildfly.core.testrunner.WildflyTestRunner; /** * Test module add command and loading of modules with resources with absolute/relative paths (MODULES-218) * * @author Martin Simka */ @RunWith(WildflyTestRunner.class) public class ModuleResourceRootPathsTestCase extends AbstractCliTestBase { private static final String MODULE_RESOURCE_MODULE_NAME = "module.resource.test"; private static final String ABSOLUTE_RESOURCE_MODULE_NAME = "absolute.resource.test"; private static final String MODULE_RESOURCE_JAR_NAME = "module-resource.jar"; private static final String ABSOLUTE_RESOURCE_JAR_NAME = "absolute-resource.jar"; private File moduleResource; private File absoluteResource; @Inject private ManagementClient client; @Rule public TemporaryFolder tmpDir = new TemporaryFolder(); @Before public void before() throws Exception { createResources(); AbstractCliTestBase.initCLI(); addModule(MODULE_RESOURCE_MODULE_NAME, true, false); addModule(ABSOLUTE_RESOURCE_MODULE_NAME, false, true); deployTestWar(); } @After public void after() throws Exception { undeployTestWar(); try { removeModule(ABSOLUTE_RESOURCE_MODULE_NAME); removeModule(MODULE_RESOURCE_MODULE_NAME); } catch (AssertionError e) { // ignore failure on Windows, cannot remove module on running server due to file locks if (!Util.isWindows()) throw e; } AbstractCliTestBase.closeCLI(); } @Test public void testModules() throws Exception { // test module resources final URL testModuleResourceUrl = new URL(TestSuiteEnvironment.getHttpUrl(), "?action=" + ModulesServiceActivator.ACTION_TEST_MODULE_RESOURCE); String response = HttpRequest.get(testModuleResourceUrl.toString(), 1000, 10, TimeUnit.SECONDS); Assert.assertEquals(ModuleResource.MODULE_RESOURCE, response); // test absolute resources final URL testAbsoluteResourceUrl = new URL(TestSuiteEnvironment.getHttpUrl(), "?action=" + ModulesServiceActivator.ACTION_TEST_ABSOLUTE_RESOURCE); response = HttpRequest.get(testAbsoluteResourceUrl.toString(), 1000, 10, TimeUnit.SECONDS); Assert.assertEquals(AbsoluteResource.ABSOLUTE_RESOURCE, response); } private void addModule(String name, boolean addModuleResources, boolean addAbsoluteResources) throws IOException { cli.sendLine("module add --name=" + name + (addModuleResources ? " --resources=" + moduleResource.getCanonicalPath() : "") + (addAbsoluteResources ? " --absolute-resources=" + absoluteResource.getCanonicalPath() : "")); } private void removeModule(String name) { cli.sendLine("module remove --name=" + name); } private void deployTestWar() throws Exception { final JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "test-archive.war"); archive.addClasses(ModulesServiceActivator.DEPENDENCIES); archive.addAsServiceProviderAndClasses(ServiceActivator.class, ModulesServiceActivator.class) .addAsManifestResource(new StringAsset("Dependencies: io.undertow.core," + MODULE_RESOURCE_MODULE_NAME + "," + ABSOLUTE_RESOURCE_MODULE_NAME + "\n"), "MANIFEST.MF"); final ServerDeploymentHelper helper = new ServerDeploymentHelper(client.getControllerClient()); helper.deploy("test-archive.war", archive.as(ZipExporter.class).exportAsInputStream()); } private void undeployTestWar() throws Exception { final ServerDeploymentHelper helper = new ServerDeploymentHelper(client.getControllerClient()); helper.undeploy("test-archive.war"); } private void createResources() { JavaArchive jar = ShrinkWrap.create(JavaArchive.class); jar.addClasses(ModuleResource.class); moduleResource = new File(tmpDir.getRoot(), MODULE_RESOURCE_JAR_NAME); jar.as(ZipExporter.class).exportTo(moduleResource, true); jar = ShrinkWrap.create(JavaArchive.class); jar.addClasses(AbsoluteResource.class); absoluteResource = new File(tmpDir.getRoot(), ABSOLUTE_RESOURCE_JAR_NAME); jar.as(ZipExporter.class).exportTo(absoluteResource, true); } }