erlang: Add tests.

Add bindtests and general tests for Erlang.
This commit is contained in:
Richard W.M. Jones
2012-08-15 14:10:38 +01:00
parent bd35b3c055
commit f6de298d04
6 changed files with 121 additions and 2 deletions

1
.gitignore vendored
View File

@@ -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

View File

@@ -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

23
erlang/run-bindtests Executable file
View File

@@ -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

23
erlang/tests/010-load.erl Executable file
View File

@@ -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).

View File

@@ -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.
*)

View File

@@ -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();