This involves some significant changes to this test framework.
In particular:
- Instead of just specifying $srcdir at the start of a FileIn
path, you can now specify arbitrary environment variables.
This is necessary to allow the tests to run from a tmpdir.
- Use COPYING instead of COPYING.LIB, and copy that file into
the test suite directory.
- Require the static binaries (test-command, test-pwd) in order
to run tests.
- Don't conditionalize the C++ tests. Instead if a C++ compiler
is not available then we build a "skip" script.
---
.gitignore | 3 -
Makefile.am | 4 +-
generator/actions.ml | 150 ++++++++++++++++++++++++-----------------------
generator/tests.ml | 26 ++++++++
generator/tests_c_api.ml | 9 ++-
tests/c-api/Makefile.am | 65 ++++----------------
tests/c-api/tests-main.c | 56 ++++++++++++------
tests/c-api/tests.h | 2 +-
tests/c-api/tests.mk | 71 ++++++++++++++++++++++
9 files changed, 233 insertions(+), 153 deletions(-)
create mode 100644 tests/c-api/tests.mk
diff --git a/.gitignore b/.gitignore
index 3511478..0b113f9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -486,16 +486,13 @@ Makefile.in
/tests/c-api/test-debug-to-file
/tests/c-api/test-environment
/tests/c-api/test-event-string
-/tests/c-api/test*.img
/tests/c-api/test-just-header
/tests/c-api/test-just-header-cxx
/tests/c-api/test-last-errno
-/tests/c-api/test.log
/tests/c-api/test-private-data
/tests/c-api/test-pwd
/tests/c-api/tests
/tests/c-api/tests.c
-/tests/c-api/test*.tmp
/tests/c-api/test-user-cancel
/tests/charsets/test-charset-fidelity
/tests/data/100kallnewlines
diff --git a/Makefile.am b/Makefile.am
index 510a97e..f6feaa8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -518,8 +518,8 @@ check-slow: build-test-guests
build-test-guests:
$(MAKE) -C tests/guests check
-# Install valgrind suppressions file in test directory.
-alltests_DATA = valgrind-suppressions
+# Install some files in the test directory.
+alltests_DATA = COPYING valgrind-suppressions
# Print subdirs.
#
diff --git a/generator/actions.ml b/generator/actions.ml
index 4cfba0d..442575f 100644
--- a/generator/actions.ml
+++ b/generator/actions.ml
@@ -2744,19 +2744,19 @@ data." };
style = RString "format", [String "filename"], [];
tests = [
InitEmpty, Always, TestResultString (
- [["disk_format"; "../data/blank-disk-1s.raw"]],
"raw"), [];
+ [["disk_format"; "$datadir/blank-disk-1s.raw"]],
"raw"), [];
InitEmpty, Always, TestResultString (
- [["disk_format"; "../data/blank-disk-1s.qcow2"]],
"qcow2"), [];
+ [["disk_format"; "$datadir/blank-disk-1s.qcow2"]],
"qcow2"), [];
InitEmpty, Always, TestResultString (
- [["disk_format"; "../data/blank-disk-1K.raw"]],
"raw"), [];
+ [["disk_format"; "$datadir/blank-disk-1K.raw"]],
"raw"), [];
InitEmpty, Always, TestResultString (
- [["disk_format"; "../data/blank-disk-1K.qcow2"]],
"qcow2"), [];
+ [["disk_format"; "$datadir/blank-disk-1K.qcow2"]],
"qcow2"), [];
InitEmpty, Always, TestResultString (
- [["disk_format"; "../data/blank-disk-1M.raw"]],
"raw"), [];
+ [["disk_format"; "$datadir/blank-disk-1M.raw"]],
"raw"), [];
InitEmpty, Always, TestResultString (
- [["disk_format"; "../data/blank-disk-1M.qcow2"]],
"qcow2"), [];
+ [["disk_format"; "$datadir/blank-disk-1M.qcow2"]],
"qcow2"), [];
InitEmpty, Always, TestResultString (
- [["disk_format"; "../data/blank-disk-with-backing.qcow2"]],
"qcow2"), [];
+ [["disk_format"; "$datadir/blank-disk-with-backing.qcow2"]],
"qcow2"), [];
];
shortdesc = "detect the disk format of a disk image";
longdesc = "\
@@ -2774,19 +2774,19 @@ See also: L<guestfs(3)/DISK IMAGE FORMATS>" };
style = RInt64 "size", [String "filename"], [];
tests = [
InitEmpty, Always, TestResult (
- [["disk_virtual_size"; "../data/blank-disk-1s.raw"]],
"ret == 512"), [];
+ [["disk_virtual_size"; "$datadir/blank-disk-1s.raw"]],
"ret == 512"), [];
InitEmpty, Always, TestResult (
- [["disk_virtual_size"; "../data/blank-disk-1s.qcow2"]],
"ret == 512"), [];
+ [["disk_virtual_size"; "$datadir/blank-disk-1s.qcow2"]],
"ret == 512"), [];
InitEmpty, Always, TestResult (
- [["disk_virtual_size"; "../data/blank-disk-1K.raw"]],
"ret == 1024"), [];
+ [["disk_virtual_size"; "$datadir/blank-disk-1K.raw"]],
"ret == 1024"), [];
InitEmpty, Always, TestResult (
- [["disk_virtual_size"; "../data/blank-disk-1K.qcow2"]],
"ret == 1024"), [];
+ [["disk_virtual_size"; "$datadir/blank-disk-1K.qcow2"]],
"ret == 1024"), [];
InitEmpty, Always, TestResult (
- [["disk_virtual_size"; "../data/blank-disk-1M.raw"]],
"ret == 1024*1024"), [];
+ [["disk_virtual_size"; "$datadir/blank-disk-1M.raw"]],
"ret == 1024*1024"), [];
InitEmpty, Always, TestResult (
- [["disk_virtual_size"; "../data/blank-disk-1M.qcow2"]],
"ret == 1024*1024"), [];
+ [["disk_virtual_size"; "$datadir/blank-disk-1M.qcow2"]],
"ret == 1024*1024"), [];
InitEmpty, Always, TestResult (
- [["disk_virtual_size";
"../data/blank-disk-with-backing.qcow2"]], "ret == 1024*1024"), [];
+ [["disk_virtual_size";
"$datadir/blank-disk-with-backing.qcow2"]], "ret == 1024*1024"), [];
];
shortdesc = "return virtual size of a disk";
longdesc = "\
@@ -2801,19 +2801,19 @@ circumstances. See L<guestfs(3)/CVE-2010-3851>." };
style = RBool "backingfile", [String "filename"], [];
tests = [
InitEmpty, Always, TestResultFalse (
- [["disk_has_backing_file"; "../data/blank-disk-1s.raw"]]),
[];
+ [["disk_has_backing_file"; "$datadir/blank-disk-1s.raw"]]),
[];
InitEmpty, Always, TestResultFalse (
- [["disk_has_backing_file"; "../data/blank-disk-1s.qcow2"]]),
[];
+ [["disk_has_backing_file"; "$datadir/blank-disk-1s.qcow2"]]),
[];
InitEmpty, Always, TestResultFalse (
- [["disk_has_backing_file"; "../data/blank-disk-1K.raw"]]),
[];
+ [["disk_has_backing_file"; "$datadir/blank-disk-1K.raw"]]),
[];
InitEmpty, Always, TestResultFalse (
- [["disk_has_backing_file"; "../data/blank-disk-1K.qcow2"]]),
[];
+ [["disk_has_backing_file"; "$datadir/blank-disk-1K.qcow2"]]),
[];
InitEmpty, Always, TestResultFalse (
- [["disk_has_backing_file"; "../data/blank-disk-1M.raw"]]),
[];
+ [["disk_has_backing_file"; "$datadir/blank-disk-1M.raw"]]),
[];
InitEmpty, Always, TestResultFalse (
- [["disk_has_backing_file"; "../data/blank-disk-1M.qcow2"]]),
[];
+ [["disk_has_backing_file"; "$datadir/blank-disk-1M.qcow2"]]),
[];
InitEmpty, Always, TestResultTrue (
- [["disk_has_backing_file";
"../data/blank-disk-with-backing.qcow2"]]), [];
+ [["disk_has_backing_file";
"$datadir/blank-disk-with-backing.qcow2"]]), [];
];
shortdesc = "return whether disk has a backing file";
longdesc = "\
@@ -4238,67 +4238,67 @@ C<guestfs_is_file>, C<guestfs_is_blockdev> (etc),
C<guestfs_is_zero>." };
tests = [
InitScratchFS, Always, TestResultString (
[["mkdir"; "/command"];
- ["upload"; "test-command";
"/command/test-command"];
+ ["upload"; "$builddir/test-command";
"/command/test-command"];
["chmod"; "0o755"; "/command/test-command"];
["command"; "/command/test-command 1"]],
"Result1"), [];
InitScratchFS, Always, TestResultString (
[["mkdir"; "/command2"];
- ["upload"; "test-command";
"/command2/test-command"];
+ ["upload"; "$builddir/test-command";
"/command2/test-command"];
["chmod"; "0o755"; "/command2/test-command"];
["command"; "/command2/test-command 2"]],
"Result2\n"), [];
InitScratchFS, Always, TestResultString (
[["mkdir"; "/command3"];
- ["upload"; "test-command";
"/command3/test-command"];
+ ["upload"; "$builddir/test-command";
"/command3/test-command"];
["chmod"; "0o755"; "/command3/test-command"];
["command"; "/command3/test-command 3"]],
"\nResult3"), [];
InitScratchFS, Always, TestResultString (
[["mkdir"; "/command4"];
- ["upload"; "test-command";
"/command4/test-command"];
+ ["upload"; "$builddir/test-command";
"/command4/test-command"];
["chmod"; "0o755"; "/command4/test-command"];
["command"; "/command4/test-command 4"]],
"\nResult4\n"), [];
InitScratchFS, Always, TestResultString (
[["mkdir"; "/command5"];
- ["upload"; "test-command";
"/command5/test-command"];
+ ["upload"; "$builddir/test-command";
"/command5/test-command"];
["chmod"; "0o755"; "/command5/test-command"];
["command"; "/command5/test-command 5"]],
"\nResult5\n\n"), [];
InitScratchFS, Always, TestResultString (
[["mkdir"; "/command6"];
- ["upload"; "test-command";
"/command6/test-command"];
+ ["upload"; "$builddir/test-command";
"/command6/test-command"];
["chmod"; "0o755"; "/command6/test-command"];
["command"; "/command6/test-command 6"]],
"\n\nResult6\n\n"), [];
InitScratchFS, Always, TestResultString (
[["mkdir"; "/command7"];
- ["upload"; "test-command";
"/command7/test-command"];
+ ["upload"; "$builddir/test-command";
"/command7/test-command"];
["chmod"; "0o755"; "/command7/test-command"];
["command"; "/command7/test-command 7"]], ""),
[];
InitScratchFS, Always, TestResultString (
[["mkdir"; "/command8"];
- ["upload"; "test-command";
"/command8/test-command"];
+ ["upload"; "$builddir/test-command";
"/command8/test-command"];
["chmod"; "0o755"; "/command8/test-command"];
["command"; "/command8/test-command 8"]], "\n"),
[];
InitScratchFS, Always, TestResultString (
[["mkdir"; "/command9"];
- ["upload"; "test-command";
"/command9/test-command"];
+ ["upload"; "$builddir/test-command";
"/command9/test-command"];
["chmod"; "0o755"; "/command9/test-command"];
["command"; "/command9/test-command 9"]], "\n\n"),
[];
InitScratchFS, Always, TestResultString (
[["mkdir"; "/command10"];
- ["upload"; "test-command";
"/command10/test-command"];
+ ["upload"; "$builddir/test-command";
"/command10/test-command"];
["chmod"; "0o755"; "/command10/test-command"];
["command"; "/command10/test-command 10"]],
"Result10-1\nResult10-2\n"), [];
InitScratchFS, Always, TestResultString (
[["mkdir"; "/command11"];
- ["upload"; "test-command";
"/command11/test-command"];
+ ["upload"; "$builddir/test-command";
"/command11/test-command"];
["chmod"; "0o755"; "/command11/test-command"];
["command"; "/command11/test-command 11"]],
"Result11-1\nResult11-2"), [];
InitScratchFS, Always, TestLastFail (
[["mkdir"; "/command12"];
- ["upload"; "test-command";
"/command12/test-command"];
+ ["upload"; "$builddir/test-command";
"/command12/test-command"];
["chmod"; "0o755"; "/command12/test-command"];
["command"; "/command12/test-command"]]), [];
InitScratchFS, Always, TestResultString (
[["mkdir"; "/pwd"];
- ["upload"; "test-pwd"; "/pwd/test-pwd"];
+ ["upload"; "$builddir/test-pwd";
"/pwd/test-pwd"];
["chmod"; "0o755"; "/pwd/test-pwd"];
["command"; "/pwd/test-pwd"]], "/"), [];
];
@@ -4342,67 +4342,67 @@ locations." };
tests = [
InitScratchFS, Always, TestResult (
[["mkdir"; "/command_lines"];
- ["upload"; "test-command";
"/command_lines/test-command"];
+ ["upload"; "$builddir/test-command";
"/command_lines/test-command"];
["chmod"; "0o755";
"/command_lines/test-command"];
["command_lines"; "/command_lines/test-command 1"]],
"is_string_list (ret, 1, \"Result1\")"), [];
InitScratchFS, Always, TestResult (
[["mkdir"; "/command_lines2"];
- ["upload"; "test-command";
"/command_lines2/test-command"];
+ ["upload"; "$builddir/test-command";
"/command_lines2/test-command"];
["chmod"; "0o755";
"/command_lines2/test-command"];
["command_lines"; "/command_lines2/test-command 2"]],
"is_string_list (ret, 1, \"Result2\")"), [];
InitScratchFS, Always, TestResult (
[["mkdir"; "/command_lines3"];
- ["upload"; "test-command";
"/command_lines3/test-command"];
+ ["upload"; "$builddir/test-command";
"/command_lines3/test-command"];
["chmod"; "0o755";
"/command_lines3/test-command"];
["command_lines"; "/command_lines3/test-command 3"]],
"is_string_list (ret, 2, \"\", \"Result3\")"), [];
InitScratchFS, Always, TestResult (
[["mkdir"; "/command_lines4"];
- ["upload"; "test-command";
"/command_lines4/test-command"];
+ ["upload"; "$builddir/test-command";
"/command_lines4/test-command"];
["chmod"; "0o755";
"/command_lines4/test-command"];
["command_lines"; "/command_lines4/test-command 4"]],
"is_string_list (ret, 2, \"\", \"Result4\")"), [];
InitScratchFS, Always, TestResult (
[["mkdir"; "/command_lines5"];
- ["upload"; "test-command";
"/command_lines5/test-command"];
+ ["upload"; "$builddir/test-command";
"/command_lines5/test-command"];
["chmod"; "0o755";
"/command_lines5/test-command"];
["command_lines"; "/command_lines5/test-command 5"]],
"is_string_list (ret, 3, \"\", \"Result5\",
\"\")"), [];
InitScratchFS, Always, TestResult (
[["mkdir"; "/command_lines6"];
- ["upload"; "test-command";
"/command_lines6/test-command"];
+ ["upload"; "$builddir/test-command";
"/command_lines6/test-command"];
["chmod"; "0o755";
"/command_lines6/test-command"];
["command_lines"; "/command_lines6/test-command 6"]],
"is_string_list (ret, 4, \"\", \"\",
\"Result6\", \"\")"), [];
InitScratchFS, Always, TestResult (
[["mkdir"; "/command_lines7"];
- ["upload"; "test-command";
"/command_lines7/test-command"];
+ ["upload"; "$builddir/test-command";
"/command_lines7/test-command"];
["chmod"; "0o755";
"/command_lines7/test-command"];
["command_lines"; "/command_lines7/test-command 7"]],
"is_string_list (ret, 0)"), [];
InitScratchFS, Always, TestResult (
[["mkdir"; "/command_lines8"];
- ["upload"; "test-command";
"/command_lines8/test-command"];
+ ["upload"; "$builddir/test-command";
"/command_lines8/test-command"];
["chmod"; "0o755";
"/command_lines8/test-command"];
["command_lines"; "/command_lines8/test-command 8"]],
"is_string_list (ret, 1, \"\")"), [];
InitScratchFS, Always, TestResult (
[["mkdir"; "/command_lines9"];
- ["upload"; "test-command";
"/command_lines9/test-command"];
+ ["upload"; "$builddir/test-command";
"/command_lines9/test-command"];
["chmod"; "0o755";
"/command_lines9/test-command"];
["command_lines"; "/command_lines9/test-command 9"]],
"is_string_list (ret, 2, \"\", \"\")"), [];
InitScratchFS, Always, TestResult (
[["mkdir"; "/command_lines10"];
- ["upload"; "test-command";
"/command_lines10/test-command"];
+ ["upload"; "$builddir/test-command";
"/command_lines10/test-command"];
["chmod"; "0o755";
"/command_lines10/test-command"];
["command_lines"; "/command_lines10/test-command 10"]],
"is_string_list (ret, 2, \"Result10-1\",
\"Result10-2\")"), [];
InitScratchFS, Always, TestResult (
[["mkdir"; "/command_lines11"];
- ["upload"; "test-command";
"/command_lines11/test-command"];
+ ["upload"; "$builddir/test-command";
"/command_lines11/test-command"];
["chmod"; "0o755";
"/command_lines11/test-command"];
["command_lines"; "/command_lines11/test-command 11"]],
"is_string_list (ret, 2, \"Result11-1\",
\"Result11-2\")"), []
@@ -4615,11 +4615,13 @@ This uses the L<blockdev(8)> command." };
progress = true; cancellable = true;
tests = [
InitScratchFS, Always, TestResultString (
- (* Pick a file from cwd which isn't likely to change. *)
[["mkdir"; "/upload"];
- ["upload"; "$srcdir/../../COPYING.LIB";
"/upload/COPYING.LIB"];
- ["checksum"; "md5"; "/upload/COPYING.LIB"]],
- Digest.to_hex (Digest.file "COPYING.LIB")), []
+ (* Pick a file from the top-level directory which is included
+ * in the external test suite.
+ *)
+ ["upload"; "$top_srcdir/COPYING";
"/upload/COPYING"];
+ ["checksum"; "md5"; "/upload/COPYING"]],
+ Digest.to_hex (Digest.file "COPYING")), []
];
shortdesc = "upload a file from the local machine";
longdesc = "\
@@ -4637,13 +4639,15 @@ See also C<guestfs_download>." };
progress = true; cancellable = true;
tests = [
InitScratchFS, Always, TestResultString (
- (* Pick a file from cwd which isn't likely to change. *)
[["mkdir"; "/download"];
- ["upload"; "$srcdir/../../COPYING.LIB";
"/download/COPYING.LIB"];
- ["download"; "/download/COPYING.LIB";
"testdownload.tmp"];
+ (* Pick a file from the top-level directory which is included
+ * in the external test suite.
+ *)
+ ["upload"; "$top_srcdir/COPYING";
"/download/COPYING"];
+ ["download"; "/download/COPYING";
"testdownload.tmp"];
["upload"; "testdownload.tmp";
"/download/upload"];
["checksum"; "md5"; "/download/upload"]],
- Digest.to_hex (Digest.file "COPYING.LIB")), []
+ Digest.to_hex (Digest.file "COPYING")), []
];
shortdesc = "download a file to the local machine";
longdesc = "\
@@ -4735,15 +4739,15 @@ To get the checksums for many files, use
C<guestfs_checksums_out>." };
tests = [
InitScratchFS, Always, TestResultString (
[["mkdir"; "/tar_in"];
- ["tar_in"; "$srcdir/../data/helloworld.tar";
"/tar_in"; "NOARG"];
+ ["tar_in"; "$datadir/helloworld.tar"; "/tar_in";
"NOARG"];
["cat"; "/tar_in/hello"]], "hello\n"), [];
InitScratchFS, Always, TestResultString (
[["mkdir"; "/tar_in_gz"];
- ["tar_in"; "$srcdir/../data/helloworld.tar.gz";
"/tar_in_gz"; "gzip"];
+ ["tar_in"; "$datadir/helloworld.tar.gz";
"/tar_in_gz"; "gzip"];
["cat"; "/tar_in_gz/hello"]], "hello\n"), [];
InitScratchFS, IfAvailable "xz", TestResultString (
[["mkdir"; "/tar_in_xz"];
- ["tar_in"; "$srcdir/../data/helloworld.tar.xz";
"/tar_in_xz"; "xz"];
+ ["tar_in"; "$datadir/helloworld.tar.xz";
"/tar_in_xz"; "xz"];
["cat"; "/tar_in_xz/hello"]], "hello\n"), []
];
shortdesc = "unpack tarfile to directory";
@@ -4800,7 +4804,7 @@ instead of user/group names.
tests = [
InitScratchFS, Always, TestResultString (
[["mkdir"; "/tgz_in"];
- ["tgz_in"; "$srcdir/../data/helloworld.tar.gz";
"/tgz_in"];
+ ["tgz_in"; "$datadir/helloworld.tar.gz";
"/tgz_in"];
["cat"; "/tgz_in/hello"]], "hello\n"), []
];
shortdesc = "unpack compressed tarball to directory";
@@ -8130,7 +8134,7 @@ or growing unnecessarily." };
tests = [
InitScratchFS, Always, TestResultString (
[["mkdir"; "/txz_in"];
- ["txz_in"; "$srcdir/../data/helloworld.tar.xz";
"/txz_in"];
+ ["txz_in"; "$datadir/helloworld.tar.xz";
"/txz_in"];
["cat"; "/txz_in/hello"]], "hello\n"), []
];
shortdesc = "unpack compressed tarball to directory";
@@ -8242,7 +8246,7 @@ types (see C<guestfs_part_get_parttype>)." };
tests = [
InitISOFS, Always, TestResult (
[["checksum_device"; "md5"; "/dev/sdd"]],
- "check_file_md5 (ret, \"../data/test.iso\") == 0"), []
+ "check_file_md5 (ret, \"$datadir/test.iso\") == 0"), []
];
shortdesc = "compute MD5, SHAx or CRC checksum of the contents of a
device";
longdesc = "\
@@ -8316,7 +8320,7 @@ to find out what it is for." };
cancellable = true;
tests = [
InitScratchFS, Always, TestResultString (
- [["base64_in"; "../data/hello.b64"; "/base64_in"];
+ [["base64_in"; "$datadir/hello.b64";
"/base64_in"];
["cat"; "/base64_in"]], "hello\n"), []
];
shortdesc = "upload base64-encoded data to file";
@@ -8862,9 +8866,9 @@ See also C<guestfs_part_to_partnum>,
C<guestfs_device_index>." };
proc_nr = Some 273;
progress = true; cancellable = true;
tests =
- (let md5 = Digest.to_hex (Digest.file "COPYING.LIB") in [
+ (let md5 = Digest.to_hex (Digest.file "COPYING") in [
InitScratchFS, Always, TestResultString (
- [["upload_offset"; "$srcdir/../../COPYING.LIB";
"/upload_offset"; "0"];
+ [["upload_offset"; "$top_srcdir/COPYING";
"/upload_offset"; "0"];
["checksum"; "md5"; "/upload_offset"]], md5),
[]
]);
shortdesc = "upload a file from the local machine with offset";
@@ -8892,17 +8896,19 @@ See also C<guestfs_upload>, C<guestfs_pwrite>."
};
proc_nr = Some 274;
progress = true; cancellable = true;
tests =
- (let md5 = Digest.to_hex (Digest.file "COPYING.LIB") in
+ (let md5 = Digest.to_hex (Digest.file "COPYING") in
let offset = string_of_int 100 in
- let size = string_of_int ((Unix.stat "COPYING.LIB").Unix.st_size - 100)
in
+ let size = string_of_int ((Unix.stat "COPYING").Unix.st_size - 100) in
[
InitScratchFS, Always, TestResultString (
- (* Pick a file from cwd which isn't likely to change. *)
[["mkdir"; "/download_offset"];
- ["upload"; "$srcdir/../../COPYING.LIB";
"/download_offset/COPYING.LIB"];
- ["download_offset"; "/download_offset/COPYING.LIB";
"testdownload.tmp"; offset; size];
- ["upload_offset"; "testdownload.tmp";
"/download_offset/COPYING.LIB"; offset];
- ["checksum"; "md5";
"/download_offset/COPYING.LIB"]], md5), []
+ (* Pick a file from the top-level directory which is included
+ * in the external test suite.
+ *)
+ ["upload"; "$top_srcdir/COPYING";
"/download_offset/COPYING"];
+ ["download_offset"; "/download_offset/COPYING";
"testdownload.tmp"; offset; size];
+ ["upload_offset"; "testdownload.tmp";
"/download_offset/COPYING"; offset];
+ ["checksum"; "md5";
"/download_offset/COPYING"]], md5), []
]);
shortdesc = "download a file to the local machine with offset and size";
longdesc = "\
@@ -10708,7 +10714,7 @@ C<guestfs_xfs_growfs> calls." };
optional = Some "hivex";
tests = [
InitScratchFS, Always, TestRun (
- [["upload"; "$srcdir/../data/minimal";
"/hivex_open"];
+ [["upload"; "$datadir/minimal"; "/hivex_open"];
["hivex_open"; "/hivex_open"; ""; "";
"false"];
["hivex_root"]; (* in this hive, it returns 0x1020 *)
["hivex_node_name"; "0x1020"];
@@ -10856,11 +10862,11 @@ See also: C<guestfs_hivex_value_utf8>." };
optional = Some "hivex";
tests = [
InitScratchFS, Always, TestRun (
- [["upload"; "$srcdir/../data/minimal";
"/hivex_commit1"];
+ [["upload"; "$datadir/minimal"; "/hivex_commit1"];
["hivex_open"; "/hivex_commit1"; ""; "";
"true"];
["hivex_commit"; "NULL"]]), [["hivex_close"]];
InitScratchFS, Always, TestResultTrue (
- [["upload"; "$srcdir/../data/minimal";
"/hivex_commit2"];
+ [["upload"; "$datadir/minimal"; "/hivex_commit2"];
["hivex_open"; "/hivex_commit2"; ""; "";
"true"];
["hivex_commit"; "/hivex_commit2_copy"];
["is_file"; "/hivex_commit2_copy"; "false"]]),
[["hivex_close"]]
diff --git a/generator/tests.ml b/generator/tests.ml
index 3882a09..53f3a17 100644
--- a/generator/tests.ml
+++ b/generator/tests.ml
@@ -32,6 +32,32 @@ let defaults = {
(* The tests in each subdirectory. *)
let tests = [
+
+ "tests/c-api", {
+ defaults with
+ check_fast = [
+ "test-just-header";
+ "test-just-header-cxx";
+ "test-add-drive-opts";
+ "test-backend-settings";
+ "test-create-handle";
+ "test-config";
+ "test-event-string";
+ "test-environment";
+ "test-private-data";
+ ];
+ check = [
+ "tests";
+ "test-last-errno";
+ "test-user-cancel";
+ "test-debug-to-file";
+ ];
+ check_programs = [
+ "test-command";
+ "test-pwd";
+ ];
+ };
+
"inspector", {
defaults with
check = [
diff --git a/generator/tests_c_api.ml b/generator/tests_c_api.ml
index 88aa07e..86bf08e 100644
--- a/generator/tests_c_api.ml
+++ b/generator/tests_c_api.ml
@@ -385,17 +385,16 @@ and generate_test_command_call ?(expect_error = false) ?test ?ret
test_name cmd=
| String _, arg, sym
| OptString _, arg, sym
| Key _, arg, sym
- | GUID _, arg, sym ->
- pr " const char *%s = \"%s\";\n" sym (c_quote arg);
+ | GUID _, arg, sym
+ | FileIn _, arg, sym ->
+ pr " CLEANUP_FREE char *%s = substitute_environment
(\"%s\");\n"
+ sym (c_quote arg)
| BufferIn _, arg, sym ->
pr " const char *%s = \"%s\";\n" sym (c_quote arg);
pr " size_t %s_size = %d;\n" sym (String.length arg)
| Int _, _, _
| Int64 _, _, _
| Bool _, _, _ -> ()
- | FileIn _, arg, sym ->
- pr " CLEANUP_FREE char *%s = substitute_srcdir (\"%s\");\n"
- sym (c_quote arg)
| FileOut _, _, _ -> ()
| StringList _, "", sym
| DeviceList _, "", sym ->
diff --git a/tests/c-api/Makefile.am b/tests/c-api/Makefile.am
index 6ea22e9..f626d50 100644
--- a/tests/c-api/Makefile.am
+++ b/tests/c-api/Makefile.am
@@ -17,62 +17,20 @@
include $(top_srcdir)/subdir-rules.mk
-generator_built = tests.c
+generator_built = tests.c tests.mk
-BUILT_SOURCES = $(generator_built)
+BUILT_SOURCES = tests.c
-EXTRA_DIST = $(BUILT_SOURCES)
+EXTRA_DIST = \
+ tests.c \
+ test-command.c \
+ test-pwd.c
-check_PROGRAMS = \
- tests \
- test-command \
- test-just-header \
- test-create-handle \
- test-config \
- test-add-drive-opts \
- test-last-errno \
- test-backend-settings \
- test-private-data \
- test-user-cancel \
- test-debug-to-file \
- test-environment \
- test-pwd \
- test-event-string
+include $(srcdir)/tests.mk
-TESTS = \
- tests \
- test-just-header \
- test-create-handle \
- test-config \
- test-add-drive-opts \
- test-last-errno \
- test-backend-settings \
- test-private-data \
- test-user-cancel \
- test-debug-to-file \
- test-environment \
- test-event-string
-
-if HAVE_CXX
-check_PROGRAMS += test-just-header-cxx
-TESTS += test-just-header-cxx
-endif
-
-# The API behind this test is not baked yet.
-#if HAVE_LIBVIRT
-#check_PROGRAMS += test-add-libvirt-dom
-#TESTS += test-add-libvirt-dom
-#endif
+# The API behind this test is not baked yet, so we only distribute the source.
EXTRA_DIST += test-add-libvirt-dom.c
-TESTS_ENVIRONMENT = \
- SKIP_TEST_COMMAND=$(shell ldd test-command | grep -sq 'not a dynamic executable'
|| echo 1) \
- SKIP_TEST_COMMAND_LINES=$(shell ldd test-command | grep -sq 'not a dynamic
executable' || echo 1) \
- SKIP_TEST_COMMAND=$(shell ldd test-pwd | grep -sq 'not a dynamic executable' ||
echo 1) \
- $(top_builddir)/run --test $(VG)
-
-#SKIP_TEST_CHECKSUM_8=$(shell if test `find ../initramfs -name squashfs.ko | wc -l` -eq
0; then echo 1; fi)
-
tests_SOURCES = \
tests.c \
tests.h \
@@ -119,6 +77,10 @@ test_just_header_cxx_CXXFLAGS = \
$(WARN_CFLAGS) $(WERROR_CFLAGS)
test_just_header_cxx_LDADD = \
$(top_builddir)/src/libguestfs.la
+else
+test-just-header-cxx:
+ echo 'exit 77' > $@
+ chmod 0755 $@
endif
test_create_handle_SOURCES = test-create-handle.c
@@ -227,6 +189,3 @@ test_event_string_LDADD = \
# $(top_builddir)/src/libguestfs.la $(LIBVIRT_LIBS) \
# $(LTLIBTHREAD) $(top_builddir)/gnulib/lib/libgnu.la
#endif
-
-check-valgrind:
- $(MAKE) VG="$(top_builddir)/run @VG@" check
diff --git a/tests/c-api/tests-main.c b/tests/c-api/tests-main.c
index e81e15e..d98445e 100644
--- a/tests/c-api/tests-main.c
+++ b/tests/c-api/tests-main.c
@@ -357,35 +357,45 @@ match_re (const char *str, const char *pattern)
return r != PCRE_ERROR_NOMATCH;
}
-/* Used for FileIn parameters in tests. If the path starts with
- * "$srcdir" then replace that with the contents of the $srcdir
- * environment variable (this is set by automake and run time). The
- * caller must free the returned string.
+/* Used for some parameters in tests. If the string starts with
+ * "$variable" then replace that with the contents of the named
+ * environment variable. The caller must free the returned string.
*/
char *
-substitute_srcdir (const char *path)
+substitute_environment (const char *str)
{
char *ret;
+ size_t len;
+ CLEANUP_FREE char *name = NULL;
+ const char *value;
- if (STRPREFIX (path, "$srcdir")) {
- const char *srcdir;
+ if (STRPREFIX (str, "$")) {
+ len = strspn (str+1,
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_");
+ if (len == 0) {
+ fprintf (stderr, "tests: invalid environment variable in string (%s)\n",
+ str);
+ exit (EXIT_FAILURE);
+ }
+ name = strndup (str+1, len);
+ if (name == NULL) {
+ perror ("strndup");
+ exit (EXIT_FAILURE);
+ }
- srcdir = getenv ("srcdir");
- if (!srcdir) {
- fprintf (stderr, "tests: environment variable $srcdir is not defined.\n"
- "Normally it is defined by automake. If you are running the\n"
- "tests directly, set $srcdir to point to the source
tests/c-api\n"
- "directory.\n");
+ value = getenv (name);
+ if (!value) {
+ fprintf (stderr, "tests: environment variable $%s is not defined.\n",
+ name);
exit (EXIT_FAILURE);
}
- if (asprintf (&ret, "%s%s", srcdir, path + 7) == -1) {
+ if (asprintf (&ret, "%s%s", value, str + 1 + len) == -1) {
perror ("asprintf");
exit (EXIT_FAILURE);
}
}
else {
- ret = strdup (path);
+ ret = strdup (str);
if (!ret) {
perror ("strdup");
exit (EXIT_FAILURE);
@@ -424,6 +434,8 @@ static guestfs_h *
create_handle (void)
{
guestfs_h *g;
+ const char *datadir;
+ CLEANUP_FREE char *test_iso = NULL;
g = guestfs_create ();
if (g == NULL) {
@@ -446,8 +458,18 @@ create_handle (void)
exit (EXIT_FAILURE);
}
- if (guestfs_add_drive_ro (g, "../data/test.iso") == -1) {
- printf ("FAIL: guestfs_add_drive_ro ../data/test.iso\n");
+ datadir = getenv ("datadir");
+ if (datadir == NULL) {
+ fprintf (stderr, "environment variable $datadir is not defined\n");
+ exit (EXIT_FAILURE);
+ }
+ if (asprintf (&test_iso, "%s/test.iso", datadir) == -1) {
+ perror ("asprintf");
+ exit (EXIT_FAILURE);
+ }
+
+ if (guestfs_add_drive_ro (g, test_iso) == -1) {
+ printf ("FAIL: guestfs_add_drive_ro $datadir/test.iso\n");
exit (EXIT_FAILURE);
}
diff --git a/tests/c-api/tests.h b/tests/c-api/tests.h
index 7959570..129aee6 100644
--- a/tests/c-api/tests.h
+++ b/tests/c-api/tests.h
@@ -43,7 +43,7 @@ extern int check_file_md5 (const char *ret, const char *filename);
extern const char *get_key (char **hash, const char *key);
extern int check_hash (char **ret, const char *key, const char *expected);
extern int match_re (const char *str, const char *pattern);
-extern char *substitute_srcdir (const char *path);
+extern char *substitute_environment (const char *str);
extern void skipped (const char *test_name, const char *fs, ...) __attribute__((format
(printf,2,3)));
#endif /* TESTS_H_ */
diff --git a/tests/c-api/tests.mk b/tests/c-api/tests.mk
new file mode 100644
index 0000000..9b52f25
--- /dev/null
+++ b/tests/c-api/tests.mk
@@ -0,0 +1,71 @@
+# libguestfs generated file
+# WARNING: THIS FILE IS GENERATED FROM:
+# generator/ *.ml
+# ANY CHANGES YOU MAKE TO THIS FILE WILL BE LOST.
+#
+# Copyright (C) 2009-2014 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.
+
+localtestsdir = $(alltestsdir)/tests/c-api
+
+localtests_PROGRAMS = \
+ test-add-drive-opts \
+ test-backend-settings \
+ test-command \
+ test-config \
+ test-create-handle \
+ test-debug-to-file \
+ test-environment \
+ test-event-string \
+ test-just-header \
+ test-just-header-cxx \
+ test-last-errno \
+ test-private-data \
+ test-pwd \
+ test-user-cancel \
+ tests
+
+# Note that we cannot create a simple 'check:' target since
+# automake will (silently) overrule it, so we do this instead:
+
+TESTS_ENVIRONMENT = $(top_builddir)/run
+TESTS = $(top_builddir)/test-harness
+
+check-valgrind:
+ $(top_builddir)/run $(top_builddir)/test-harness --valgrind
+
+check-direct:
+ $(top_builddir)/run $(top_builddir)/test-harness --direct
+
+check-valgrind-direct:
+ $(top_builddir)/run $(top_builddir)/test-harness --valgrind --direct
+
+check-uml:
+ $(top_builddir)/run $(top_builddir)/test-harness --uml
+
+check-valgrind-uml:
+ $(top_builddir)/run $(top_builddir)/test-harness --valgrind --uml
+
+check-with-upstream-qemu:
+ $(top_builddir)/run $(top_builddir)/test-harness --upstream-qemu
+
+check-with-upstream-libvirt:
+ $(top_builddir)/run $(top_builddir)/test-harness --upstream-libvirt
+
+check-fast:
+ $(top_builddir)/run $(top_builddir)/test-harness --fast
+
+EXTRA_DIST += tests.mk
--
2.0.4