summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Jones <rjones@trick.home.annexia.org>2009-07-29 18:44:46 +0100
committerRichard Jones <rjones@trick.home.annexia.org>2009-07-29 18:44:46 +0100
commitbf2b08560f649c22152e4138531ad0b46b4ad1b3 (patch)
tree3002cb0225a56b15ee905bbbeb52603f3e033f76
parent9847e0c07d5907887e26ec60192fa12aa46277ee (diff)
downloadlibguestfs-bf2b08560f649c22152e4138531ad0b46b4ad1b3.tar.gz
libguestfs-bf2b08560f649c22152e4138531ad0b46b4ad1b3.tar.xz
libguestfs-bf2b08560f649c22152e4138531ad0b46b4ad1b3.zip
tests: Fix read_file test.
The test ignored the fact that this function returns a (char *, size_t) pair, and just treated the char * as a string. This of course would fail if the string didn't happen to be nul-terminated. The tests are updated to add a new TestOutputBuffer type which should be used with functions that return RBufferOut.
-rw-r--r--images/Makefile.am4
-rw-r--r--images/known-43
-rw-r--r--images/known-52
-rwxr-xr-xsrc/generator.ml29
4 files changed, 33 insertions, 5 deletions
diff --git a/images/Makefile.am b/images/Makefile.am
index b6b7f72a..424f5e45 100644
--- a/images/Makefile.am
+++ b/images/Makefile.am
@@ -22,7 +22,7 @@ EXTRA_DIST = \
helloworld.tar \
helloworld.tar.gz \
mbr-ext2-empty.img.gz \
- empty known-1 known-2 known-3 \
+ empty known-1 known-2 known-3 known-4 known-5 \
bin-i586-dynamic \
bin-sparc-dynamic \
bin-win32.exe \
@@ -49,6 +49,8 @@ squash_files_src = \
$(srcdir)/known-1 \
$(srcdir)/known-2 \
$(srcdir)/known-3 \
+ $(srcdir)/known-4 \
+ $(srcdir)/known-5 \
$(srcdir)/bin-i586-dynamic \
$(srcdir)/bin-sparc-dynamic \
$(srcdir)/bin-win32.exe \
diff --git a/images/known-4 b/images/known-4
new file mode 100644
index 00000000..f5bc74f6
--- /dev/null
+++ b/images/known-4
@@ -0,0 +1,3 @@
+abc
+def
+ghi \ No newline at end of file
diff --git a/images/known-5 b/images/known-5
new file mode 100644
index 00000000..3122d943
--- /dev/null
+++ b/images/known-5
@@ -0,0 +1,2 @@
+abcdefghi
+jklmnopqr \ No newline at end of file
diff --git a/src/generator.ml b/src/generator.ml
index c098ec84..547acb7d 100755
--- a/src/generator.ml
+++ b/src/generator.ml
@@ -243,6 +243,10 @@ and test =
*)
| TestOutputLength of seq * int
(* Run the command sequence and expect the output of the final
+ * command to be a buffer (RBufferOut), ie. string + size.
+ *)
+ | TestOutputBuffer of seq * string
+ (* Run the command sequence and expect the output of the final
* command to be a structure.
*)
| TestOutputStruct of seq * test_field_compare list
@@ -3033,9 +3037,8 @@ with C<guestfs_mkmountpoint>. See C<guestfs_mkmountpoint>
for full details.");
("read_file", (RBufferOut "content", [String "path"]), 150, [ProtocolLimitWarning],
- [InitBasicFS, Always, TestOutput (
- [["write_file"; "/new"; "new file contents"; "0"];
- ["read_file"; "/new"]], "new file contents")],
+ [InitSquashFS, Always, TestOutputBuffer (
+ [["read_file"; "/known-4"]], "abc\ndef\nghi")],
"read a file",
"\
This calls returns the contents of the file C<path> as a
@@ -3471,7 +3474,8 @@ let seq_of_test = function
| TestOutputListOfDevices (s, _)
| TestOutputInt (s, _) | TestOutputIntOp (s, _, _)
| TestOutputTrue s | TestOutputFalse s
- | TestOutputLength (s, _) | TestOutputStruct (s, _)
+ | TestOutputLength (s, _) | TestOutputBuffer (s, _)
+ | TestOutputStruct (s, _)
| TestLastFail s -> s
(* Handling for function flags. *)
@@ -5219,6 +5223,23 @@ and generate_one_test_body name i test_name init test =
in
List.iter (generate_test_command_call test_name) seq;
generate_test_command_call ~test test_name last
+ | TestOutputBuffer (seq, expected) ->
+ pr " /* TestOutputBuffer for %s (%d) */\n" name i;
+ pr " const char *expected = \"%s\";\n" (c_quote expected);
+ let seq, last = get_seq_last seq in
+ let len = String.length expected in
+ let test () =
+ pr " if (size != %d) {\n" len;
+ pr " fprintf (stderr, \"%s: returned size of buffer wrong, expected %d but got %%zu\\n\", size);\n" test_name len;
+ pr " return -1;\n";
+ pr " }\n";
+ pr " if (strncmp (r, expected, size) != 0) {\n";
+ pr " fprintf (stderr, \"%s: expected \\\"%%s\\\" but got \\\"%%s\\\"\\n\", expected, r);\n" test_name;
+ pr " return -1;\n";
+ pr " }\n"
+ in
+ List.iter (generate_test_command_call test_name) seq;
+ generate_test_command_call ~test test_name last
| TestOutputStruct (seq, checks) ->
pr " /* TestOutputStruct for %s (%d) */\n" name i;
let seq, last = get_seq_last seq in