diff options
Diffstat (limited to 'lib/jinterface/test/jinterface_SUITE_data/MboxSendReceive.java')
-rw-r--r-- | lib/jinterface/test/jinterface_SUITE_data/MboxSendReceive.java | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/lib/jinterface/test/jinterface_SUITE_data/MboxSendReceive.java b/lib/jinterface/test/jinterface_SUITE_data/MboxSendReceive.java new file mode 100644 index 0000000000..2db71bb5cd --- /dev/null +++ b/lib/jinterface/test/jinterface_SUITE_data/MboxSendReceive.java @@ -0,0 +1,229 @@ +/* + * %CopyrightBegin% + * + * Copyright Ericsson AB 2004-2010. All Rights Reserved. + * + * The contents of this file are subject to the Erlang Public License, + * Version 1.1, (the "License"); you may not use this file except in + * compliance with the License. You should have received a copy of the + * Erlang Public License along with this software. If not, it can be + * retrieved online at http://www.erlang.org/. + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See + * the License for the specific language governing rights and limitations + * under the License. + * + * %CopyrightEnd% + */ + +import com.ericsson.otp.erlang.*; + +class MboxSendReceive { + + /* + Implements test case jinterface_SUITE:mbox_send_receive/1 + + Test OtpMbox.send(...) and OtpMbox.receive(...) + */ + + private static final boolean dbg = true; + private static final int recTime = 2000; + + private static final int java_erlang_send_receive = 1; + private static final int java_internal_send_receive_same_node = 2; + private static final int java_internal_send_receive_different_nodes = 3; + private static final int java_internal_send_receive_self = 4; + + public static void main(String argv[]) { + + String cookie = argv[0]; + String erlNode = argv[1]; + + OtpErlangObject[] msgArray = new OtpErlangObject[2]; + msgArray[1] = new OtpErlangAtom("hello world"); + OtpErlangTuple msg = null; + + try { + // Initiate: create javanode and mboxes + OtpNode node = new OtpNode("javanode",cookie); + OtpMbox mbox = node.createMbox(); + OtpMbox mbox2 = node.createMbox("java_echo_server2"); + + // Send the pid of mbox to erlang and wait for test case + // instruction: {TestCaseTag, Pid} + mbox.send("erl_send_receive_server", erlNode, mbox.self()); + OtpErlangObject o = mbox.receive(recTime); + if (o == null) System.exit(1); + OtpErlangTuple testCase = (OtpErlangTuple)o; + dbg("mbox received " + testCase); + int tag = (int)((OtpErlangLong)testCase.elementAt(0)).longValue(); + OtpErlangPid erlangPid = (OtpErlangPid)testCase.elementAt(1); + + switch (tag) { + + case java_erlang_send_receive: + + // Test1 (happened during initiation): + // Send mbox pid to erlang process with registered name. + // Erlang process sent back its pid to the mbox pid. + + // Test2: Register name and sent it to the erlang pid. Erlang + // process shall send message back to my registered name. + + mbox.registerName("java_echo_server"); + msgArray[0] = getNameNode("java_echo_server",node); + msg = new OtpErlangTuple(msgArray); + + dbg("java_echo_server sending " + msg); + mbox.send(erlangPid,msg); + + o = mbox.receive(recTime); + dbg("java_echo_server received " + o); + if (o == null) System.exit(2); + if (!((OtpErlangAtom)o).equals(msgArray[1])) System.exit(3); + + // Test3: Same as Test2, but using a new mbox2 which + // got its name already when it is created - i.e. not + // using mbox.registerName + msgArray[0] = getNameNode("java_echo_server2",node); + msg = new OtpErlangTuple(msgArray); + + dbg("java_echo_server2 sending " + msg); + mbox2.send(erlangPid,msg); + + o = mbox2.receive(recTime); + dbg("java_echo_server received " + o); + if (o == null) System.exit(4); + if (!((OtpErlangAtom)o).equals(msgArray[1])) System.exit(5); + + break; + + case java_internal_send_receive_same_node: + + // Test1: Sending message between mboxes on same node + // given registered name and node without host. + mbox.send("java_echo_server2","javanode",msgArray[1]); + o = mbox2.receive(recTime); + dbg("Mbox at same node: " + o); + if (o == null) System.exit(6); + if(!((OtpErlangAtom)o).equals(msgArray[1])) System.exit(7); + + // Test2: Sending message between mboxes on same node + // given registered name and node with host. + mbox.send("java_echo_server2",mbox2.self().node(),msgArray[1]); + o = mbox2.receive(recTime); + dbg("Mbox at same node: " + o); + if (o == null) System.exit(8); + if(!((OtpErlangAtom)o).equals(msgArray[1])) System.exit(9); + + // Test3: Sending message between mboxes on same node + // given registered name but not node. + mbox.send("java_echo_server2",msgArray[1]); + o = mbox2.receive(recTime); + dbg("Mbox at same node: " + o); + if (o == null) System.exit(10); + if(!((OtpErlangAtom)o).equals(msgArray[1])) System.exit(11); + + // Test4: Sending message between mboxes on same node + // given pid. + mbox.send(mbox2.self(),msgArray[1]); + o = mbox2.receive(recTime); + dbg("Mbox at same node: " + o); + if (o == null) System.exit(12); + if(!((OtpErlangAtom)o).equals(msgArray[1])) System.exit(13); + + break; + + case java_internal_send_receive_different_nodes: + + OtpNode node2 = new OtpNode("javanode2", cookie); + OtpMbox mboxOtherNode = node2.createMbox("mboxOtherNode"); + + // Test1: Sending message between mboxes on different + // nodes given registered name and node without host. + mbox.send("mboxOtherNode","javanode2",msgArray[1]); + o = mboxOtherNode.receive(recTime); + dbg("Mbox at same node: " + o); + if (o == null) System.exit(14); + if(!((OtpErlangAtom)o).equals(msgArray[1])) System.exit(15); + + // Test2: Sending message between mboxes on different + // nodes given registered name and node with host. + mbox.send("mboxOtherNode",mboxOtherNode.self().node(), + msgArray[1]); + o = mboxOtherNode.receive(recTime); + dbg("Mbox at same node: " + o); + if (o == null) System.exit(16); + if(!((OtpErlangAtom)o).equals(msgArray[1])) System.exit(17); + + // Test3: Sending message between mboxes on different + // nodes given pid. + mbox.send(mboxOtherNode.self(),msgArray[1]); + o = mboxOtherNode.receive(recTime); + dbg("Mbox at same node: " + o); + if (o == null) System.exit(18); + if(!((OtpErlangAtom)o).equals(msgArray[1])) System.exit(19); + + break; + + + case java_internal_send_receive_self: + + // Test1: Sending message to myself given registered + // name and node without host. + mbox2.send("java_echo_server2","javanode",msgArray[1]); + o = mbox2.receive(recTime); + dbg("Self: " + o); + if (o == null) System.exit(18); + if(!((OtpErlangAtom)o).equals(msgArray[1])) System.exit(19); + + // Test2: Sending message to myself given registered + // name and node with host. + mbox2.send("java_echo_server2",mbox2.self().node(),msgArray[1]); + o = mbox2.receive(recTime); + dbg("Self: " + o); + if (o == null) System.exit(20); + if(!((OtpErlangAtom)o).equals(msgArray[1])) System.exit(21); + + // Test3: Sending message to myself given registered + // name but not host. + mbox2.send("java_echo_server2",msgArray[1]); + o = mbox2.receive(recTime); + dbg("Self: " + o); + if (o == null) System.exit(22); + if(!((OtpErlangAtom)o).equals(msgArray[1])) System.exit(23); + + // Test4: Sending message to myself given pid. + mbox2.send(mbox2.self(),msgArray[1]); + o = mbox2.receive(recTime); + dbg("Self: " + o); + if (o == null) System.exit(24); + if(!((OtpErlangAtom)o).equals(msgArray[1])) System.exit(25); + + break; + + } + + // Closing erl_send_receive_server by sending the atom 'done' to it. + mbox.send(erlangPid,new OtpErlangAtom("done")); + } + catch (Exception e) { + System.out.println("" + e); + System.exit(26); + } + } + + private static OtpErlangTuple getNameNode(String mboxName,OtpNode node) { + OtpErlangObject[] array = {new OtpErlangAtom(mboxName), + new OtpErlangAtom(node.node())}; + return new OtpErlangTuple(array); + + } + + private static void dbg(String str) { + if (dbg) System.out.println(str); + } + + +} |