From f21ec81857722ef86c8051cec49f7748c530b78c Mon Sep 17 00:00:00 2001 From: Michal Sojka Date: Thu, 17 Feb 2011 14:55:50 +0100 Subject: [PATCH] forb: Add tests for forbrun --- src/forbrun/Makefile.omk | 2 ++ src/forbrun/tests/Makefile.omk | 12 +++++++--- src/forbrun/tests/forb_shlib.c | 42 --------------------------------- src/forbrun/tests/forbrun.sh | 28 ++++++++++++++++++++++ src/forbrun/tests/test_client.c | 11 +++++++++ src/forbrun/tests/test_obj.c | 42 +++++++++++++++++++++++++++++++++ src/forbrun/tests/test_obj.idl | 6 ++--- src/forbrun/tests/wvtest.sh | 1 + 8 files changed, 95 insertions(+), 49 deletions(-) delete mode 100644 src/forbrun/tests/forb_shlib.c create mode 100755 src/forbrun/tests/forbrun.sh create mode 100644 src/forbrun/tests/test_client.c create mode 100644 src/forbrun/tests/test_obj.c create mode 120000 src/forbrun/tests/wvtest.sh diff --git a/src/forbrun/Makefile.omk b/src/forbrun/Makefile.omk index 46e1430..a2bde3c 100644 --- a/src/forbrun/Makefile.omk +++ b/src/forbrun/Makefile.omk @@ -1,3 +1,5 @@ +SUBDIRS = tests + bin_PROGRAMS = forbrun forbrun_SOURCES = forbrun.c diff --git a/src/forbrun/tests/Makefile.omk b/src/forbrun/tests/Makefile.omk index 908480f..2eaa706 100644 --- a/src/forbrun/tests/Makefile.omk +++ b/src/forbrun/tests/Makefile.omk @@ -1,6 +1,12 @@ -shared_LIBRARIES = forb_shlib_test -forb_shlib_test_SOURCES = forb_shlib.c -forb_shlib_test_SERVER_IDL = test_obj.idl +wvtest_SCRIPTS = forbrun.sh + +shared_LIBRARIES = test_obj +test_obj_SOURCES = test_obj.c +test_obj_SERVER_IDL = test_obj.idl + +shared_LIBRARIES += test_client +test_client_SOURCES = test_client.c +test_client_CLIENT_IDL = test_obj.idl INCLUDES += -I. diff --git a/src/forbrun/tests/forb_shlib.c b/src/forbrun/tests/forb_shlib.c deleted file mode 100644 index 7ecb0dc..0000000 --- a/src/forbrun/tests/forb_shlib.c +++ /dev/null @@ -1,42 +0,0 @@ -#include -#include "test_obj.h" -#define WVTEST_CONFIGURED -#include -#include -#include -#include - -static CORBA_long add(test_obj obj, CORBA_long val, CORBA_Environment *ev) -{ - int to_add = (intptr_t)forb_object_instance_data(obj); - return val + to_add; -} - -static CORBA_long add_indirect(test_obj obj, test_obj indirect_obj, CORBA_long val, CORBA_Environment *ev) -{ - return test_obj_add(indirect_obj, val, ev); -} - -static const struct forb_test_obj_impl test_obj_impl = { - .add = add, - .add_indirect = add_indirect, -}; - - -void *executor_thread(void *arg) -{ - forb_executor_t *executor = arg; - forb_executor_run(executor); - return NULL; -} - -int forb_main(forb_orb orb, int argc, char *argv[]) -{ - test_obj testobj; - - testobj = forb_test_obj_new(orb, &test_obj_impl, (void*)1); - if (!testobj) - return -1; - forb_execute_object(testobj); - return 0; -} diff --git a/src/forbrun/tests/forbrun.sh b/src/forbrun/tests/forbrun.sh new file mode 100755 index 0000000..a7b4c90 --- /dev/null +++ b/src/forbrun/tests/forbrun.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +. $(dirname $0)/wvtest.sh + +WVSTART "Without any parameters do nothing" +WVPASS forbrun + +WVSTART "argv[0] in forb_main() contains the name of the library" +WVFAIL sh -c 'forbrun libtest_obj.so 2> error' +WVPASSEQ "$(cat error)" "Usage: libtest_obj.so " + +WVSTART "Both server and client in a single process" +WVPASS sh -c 'forbrun libtest_obj.so "Hello" -- libtest_client.so > output' +WVPASSEQ "$(cat output)" "Hello" + +WVSTART "Server and client in separate processes" +# Run server on background +rm -f test.pid +WVPASS sh -c 'forbrun --daemon=test.pid libtest_obj.so "Hello" > output' +WVPASS test -f test.pid + +# Run client +WVPASS forbrun libtest_client.so +WVPASS kill $(cat test.pif) + +# Test whether the server was called +WVPASSEQ "$(cat output)" "Hello" + diff --git a/src/forbrun/tests/test_client.c b/src/forbrun/tests/test_client.c new file mode 100644 index 0000000..55fa01d --- /dev/null +++ b/src/forbrun/tests/test_client.c @@ -0,0 +1,11 @@ +#include +#include "test_obj.h" +#include + +int forb_main(forb_orb orb, int argc, char *argv[]) +{ + CORBA_Environment ev; + test_obj obj = forb_resolve_reference(orb, "mytestobj"); + test_obj_printmsg(obj, &ev); + return 0; +} diff --git a/src/forbrun/tests/test_obj.c b/src/forbrun/tests/test_obj.c new file mode 100644 index 0000000..18d2b65 --- /dev/null +++ b/src/forbrun/tests/test_obj.c @@ -0,0 +1,42 @@ +#include +#include "test_obj.h" +#include +#include +#include +#include + +static CORBA_long printmsg(test_obj obj, CORBA_Environment *ev) +{ + char *msg = forb_object_instance_data(obj); + return printf("%s\n", msg); +} + +static const struct forb_test_obj_impl test_obj_impl = { + .printmsg = printmsg, +}; + + +int forb_main(forb_orb orb, int argc, char *argv[]) +{ + test_obj testobj; + int ret; + + if (argc < 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + return 1; + } + + testobj = forb_test_obj_new(orb, &test_obj_impl, argv[1]); + if (!testobj) + return 1; + + ret = forb_register_reference(testobj, "mytestobj"); + if (ret) { + fprintf(stderr, "%s: forb_register_reference(\"mytestobj\") failed\n", + argv[0]); + return 1; + } + + forb_execute_object(testobj); + return 0; +} diff --git a/src/forbrun/tests/test_obj.idl b/src/forbrun/tests/test_obj.idl index 0edea5d..77fb230 100644 --- a/src/forbrun/tests/test_obj.idl +++ b/src/forbrun/tests/test_obj.idl @@ -1,6 +1,4 @@ interface test_obj { - // Adds some number the value @a val - long add(in long val); - // Adds some number the value @a val by calling @a add method of indirect_obj - long add_indirect(in test_obj indirect_obj, in long val); + // Print message specified during object initialization + long printmsg(); }; diff --git a/src/forbrun/tests/wvtest.sh b/src/forbrun/tests/wvtest.sh new file mode 120000 index 0000000..45f4ebb --- /dev/null +++ b/src/forbrun/tests/wvtest.sh @@ -0,0 +1 @@ +../../../../wvtest/sh/wvtest.sh \ No newline at end of file -- 2.39.2