summaryrefslogtreecommitdiffstats
path: root/jrt_test/src/tests/mockup-invoke
diff options
context:
space:
mode:
Diffstat (limited to 'jrt_test/src/tests/mockup-invoke')
-rw-r--r--jrt_test/src/tests/mockup-invoke/.gitignore8
-rw-r--r--jrt_test/src/tests/mockup-invoke/CMakeLists.txt7
-rw-r--r--jrt_test/src/tests/mockup-invoke/DESC2
-rw-r--r--jrt_test/src/tests/mockup-invoke/FILES6
-rw-r--r--jrt_test/src/tests/mockup-invoke/MockupInvoke.java34
-rw-r--r--jrt_test/src/tests/mockup-invoke/dotest.sh19
-rwxr-xr-xjrt_test/src/tests/mockup-invoke/mockup-invoke_test.sh10
-rw-r--r--jrt_test/src/tests/mockup-invoke/mockup-server.cpp69
-rw-r--r--jrt_test/src/tests/mockup-invoke/progdefs.sh2
-rw-r--r--jrt_test/src/tests/mockup-invoke/ref.txt5
10 files changed, 162 insertions, 0 deletions
diff --git a/jrt_test/src/tests/mockup-invoke/.gitignore b/jrt_test/src/tests/mockup-invoke/.gitignore
new file mode 100644
index 00000000000..89cd4543d46
--- /dev/null
+++ b/jrt_test/src/tests/mockup-invoke/.gitignore
@@ -0,0 +1,8 @@
+.depend
+Makefile
+MockupInvoke.class
+mockup-server
+out.server.1
+out.txt
+pid.txt
+jrt_test_mockup-server_app
diff --git a/jrt_test/src/tests/mockup-invoke/CMakeLists.txt b/jrt_test/src/tests/mockup-invoke/CMakeLists.txt
new file mode 100644
index 00000000000..773de6f4283
--- /dev/null
+++ b/jrt_test/src/tests/mockup-invoke/CMakeLists.txt
@@ -0,0 +1,7 @@
+# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+vespa_add_executable(jrt_test_mockup-server_app
+ SOURCES
+ mockup-server.cpp
+ DEPENDS
+)
+vespa_add_test(NAME jrt_test_mockup-server_app NO_VALGRIND COMMAND sh mockup-invoke_test.sh)
diff --git a/jrt_test/src/tests/mockup-invoke/DESC b/jrt_test/src/tests/mockup-invoke/DESC
new file mode 100644
index 00000000000..27ad5eca58f
--- /dev/null
+++ b/jrt_test/src/tests/mockup-invoke/DESC
@@ -0,0 +1,2 @@
+Test that the mockup invoke implementation in Java is able to invoke
+methods in a C++ based RPC server.
diff --git a/jrt_test/src/tests/mockup-invoke/FILES b/jrt_test/src/tests/mockup-invoke/FILES
new file mode 100644
index 00000000000..da260550280
--- /dev/null
+++ b/jrt_test/src/tests/mockup-invoke/FILES
@@ -0,0 +1,6 @@
+dotest.sh
+out.txt
+ref.txt
+mockup-server.cpp
+MockupInvoke.java
+out.server.1
diff --git a/jrt_test/src/tests/mockup-invoke/MockupInvoke.java b/jrt_test/src/tests/mockup-invoke/MockupInvoke.java
new file mode 100644
index 00000000000..aa5a59c780d
--- /dev/null
+++ b/jrt_test/src/tests/mockup-invoke/MockupInvoke.java
@@ -0,0 +1,34 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+import com.yahoo.jrt.*;
+
+public class MockupInvoke {
+
+ public static void main(String[] args) {
+ if (args.length != 3) {
+ System.out.println("error: Wrong number of parameters");
+ System.exit(0);
+ }
+ Transport transport = new Transport();
+ Supervisor orb = new Supervisor(transport);
+ Spec spec = new Spec(args[0]);
+ Request req = new Request("concat");
+ req.parameters().add(new StringValue(args[1]));
+ req.parameters().add(new StringValue(args[2]));
+ orb.invokeBatch(spec, req, 60.0);
+ if (req.isError()) {
+ System.out.println("error: " + req.errorCode()
+ + ": " + req.errorMessage());
+ System.exit(0);
+ }
+ if (req.returnValues().size() != 1
+ || req.returnValues().get(0).type() != 's') {
+
+ System.out.println("error: Wrong return values");
+ System.exit(0);
+ }
+ System.out.println("result: '"
+ + req.returnValues().get(0).asString()
+ + "'");
+ }
+}
diff --git a/jrt_test/src/tests/mockup-invoke/dotest.sh b/jrt_test/src/tests/mockup-invoke/dotest.sh
new file mode 100644
index 00000000000..3bd15b6437f
--- /dev/null
+++ b/jrt_test/src/tests/mockup-invoke/dotest.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+sh $BINREF/progctl.sh progdefs.sh start server 1
+
+$BINREF/runjava PollRPCServer tcp/localhost:$PORT_0
+$BINREF/runjava MockupInvoke tcp/localhost:$PORT_0 aaa bbb > out.txt
+$BINREF/runjava MockupInvoke tcp/localhost:$PORT_0 bbb ccc >> out.txt
+$BINREF/runjava MockupInvoke tcp/localhost:$PORT_0 ccc ddd >> out.txt
+$BINREF/runjava MockupInvoke tcp/localhost:$PORT_0 ddd eee >> out.txt
+$BINREF/runjava MockupInvoke tcp/localhost:$PORT_0 eee fff >> out.txt
+
+sh $BINREF/progctl.sh progdefs.sh stop server 1
+
+if diff -u out.txt ref.txt; then
+ exit 0
+else
+ exit 1
+fi
diff --git a/jrt_test/src/tests/mockup-invoke/mockup-invoke_test.sh b/jrt_test/src/tests/mockup-invoke/mockup-invoke_test.sh
new file mode 100755
index 00000000000..56ca7079e7a
--- /dev/null
+++ b/jrt_test/src/tests/mockup-invoke/mockup-invoke_test.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+
+. ../../binref/env.sh
+
+export PORT_0
+
+$BINREF/compilejava MockupInvoke.java
+
+sh dotest.sh || (sh $BINREF/progctl.sh progdefs.sh stop all; false)
+sh $BINREF/progctl.sh progdefs.sh stop all
diff --git a/jrt_test/src/tests/mockup-invoke/mockup-server.cpp b/jrt_test/src/tests/mockup-invoke/mockup-server.cpp
new file mode 100644
index 00000000000..97b2e945e57
--- /dev/null
+++ b/jrt_test/src/tests/mockup-invoke/mockup-server.cpp
@@ -0,0 +1,69 @@
+// Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#include <vespa/log/log.h>
+LOG_SETUP("mockup_server");
+#include <vespa/fastos/fastos.h>
+#include <vespa/fnet/frt/frt.h>
+
+
+class MockupServer : public FRT_Invokable
+{
+private:
+ MockupServer(const MockupServer &);
+ MockupServer &operator=(const MockupServer &);
+
+public:
+ MockupServer(FRT_Supervisor *s)
+ {
+ FRT_ReflectionBuilder rb(s);
+ //-------------------------------------------------------------------
+ rb.DefineMethod("concat", "ss", "s", true,
+ FRT_METHOD(MockupServer::RPC_concat), this);
+ rb.MethodDesc("Concatenate two strings");
+ rb.ParamDesc("string1", "a string");
+ rb.ParamDesc("string2", "another string");
+ rb.ReturnDesc("ret", "the concatenation of string1 and string2");
+ //-------------------------------------------------------------------
+ }
+
+ void RPC_concat(FRT_RPCRequest *req)
+ {
+ FRT_Values &params = *req->GetParams();
+ FRT_Values &ret = *req->GetReturn();
+
+ uint32_t len = (params[0]._string._len +
+ params[1]._string._len);
+ char *tmp = ret.AddString(len);
+ strcpy(tmp, params[0]._string._str);
+ strcat(tmp, params[1]._string._str);
+ }
+};
+
+
+class App : public FastOS_Application
+{
+public:
+ int Main();
+};
+
+
+int
+App::Main()
+{
+ if (_argc < 2) {
+ printf("usage: %s <listenspec>\n", _argv[0]);
+ return 1;
+ }
+ FRT_Supervisor orb;
+ MockupServer server(&orb);
+ orb.Listen(_argv[1]);
+ orb.Main();
+ return 0;
+}
+
+
+int
+main(int argc, char **argv)
+{
+ App myapp;
+ return myapp.Entry(argc, argv);
+}
diff --git a/jrt_test/src/tests/mockup-invoke/progdefs.sh b/jrt_test/src/tests/mockup-invoke/progdefs.sh
new file mode 100644
index 00000000000..4c483b8060b
--- /dev/null
+++ b/jrt_test/src/tests/mockup-invoke/progdefs.sh
@@ -0,0 +1,2 @@
+# Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+prog server 1 "tcp/$PORT_0" "./jrt_test_mockup-server_app"
diff --git a/jrt_test/src/tests/mockup-invoke/ref.txt b/jrt_test/src/tests/mockup-invoke/ref.txt
new file mode 100644
index 00000000000..41229d78bc7
--- /dev/null
+++ b/jrt_test/src/tests/mockup-invoke/ref.txt
@@ -0,0 +1,5 @@
+result: 'aaabbb'
+result: 'bbbccc'
+result: 'cccddd'
+result: 'dddeee'
+result: 'eeefff'