diff options
Diffstat (limited to 'TAO/orbsvcs/tests/Bug_1630_Regression/testclient.cpp')
-rw-r--r-- | TAO/orbsvcs/tests/Bug_1630_Regression/testclient.cpp | 230 |
1 files changed, 230 insertions, 0 deletions
diff --git a/TAO/orbsvcs/tests/Bug_1630_Regression/testclient.cpp b/TAO/orbsvcs/tests/Bug_1630_Regression/testclient.cpp new file mode 100644 index 00000000000..c7443b34692 --- /dev/null +++ b/TAO/orbsvcs/tests/Bug_1630_Regression/testclient.cpp @@ -0,0 +1,230 @@ +// +// $Id$ +// + +#include "tao/IFR_Client/IFR_BasicC.h" +#include "tao/IFR_Client/IFR_Client_Adapter_Impl.h" +#include "tao/AnyTypeCode/NVList.h" +#include "tao/ORB.h" +#include "ace/OS_NS_string.h" + +int main (int argc, char* argv[]) +{ + try + { + int failed = 0; + + ACE_DEBUG((LM_DEBUG, "Start of Client\n")); + // Initialise ORB. + // + CORBA::ORB_var orb = CORBA::ORB_init(argc, argv); + + // Find the Interface Repository. + // + ACE_DEBUG((LM_DEBUG, ". Find IFR\n")); + CORBA::Object_var ifr_obj = + orb->resolve_initial_references( "InterfaceRepository"); + + ACE_DEBUG((LM_DEBUG, ". Narrow IFR\n")); + CORBA::Repository_var ifr = CORBA::Repository::_narrow( ifr_obj.in()); + + if( CORBA::is_nil( ifr.in() ) ) + { + ACE_DEBUG((LM_DEBUG, "Nil IFR reference\n")); + return 1; + } + + ACE_DEBUG((LM_DEBUG, ". Construct interface\n")); + // Add an interface to the repository. + // + CORBA::InterfaceDefSeq baseInterfaces(1) ; + baseInterfaces.length(0) ; + CORBA::InterfaceDef_var interface = + ifr->create_interface( "IDL:interface865:1.0", + "interface865", + "1.0", + baseInterfaces) ; + + // Add an operation to the interface. + // First get some useful things. + // + ACE_DEBUG((LM_DEBUG, ". Get primitive (void)\n")); + CORBA::PrimitiveDef_var voidPrimitive = + ifr->get_primitive( CORBA::pk_void) ; + ACE_DEBUG((LM_DEBUG, ". Get primitive (char)\n")); + CORBA::PrimitiveDef_var charPrimitive = + ifr->get_primitive( CORBA::pk_char) ; + ACE_DEBUG((LM_DEBUG, ". Get primitive (long)\n")); + CORBA::PrimitiveDef_var longPrimitive = + ifr->get_primitive( CORBA::pk_long) ; + ACE_DEBUG((LM_DEBUG, ". Get primitive (short)\n")); + CORBA::PrimitiveDef_var shortPrimitive = + ifr->get_primitive( CORBA::pk_short) ; + + ACE_DEBUG((LM_DEBUG, ". create 3 parameters\n")); + // The operation has three parameters... + // + CORBA::ULong numParams = 3 ; + CORBA::ParDescriptionSeq parameters( numParams ) ; + parameters.length( numParams ) ; + + // ... which are: in char p1... + // + parameters[0].name = CORBA::string_dup("p1") ; + parameters[0].type_def = + CORBA::PrimitiveDef::_duplicate( charPrimitive.in() ) ; + parameters[0].type = charPrimitive->type() ; + parameters[0].mode = CORBA::PARAM_IN ; + + // ...out long p2... + // + parameters[1].name = CORBA::string_dup("p2") ; + parameters[1].type_def = + CORBA::PrimitiveDef::_duplicate( longPrimitive.in() ) ; + parameters[1].type = longPrimitive->type() ; + parameters[1].mode = CORBA::PARAM_OUT ; + + // ...and inout short p3 + // + parameters[2].name = CORBA::string_dup("p3") ; + parameters[2].type_def = + CORBA::PrimitiveDef::_duplicate( shortPrimitive.in() ) ; + parameters[2].type = shortPrimitive->type() ; + parameters[2].mode = CORBA::PARAM_INOUT ; + + // ...and no exceptions... + // + ACE_DEBUG((LM_DEBUG, ". create 0 excepts\n")); + CORBA::ExceptionDefSeq exceptions( 1 ) ; + exceptions.length( 0 ) ; + + // ...and no context ids + // + ACE_DEBUG((LM_DEBUG, ". create 0 cids\n")); + CORBA::ContextIdSeq contextIds( 1 ) ; + contextIds.length( 0 ) ; + + // Create the operation, called "f". + // + ACE_DEBUG((LM_DEBUG, ". create_operation\n")); + CORBA::OperationDef_var operation = + interface->create_operation( "IDL:interface865/f:1.0", + "f", + "1.0", + voidPrimitive.in(), + CORBA::OP_NORMAL, + parameters, + exceptions, + contextIds) ; + + + + // Create operation list. + // + CORBA::NVList_var opList ; + + ACE_DEBUG((LM_DEBUG, "About to call create_operation_list\n")); + orb->create_operation_list(operation.in (), + opList.out()) ; + + ACE_DEBUG((LM_DEBUG, "Call to create_operation_list succeeded\n")); + CORBA::ULong count = opList->count() ; + + if( count != numParams ) + { + ACE_DEBUG((LM_DEBUG, "Test failed - wrong number of elements n list\n")) ; + failed = 1 ; + } + + CORBA::NamedValue_ptr nv = opList->item( 0 ) ; + if(ACE_OS::strcmp( nv->name(), "p1") != 0 ) + { + ACE_DEBUG((LM_DEBUG, "Test failed: param 1 wrong name\n")); + failed = 1 ; + } + + CORBA::Boolean const eq_char = + nv->value()->type()->equal (CORBA::_tc_char); + + if( !eq_char ) + { + ACE_DEBUG((LM_DEBUG, "Test failed: param 1 wrong type\n")); + failed = 1 ; + } + if( nv->flags() != CORBA::ARG_IN ) + { + ACE_DEBUG((LM_DEBUG, "Test failed: param 1 wrong mode\n")); + failed = 1 ; + } + + nv = opList->item( 1 ) ; + if(ACE_OS::strcmp( nv->name(), "p2") != 0 ) + { + ACE_DEBUG((LM_DEBUG, "Test failed: param 2 wrong name\n")); + failed = 1 ; + } + + CORBA::Boolean const eq_long = + nv->value()->type()->equal (CORBA::_tc_long); + + if( !eq_long ) + { + ACE_DEBUG((LM_DEBUG, "Test failed: param 2 wrong type\n")); + failed = 1 ; + } + if( nv->flags() != CORBA::ARG_OUT ) + { + ACE_DEBUG((LM_DEBUG, "Test failed: param 2 wrong mode\n")); + failed = 1 ; + } + + nv = opList->item( 2 ) ; + if(ACE_OS::strcmp( nv->name(), "p3") != 0 ) + { + ACE_DEBUG((LM_DEBUG, "Test failed: param 3 wrong name\n")); + failed = 1 ; + } + + CORBA::Boolean const eq_short = + nv->value()->type()->equal (CORBA::_tc_short); + + if( !eq_short ) + { + ACE_DEBUG((LM_DEBUG, "Test failed: param 3 wrong type\n")); + failed = 1 ; + } + if( nv->flags() != CORBA::ARG_INOUT ) + { + ACE_DEBUG((LM_DEBUG, "Test failed: param 3 wrong mode\n")); + failed = 1 ; + } + + // opList->free(); + //operation->destroy(); + + // Finally destroy the interface. + // + interface->destroy() ; + + //orb->destroy(); + + if( failed == 1 ) + { + return 1 ; + } + ACE_DEBUG((LM_DEBUG, ". seems OK\n")); + } + catch (const CORBA::Exception& ex) + { + ex._tao_print_exception ("Exception - test failed:\n"); + return 1; + } + catch (...) + { + ACE_DEBUG((LM_DEBUG, "An unknown exception occured - test failed\n")); + return 1; + } + + + return 0 ; +} |