Save This Page
Home » cactus-1.8.0-src » org.apache.cactus.integration.ant.deployment.webapp » [javadoc | source]
    1   /* 
    2    * ========================================================================
    3    * 
    4    * Copyright 2003-2004 The Apache Software Foundation.
    5    *
    6    * Licensed under the Apache License, Version 2.0 (the "License");
    7    * you may not use this file except in compliance with the License.
    8    * You may obtain a copy of the License at
    9    * 
   10    *   http://www.apache.org/licenses/LICENSE-2.0
   11    * 
   12    * Unless required by applicable law or agreed to in writing, software
   13    * distributed under the License is distributed on an "AS IS" BASIS,
   14    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   15    * See the License for the specific language governing permissions and
   16    * limitations under the License.
   17    * 
   18    * ========================================================================
   19    */
   20   package org.apache.cactus.integration.ant.deployment.webapp;
   21   
   22   import java.io.ByteArrayInputStream;
   23   import java.util.Iterator;
   24   
   25   import javax.xml.parsers.DocumentBuilder;
   26   import javax.xml.parsers.DocumentBuilderFactory;
   27   import javax.xml.parsers.ParserConfigurationException;
   28   
   29   import junit.framework.TestCase;
   30   
   31   import org.w3c.dom.Document;
   32   import org.w3c.dom.Element;
   33   
   34   /**
   35    * Unit tests for {@link WebXmlMerger}.
   36    * 
   37    * TODO: we need more tests for the security sections and the various references
   38    * 
   39    * @version $Id: TestWebXmlMerger.java,v 1.1 2004/05/31 20:05:21 vmassol Exp $
   40    */
   41   public final class TestWebXmlMerger extends TestCase
   42   {
   43       /**
   44        * The document builder factory.
   45        */
   46       private DocumentBuilderFactory factory;
   47   
   48       /**
   49        * The JAXP document builder.
   50        */
   51       private DocumentBuilder builder;
   52   
   53       /**
   54        * @see TestCase#setUp
   55        */
   56       public void setUp() throws ParserConfigurationException
   57       {
   58           factory = DocumentBuilderFactory.newInstance();
   59           factory.setValidating(false);
   60           factory.setNamespaceAware(false);
   61   
   62           builder = factory.newDocumentBuilder();
   63       }
   64   
   65       /**
   66        * Tests whether a single filter is correctly merged into an empty
   67        * descriptor.
   68        * 
   69        * @throws Exception If an unexpected error occurs
   70        */
   71       public void testMergeOneFilterIntoEmptyDocument() throws Exception
   72       {
   73           String srcXml = "<web-app></web-app>";
   74           Document srcDoc =
   75               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
   76           WebXml srcWebXml = new WebXml(srcDoc);
   77           String mergeXml = "<web-app>"
   78               + "  <filter>"
   79               + "    <filter-name>f1</filter-name>"
   80               + "    <filter-class>fclass1</filter-class>"
   81               + "  </filter>"
   82               + "</web-app>";
   83           Document mergeDoc =
   84               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
   85           WebXml mergeWebXml = new WebXml(mergeDoc);
   86           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
   87           merger.mergeFilters(mergeWebXml);
   88           assertTrue(srcWebXml.hasFilter("f1"));
   89       }
   90   
   91       /**
   92        * Tests whether a single context param is correctly merged into an empty
   93        * descriptor.
   94        * 
   95        * @throws Exception If an unexpected error occurs
   96        */
   97       public void testMergeOneContextParamIntoEmptyDocument() throws Exception
   98       {
   99           String srcXml = "<web-app></web-app>";
  100           Document srcDoc =
  101               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  102           WebXml srcWebXml = new WebXml(srcDoc);
  103           String mergeXml = "<web-app>"
  104               + "  <context-param>"
  105               + "    <param-name>param</param-name>"
  106               + "    <param-value>value</param-value>"
  107               + "  </context-param>"
  108               + "</web-app>";
  109           Document mergeDoc =
  110               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  111           WebXml mergeWebXml = new WebXml(mergeDoc);
  112           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  113           merger.mergeContextParams(mergeWebXml);
  114           assertTrue(srcWebXml.hasContextParam("param"));
  115       }
  116       
  117       /**
  118        * Tests whether a single filter is correctly merged into a descriptor that
  119        * already contains another filter.
  120        * 
  121        * @throws Exception If an unexpected error occurs
  122        */
  123       public void testMergeOneFilterIntoDocumentWithAnotherFilter()
  124           throws Exception
  125       {
  126           String srcXml = "<web-app>"
  127               + "  <filter>"
  128               + "    <filter-name>f1</filter-name>"
  129               + "    <filter-class>fclass1</filter-class>"
  130               + "  </filter>"
  131               + "</web-app>";
  132           Document srcDoc =
  133               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  134           WebXml srcWebXml = new WebXml(srcDoc);
  135           String mergeXml = "<web-app>"
  136               + "  <filter>"
  137               + "    <filter-name>f2</filter-name>"
  138               + "    <filter-class>fclass2</filter-class>"
  139               + "  </filter>"
  140               + "</web-app>";
  141           Document mergeDoc =
  142               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  143           WebXml mergeWebXml = new WebXml(mergeDoc);
  144           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  145           merger.mergeFilters(mergeWebXml);
  146           assertTrue(srcWebXml.hasFilter("f1"));
  147           assertTrue(srcWebXml.hasFilter("f2"));
  148       }
  149   
  150       /**
  151        * Tests whether a single context param is correctly merged into a 
  152        * descriptor that already contains another context param.
  153        * 
  154        * @throws Exception If an unexpected error occurs
  155        */
  156       public void testMergeOneContextParamIntoDocumentWithAnotherContextParam()
  157           throws Exception
  158       {
  159           String srcXml = "<web-app>"
  160               + "  <context-param>"
  161               + "    <param-name>param1</param-name>"
  162               + "    <param-value>value1</param-value>"
  163               + "  </context-param>"
  164               + "</web-app>";
  165           Document srcDoc =
  166               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  167           WebXml srcWebXml = new WebXml(srcDoc);
  168           String mergeXml = "<web-app>"
  169               + "  <context-param>"
  170               + "    <param-name>param2</param-name>"
  171               + "    <param-value>value2</param-value>"
  172               + "  </context-param>"
  173               + "</web-app>";
  174           Document mergeDoc =
  175               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  176           WebXml mergeWebXml = new WebXml(mergeDoc);
  177           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  178           merger.mergeContextParams(mergeWebXml);
  179           assertTrue(srcWebXml.hasContextParam("param1"));
  180           assertTrue(srcWebXml.hasContextParam("param2"));
  181       }
  182   
  183       /**
  184        * Tests whether a single filter in the merge descriptor is ignored because
  185        * a filter with the same name already exists in the source descriptor. 
  186        * 
  187        * @throws Exception If an unexpected error occurs
  188        */
  189       public void testMergeOneFilterIntoDocumentWithSameFilter()
  190           throws Exception
  191       {
  192           String srcXml = "<web-app>"
  193               + "  <filter>"
  194               + "    <filter-name>f1</filter-name>"
  195               + "    <filter-class>fclass1</filter-class>"
  196               + "  </filter>"
  197               + "</web-app>";
  198           Document srcDoc =
  199               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  200           WebXml srcWebXml = new WebXml(srcDoc);
  201           String mergeXml = srcXml;
  202           Document mergeDoc =
  203               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  204           WebXml mergeWebXml = new WebXml(mergeDoc);
  205           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  206           merger.mergeFilters(mergeWebXml);
  207           assertTrue(srcWebXml.hasFilter("f1"));
  208       }
  209   
  210       /**
  211        * Tests whether a single context param in the merge descriptor is ignored 
  212        * because a context param with the same name already exists in the source 
  213        * descriptor. 
  214        * 
  215        * @throws Exception If an unexpected error occurs
  216        */
  217       public void testMergeOneContextParamIntoDocumentWithSameContextParam()
  218           throws Exception
  219       {
  220           String srcXml = "<web-app>"
  221               + "  <context-param>"
  222               + "    <param-name>param</param-name>"
  223               + "    <param-value>value</param-value>"
  224               + "  </context-param>"
  225               + "</web-app>";
  226           Document srcDoc =
  227               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  228           WebXml srcWebXml = new WebXml(srcDoc);
  229           String mergeXml = srcXml;
  230           Document mergeDoc =
  231               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  232           WebXml mergeWebXml = new WebXml(mergeDoc);
  233           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  234           merger.mergeContextParams(mergeWebXml);
  235           assertTrue(srcWebXml.hasContextParam("param"));
  236       }
  237       
  238       /**
  239        * Tests whether a filter initialization parameter is merged into the
  240        * descriptor.
  241        * 
  242        * @throws Exception If an unexpected error occurs
  243        */
  244       public void testMergeOneFilterIntoDocumentWithSameFilterAndParam()
  245           throws Exception
  246       {
  247           String srcXml = "<web-app>"
  248               + "  <filter>"
  249               + "    <filter-name>f1</filter-name>"
  250               + "    <filter-class>fclass1</filter-class>"
  251               + "  </filter>"
  252               + "</web-app>";
  253           Document srcDoc =
  254               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  255           WebXml srcWebXml = new WebXml(srcDoc);
  256           String mergeXml = "<web-app>"
  257               + "  <filter>"
  258               + "    <filter-name>f1</filter-name>"
  259               + "    <filter-class>fclass1</filter-class>"
  260               + "    <init-param>"
  261               + "      <param-name>f1param1</param-name>"
  262               + "      <param-value>f1param1value</param-value>"
  263               + "    </init-param>"
  264               + "  </filter>"
  265               + "</web-app>";
  266           Document mergeDoc =
  267               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  268           WebXml mergeWebXml = new WebXml(mergeDoc);
  269           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  270           merger.mergeFilters(mergeWebXml);
  271           assertTrue(srcWebXml.hasFilter("f1"));
  272           Iterator initParams = srcWebXml.getFilterInitParamNames("f1");
  273           assertEquals("f1param1", initParams.next());
  274           assertTrue(!initParams.hasNext());
  275       }
  276   
  277       /**
  278        * Tests whether a single filter is correctly merged into a descriptor that
  279        * already contains multiple other filter definitions.
  280        * 
  281        * @throws Exception If an unexpected error occurs
  282        */
  283       public void testMergeOneFilterIntoDocumentWithMultipleFilters()
  284           throws Exception
  285       {
  286           String srcXml = "<web-app>"
  287               + "  <filter>"
  288               + "    <filter-name>f1</filter-name>"
  289               + "    <filter-class>fclass1</filter-class>"
  290               + "  </filter>"
  291               + "  <filter>"
  292               + "    <filter-name>f2</filter-name>"
  293               + "    <filter-class>fclass2</filter-class>"
  294               + "  </filter>"
  295               + "  <filter>"
  296               + "    <filter-name>f3</filter-name>"
  297               + "    <filter-class>fclass3</filter-class>"
  298               + "  </filter>"
  299               + "</web-app>";
  300           Document srcDoc =
  301               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  302           WebXml srcWebXml = new WebXml(srcDoc);
  303           String mergeXml = "<web-app>"
  304               + "  <filter>"
  305               + "    <filter-name>f4</filter-name>"
  306               + "    <filter-class>fclass4</filter-class>"
  307               + "  </filter>"
  308               + "</web-app>";
  309           Document mergeDoc =
  310               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  311           WebXml mergeWebXml = new WebXml(mergeDoc);
  312           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  313           merger.mergeFilters(mergeWebXml);
  314           Iterator filterNames = srcWebXml.getFilterNames();
  315           assertEquals("f1", filterNames.next());
  316           assertEquals("f2", filterNames.next());
  317           assertEquals("f3", filterNames.next());
  318           assertEquals("f4", filterNames.next());
  319           assertTrue(!filterNames.hasNext());
  320       }
  321   
  322       /**
  323        * Tests whether multiple filters are correctly merged into an empty
  324        * descriptor.
  325        * 
  326        * @throws Exception If an unexpected error occurs
  327        */
  328       public void testMergeMultipleFiltersIntoEmptyDocument() throws Exception
  329       {
  330           String srcXml = "<web-app></web-app>";
  331           Document srcDoc =
  332               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  333           WebXml srcWebXml = new WebXml(srcDoc);
  334           String mergeXml = "<web-app>"
  335               + "  <filter>"
  336               + "    <filter-name>f1</filter-name>"
  337               + "    <filter-class>fclass1</filter-class>"
  338               + "  </filter>"
  339               + "  <filter>"
  340               + "    <filter-name>f2</filter-name>"
  341               + "    <filter-class>fclass2</filter-class>"
  342               + "  </filter>"
  343               + "  <filter>"
  344               + "    <filter-name>f3</filter-name>"
  345               + "    <filter-class>fclass3</filter-class>"
  346               + "  </filter>"
  347               + "</web-app>";
  348           Document mergeDoc =
  349               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  350           WebXml mergeWebXml = new WebXml(mergeDoc);
  351           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  352           merger.mergeFilters(mergeWebXml);
  353           Iterator filterNames = srcWebXml.getFilterNames();
  354           assertEquals("f1", filterNames.next());
  355           assertEquals("f2", filterNames.next());
  356           assertEquals("f3", filterNames.next());
  357           assertTrue(!filterNames.hasNext());
  358       }
  359   
  360       /**
  361        * Tests whether a filter with one mapping is correctly merged into an empty
  362        * descriptor.
  363        * 
  364        * @throws Exception If an unexpected error occurs
  365        */
  366       public void testMergeOneFilterWithOneMappingIntoEmptyDocument()
  367           throws Exception
  368       {
  369           String srcXml = "<web-app></web-app>";
  370           Document srcDoc =
  371               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  372           WebXml srcWebXml = new WebXml(srcDoc);
  373           String mergeXml = "<web-app>"
  374               + "  <filter>"
  375               + "    <filter-name>f1</filter-name>"
  376               + "    <filter-class>fclass1</filter-class>"
  377               + "  </filter>"
  378               + "  <filter-mapping>"
  379               + "    <filter-name>f1</filter-name>"
  380               + "    <url-pattern>/f1mapping1</url-pattern>"
  381               + "  </filter-mapping>"
  382               + "</web-app>";
  383           Document mergeDoc =
  384               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  385           WebXml mergeWebXml = new WebXml(mergeDoc);
  386           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  387           merger.mergeFilters(mergeWebXml);
  388           assertTrue(srcWebXml.hasFilter("f1"));
  389           Iterator filterMappings = srcWebXml.getFilterMappings("f1");
  390           assertEquals("/f1mapping1", filterMappings.next());
  391           assertTrue(!filterMappings.hasNext());
  392       }
  393   
  394       /**
  395        * Tests wether a single filter with multiple mappings is correctly merged
  396        * into an empty descriptor.
  397        * 
  398        * @throws Exception If an unexpected error occurs
  399        */
  400       public void testMergeOneFilterWithMultipleMappingsIntoEmptyDocument()
  401           throws Exception
  402       {
  403           String srcXml = "<web-app></web-app>";
  404           Document srcDoc =
  405               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  406           WebXml srcWebXml = new WebXml(srcDoc);
  407           String mergeXml = "<web-app>"
  408               + "  <filter>"
  409               + "    <filter-name>f1</filter-name>"
  410               + "    <filter-class>fclass1</filter-class>"
  411               + "  </filter>"
  412               + "  <filter-mapping>"
  413               + "    <filter-name>f1</filter-name>"
  414               + "    <url-pattern>/f1mapping1</url-pattern>"
  415               + "  </filter-mapping>"
  416               + "  <filter-mapping>"
  417               + "    <filter-name>f1</filter-name>"
  418               + "    <url-pattern>/f1mapping2</url-pattern>"
  419               + "  </filter-mapping>"
  420               + "  <filter-mapping>"
  421               + "    <filter-name>f1</filter-name>"
  422               + "    <url-pattern>/f1mapping3</url-pattern>"
  423               + "  </filter-mapping>"
  424               + "</web-app>";
  425           Document mergeDoc =
  426               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  427           WebXml mergeWebXml = new WebXml(mergeDoc);
  428           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  429           merger.mergeFilters(mergeWebXml);
  430           assertTrue(srcWebXml.hasFilter("f1"));
  431           Iterator filterMappings = srcWebXml.getFilterMappings("f1");
  432           assertEquals("/f1mapping1", filterMappings.next());
  433           assertEquals("/f1mapping2", filterMappings.next());
  434           assertEquals("/f1mapping3", filterMappings.next());
  435           assertTrue(!filterMappings.hasNext());
  436       }
  437   
  438       /**
  439        * Tests whether a single servlet is correctly merged into an empty 
  440        * descriptor.
  441        * 
  442        * @throws Exception If an unexpected error occurs
  443        */
  444       public void testMergeOneServletIntoEmptyDocument() throws Exception
  445       {
  446           String srcXml = "<web-app></web-app>";
  447           Document srcDoc =
  448               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  449           WebXml srcWebXml = new WebXml(srcDoc);
  450           String mergeXml = "<web-app>"
  451               + "  <servlet>"
  452               + "    <servlet-name>s1</servlet-name>"
  453               + "    <servlet-class>sclass1</servlet-class>"
  454               + "  </servlet>"
  455               + "</web-app>";
  456           Document mergeDoc =
  457               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  458           WebXml mergeWebXml = new WebXml(mergeDoc);
  459           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  460           merger.mergeServlets(mergeWebXml);
  461           assertTrue(srcWebXml.hasServlet("s1"));
  462       }
  463   
  464       /**
  465        * Tests whether a single servlet is correctly merged into a descriptor that
  466        * already contains the definition of an other servlet.
  467        * 
  468        * @throws Exception If an unexpected error occurs
  469        */
  470       public void testMergeOneServletIntoDocumentWithAnotherServlet()
  471           throws Exception
  472       {
  473           String srcXml = "<web-app>"
  474               + "  <servlet>"
  475               + "    <servlet-name>s1</servlet-name>"
  476               + "    <servlet-class>sclass1</servlet-class>"
  477               + "  </servlet>"
  478               + "</web-app>";
  479           Document srcDoc =
  480               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  481           WebXml srcWebXml = new WebXml(srcDoc);
  482           String mergeXml = "<web-app>"
  483               + "  <servlet>"
  484               + "    <servlet-name>s2</servlet-name>"
  485               + "    <servlet-class>sclass2</servlet-class>"
  486               + "  </servlet>"
  487               + "</web-app>";
  488           Document mergeDoc =
  489               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  490           WebXml mergeWebXml = new WebXml(mergeDoc);
  491           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  492           merger.mergeServlets(mergeWebXml);
  493           assertTrue(srcWebXml.hasServlet("s1"));
  494           assertTrue(srcWebXml.hasServlet("s2"));
  495       }
  496   
  497       /**
  498        * Tests whether a single servlet is correctly merged into a descriptor that
  499        * already contains the definition of a servlet with the same name.
  500        * 
  501        * @throws Exception If an unexpected error occurs
  502        */
  503       public void testMergeOneServletIntoDocumentWithSameServlet()
  504           throws Exception
  505       {
  506           String srcXml = "<web-app>"
  507               + "  <servlet>"
  508               + "    <servlet-name>s1</servlet-name>"
  509               + "    <servlet-class>sclass1</servlet-class>"
  510               + "  </servlet>"
  511               + "</web-app>";
  512           Document srcDoc =
  513               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  514           WebXml srcWebXml = new WebXml(srcDoc);
  515           String mergeXml = "<web-app>"
  516               + "  <servlet>"
  517               + "    <servlet-name>s1</servlet-name>"
  518               + "    <servlet-class>sclass1</servlet-class>"
  519               + "  </servlet>"
  520               + "</web-app>";
  521           Document mergeDoc =
  522               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  523           WebXml mergeWebXml = new WebXml(mergeDoc);
  524           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  525           merger.mergeServlets(mergeWebXml);
  526           assertTrue(srcWebXml.hasServlet("s1"));
  527       }
  528   
  529       /**
  530        * Tets whether a servlet with an initialization parameter is correctly
  531        * merged into a descriptor that contains the definition of a servlet with
  532        * the same name.
  533        * 
  534        * @throws Exception If an unexpected error occurs
  535        */
  536       public void testMergeOneServletIntoDocumentWithSameServletAndParam()
  537           throws Exception
  538       {
  539           String srcXml = "<web-app>"
  540               + "  <servlet>"
  541               + "    <servlet-name>s1</servlet-name>"
  542               + "    <servlet-class>sclass1</servlet-class>"
  543               + "  </servlet>"
  544               + "</web-app>";
  545           Document srcDoc =
  546               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  547           WebXml srcWebXml = new WebXml(srcDoc);
  548           String mergeXml = "<web-app>"
  549               + "  <servlet>"
  550               + "    <servlet-name>s1</servlet-name>"
  551               + "    <servlet-class>sclass1</servlet-class>"
  552               + "    <init-param>"
  553               + "      <param-name>s1param1</param-name>"
  554               + "      <param-value>s1param1value</param-value>"
  555               + "    </init-param>"
  556               + "  </servlet>"
  557               + "</web-app>";
  558           Document mergeDoc =
  559               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  560           WebXml mergeWebXml = new WebXml(mergeDoc);
  561           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  562           merger.mergeServlets(mergeWebXml);
  563           assertTrue(srcWebXml.hasServlet("s1"));
  564           Iterator initParams = srcWebXml.getServletInitParamNames("s1");
  565           assertEquals("s1param1", initParams.next());
  566           assertTrue(!initParams.hasNext());
  567           assertEquals("s1param1value",
  568               srcWebXml.getServletInitParam("s1", "s1param1"));
  569       }
  570   
  571       /**
  572        * Tests whether a single servlet is correctly merged into a descriptor with
  573        * multiple servlets.
  574        * 
  575        * @throws Exception If an unexpected error occurs
  576        */
  577       public void testMergeOneServletIntoDocumentWithMultipleServlets()
  578           throws Exception
  579       {
  580           String srcXml = "<web-app>"
  581               + "  <servlet>"
  582               + "    <servlet-name>s1</servlet-name>"
  583               + "    <servlet-class>sclass1</servlet-class>"
  584               + "  </servlet>"
  585               + "  <servlet>"
  586               + "    <servlet-name>s2</servlet-name>"
  587               + "    <servlet-class>sclass2</servlet-class>"
  588               + "  </servlet>"
  589               + "  <servlet>"
  590               + "    <servlet-name>s3</servlet-name>"
  591               + "    <servlet-class>sclass3</servlet-class>"
  592               + "  </servlet>"
  593               + "</web-app>";
  594           Document srcDoc =
  595               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  596           WebXml srcWebXml = new WebXml(srcDoc);
  597           String mergeXml = "<web-app>"
  598               + "  <servlet>"
  599               + "    <servlet-name>s4</servlet-name>"
  600               + "    <servlet-class>sclass4</servlet-class>"
  601               + "  </servlet>"
  602               + "</web-app>";
  603           Document mergeDoc =
  604               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  605           WebXml mergeWebXml = new WebXml(mergeDoc);
  606           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  607           merger.mergeServlets(mergeWebXml);
  608           Iterator servletNames = srcWebXml.getServletNames();
  609           assertEquals("s1", servletNames.next());
  610           assertEquals("s2", servletNames.next());
  611           assertEquals("s3", servletNames.next());
  612           assertEquals("s4", servletNames.next());
  613           assertTrue(!servletNames.hasNext());
  614       }
  615   
  616       /**
  617        * Verifies that servlet init parameters are added after the load-on-startup
  618        * element of an already existing servlet definition.
  619        * 
  620        * @throws Exception If an unexpected error occurs
  621        */
  622       public void testMergingServletWithInitParamsThatIsAlreadyDefined()
  623           throws Exception
  624       {
  625           String srcXml = "<web-app>".trim()
  626               + "  <servlet>".trim()
  627               + "    <servlet-name>s1</servlet-name>".trim()
  628               + "    <servlet-class>sclass1</servlet-class>".trim()
  629               + "    <load-on-startup>1</load-on-startup>".trim()
  630               + "  </servlet>".trim()
  631               + "</web-app>";
  632           Document srcDoc =
  633               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  634           WebXml srcWebXml = new WebXml(srcDoc);
  635           String mergeXml = "<web-app>"
  636               + "  <servlet>".trim()
  637               + "    <servlet-name>s1</servlet-name>".trim()
  638               + "    <servlet-class>sclass1</servlet-class>".trim()
  639               + "    <init-param>".trim()
  640               + "      <param-name>s1param1</param-name>".trim()
  641               + "      <param-value>s1param1value</param-value>".trim()
  642               + "    </init-param>".trim()
  643               + "  </servlet>".trim()
  644               + "</web-app>";
  645           Document mergeDoc =
  646               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  647           WebXml mergeWebXml = new WebXml(mergeDoc);
  648           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  649           merger.mergeServlets(mergeWebXml);
  650           Element servletElement = srcWebXml.getServlet("s1");
  651           assertEquals("load-on-startup",
  652               ((Element) servletElement.getLastChild()).getTagName());
  653       }
  654   
  655       /**
  656        * Tests whether multiple servlet in the merge file are correctly inserted
  657        * into an empty descriptor.
  658        * 
  659        * @throws Exception If an unexpected error occurs
  660        */
  661       public void testMergeMultipleServletsIntoEmptyDocument() throws Exception
  662       {
  663           String srcXml = "<web-app></web-app>";
  664           Document srcDoc =
  665               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  666           WebXml srcWebXml = new WebXml(srcDoc);
  667           String mergeXml = "<web-app>"
  668               + "  <servlet>"
  669               + "    <servlet-name>s1</servlet-name>"
  670               + "    <servlet-class>sclass1</servlet-class>"
  671               + "  </servlet>"
  672               + "  <servlet>"
  673               + "    <servlet-name>s2</servlet-name>"
  674               + "    <servlet-class>sclass2</servlet-class>"
  675               + "  </servlet>"
  676               + "  <servlet>"
  677               + "    <servlet-name>s3</servlet-name>"
  678               + "    <servlet-class>sclass3</servlet-class>"
  679               + "  </servlet>"
  680               + "</web-app>";
  681           Document mergeDoc =
  682               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  683           WebXml mergeWebXml = new WebXml(mergeDoc);
  684           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  685           merger.mergeServlets(mergeWebXml);
  686           Iterator servletNames = srcWebXml.getServletNames();
  687           assertEquals("s1", servletNames.next());
  688           assertEquals("s2", servletNames.next());
  689           assertEquals("s3", servletNames.next());
  690           assertTrue(!servletNames.hasNext());
  691       }
  692   
  693       /**
  694        * Tests whether a single servlet with one mapping is correctly inserted
  695        * into an empty descriptor.
  696        * 
  697        * @throws Exception If an unexpected error occurs
  698        */
  699       public void testMergeOneServletWithOneMappingIntoEmptyDocument()
  700           throws Exception
  701       {
  702           String srcXml = "<web-app></web-app>";
  703           Document srcDoc =
  704               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  705           WebXml srcWebXml = new WebXml(srcDoc);
  706           String mergeXml = "<web-app>"
  707               + "  <servlet>"
  708               + "    <servlet-name>s1</servlet-name>"
  709               + "    <servlet-class>sclass1</servlet-class>"
  710               + "  </servlet>"
  711               + "  <servlet-mapping>"
  712               + "    <servlet-name>s1</servlet-name>"
  713               + "    <url-pattern>/s1mapping1</url-pattern>"
  714               + "  </servlet-mapping>"
  715               + "</web-app>";
  716           Document mergeDoc =
  717               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  718           WebXml mergeWebXml = new WebXml(mergeDoc);
  719           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  720           merger.mergeServlets(mergeWebXml);
  721           assertTrue(srcWebXml.hasServlet("s1"));
  722           Iterator servletMappings = srcWebXml.getServletMappings("s1");
  723           assertEquals("/s1mapping1", servletMappings.next());
  724           assertTrue(!servletMappings.hasNext());
  725       }
  726   
  727       /**
  728        * Tests whether a single servlet with multiple mappings is correctly 
  729        * inserted into an empty descriptor.
  730        * 
  731        * @throws Exception If an unexpected error occurs
  732        */
  733       public void testMergeOneServletWithMultipleMappingsIntoEmptyDocument()
  734           throws Exception
  735       {
  736           String srcXml = "<web-app></web-app>";
  737           Document srcDoc =
  738               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  739           WebXml srcWebXml = new WebXml(srcDoc);
  740           String mergeXml = "<web-app>"
  741               + "  <servlet>"
  742               + "    <servlet-name>s1</servlet-name>"
  743               + "    <servlet-class>sclass1</servlet-class>"
  744               + "  </servlet>"
  745               + "  <servlet-mapping>"
  746               + "    <servlet-name>s1</servlet-name>"
  747               + "    <url-pattern>/s1mapping1</url-pattern>"
  748               + "  </servlet-mapping>"
  749               + "  <servlet-mapping>"
  750               + "    <servlet-name>s1</servlet-name>"
  751               + "    <url-pattern>/s1mapping2</url-pattern>"
  752               + "  </servlet-mapping>"
  753               + "  <servlet-mapping>"
  754               + "    <servlet-name>s1</servlet-name>"
  755               + "    <url-pattern>/s1mapping3</url-pattern>"
  756               + "  </servlet-mapping>"
  757               + "</web-app>";
  758           Document mergeDoc =
  759               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  760           WebXml mergeWebXml = new WebXml(mergeDoc);
  761           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  762           merger.mergeServlets(mergeWebXml);
  763           assertTrue(srcWebXml.hasServlet("s1"));
  764           Iterator servletMappings = srcWebXml.getServletMappings("s1");
  765           assertEquals("/s1mapping1", servletMappings.next());
  766           assertEquals("/s1mapping2", servletMappings.next());
  767           assertEquals("/s1mapping3", servletMappings.next());
  768           assertTrue(!servletMappings.hasNext());
  769       }
  770   
  771       /**
  772        * Tests whether a single security role is correctly inserted into an empty
  773        * descriptor.
  774        * 
  775        * @throws Exception If an unexpected error occurs
  776        */
  777       public void testMergeSecurityRoleIntoEmptyDocument()
  778           throws Exception
  779       {
  780           String srcXml = "<web-app></web-app>";
  781           Document srcDoc =
  782               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  783           WebXml srcWebXml = new WebXml(srcDoc);
  784           String mergeXml = "<web-app>"
  785               + "  <security-role>"
  786               + "    <role-name>role1</role-name>"
  787               + "  </security-role>"
  788               + "</web-app>";
  789           Document mergeDoc =
  790               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  791           WebXml mergeWebXml = new WebXml(mergeDoc);
  792           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  793           merger.mergeSecurityRoles(mergeWebXml);
  794           Iterator securityRoleNames = srcWebXml.getSecurityRoleNames();
  795           assertTrue(securityRoleNames.hasNext());
  796           assertEquals("role1", securityRoleNames.next());
  797           assertTrue(!securityRoleNames.hasNext());
  798       }
  799   
  800       /**
  801        * Tests whether a single security role is ignored when the source
  802        * descriptor already contains a role with the same name.
  803        * 
  804        * @throws Exception If an unexpected error occurs
  805        */
  806       public void testMergeSecurityRoleIntoDocumentWithSameRole()
  807           throws Exception
  808       {
  809           String srcXml = "<web-app>"
  810               + "  <security-role>"
  811               + "    <description>A role</description>"
  812               + "    <role-name>role1</role-name>"
  813               + "  </security-role>"
  814               + "</web-app>";
  815           Document srcDoc =
  816               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  817           WebXml srcWebXml = new WebXml(srcDoc);
  818           String mergeXml = "<web-app>"
  819               + "  <security-role>"
  820               + "    <role-name>role1</role-name>"
  821               + "  </security-role>"
  822               + "</web-app>";
  823           Document mergeDoc =
  824               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  825           WebXml mergeWebXml = new WebXml(mergeDoc);
  826           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  827           merger.mergeSecurityRoles(mergeWebXml);
  828           Iterator securityRoleNames = srcWebXml.getSecurityRoleNames();
  829           assertTrue(securityRoleNames.hasNext());
  830           assertEquals("role1", securityRoleNames.next());
  831           assertTrue(!securityRoleNames.hasNext());
  832       }
  833   
  834       /**
  835        * Tests whether a single EJB reference is correctly inserted into an empty
  836        * descriptor.
  837        * 
  838        * @throws Exception If an unexpected error occurs
  839        */
  840       public void testMergeOneEjbRefIntoEmptyDocument()
  841           throws Exception
  842       {
  843           String srcXml = "<web-app></web-app>";
  844           Document srcDoc =
  845               builder.parse(new ByteArrayInputStream(srcXml.getBytes()));
  846           WebXml srcWebXml = new WebXml(srcDoc);
  847           String mergeXml = "<web-app>"
  848               + "  <ejb-ref>"
  849               + "    <ejb-ref-name>ejbref1</ejb-ref-name>"
  850               + "    <ejb-ref-type>ejbref1.type</ejb-ref-type>"
  851               + "    <home>ejbref1.homeInterface</home>"
  852               + "    <remote>ejbref1.remoteInterface</remote>"
  853               + "  </ejb-ref>"
  854               + "</web-app>";
  855           Document mergeDoc =
  856               builder.parse(new ByteArrayInputStream(mergeXml.getBytes()));
  857           WebXml mergeWebXml = new WebXml(mergeDoc);
  858           WebXmlMerger merger = new WebXmlMerger(srcWebXml);
  859           merger.mergeEjbRefs(mergeWebXml);
  860           Iterator ejbRefs = srcWebXml.getElements(WebXmlTag.EJB_REF); 
  861           assertTrue(ejbRefs.hasNext());
  862       }
  863   
  864   }

Save This Page
Home » cactus-1.8.0-src » org.apache.cactus.integration.ant.deployment.webapp » [javadoc | source]