package org.jacorb.test.bugs.bugjac631;
/*
* JacORB - a free Java ORB
*
* Copyright (C) 1997-2006 The JacORB project.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
import static org.junit.Assert.assertTrue;
import org.jacorb.test.harness.ClientServerSetup;
import org.jacorb.test.harness.ClientServerTestCase;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.omg.CORBA.Any;
import org.omg.CORBA.Context;
import org.omg.CORBA.ExceptionList;
import org.omg.CORBA.INTERNAL;
import org.omg.CORBA.NVList;
import org.omg.CORBA.NamedValue;
import org.omg.CORBA.Request;
import org.omg.CORBA.UNKNOWN;
import org.omg.CORBA.UnknownUserException;
/**
* <code>BugJac631Test</code> is used by testing DII.
*
* @author <a href="mailto:Nick.Cross@prismtech.com">Nick Cross</a>
* @version 1.0
*/
public class BugJac631Test extends ClientServerTestCase
{
private org.omg.CORBA.Object server = null;
@Before
public void setUp() throws Exception
{
server = setup.getServerObject();
}
@BeforeClass
public static void beforeClassSetUp() throws Exception
{
setup = new ClientServerSetup(
"org.jacorb.test.bugs.bugjac631.ServerImpl" );
}
/**
* <code>testDIIcreaterequest</code> tests that invoking a DII call
* succeeds.
*
* @exception Exception if an error occurs
*/
@Test
public void testDIIcreaterequest () throws Exception
{
// Thanks to a rather good tutorial on
// http://www.unix.com.ua/orelly/java-ent/jenut/ch04_05.htm
// Now make a dynamic call to the myFunction method. The first step is
// to build the argument list. In this case, there's an int argument
// and then a inout int argument to the method, so create an NVList of
// length 2. Next create an Any object to hold the value of the
// argument and insert the desired value. Finally, wrap the Any object
// with a NamedValue and insert it into the NVList, specifying that it
// is an input parameter.
NVList argList = setup.getClientOrb ().create_list (2);
Any argument1 = setup.getClientOrb ().create_any ();
argument1.insert_long(-100);
Any argument2 = setup.getClientOrb ().create_any ();
argument2.insert_long(0);
NamedValue nvArg1 = argList.add_value ("paramIn", argument1, org.omg.CORBA.ARG_IN.value);
NamedValue nvArg2 = argList.add_value ("paramOut", argument2, org.omg.CORBA.ARG_OUT.value);
// Create an Any object to hold the return value of the method and
// wrap it in a NamedValue
Any result = setup.getClientOrb ().create_any();
result.insert_long (0);
NamedValue resultVal = setup.getClientOrb ().create_named_value("result", result,
org.omg.CORBA.ARG_OUT.value);
Context ctx = null;
// Create the method request using the default context, the name of
// the method, the NVList argument list, and the NamedValue for the
// result. Then invoke the method by calling invoke() on the Request.
Request thisReq =
server._create_request(ctx, "myFunction", argList, resultVal, null, null);
thisReq.invoke();
assertTrue (nvArg2.value ().extract_long () == nvArg1.value ().extract_long ());
// Get the return value from the Request object and output results.
result = thisReq.result().value();
assertTrue (result.extract_long () == -100);
// Should be no exception thrown.
assertTrue (thisReq.env ().exception () == null);
}
/**
* <code>testDIIcreaterequestsystemexception</code> tests that a DII call can throw a System
* Exception
*
* @exception Exception if an error occurs
*/
@Test
public void testDIIcreaterequestsystemexception () throws Exception
{
// Thanks to a rather good tutorial on
// http://www.unix.com.ua/orelly/java-ent/jenut/ch04_05.htm
// Now make a dynamic call to the myFunction method. The first step is
// to build the argument list. In this case, there's an int argument
// and then a inout int argument to the method, so create an NVList of
// length 2. Next create an Any object to hold the value of the
// argument and insert the desired value. Finally, wrap the Any object
// with a NamedValue and insert it into the NVList, specifying that it
// is an input parameter.
NVList argList = setup.getClientOrb ().create_list (2);
Any argument1 = setup.getClientOrb ().create_any ();
argument1.insert_long(10);
Any argument2 = setup.getClientOrb ().create_any ();
argument2.insert_long(0);
NamedValue nvArg1 = argList.add_value ("paramIn", argument1, org.omg.CORBA.ARG_IN.value);
NamedValue nvArg2 = argList.add_value ("paramOut", argument2, org.omg.CORBA.ARG_OUT.value);
// Create an Any object to hold the return value of the method and
// wrap it in a NamedValue
Any result = setup.getClientOrb ().create_any();
result.insert_long (0);
NamedValue resultVal = setup.getClientOrb ().create_named_value("result", result,
org.omg.CORBA.ARG_OUT.value);
// Get the local context from the ORB.
Context ctx = null;
// Build the exception list.
ExceptionList exceptions = null;
// Create the method request using the default context, the name of
// the method, the NVList argument list, and the NamedValue for the
// result. Then invoke the method by calling invoke() on the Request.
Request thisReq =
server._create_request(ctx, "myFunction", argList, resultVal, exceptions, null);
thisReq.invoke();
result = thisReq.result().value();
// Should be an exception thrown.
assertTrue (thisReq.env ().exception () != null);
assertTrue (thisReq.env ().exception () instanceof INTERNAL);
assertTrue (thisReq.env ().exception ().toString ().indexOf ("A system exception!") != -1);
assertTrue (nvArg2.value ().extract_long () != nvArg1.value ().extract_long ());
}
/**
* <code>testDIIcreaterequestuserexception</code> tests that a DII call can throw a User
* Exception
*
* @exception Exception if an error occurs
*/
@Test
public void testDIIcreaterequestuserexception () throws Exception
{
// Thanks to a rather good tutorial on
// http://www.unix.com.ua/orelly/java-ent/jenut/ch04_05.htm
// Now make a dynamic call to the myFunction method. The first step is
// to build the argument list. In this case, there's an int argument
// and then a inout int argument to the method, so create an NVList of
// length 2. Next create an Any object to hold the value of the
// argument and insert the desired value. Finally, wrap the Any object
// with a NamedValue and insert it into the NVList, specifying that it
// is an input parameter.
NVList argList = setup.getClientOrb ().create_list (2);
Any argument1 = setup.getClientOrb ().create_any ();
argument1.insert_long(100);
Any argument2 = setup.getClientOrb ().create_any ();
argument2.insert_long(0);
NamedValue nvArg1 = argList.add_value ("paramIn", argument1, org.omg.CORBA.ARG_IN.value);
NamedValue nvArg2 = argList.add_value ("paramOut", argument2, org.omg.CORBA.ARG_OUT.value);
// Create an Any object to hold the return value of the method and
// wrap it in a NamedValue
Any result = setup.getClientOrb ().create_any();
result.insert_long (0);
NamedValue resultVal = setup.getClientOrb ().create_named_value("result", result,
org.omg.CORBA.ARG_OUT.value);
// Get the local context from the ORB.
Context ctx = null;
// Build the exception list.
ExceptionList exceptions = new org.jacorb.orb.dii.ExceptionList();
exceptions.add (MyOwnExceptionHelper.type ());
// Create the method request using the default context, the name of
// the method, the NVList argument list, and the NamedValue for the
// result. Then invoke the method by calling invoke() on the Request.
Request thisReq =
server._create_request(ctx, "myFunction", argList, resultVal, exceptions, null);
thisReq.invoke();
result = thisReq.result().value();
// Should be an exception thrown.
assertTrue (thisReq.env ().exception () != null);
assertTrue
(((UnknownUserException)thisReq.env ().exception ()).except.type ().equal (MyOwnExceptionHelper.type ()));
assertTrue
("Param1 > 0".equals ((MyOwnExceptionHelper.read (((UnknownUserException)thisReq.env ().exception ()).except.create_input_stream ())).message));
assertTrue (nvArg2.value ().extract_long () != nvArg1.value ().extract_long ());
}
/**
* <code>testDIIcreaterequestunexpectedexception</code> tests that a DII call can throw a
* User Exception that has not been configured the via the exception list.
*
* @exception Exception if an error occurs
*/
@Test
public void testDIIcreaterequestunexpectedexception () throws Exception
{
// Thanks to a rather good tutorial on
// http://www.unix.com.ua/orelly/java-ent/jenut/ch04_05.htm
// Now make a dynamic call to the myFunction method. The first step is
// to build the argument list. In this case, there's an int argument
// and then a inout int argument to the method, so create an NVList of
// length 2. Next create an Any object to hold the value of the
// argument and insert the desired value. Finally, wrap the Any object
// with a NamedValue and insert it into the NVList, specifying that it
// is an input parameter.
NVList argList = setup.getClientOrb ().create_list (2);
Any argument1 = setup.getClientOrb ().create_any ();
argument1.insert_long(100);
Any argument2 = setup.getClientOrb ().create_any ();
argument2.insert_long(0);
NamedValue nvArg1 = argList.add_value ("paramIn", argument1, org.omg.CORBA.ARG_IN.value);
NamedValue nvArg2 = argList.add_value ("paramOut", argument2, org.omg.CORBA.ARG_OUT.value);
// Create an Any object to hold the return value of the method and
// wrap it in a NamedValue
Any result = setup.getClientOrb ().create_any();
result.insert_long (0);
NamedValue resultVal = setup.getClientOrb ().create_named_value("result", result,
org.omg.CORBA.ARG_OUT.value);
// Get the local context from the ORB.
Context ctx = null;
// Build the exception list.
ExceptionList exceptions = null;
// new org.jacorb.orb.dii.ExceptionList();
// exceptions.add (MyOwnExceptionHelper.type ());
// Create the method request using the default context, the name of
// the method, the NVList argument list, and the NamedValue for the
// result. Then invoke the method by calling invoke() on the Request.
Request thisReq =
server._create_request(ctx, "myFunction", argList, resultVal, exceptions, null);
thisReq.invoke();
result = thisReq.result().value();
// Should be an exception thrown.
assertTrue (thisReq.env ().exception () != null);
assertTrue (thisReq.env ().exception () instanceof UNKNOWN);
assertTrue (thisReq.env ().exception ().toString ().indexOf ("Caught an unknown exception with typecode id of IDL:org/jacorb/test/bugs/bugjac631/MyOwnException") != -1);
assertTrue (nvArg2.value ().extract_long () != nvArg1.value ().extract_long ());
}
/**
* <code>testDIIcreaterequestnullpointerexception</code> tests that a DII call can throw a
* Java Exception that has not been configured the via the exception list.
*
* @exception Exception if an error occurs
*/
@Test
public void testDIIcreaterequestnullpointerexception () throws Exception
{
// Thanks to a rather good tutorial on
// http://www.unix.com.ua/orelly/java-ent/jenut/ch04_05.htm
// Now make a dynamic call to the myFunction method. The first step is
// to build the argument list. In this case, there's an int argument
// and then a inout int argument to the method, so create an NVList of
// length 2. Next create an Any object to hold the value of the
// argument and insert the desired value. Finally, wrap the Any object
// with a NamedValue and insert it into the NVList, specifying that it
// is an input parameter.
NVList argList = setup.getClientOrb ().create_list (2);
Any argument1 = setup.getClientOrb ().create_any ();
argument1.insert_long(20);
Any argument2 = setup.getClientOrb ().create_any ();
argument2.insert_long(0);
NamedValue nvArg1 = argList.add_value ("paramIn", argument1, org.omg.CORBA.ARG_IN.value);
NamedValue nvArg2 = argList.add_value ("paramOut", argument2, org.omg.CORBA.ARG_OUT.value);
// Create an Any object to hold the return value of the method and
// wrap it in a NamedValue
Any result = setup.getClientOrb ().create_any();
result.insert_long (0);
NamedValue resultVal = setup.getClientOrb ().create_named_value("result", result,
org.omg.CORBA.ARG_OUT.value);
// Get the local context from the ORB.
Context ctx = null;
// Build the exception list.
ExceptionList exceptions = null;
// new org.jacorb.orb.dii.ExceptionList();
// exceptions.add (MyOwnExceptionHelper.type ());
// Create the method request using the default context, the name of
// the method, the NVList argument list, and the NamedValue for the
// result. Then invoke the method by calling invoke() on the Request.
Request thisReq =
server._create_request(ctx, "myFunction", argList, resultVal, exceptions, null);
thisReq.invoke();
result = thisReq.result().value();
// Should be an exception thrown.
assertTrue (thisReq.env ().exception () != null);
assertTrue (thisReq.env ().exception () instanceof UNKNOWN);
assertTrue (thisReq.env ().exception ().toString ().indexOf ("A nullpointer exception") != -1);
assertTrue (nvArg2.value ().extract_long () != nvArg1.value ().extract_long ());
}
}