| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package org.apache.tuscany.sca.binding.corba.testing; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertNotSame; |
| import static org.junit.Assert.assertTrue; |
| import static org.junit.Assert.fail; |
| |
| import java.lang.annotation.Annotation; |
| import java.lang.reflect.Array; |
| |
| import junit.framework.Assert; |
| |
| import org.apache.tuscany.sca.binding.corba.provider.exceptions.CorbaException; |
| import org.apache.tuscany.sca.binding.corba.provider.exceptions.RequestConfigurationException; |
| import org.apache.tuscany.sca.binding.corba.provider.reference.DynaCorbaRequest; |
| import org.apache.tuscany.sca.binding.corba.provider.reference.DynaCorbaResponse; |
| import org.apache.tuscany.sca.binding.corba.testing.enums.Color; |
| import org.apache.tuscany.sca.binding.corba.testing.exceptions.CalcPackage.DivByZero; |
| import org.apache.tuscany.sca.binding.corba.testing.exceptions.CalcPackage.NotSupported; |
| import org.apache.tuscany.sca.binding.corba.testing.generated.SimpleStruct; |
| import org.apache.tuscany.sca.binding.corba.testing.generated.SomeStruct; |
| import org.apache.tuscany.sca.binding.corba.testing.hierarchy.ArraysTestStruct; |
| import org.apache.tuscany.sca.binding.corba.testing.hierarchy.DummyObject; |
| import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InnerUnion; |
| import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InvalidCorbaArray; |
| import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InvalidEnum1; |
| import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InvalidEnum2; |
| import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InvalidEnum3; |
| import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InvalidStruct1; |
| import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InvalidStruct2; |
| import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InvalidStruct3; |
| import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InvalidUnion1; |
| import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InvalidUnion2; |
| import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InvalidUnion3; |
| import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InvalidUnion4; |
| import org.apache.tuscany.sca.binding.corba.testing.hierarchy.InvalidUnion5; |
| import org.apache.tuscany.sca.binding.corba.testing.hierarchy.RichUnion; |
| import org.apache.tuscany.sca.binding.corba.testing.servants.ArraysSetterServant; |
| import org.apache.tuscany.sca.binding.corba.testing.servants.ArraysUnionsServant; |
| import org.apache.tuscany.sca.binding.corba.testing.servants.ArraysUnionsTuscanyServant; |
| import org.apache.tuscany.sca.binding.corba.testing.servants.CalcServant; |
| import org.apache.tuscany.sca.binding.corba.testing.servants.EnumManagerServant; |
| import org.apache.tuscany.sca.binding.corba.testing.servants.ObjectManagerServant; |
| import org.apache.tuscany.sca.binding.corba.testing.servants.PrimitivesSetterServant; |
| import org.apache.tuscany.sca.binding.corba.testing.servants.TestObjectServant; |
| import org.apache.tuscany.sca.host.corba.naming.TransientNameServer; |
| import org.apache.tuscany.sca.host.corba.naming.TransientNameService; |
| import org.junit.AfterClass; |
| import org.junit.BeforeClass; |
| import org.junit.Ignore; |
| import org.junit.Test; |
| import org.omg.CORBA.ORB; |
| import org.omg.CORBA.Object; |
| import org.omg.CosNaming.NameComponent; |
| import org.omg.CosNaming.NamingContext; |
| import org.omg.CosNaming.NamingContextExt; |
| import org.omg.CosNaming.NamingContextExtHelper; |
| import org.omg.CosNaming.NamingContextHelper; |
| |
| /** |
| * @version $Rev$ $Date$ |
| * Tests API for dynamic CORBA requests. Tests handling various Java |
| * types. |
| */ |
| public class CorbaTypesTestCase { |
| private static TransientNameServer server; |
| private static ORB orb; |
| |
| private static Object refPrimitivesSetter; |
| private static Object refArraysSetter; |
| private static Object refTestObject; |
| private static Object refCalcObject; |
| private static Object refObjectManager; |
| private static Object refEnumManager; |
| private static Object refArraysUnions; |
| |
| /** |
| * Spawns tnameserv process (must be in PATH). Initializes test servants and |
| * stores it's references so tests can use it. |
| */ |
| @BeforeClass |
| public static void setUp() { |
| try { |
| try { |
| server = |
| new TransientNameServer(TestConstants.TEST1_HOST, TestConstants.TEST1_PORT, |
| TransientNameService.DEFAULT_SERVICE_NAME); |
| Thread t = server.start(); |
| if (t == null) { |
| Assert.fail("The naming server cannot be started"); |
| } |
| orb = server.getORB(); |
| } catch (Throwable e) { |
| e.printStackTrace(); |
| Assert.fail(e.getMessage()); |
| } |
| |
| Object nameService = orb.resolve_initial_references("NameService"); |
| NamingContext namingContext = NamingContextHelper.narrow(nameService); |
| |
| PrimitivesSetterServant singleSetter = new PrimitivesSetterServant(); |
| ArraysSetterServant arraysSetter = new ArraysSetterServant(); |
| TestObjectServant complexObject = new TestObjectServant(); |
| CalcServant calcObject = new CalcServant(); |
| ObjectManagerServant objectManager = new ObjectManagerServant(); |
| EnumManagerServant enumManager = new EnumManagerServant(); |
| ArraysUnionsServant arraysUnions = new ArraysUnionsServant(); |
| |
| orb.connect(singleSetter); |
| orb.connect(arraysSetter); |
| |
| NameComponent nc; |
| NameComponent[] path; |
| |
| nc = new NameComponent("PrimitivesSetter", ""); |
| path = new NameComponent[] {nc}; |
| namingContext.rebind(path, singleSetter); |
| |
| nc = new NameComponent("ArraysSetter", ""); |
| path = new NameComponent[] {nc}; |
| namingContext.rebind(path, arraysSetter); |
| |
| nc = new NameComponent("TestObject", ""); |
| path = new NameComponent[] {nc}; |
| namingContext.rebind(path, complexObject); |
| |
| nc = new NameComponent("CalcObject", ""); |
| path = new NameComponent[] {nc}; |
| namingContext.rebind(path, calcObject); |
| |
| nc = new NameComponent("ObjectManager", ""); |
| path = new NameComponent[] {nc}; |
| namingContext.rebind(path, objectManager); |
| |
| nc = new NameComponent("EnumManager", ""); |
| path = new NameComponent[] {nc}; |
| namingContext.rebind(path, enumManager); |
| |
| nc = new NameComponent("ArraysUnions", ""); |
| path = new NameComponent[] {nc}; |
| namingContext.rebind(path, arraysUnions); |
| |
| NamingContextExt nce = NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService")); |
| |
| refArraysSetter = nce.resolve(nce.to_name("ArraysSetter")); |
| refPrimitivesSetter = nce.resolve(nce.to_name("PrimitivesSetter")); |
| refTestObject = nce.resolve(nce.to_name("TestObject")); |
| refCalcObject = nce.resolve(nce.to_name("CalcObject")); |
| refObjectManager = nce.resolve(nce.to_name("ObjectManager")); |
| refEnumManager = nce.resolve(nce.to_name("EnumManager")); |
| refArraysUnions = nce.resolve(nce.to_name("ArraysUnions")); |
| |
| } catch (Exception e) { |
| e.printStackTrace(); |
| } |
| } |
| |
| @AfterClass |
| public static void stop() { |
| server.stop(); |
| } |
| |
| /** |
| * Tests remote operation, basing on given reference, operation name, |
| * arguments, expected return type and content |
| * |
| * @param ref remote object |
| * @param operationName operation to invoke |
| * @param clazz expected return type |
| * @param arguments array of operation arguments |
| * @param equalTo expected return content |
| */ |
| private void dynaTestInvoker(Object ref, |
| String operationName, |
| Class<?> clazz, |
| java.lang.Object[] arguments, |
| java.lang.Object equalTo) { |
| |
| try { |
| DynaCorbaRequest request = new DynaCorbaRequest(ref, operationName); |
| request.setOutputType(clazz); |
| for (int i = 0; arguments != null && i < arguments.length; i++) { |
| request.addArgument(arguments[i]); |
| } |
| |
| DynaCorbaResponse response = request.invoke(); |
| java.lang.Object content = (java.lang.Object)response.getContent(); |
| assertTrue(content.getClass().equals(clazz)); |
| if (equalTo != null && equalTo.getClass().isArray()) { |
| for (int i = 0; i < Array.getLength(equalTo); i++) { |
| assertTrue(Array.get(content, i).equals(Array.get(equalTo, i))); |
| } |
| } else { |
| assertTrue(content.equals(equalTo)); |
| } |
| } catch (Exception e) { |
| e.printStackTrace(); |
| fail("Error while invoking " + operationName); |
| } |
| } |
| |
| /** |
| * Tests passing (and getting as result) varied primitives |
| */ |
| @Test |
| public void test_setPrimitives() { |
| |
| dynaTestInvoker(refPrimitivesSetter, "setBoolean", Boolean.class, new Boolean[] {true}, true); |
| dynaTestInvoker(refPrimitivesSetter, "setOctet", Byte.class, new Byte[] {1}, (byte)1); |
| dynaTestInvoker(refPrimitivesSetter, "setChar", Character.class, new Character[] {'A'}, 'A'); |
| dynaTestInvoker(refPrimitivesSetter, "setShort", Short.class, new Short[] {1}, (short)1); |
| dynaTestInvoker(refPrimitivesSetter, "setLong", Integer.class, new Integer[] {1}, (int)1); |
| dynaTestInvoker(refPrimitivesSetter, "setLongLong", Long.class, new Long[] {(long)1}, (long)1); |
| dynaTestInvoker(refPrimitivesSetter, "setFloat", Float.class, new Float[] {(float)1}, (float)1); |
| dynaTestInvoker(refPrimitivesSetter, "setDouble", Double.class, new Double[] {(double)1}, (double)1); |
| dynaTestInvoker(refPrimitivesSetter, "setString", String.class, new String[] {"1"}, "1"); |
| |
| } |
| |
| /** |
| * Tests passing (and getting as result) varied types sequences |
| */ |
| @Test |
| public void test_setArrays() { |
| |
| dynaTestInvoker(refArraysSetter, |
| "setBoolean", |
| Boolean[].class, |
| new Boolean[][] {new Boolean[] {false, true}}, |
| new Boolean[] {false, true}); |
| |
| dynaTestInvoker(refArraysSetter, |
| "setChar", |
| Character[].class, |
| new Character[][] {new Character[] {'A', 'B'}}, |
| new Character[] {'A', 'B'}); |
| |
| dynaTestInvoker(refArraysSetter, "setOctet", Byte[].class, new Byte[][] {new Byte[] {1, 2}}, new Byte[] {1, 2}); |
| |
| dynaTestInvoker(refArraysSetter, "setShort", Short[].class, new Short[][] {new Short[] {1, 2}}, new Short[] {1, |
| 2}); |
| |
| dynaTestInvoker(refArraysSetter, |
| "setLong", |
| Integer[].class, |
| new Integer[][] {new Integer[] {1, 2}}, |
| new Integer[] {1, 2}); |
| |
| dynaTestInvoker(refArraysSetter, |
| "setLongLong", |
| Long[].class, |
| new Long[][] {new Long[] {new Long(1), new Long(2)}}, |
| new Long[] {new Long(1), new Long(2)}); |
| |
| dynaTestInvoker(refArraysSetter, |
| "setFloat", |
| Float[].class, |
| new Float[][] {new Float[] {new Float(1.0), new Float(2.0)}}, |
| new Float[] {new Float(1.0), new Float(2.0)}); |
| |
| dynaTestInvoker(refArraysSetter, |
| "setDouble", |
| Double[].class, |
| new Double[][] {new Double[] {new Double(1.0), new Double(2.0)}}, |
| new Double[] {new Double(1.0), new Double(2.0)}); |
| |
| dynaTestInvoker(refArraysSetter, |
| "setString", |
| String[].class, |
| new String[][] {new String[] {"A", "B"}}, |
| new String[] {"A", "B"}); |
| |
| } |
| |
| /** |
| * Tests passing (and getting as result) complex structure |
| */ |
| @Test |
| public void test_TestObject_setStruct() { |
| DynaCorbaRequest request = new DynaCorbaRequest(refTestObject, "setStruct"); |
| |
| SomeStruct struct = new SomeStruct(); |
| SimpleStruct inner = new SimpleStruct(); |
| inner.field1 = TestConstants.STR_1; |
| inner.field2 = TestConstants.INT_1; |
| struct.innerStruct = inner; |
| struct.str_list = TestConstants.STR_ARR_2; |
| struct.twoDimSeq = TestConstants.INT_ARRAY_2_DIM; |
| struct.threeDimSeq = TestConstants.INT_ARRAY_3_DIM; |
| struct.str = TestConstants.STR_1; |
| |
| try { |
| request.addArgument(struct); |
| request.setOutputType(SomeStruct.class); |
| DynaCorbaResponse response = request.invoke(); |
| SomeStruct result = (SomeStruct)response.getContent(); |
| assertTrue(TestConstants.are2DimArraysEqual(result.twoDimSeq, TestConstants.INT_ARRAY_2_DIM)); |
| assertTrue(TestConstants.are3DimArraysEqual(result.threeDimSeq, TestConstants.INT_ARRAY_3_DIM)); |
| assertEquals(TestConstants.STR_1, result.str); |
| assertEquals(TestConstants.STR_ARR_2[0], result.str_list[0]); |
| assertEquals(TestConstants.STR_ARR_2[1], result.str_list[1]); |
| assertEquals(TestConstants.STR_1, result.innerStruct.field1); |
| assertEquals(TestConstants.INT_1, result.innerStruct.field2); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| fail("Exception occured during tests: " + e); |
| } |
| } |
| |
| /** |
| * Test passing (and getting as result) simple two-field structure |
| */ |
| @Test |
| public void test_TestObject_setSimpleStruct() { |
| SimpleStruct struct = new SimpleStruct(); |
| struct.field1 = TestConstants.STR_1; |
| struct.field2 = TestConstants.INT_1; |
| DynaCorbaRequest request = new DynaCorbaRequest(refTestObject, "setSimpleStruct"); |
| try { |
| request.setOutputType(SimpleStruct.class); |
| request.addArgument(struct); |
| DynaCorbaResponse response = request.invoke(); |
| SimpleStruct retStruct = (SimpleStruct)response.getContent(); |
| assertTrue(retStruct.field1.equals(struct.field1) && retStruct.field2 == struct.field2); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| fail("Exception occured during tests: " + e); |
| } |
| } |
| |
| /** |
| * Tests passing (and getting as result) two dim. sequence of long. |
| */ |
| @Test |
| public void test_TestObject_setLongSeq2() { |
| int[][] arr1 = new int[2][2]; |
| for (int i = 0; i < 2; i++) { |
| for (int j = 0; j < 2; j++) { |
| arr1[i][j] = (int)(Math.random() * 1000); |
| } |
| } |
| DynaCorbaRequest request = new DynaCorbaRequest(refTestObject, "setLongSeq2"); |
| try { |
| request.setOutputType(arr1.getClass()); |
| request.addArgument(arr1); |
| DynaCorbaResponse response = request.invoke(); |
| int[][] arr2 = (int[][])response.getContent(); |
| for (int i = 0; i < 2; i++) { |
| for (int j = 0; j < 2; j++) { |
| assertEquals(arr1[i][j], arr2[i][j]); |
| } |
| } |
| } catch (Exception e) { |
| e.printStackTrace(); |
| fail("Exception occured during tests: " + e); |
| } |
| } |
| |
| /** |
| * Tests passing multiple complex attributes. |
| */ |
| @Test |
| public void test_TestObject_pickStructFromArgs() { |
| SomeStruct arg1 = new SomeStruct(); |
| SomeStruct arg2 = new SomeStruct(); |
| SomeStruct arg3 = new SomeStruct(); |
| |
| SimpleStruct inner = new SimpleStruct(); |
| inner.field1 = TestConstants.STR_1; |
| inner.field2 = TestConstants.INT_1; |
| |
| arg1.innerStruct = inner; |
| arg2.innerStruct = inner; |
| arg3.innerStruct = inner; |
| |
| arg1.str = TestConstants.STR_1; |
| arg2.str = TestConstants.STR_2; |
| arg3.str = TestConstants.STR_3; |
| |
| arg1.str_list = TestConstants.STR_ARR_1; |
| arg2.str_list = TestConstants.STR_ARR_2; |
| arg3.str_list = TestConstants.STR_ARR_2; |
| |
| arg1.threeDimSeq = TestConstants.INT_ARRAY_3_DIM; |
| arg2.threeDimSeq = TestConstants.INT_ARRAY_3_DIM; |
| arg3.threeDimSeq = TestConstants.INT_ARRAY_3_DIM; |
| |
| arg1.twoDimSeq = TestConstants.INT_ARRAY_2_DIM; |
| arg2.twoDimSeq = TestConstants.INT_ARRAY_2_DIM; |
| arg3.twoDimSeq = TestConstants.INT_ARRAY_2_DIM; |
| |
| DynaCorbaRequest request = new DynaCorbaRequest(refTestObject, "pickStructFromArgs"); |
| try { |
| |
| request.setOutputType(SomeStruct.class); |
| request.addArgument(arg1); |
| request.addArgument(arg2); |
| request.addArgument(arg3); |
| request.addArgument(1); |
| DynaCorbaResponse response = request.invoke(); |
| SomeStruct result = (SomeStruct)response.getContent(); |
| |
| // just make sure that servant returned right structure |
| assertTrue(result.str.equals(TestConstants.STR_1)); |
| } catch (Exception e) { |
| fail("Exception occured during tests " + e); |
| e.printStackTrace(); |
| } |
| |
| } |
| |
| /** |
| * Tests handling user defined remote exception (single declared) |
| */ |
| @Test |
| public void test_singleException() { |
| DynaCorbaRequest request1 = new DynaCorbaRequest(refCalcObject, "div"); |
| try { |
| request1.addArgument(2d); |
| request1.addArgument(2d); |
| request1.setOutputType(Double.class); |
| request1.addExceptionType(DivByZero.class); |
| request1.invoke(); |
| } catch (Exception e) { |
| fail(); |
| } |
| |
| DynaCorbaRequest request2 = new DynaCorbaRequest(refCalcObject, "div"); |
| try { |
| request2.addArgument(2d); |
| request2.addArgument(0d); |
| request2.setOutputType(Double.class); |
| request2.addExceptionType(DivByZero.class); |
| request2.invoke(); |
| } catch (DivByZero e) { |
| assertTrue(e.info != null && e.arguments != null && e.arguments.arg1 == 2 && e.arguments.arg2 == 0); |
| } catch (Exception exc) { |
| exc.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| /** |
| * Tests handling user defined multiple exceptions |
| */ |
| @Test |
| public void test_multipleExceptions() { |
| DynaCorbaRequest request = new DynaCorbaRequest(refCalcObject, "divForSmallArgs"); |
| try { |
| request.addArgument(101d); |
| request.addArgument(101d); |
| request.setOutputType(Double.class); |
| request.addExceptionType(DivByZero.class); |
| request.addExceptionType(NotSupported.class); |
| request.invoke(); |
| } catch (Exception e) { |
| assertTrue(e instanceof NotSupported); |
| } |
| } |
| |
| /** |
| * Tests handling exceptions while user defined no exceptions |
| */ |
| @Test |
| public void test_noExceptionsDeclared() { |
| DynaCorbaRequest request = new DynaCorbaRequest(refCalcObject, "div"); |
| try { |
| request.addArgument(1d); |
| request.addArgument(0d); |
| request.setOutputType(Double.class); |
| request.invoke(); |
| fail(); |
| } catch (Exception e) { |
| assertTrue(e instanceof RequestConfigurationException); |
| } |
| } |
| |
| /** |
| * Tests handling exceptions while user defined no such exception |
| */ |
| @Test |
| public void test_noSuchExceptionDeclared() { |
| DynaCorbaRequest request = new DynaCorbaRequest(refCalcObject, "div"); |
| try { |
| request.addArgument(1d); |
| request.addArgument(0d); |
| request.addExceptionType(NotSupported.class); |
| request.setOutputType(Double.class); |
| request.invoke(); |
| fail(); |
| } catch (Exception e) { |
| assertTrue(e instanceof RequestConfigurationException); |
| } |
| } |
| |
| /** |
| * Tests handling non existing operation situation |
| */ |
| @Test |
| public void test_systemException_BAD_OPERATION() { |
| DynaCorbaRequest request = new DynaCorbaRequest(refCalcObject, "thisOperationSurelyDoesNotExist"); |
| try { |
| request.invoke(); |
| fail(); |
| } catch (Exception e) { |
| assertTrue(e instanceof CorbaException); |
| } |
| } |
| |
| /** |
| * Tests obtaining references to other objects and using them with specified |
| * user interface |
| */ |
| @Test |
| @Ignore("Cause of tnameservice hang on stop") |
| public void test_enchancedReferences() { |
| DynaCorbaRequest request = null; |
| try { |
| request = new DynaCorbaRequest(refObjectManager, "getDummyObject"); |
| request.setOutputType(DummyObject.class); |
| DynaCorbaResponse response = request.invoke(); |
| DummyObject dummy = (DummyObject)response.getContent(); |
| DummyObject dummy2 = dummy.cloneObject(); |
| dummy2.cloneObject(); |
| assertNotSame(dummy.getLong(), dummy2.getLong()); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| /** |
| * Test passing enums as arguments and retrieving them as a result |
| */ |
| @Test |
| public void test_enums() { |
| try { |
| DynaCorbaRequest request = new DynaCorbaRequest(refEnumManager, "getColor"); |
| Color color = Color.green; |
| request.addArgument(color); |
| request.setOutputType(Color.class); |
| DynaCorbaResponse response = request.invoke(); |
| Color result = (Color)response.getContent(); |
| assertEquals(color.value(), result.value()); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| /** |
| * Tests recognizing structures |
| */ |
| @Test |
| public void test_structValidation() { |
| DynaCorbaRequest request = null; |
| try { |
| request = new DynaCorbaRequest(refArraysSetter, "whatever"); |
| request.setOutputType(InvalidStruct1.class); |
| fail(); |
| } catch (Exception e) { |
| assertTrue(e instanceof RequestConfigurationException); |
| } |
| |
| try { |
| request = new DynaCorbaRequest(refArraysSetter, "whatever"); |
| request.setOutputType(InvalidStruct2.class); |
| fail(); |
| } catch (Exception e) { |
| assertTrue(e instanceof RequestConfigurationException); |
| } |
| |
| try { |
| request = new DynaCorbaRequest(refArraysSetter, "whatever"); |
| request.setOutputType(InvalidStruct3.class); |
| fail(); |
| } catch (Exception e) { |
| assertTrue(e instanceof RequestConfigurationException); |
| } |
| |
| try { |
| request = new DynaCorbaRequest(refArraysSetter, "whatever"); |
| request.setOutputType(SomeStruct.class); |
| } catch (Exception e) { |
| fail(); |
| } |
| } |
| |
| /** |
| * Tests recognizing enums |
| */ |
| @Test |
| public void test_enumValidation() { |
| DynaCorbaRequest request = null; |
| try { |
| request = new DynaCorbaRequest(refArraysSetter, "whatever"); |
| request.setOutputType(InvalidEnum1.class); |
| fail(); |
| } catch (Exception e) { |
| assertTrue(e instanceof RequestConfigurationException); |
| } |
| |
| try { |
| request = new DynaCorbaRequest(refArraysSetter, "whatever"); |
| request.setOutputType(InvalidEnum2.class); |
| fail(); |
| } catch (Exception e) { |
| assertTrue(e instanceof RequestConfigurationException); |
| } |
| |
| try { |
| request = new DynaCorbaRequest(refArraysSetter, "whatever"); |
| request.setOutputType(InvalidEnum3.class); |
| fail(); |
| } catch (Exception e) { |
| assertTrue(e instanceof RequestConfigurationException); |
| } |
| |
| try { |
| request = new DynaCorbaRequest(refArraysSetter, "whatever"); |
| request.setOutputType(Color.class); |
| } catch (Exception e) { |
| fail(); |
| } |
| } |
| |
| /** |
| * Tests handling passing wrong params |
| */ |
| @Test |
| public void test_systemException_BAD_PARAM() { |
| try { |
| DynaCorbaRequest request = new DynaCorbaRequest(refCalcObject, "div"); |
| request.setOutputType(Double.class); |
| request.addArgument(3d); |
| request.invoke(); |
| fail(); |
| } catch (Exception e) { |
| if (e instanceof CorbaException) { |
| assertTrue(true); |
| } else { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| } |
| |
| /** |
| * Tests passing CORBA arrays |
| */ |
| @Test |
| public void test_arraysPassing() { |
| try { |
| DynaCorbaRequest request = new DynaCorbaRequest(refArraysUnions, "passStringArray"); |
| Annotation[] notes = |
| ArraysUnionsTuscanyServant.class.getMethod("passStringArray", new Class<?>[] {String[][].class}) |
| .getAnnotations(); |
| request.setOutputType(String[][].class, notes); |
| String[][] argument = { {"Hello", "World"}, {"Hi", "again"}}; |
| request.addArgument(argument, notes); |
| DynaCorbaResponse response = request.invoke(); |
| String[][] result = (String[][])response.getContent(); |
| for (int i = 0; i < argument.length; i++) { |
| for (int j = 0; j < argument[i].length; j++) { |
| assertEquals(argument[i][j], result[i][j]); |
| } |
| } |
| } catch (Exception e) { |
| e.printStackTrace(); |
| fail(); |
| } |
| |
| try { |
| DynaCorbaRequest request = new DynaCorbaRequest(refArraysUnions, "passTestStruct"); |
| ArraysTestStruct arg = new ArraysTestStruct(); |
| String[] field1 = {"Hello", "World"}; |
| arg.field1 = field1; |
| int[][] field2 = { {4, 2, 2, 5}, {6, 12, 5, 8}}; |
| arg.field2 = field2; |
| float[][][] field3 = { { {2, 6}, {2, 7}, {9, 3}, {4, 6}}, { {3, 7}, {6, 6}, {3, 5}, {6, 2}}}; |
| arg.field3 = field3; |
| request.addArgument(arg); |
| request.setOutputType(ArraysTestStruct.class); |
| DynaCorbaResponse response = request.invoke(); |
| ArraysTestStruct result = (ArraysTestStruct)response.getContent(); |
| for (int i = 0; i < arg.field1.length; i++) { |
| assertEquals(arg.field1[i], result.field1[i]); |
| } |
| for (int i = 0; i < arg.field2.length; i++) { |
| for (int j = 0; j < arg.field2[i].length; j++) { |
| assertEquals(arg.field2[i][j], result.field2[i][j]); |
| } |
| } |
| for (int i = 0; i < arg.field2.length; i++) { |
| for (int j = 0; j < arg.field2[i].length; j++) { |
| for (int k = 0; k < arg.field3[i][j].length; k++) { |
| assertEquals(arg.field3[i][j][k], result.field3[i][j][k], 0.0); |
| } |
| } |
| } |
| } catch (Exception e) { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| /** |
| * Tests situation when CORBA array dimension size doesn't match |
| * CORBA array annotation arguments (which sets dimension lengths) |
| */ |
| @Test |
| public void test_invalidArrayAnnotationSize() { |
| try { |
| DynaCorbaRequest request = new DynaCorbaRequest(refArraysUnions, "passStringArray"); |
| Annotation[] notes = |
| ArraysUnionsTuscanyServant.class.getMethod("passStringArray", new Class<?>[] {String[][].class}) |
| .getAnnotations(); |
| request.setOutputType(String[][][].class, notes); |
| fail(); |
| } catch (RequestConfigurationException e) { |
| // expected |
| } catch (Exception e) { |
| e.printStackTrace(); |
| fail(); |
| } |
| try { |
| DynaCorbaRequest request = new DynaCorbaRequest(refArraysUnions, "passStringArray"); |
| Annotation[] notes = |
| ArraysUnionsTuscanyServant.class.getMethod("passStringArray", new Class<?>[] {String[][].class}) |
| .getAnnotations(); |
| request.addArgument(new String[0][0][0], notes); |
| fail(); |
| } catch (RequestConfigurationException e) { |
| // expected |
| } catch (Exception e) { |
| e.printStackTrace(); |
| fail(); |
| } |
| try { |
| DynaCorbaRequest request = new DynaCorbaRequest(refArraysUnions, "passStringArray"); |
| request.addArgument(new InvalidCorbaArray(), null); |
| fail(); |
| } catch (RequestConfigurationException e) { |
| // expected |
| } catch (Exception e) { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| /** |
| * Tests passing CORBA unions |
| */ |
| @Test |
| public void test_passingUnions() { |
| try { |
| DynaCorbaRequest request = new DynaCorbaRequest(refArraysUnions, "passRichUnion"); |
| request.setOutputType(RichUnion.class); |
| RichUnion arg = new RichUnion(); |
| InnerUnion argIu = new InnerUnion(); |
| argIu.setX(10); |
| arg.setIu(argIu); |
| request.addArgument(arg); |
| DynaCorbaResponse response = request.invoke(); |
| RichUnion result = (RichUnion)response.getContent(); |
| assertEquals(arg.getIu().getX(), result.getIu().getX()); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| fail(); |
| } |
| try { |
| DynaCorbaRequest request = new DynaCorbaRequest(refArraysUnions, "passRichUnion"); |
| request.setOutputType(RichUnion.class); |
| RichUnion arg = new RichUnion(); |
| arg.setDef(true); |
| request.addArgument(arg); |
| DynaCorbaResponse response = request.invoke(); |
| RichUnion result = (RichUnion)response.getContent(); |
| assertEquals(arg.isDef(), result.isDef()); |
| } catch (Exception e) { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| /** |
| * Tests handling invalid union declarations |
| */ |
| @Test |
| public void test_testInvalidUnionClasses() { |
| try { |
| DynaCorbaRequest request = new DynaCorbaRequest(refArraysUnions, "whatever"); |
| request.setOutputType(InvalidUnion1.class); |
| } catch (Exception e) { |
| assertEquals(RequestConfigurationException.class, e.getClass()); |
| } |
| try { |
| DynaCorbaRequest request = new DynaCorbaRequest(refArraysUnions, "whatever"); |
| request.setOutputType(InvalidUnion2.class); |
| } catch (Exception e) { |
| assertEquals(RequestConfigurationException.class, e.getClass()); |
| } |
| try { |
| DynaCorbaRequest request = new DynaCorbaRequest(refArraysUnions, "whatever"); |
| request.setOutputType(InvalidUnion3.class); |
| } catch (Exception e) { |
| assertEquals(RequestConfigurationException.class, e.getClass()); |
| } |
| try { |
| DynaCorbaRequest request = new DynaCorbaRequest(refArraysUnions, "whatever"); |
| request.setOutputType(InvalidUnion4.class); |
| } catch (Exception e) { |
| assertEquals(RequestConfigurationException.class, e.getClass()); |
| } |
| try { |
| DynaCorbaRequest request = new DynaCorbaRequest(refArraysUnions, "whatever"); |
| request.setOutputType(InvalidUnion5.class); |
| } catch (Exception e) { |
| assertEquals(RequestConfigurationException.class, e.getClass()); |
| } |
| } |
| } |