extra tests: Test virt-sparsify.
authorRichard W.M. Jones <rjones@redhat.com>
Tue, 29 Nov 2011 17:20:11 +0000 (17:20 +0000)
committerRichard W.M. Jones <rjones@redhat.com>
Fri, 2 Dec 2011 08:36:11 +0000 (08:36 +0000)
This adds the virt-sparsify --debug-gc option which causes
virt-sparsify to call Gc.compact before exiting, allowing
GC and memory problems to be tested.

Add an extratest which runs virt-sparsify under valgrind.
(cherry picked from commit 14b1e7b963cd5446ab76a067085b91925dd5d3e3)

extratests/Makefile.am
sparsify/sparsify.ml
sparsify/test-virt-sparsify.sh
sparsify/virt-sparsify.pod

index a73a187..dff74b6 100644 (file)
@@ -47,6 +47,7 @@ extra-tests: \
        test-tools-internal \
        test-tools-real \
        test-resize \
+       test-sparsify \
        test-capitests \
        test-ocaml
 
@@ -101,12 +102,15 @@ test-tools-real:
 test-resize:
        $(MAKE) -C ../resize VG="$(VG)" check
 
+# Run virt-sparsify tests under valgrind.
+test-sparsify:
+       $(MAKE) -C ../sparsify VG="$(VG)" check
+
 # XXX Not tested:
 # ../clone/virt-sysprep
 # ../edit/virt-edit
 # ../edit/virt-edit -e
 # ../fuse/guestmount
-# ../sparsify/virt-sparsify (OCaml)
 # ../tools/virt-win-reg (Perl)
 # ../tools/virt-make-fs (Perl)
 
index 956fccb..9a46495 100644 (file)
@@ -28,7 +28,8 @@ let () = Random.self_init ()
 (* Command line argument parsing. *)
 let prog = Filename.basename Sys.executable_name
 
-let indisk, outdisk, convert, format, ignores, machine_readable, quiet,
+let indisk, outdisk, convert, debug_gc,
+  format, ignores, machine_readable, quiet,
   verbose, trace =
   let display_version () =
     let g = new G.guestfs () in
@@ -41,6 +42,7 @@ let indisk, outdisk, convert, format, ignores, machine_readable, quiet,
   let add xs s = xs := s :: !xs in
 
   let convert = ref "" in
+  let debug_gc = ref false in
   let format = ref "" in
   let ignores = ref [] in
   let machine_readable = ref false in
@@ -50,6 +52,7 @@ let indisk, outdisk, convert, format, ignores, machine_readable, quiet,
 
   let argspec = Arg.align [
     "--convert", Arg.Set_string convert,    "format Format of output disk (default: same as input)";
+    "--debug-gc", Arg.Set debug_gc,         " Debug GC and memory allocations";
     "--format",  Arg.Set_string format,     "format Format of input disk";
     "--ignore",  Arg.String (add ignores),  "fs Ignore filesystem";
     "--machine-readable", Arg.Set machine_readable, " Make output machine readable";
@@ -77,6 +80,7 @@ read the man page virt-sparsify(1).
 
   (* Dereference the rest of the args. *)
   let convert = match !convert with "" -> None | str -> Some str in
+  let debug_gc = !debug_gc in
   let format = match !format with "" -> None | str -> Some str in
   let ignores = List.rev !ignores in
   let machine_readable = !machine_readable in
@@ -122,8 +126,9 @@ read the man page virt-sparsify(1).
   if contains_comma then
     error "input filename '%s' contains a comma; qemu-img command line syntax prevents us from using such an image" indisk;
 
-  indisk, outdisk, convert, format, ignores, machine_readable, quiet,
-  verbose, trace
+  indisk, outdisk, convert,
+    debug_gc, format, ignores, machine_readable, quiet,
+    verbose, trace
 
 let () =
   if not quiet then
@@ -302,4 +307,7 @@ let () =
     wrap "Sparsify operation completed with no errors.  Before deleting the old disk, carefully check that the target disk boots and works correctly.\n";
   );
 
+  if debug_gc then
+    Gc.compact ();
+
   exit 0
index 8d38775..4a7a2f6 100755 (executable)
@@ -37,7 +37,7 @@ rm /boot/big
 umount-all
 EOF
 
-./virt-sparsify --format raw test1.img --convert qcow2 test2.img
+$VG ./virt-sparsify --debug-gc --format raw test1.img --convert qcow2 test2.img
 
 size_before=$(du -s test1.img | awk '{print $1}')
 size_after=$(du -s test2.img | awk '{print $1}')
index 77467b6..2e2c02d 100644 (file)
@@ -121,6 +121,12 @@ eg. C<vmdk>, but support for other formats is reliant on qemu.
 Specifying the I<--convert> option is usually a good idea, because
 then virt-sparsify doesn't need to try to guess the input format.
 
+=item B<--debug-gc>
+
+Debug garbage collection and memory allocation.  This is only useful
+when debugging memory problems in virt-sparsify or the OCaml libguestfs
+bindings.
+
 =item B<--format> raw
 
 =item B<--format> qcow2