/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.apache.brooklyn.entity.webapp; import org.apache.brooklyn.entity.webapp.FilenameToWebContextMapper; import org.testng.Assert; import org.testng.annotations.Test; @Test public class FilenameToWebContextMapperTest { // * either ROOT.WAR or / denotes root context // * <p> // * anything of form FOO.?AR (ending .?AR) is copied with that name (unless copying not necessary) // * and is expected to be served from /FOO // * <p> // * anything of form /FOO (with leading slash) is expected to be served from /FOO // * (and is copied as FOO.WAR) // * <p> // * anything of form FOO (without a dot) is expected to be served from /FOO // * (and is copied as FOO.WAR) // * <p> // * otherwise <i>please note</i> behaviour may vary on different appservers; // * e.g. FOO.FOO would probably be ignored on appservers which expect a file copied across (usually), // * but served as /FOO.FOO on systems that take a deployment context. FilenameToWebContextMapper m = new FilenameToWebContextMapper(); private void assertMapping(String input, String context, String filename) { Assert.assertEquals(m.convertDeploymentTargetNameToContext(input), context); Assert.assertEquals(m.convertDeploymentTargetNameToFilename(input), filename); } public void testRootNames() { assertMapping("/", "/", "ROOT.war"); assertMapping("ROOT.war", "/", "ROOT.war"); //bad ones -- some of these aren't invertible assertMapping("/ROOT.war", "/ROOT.war", "ROOT.war.war"); assertMapping("/ROOT", "/ROOT", "ROOT.war"); //and leave empty string alone (will cause subsequent error) assertMapping("", "", ""); } public void testOtherNames() { assertMapping("/foo", "/foo", "foo.war"); assertMapping("/foo.foo", "/foo.foo", "foo.foo.war"); assertMapping("foo.war", "/foo", "foo.war"); assertMapping("foo.Ear", "/foo", "foo.Ear"); assertMapping("foo", "/foo", "foo.war"); //bad ones -- some of these aren't invertible assertMapping("foo.foo", "/foo.foo", "foo.foo"); } public void testInferFromUrl() { Assert.assertEquals(m.findArchiveNameFromUrl("http//localhost/simple.war", false), "simple.war"); Assert.assertEquals(m.findArchiveNameFromUrl("http//localhost/simple.Ear?type=raw", false), "simple.Ear"); Assert.assertEquals(m.findArchiveNameFromUrl("http//localhost/simple.war?type=raw*other=sample.war", false), "simple.war"); Assert.assertEquals(m.findArchiveNameFromUrl("http//localhost/get?file=simple.war", false), "simple.war"); Assert.assertEquals(m.findArchiveNameFromUrl("http//localhost/get?file=simple.war&other=ignore", false), "simple.war"); //takes the first (but logs warning in verbose mode) Assert.assertEquals(m.findArchiveNameFromUrl("http//localhost/get?file=simple.war&other=sample.war", false), "simple.war"); //allows hyphen Assert.assertEquals(m.findArchiveNameFromUrl("http//localhost/get?file=simple-simon.war&other=sample", false), "simple-simon.war"); Assert.assertEquals(m.findArchiveNameFromUrl("http//localhost/get?file=simple\\simon.war&other=sample", false), "simon.war"); } }