| // |
| // ======================================================================== |
| // Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd. |
| // ------------------------------------------------------------------------ |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v1.0 |
| // and Apache License v2.0 which accompanies this distribution. |
| // |
| // The Eclipse Public License is available at |
| // http://www.eclipse.org/legal/epl-v10.html |
| // |
| // The Apache License v2.0 is available at |
| // http://www.opensource.org/licenses/apache2.0.php |
| // |
| // You may elect to redistribute this code under either of these licenses. |
| // ======================================================================== |
| // |
| |
| package org.eclipse.jetty.deploy.providers; |
| |
| import static org.junit.Assert.assertTrue; |
| import static org.junit.Assume.assumeTrue; |
| |
| import java.io.File; |
| import java.nio.file.FileSystemException; |
| import java.nio.file.Files; |
| import java.nio.file.Path; |
| import java.util.Arrays; |
| |
| import org.eclipse.jetty.deploy.test.XmlConfiguredJetty; |
| import org.eclipse.jetty.toolchain.test.MavenTestingUtils; |
| import org.eclipse.jetty.toolchain.test.TestingDir; |
| import org.junit.After; |
| import org.junit.Assert; |
| import org.junit.Before; |
| import org.junit.Ignore; |
| import org.junit.Rule; |
| import org.junit.Test; |
| |
| @Ignore("See issue #1200") |
| public class WebAppProviderTest |
| { |
| @Rule |
| public TestingDir testdir = new TestingDir(); |
| private static XmlConfiguredJetty jetty; |
| private boolean symlinkSupported = false; |
| |
| @Before |
| public void setupEnvironment() throws Exception |
| { |
| jetty = new XmlConfiguredJetty(testdir); |
| jetty.addConfiguration("jetty.xml"); |
| jetty.addConfiguration("jetty-http.xml"); |
| jetty.addConfiguration("jetty-deploy-wars.xml"); |
| |
| // Setup initial context |
| jetty.copyWebapp("foo-webapp-1.war","foo.war"); |
| |
| // Make symlink |
| Path pathWar3 = MavenTestingUtils.getTestResourcePathFile("webapps/foo-webapp-3.war"); |
| Path pathBar = jetty.getJettyDir("webapps/bar.war").toPath(); |
| try |
| { |
| Files.createSymbolicLink(pathBar, pathWar3); |
| symlinkSupported = true; |
| } catch (UnsupportedOperationException | FileSystemException e) |
| { |
| // if unable to create symlink, no point testing that feature |
| // this is the path that Microsoft Windows takes. |
| symlinkSupported = false; |
| } |
| |
| // Should not throw an Exception |
| jetty.load(); |
| |
| // Start it |
| jetty.start(); |
| } |
| |
| @After |
| public void teardownEnvironment() throws Exception |
| { |
| // Stop jetty. |
| jetty.stop(); |
| } |
| |
| @Test |
| public void testStartupContext() |
| { |
| // Check Server for Handlers |
| jetty.assertWebAppContextsExists("/bar", "/foo"); |
| |
| File workDir = jetty.getJettyDir("workish"); |
| |
| // Test for regressions |
| assertDirNotExists("root of work directory",workDir,"webinf"); |
| assertDirNotExists("root of work directory",workDir,"jsp"); |
| |
| // Test for correct behaviour |
| assertTrue("Should have generated directory in work directory: " + workDir,hasJettyGeneratedPath(workDir,"foo.war")); |
| } |
| |
| @Test |
| public void testStartupSymlinkContext() |
| { |
| assumeTrue(symlinkSupported); |
| |
| // Check for path |
| File barLink = jetty.getJettyDir("webapps/bar.war"); |
| assertTrue("bar.war link exists: " + barLink.toString(), barLink.exists()); |
| assertTrue("bar.war link isFile: " + barLink.toString(), barLink.isFile()); |
| |
| // Check Server for expected Handlers |
| jetty.assertWebAppContextsExists("/bar", "/foo"); |
| |
| // Test for expected work/temp directory behaviour |
| File workDir = jetty.getJettyDir("workish"); |
| assertTrue("Should have generated directory in work directory: " + workDir,hasJettyGeneratedPath(workDir,"bar.war")); |
| } |
| |
| private static boolean hasJettyGeneratedPath(File basedir, String expectedWarFilename) |
| { |
| File[] paths = basedir.listFiles(); |
| if (paths != null) |
| { |
| for (File path : paths) |
| { |
| if (path.exists() && path.isDirectory() && path.getName().startsWith("jetty-") && path.getName().contains(expectedWarFilename)) |
| { |
| System.err.println("Found expected generated directory: " + path); |
| return true; |
| } |
| } |
| System.err.println("did not find "+expectedWarFilename+" in "+Arrays.asList(paths)); |
| } |
| return false; |
| } |
| |
| public static void assertDirNotExists(String msg, File workDir, String subdir) |
| { |
| File dir = new File(workDir,subdir); |
| Assert.assertFalse("Should not have " + subdir + " in " + msg + " - " + workDir,dir.exists()); |
| } |
| } |