diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2012-08-15 14:10:38 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2012-08-15 17:49:48 +0100 |
commit | f6de298d0498d5672d05da839021a41277df8e09 (patch) | |
tree | bd29b3737cdb3cae52a494929c1845507425718f | |
parent | bd35b3c055cb4a1bda041faede018dd7d4cfc1ba (diff) | |
download | libguestfs-f6de298d0498d5672d05da839021a41277df8e09.tar.gz libguestfs-f6de298d0498d5672d05da839021a41277df8e09.tar.xz libguestfs-f6de298d0498d5672d05da839021a41277df8e09.zip |
erlang: Add tests.
Add bindtests and general tests for Erlang.
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | erlang/Makefile.am | 15 | ||||
-rwxr-xr-x | erlang/run-bindtests | 23 | ||||
-rwxr-xr-x | erlang/tests/010-load.erl | 23 | ||||
-rw-r--r-- | generator/generator_bindtests.ml | 60 | ||||
-rw-r--r-- | generator/generator_main.ml | 1 |
6 files changed, 121 insertions, 2 deletions
@@ -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(); |