gdaniels    2002/12/01 11:48:17

  Modified:    java/test/encoding PackageTests.java
  Added:       java/test/encoding TestCircularRefs.java
               java/test GenericLocalTest.java
  Log:
  Add a circular references (in Vectors) test, and a framework class which
  encapsulates standard local server testing code.
  
  Revision  Changes    Path
  1.26      +1 -0      xml-axis/java/test/encoding/PackageTests.java
  
  Index: PackageTests.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/encoding/PackageTests.java,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- PackageTests.java 20 Nov 2002 14:59:17 -0000      1.25
  +++ PackageTests.java 1 Dec 2002 19:48:17 -0000       1.26
  @@ -38,6 +38,7 @@
           suite.addTestSuite(TestOmittedValues.class);
           suite.addTestSuite(TestMultiRefIdentity.class);
           suite.addTestSuite(TestArray.class);
  +        suite.addTestSuite(TestCircularRefs.class);
           return suite;
       }
   }
  
  
  
  1.1                  xml-axis/java/test/encoding/TestCircularRefs.java
  
  Index: TestCircularRefs.java
  ===================================================================
  package test.encoding;
  
  import test.GenericLocalTest;
  
  import java.util.Vector;
  
  import org.apache.axis.client.Call;
  
  public class TestCircularRefs extends GenericLocalTest {
      public TestCircularRefs() {
          super("foo");
      }
  
      public TestCircularRefs(String s) {
          super(s);
      }
  
        public void testCircularVectors() throws Exception {
          Call call = getCall();
          Object result = call.invoke("getCircle", null);
  
          // This just tests that we don't get exceptions during deserialization
          // for now.  We're still getting nulls for some reason, and once that's
          // fixed we should uncomment this next line
          
          // assertTrue("Result wasn't an array", result.getClass().isArray());
        }
      
      /**
       * Service method.  Return a Vector containing an object graph with a loop.
       * 
       * @return a Vector with circular references
       */ 
      public Vector getCircle() {
          Vector vector1 = new Vector();
          vector1.addElement("AString");
          Vector vector2 = new Vector();
          vector2.addElement(vector1);
          vector1.addElement(vector2);
          return vector2;
      }    
  }
  
  
  
  1.1                  xml-axis/java/test/GenericLocalTest.java
  
  Index: GenericLocalTest.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Axis" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact [EMAIL PROTECTED]
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  package test;
  
  import org.apache.axis.server.AxisServer;
  import org.apache.axis.client.Call;
  import org.apache.axis.client.Service;
  import org.apache.axis.providers.java.RPCProvider;
  import org.apache.axis.handlers.soap.SOAPService;
  import org.apache.axis.transport.local.LocalTransport;
  import org.apache.axis.configuration.SimpleProvider;
  import org.apache.axis.configuration.BasicServerConfig;
  import junit.framework.TestCase;
  
  /**
   * This is a framework class which handles all the basic stuff necessary
   * to set up a local "roundtrip" test to an AxisServer.
   * 
   * To use it - extend this class with your own test.  Make sure if you
   * override setUp() that you call super.setUp() so that the engine gets
   * initialized correctly.  The method deploy() needs to be called to deploy
   * a target service and set up the transport to talk to it - note that this
   * is done by default in the no-argument setUp().  If you don't want this
   * behavior, or want to tweak names/classes, just call super.setUp(false)
   * instead of super.setUp() and the deploy() call won't happen.  
   * 
   * Then you get a Call object by calling getCall() and you're ready to rock.
   *
   * @author Glen Daniels ([EMAIL PROTECTED])
   */
  public class GenericLocalTest extends TestCase {
      protected AxisServer server;
      protected SimpleProvider config;
      protected LocalTransport transport;
  
      public GenericLocalTest(String s) {
          super(s);
      }
  
      /**
       * Default setUp, which automatically deploys the current class
       * as a service named "service".  Override to switch this off.
       * 
       * @throws Exception
       */ 
      protected void setUp() throws Exception {
          setUp(true);
      }
  
      /**
       * setUp which allows controlling whether or not deploy() is called.
       * 
       * @param deploy indicates whether we should call deploy()
       * @throws Exception
       */ 
      protected void setUp(boolean deploy) throws Exception {
          super.setUp();
          config = new BasicServerConfig();
          server = new AxisServer(config);
          transport = new LocalTransport(server);
          
          if (deploy)
              deploy();
      }
  
      /**
       * Get an initialized Call, ready to invoke us over the local transport.
       * 
       * @return an initialized Call object.
       */ 
      public Call getCall() {
          Call call = new Call(new Service());
          call.setTransport(transport);
          return call;
      }
      
      /**
       * Convenience method to deploy ourselves as a service
       */ 
      public void deploy() {
          deploy("service", this.getClass());
      }
  
      /**
       * Deploy a service to the local server we've set up, and point the
       * cached local transport object to the desired service name.
       * 
       * @param serviceName the name under which to deploy the service.
       * @param target class of the service.
       */ 
      public void deploy(String serviceName, Class target) {
          String className = target.getName();
  
          SOAPService service = new SOAPService(new RPCProvider());
          service.setOption("className", className);
          service.setOption("allowedMethods", "*");
  
          config.deployService(serviceName, service);
          transport.setRemoteService(serviceName);
      }
  }
  
  


Reply via email to