diff options
Diffstat (limited to 'gnu/testlet/org/omg/CORBA/portable/OutputStream/BinaryAlignment.java')
-rw-r--r-- | gnu/testlet/org/omg/CORBA/portable/OutputStream/BinaryAlignment.java | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/gnu/testlet/org/omg/CORBA/portable/OutputStream/BinaryAlignment.java b/gnu/testlet/org/omg/CORBA/portable/OutputStream/BinaryAlignment.java new file mode 100644 index 00000000..3e31c5ac --- /dev/null +++ b/gnu/testlet/org/omg/CORBA/portable/OutputStream/BinaryAlignment.java @@ -0,0 +1,136 @@ +// Tags: JDK1.2 + +// Copyright (C) 2005 Audrius Meskauskas (AudriusA@Bioinformatics.org) + +// Mauve is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2, or (at your option) +// any later version. + +// Mauve 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 General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Mauve; see the file COPYING. If not, write to +// the Free Software Foundation, 59 Temple Place - Suite 330, +// Boston, MA 02111-1307, USA. */ + +package gnu.testlet.org.omg.CORBA.portable.OutputStream; + +import gnu.testlet.TestHarness; +import gnu.testlet.Testlet; +import gnu.testlet.org.omg.CORBA.Asserter; + +import org.omg.CORBA.ORB; +import org.omg.CORBA.OctetSeqHelper; +import org.omg.CORBA.Request; +import org.omg.CORBA.TCKind; + +/** + * This tests uses a non standard CORBA object that accepts the + * passed parameters and then returns all passed data as a + * plain byte array, exactly how they were sent. The returned + * sequence can be byte to byte compared with the sequence, + * expected from the OMG CORBA specification. The test is against + * loss of interoperability by modifications that may affect + * both input and output CDR streams, leaving the implementation + * working with self, but interoperable. + * + * @author Audrius Meskauskas (AudriusA@bluewin.ch) + */ +public class BinaryAlignment + extends Asserter + implements Testlet +{ + // The correct data sequence, excluding the message header and request + // header, as it should be deciding from CORBA spefication for GIOP 1.2 + static final int[] expected = + new int[] + { + 0x77, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, + 0x2, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0x5b, 0x73, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x20, 0x34, 0x5d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x46, + 0xd8, 0x31, 0x26, 0xe9, 0x78, 0xd5, 0xfe, 0xff + }; + + public void test(TestHarness harness) + { + h = harness; + + String[] args = new String[ 0 ]; + + final ORB server_orb = ORB.init(args, null); + + mirror reflector = new mirror(); + server_orb.connect(reflector); + + new Thread() + { + public void run() + { + server_orb.run(); + } + }.start(); + + // Wait for 500 ms for the orb to start. + try + { + Thread.sleep(500); + } + catch (InterruptedException ex) + { + } + + String ior = server_orb.object_to_string(reflector); + + // Instantiate another orb where this reflector will be a stub: + ORB client_orb = ORB.init(args, null); + + org.omg.CORBA.Object object = + (org.omg.CORBA.Object) client_orb.string_to_object(ior); + + Request r = + object._create_request(null, "pass", server_orb.create_list(0), null); + + // Write the test values. + r.add_in_arg().insert_octet((byte) 0x77); + r.add_in_arg().insert_long(1); + r.add_in_arg().insert_longlong(2); + r.add_in_arg().insert_short((short) 3); + r.add_in_arg().insert_string("[string 4]"); + r.add_in_arg().insert_double(45.689); + r.add_in_arg().insert_octet((byte) 0xFE); + + // This will serve as EOF marker. + r.add_in_arg().insert_octet((byte) 0xFF); + + // For the last parameter, the value is not set. + r.set_return_type(server_orb.create_sequence_tc(0, + server_orb.get_primitive_tc(TCKind.tk_octet) + ) + ); + + r.invoke(); + + byte[] reflection = OctetSeqHelper.extract(r.result().value()); + + assertEquals("length", expected.length, reflection.length); + + for (int i = 0; i < reflection.length; i++) + { + if ((reflection [ i ] & 0xFF) != expected [ i ]) + fail("Mismatch [" + i + "] expected " + + Integer.toHexString(expected [ i ]) + " actual " + + Integer.toHexString(0xFF & reflection [ i ]) + ); + } + + client_orb.shutdown(false); + server_orb.shutdown(false); + + client_orb.destroy(); + server_orb.destroy(); + } +}
\ No newline at end of file |