You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by vi...@apache.org on 2002/11/01 17:36:46 UTC
cvs commit: jakarta-avalon-excalibur/altrmi/src/test/org/apache/excalibur/altrmi/test/dynamic DynamicInvokerTestCase.java
vinayc 2002/11/01 08:36:46
Added: altrmi/src/test/org/apache/excalibur/altrmi/test/dynamic
DynamicInvokerTestCase.java
Log:
Initial commit on providing Stub-less invocation within Altrmi.
This form of invocation removes the need for presence of any
generated stubs at the client(or server) for remote invocation.
Revision Changes Path
1.1 jakarta-avalon-excalibur/altrmi/src/test/org/apache/excalibur/altrmi/test/dynamic/DynamicInvokerTestCase.java
Index: DynamicInvokerTestCase.java
===================================================================
/*
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999-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 acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Commons", 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 apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* 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 org.apache.excalibur.altrmi.test.dynamic;
import junit.framework.TestCase;
import org.apache.excalibur.altrmi.client.AltrmiHostContext;
import org.apache.excalibur.altrmi.client.impl.DynamicInvoker;
import org
.apache
.excalibur
.altrmi
.client
.impl
.socket
.SocketCustomStreamHostContext;
import org.apache.excalibur.altrmi.server.PublicationDescription;
import org.apache.excalibur.altrmi.server.impl.AbstractServer;
import org
.apache
.excalibur
.altrmi
.server
.impl
.socket
.CompleteSocketCustomStreamServer;
import org.apache.excalibur.altrmi.test.TestInterface;
import org.apache.excalibur.altrmi.test.TestInterface2;
import org.apache.excalibur.altrmi.test.TestInterface3;
import org.apache.excalibur.altrmi.test.TestInterfaceImpl;
/**
* Test case for the stubless invoker of remote methods
*
* @author <a href="mailto:vinayc@apache.org">Vinay Chandran</a>
*/
public class DynamicInvokerTestCase extends TestCase
{
//-------Variables------------//
protected AbstractServer server;
protected TestInterfaceImpl testServer;
protected TestInterface testClient;
protected AltrmiHostContext altrmiHostContext;
protected DynamicInvoker dynamicInvoker;
//-------Constructor----------//
/**
* Cons.
* @param name
*/
public DynamicInvokerTestCase(String name)
{
super(name);
}
//-------TestCase overrides-----//
/**
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception
{
super.setUp();
// server side setup.
server = new CompleteSocketCustomStreamServer(10001);
testServer = new TestInterfaceImpl();
PublicationDescription pd =
new PublicationDescription(
TestInterface.class,
new Class[] { TestInterface3.class, TestInterface2.class });
server.publish(testServer, "Hello", pd);
server.start();
// Client side setup
altrmiHostContext =
new SocketCustomStreamHostContext("127.0.0.1", 10001);
dynamicInvoker = new DynamicInvoker(altrmiHostContext);
// just a kludge for unit testing given we are intrinsically dealing with
// threads, AltRMI being a client/server thing
Thread.yield();
}
/**
* @see junit.framework.TestCase#tearDown()
*/
protected void tearDown() throws Exception
{
testClient = null;
System.gc();
Thread.yield();
dynamicInvoker.close(); //close@client
Thread.yield();
server.stop(); //close@server
Thread.yield();
server = null;
testServer = null;
super.tearDown();
}
//-------test cases------------//
/**
* A very simple test
*
*/
public void testAHelloCall() throws Exception
{
// listOfMethods returns a string array of all the methods within
// the given published Name.
// This can be used to dynamically select any method to invoke
// within the given remote object.
assertNotNull(dynamicInvoker.listOfMethods("Hello"));
// Invoking the methods returning void
dynamicInvoker.invoke(
"Hello",
"hello(java.lang.String)",
new Object[] { "Hello!?" },
new Class[] { String.class });
// test the server has logged the message.
assertEquals(
"Hello!?",
((TestInterfaceImpl) testServer).getStoredState(
"void:hello(String)"));
//invoke a method returning primitive type
Integer ret =
(Integer) dynamicInvoker.invoke(
"Hello",
"hello2(int)",
new Object[] { new Integer(11)},
new Class[] { Integer.TYPE });
assertEquals(ret, new Integer(11));
}
/**
* test exceptions
*/
public void testExceptions() throws Exception
{
// Invoke on a non-existent remote object
boolean exceptionOccured = false;
try
{
dynamicInvoker.invoke("Helloooo", "somemethod", null, null);
}
catch (Exception e)
{
exceptionOccured = true;
}
assertTrue(exceptionOccured);
}
/**
* test methods with multiple arguments
*/
public void testMultiArgumentMethodInvocation() throws Exception
{
/*Altrmi right now expects method signature in a specific format.
* within the MethodRequest.namely with arguments spaced out by
* a comma+space.
* e.g. hello4(float, double) )
*/
//Here we test a case where the signature is developed liberally
StringBuffer buf =
(StringBuffer) dynamicInvoker.invoke(
"Hello",
"hello4(float,double)",
new Object[] { new Float(10.12), new Double(10.13)},
new Class[] { Float.TYPE, Double.TYPE });
assertEquals("10.12 10.13", buf.toString());
buf =
(StringBuffer) dynamicInvoker.invoke(
"Hello",
" hello4 ( float , double ) ",
new Object[] { new Float(10.15), new Double(10.17)},
new Class[] { Float.TYPE, Double.TYPE });
assertEquals("10.15 10.17", buf.toString());
}
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>