summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2012-08-15 14:10:38 +0100
committerRichard W.M. Jones <rjones@redhat.com>2012-08-15 17:49:48 +0100
commitf6de298d0498d5672d05da839021a41277df8e09 (patch)
treebd29b3737cdb3cae52a494929c1845507425718f
parentbd35b3c055cb4a1bda041faede018dd7d4cfc1ba (diff)
downloadlibguestfs-f6de298d0498d5672d05da839021a41277df8e09.tar.gz
libguestfs-f6de298d0498d5672d05da839021a41277df8e09.tar.xz
libguestfs-f6de298d0498d5672d05da839021a41277df8e09.zip
erlang: Add tests.
Add bindtests and general tests for Erlang.
-rw-r--r--.gitignore1
-rw-r--r--erlang/Makefile.am15
-rwxr-xr-xerlang/run-bindtests23
-rwxr-xr-xerlang/tests/010-load.erl23
-rw-r--r--generator/generator_bindtests.ml60
-rw-r--r--generator/generator_main.ml1
6 files changed, 121 insertions, 2 deletions
diff --git a/.gitignore b/.gitignore
index da598e02..f809379b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -81,6 +81,7 @@ Makefile.in
/edit/stamp-virt-*.pod
/edit/virt-edit
/edit/virt-edit.1
+/erlang/bindtests.erl
/erlang/erl-guestfs
/erlang/erl-guestfs.c
/erlang/examples/guestfs-erlang.3
diff --git a/erlang/Makefile.am b/erlang/Makefile.am
index 2c9e3592..7ebc4443 100644
--- a/erlang/Makefile.am
+++ b/erlang/Makefile.am
@@ -18,11 +18,14 @@
include $(top_srcdir)/subdir-rules.mk
generator_built = \
- guestfs.erl \
- erl-guestfs.c
+ bindtests.erl \
+ erl-guestfs.c \
+ guestfs.erl
EXTRA_DIST = \
$(generator_built) \
+ run-bindtests \
+ tests/*.erl \
README
if HAVE_ERLANG
@@ -51,4 +54,12 @@ erl_guestfs_LDADD = \
$(top_builddir)/src/libguestfs.la \
../gnulib/lib/libgnu.la
+TESTS_ENVIRONMENT = PATH=$(builddir):$$PATH $(top_builddir)/run --test
+
+TESTS = run-bindtests
+
+if ENABLE_APPLIANCE
+TESTS += tests/010-load.erl
+endif
+
endif
diff --git a/erlang/run-bindtests b/erlang/run-bindtests
new file mode 100755
index 00000000..1a6aea5f
--- /dev/null
+++ b/erlang/run-bindtests
@@ -0,0 +1,23 @@
+#!/bin/sh -
+# libguestfs Erlang bindings
+# Copyright (C) 2009-2012 Red Hat Inc.
+#
+# This program 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+set -e
+
+# The output is sent to bindtests.tmp.
+./bindtests.erl
+diff -u $srcdir/../bindtests bindtests.tmp
diff --git a/erlang/tests/010-load.erl b/erlang/tests/010-load.erl
new file mode 100755
index 00000000..34ade754
--- /dev/null
+++ b/erlang/tests/010-load.erl
@@ -0,0 +1,23 @@
+#!/usr/bin/env escript
+%! -smp enable -sname create_disk debug verbose
+
+% libguestfs Erlang tests -*- erlang -*-
+% Copyright (C) 2009-2012 Red Hat Inc.
+%
+% This program 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 of the License, or
+% (at your option) any later version.
+%
+% This program 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 this program; if not, write to the Free Software Foundation, Inc.,
+% 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+main(_) ->
+ {ok, G} = guestfs:create(),
+ ok = guestfs:close(G). \ No newline at end of file
diff --git a/generator/generator_bindtests.ml b/generator/generator_bindtests.ml
index aaadd370..92436a7d 100644
--- a/generator/generator_bindtests.ml
+++ b/generator/generator_bindtests.ml
@@ -676,6 +676,66 @@ var o;
pr "\nprint(\"EOF\");\n"
+and generate_erlang_bindtests () =
+ pr "#!/usr/bin/env escript\n";
+ pr "%%! -smp enable -sname create_disk debug verbose\n";
+ pr "\n";
+ generate_header ErlangStyle GPLv2plus;
+
+ pr "main(_) ->\n";
+ pr " {ok, G} = guestfs:create(),\n";
+ pr "\n";
+ pr " %% We have to set the output file here because otherwise the\n";
+ pr " %% bindtests code would print its output on stdout, and that\n";
+ pr " %% channel is also being used by the erl-guestfs communications.\n";
+ pr " Filename = \"bindtests.tmp\",\n";
+ pr " ok = guestfs:internal_test_set_output(G, Filename),\n";
+ pr "\n";
+
+ generate_lang_bindtests (
+ fun f args optargs ->
+ pr " ok = guestfs:%s(G" f;
+ List.iter (function
+ | CallString s -> pr ", \"%s\"" s
+ | CallOptString None -> pr ", undefined"
+ | CallOptString (Some s) -> pr ", \"%s\"" s
+ | CallStringList xs ->
+ pr ", [%s]" (String.concat "," (List.map (sprintf "\"%s\"") xs))
+ | CallInt i -> pr ", %d" i
+ | CallInt64 i -> pr ", %Ld" i
+ | CallBool b -> pr ", %b" b
+ | CallBuffer s -> pr ", \"%s\"" (c_quote s)
+ ) args;
+ (match optargs with
+ | None -> ()
+ | Some optargs ->
+ pr ", [";
+ let needs_comma = ref false in
+ List.iter (
+ fun optarg ->
+ if !needs_comma then pr ", ";
+ needs_comma := true;
+ match optarg with
+ | CallOBool (n, v) -> pr "{%s, %b}" n v
+ | CallOInt (n, v) -> pr "{%s, %d}" n v
+ | CallOInt64 (n, v) -> pr "{%s, %Ld}" n v
+ | CallOString (n, v) -> pr "{%s, \"%s\"}" n v
+ | CallOStringList (n, xs) ->
+ pr "{%s, [%s]}" n
+ (String.concat "," (List.map (sprintf "\"%s\"") xs))
+ ) optargs;
+ pr "]";
+ );
+ pr "),\n"
+ );
+
+ pr "\n";
+ pr " ok = guestfs:internal_test_close_output(G),\n";
+ pr " ok = guestfs:close(G),\n";
+ pr " {ok, File} = file:open(Filename, [append]),\n";
+ pr " ok = file:write(File, \"EOF\\n\"),\n";
+ pr " ok = file:close(File).\n"
+
(* Language-independent bindings tests - we do it this way to
* ensure there is parity in testing bindings across all languages.
*)
diff --git a/generator/generator_main.ml b/generator/generator_main.ml
index 9a1da9b1..d13f0bb7 100644
--- a/generator/generator_main.ml
+++ b/generator/generator_main.ml
@@ -138,6 +138,7 @@ Run it from the top source directory using the command
output_to "php/extension/guestfs_php.c" generate_php_c;
output_to "erlang/guestfs.erl" generate_erlang_erl;
output_to "erlang/erl-guestfs.c" generate_erlang_c;
+ output_to ~perm:0o555 "erlang/bindtests.erl" generate_erlang_bindtests;
output_to "gobject/bindtests.js" generate_gobject_js_bindtests;
generate_gobject();