From: Denis V. Lunev <[email protected]>
main() creates a blkdebug script and two 64 MiB images and asserts
that every step worked. The images are sparse, which is free on Linux
but not everywhere: NetBSD mounts /tmp as a tmpfs sized at 25% of RAM
and charges a file its full length the moment it is extended, so the
ftruncate() returns ENOSPC and the binary dies before a test has run:
ERROR:../src/tests/qtest/ide-test.c:1260:main: assertion failed:
(ret == 0)
A file system with no room left fails the g_mkstemp() calls too, the
blkdebug script first of all.
Skip instead, as hd-geo-test does since commit a0d6d7454a
("tests/hd-geo-test: Skip test when images can not be created"): move
g_test_init() ahead of the setup, report the errno and register no
tests. The cleanup loop has to cope with a path never filled in.
Cc: John Snow <[email protected]>
Cc: Thomas Huth <[email protected]>
Reported-by: John Snow <[email protected]>
Signed-off-by: Denis V. Lunev <[email protected]>
---
tests/qtest/ide-test.c | 29 +++++++++++++++++++++++------
1 file changed, 23 insertions(+), 6 deletions(-)
diff --git a/tests/qtest/ide-test.c b/tests/qtest/ide-test.c
index b36b0f8875..805afb9461 100644
--- a/tests/qtest/ide-test.c
+++ b/tests/qtest/ide-test.c
@@ -1231,6 +1231,7 @@ int main(int argc, char **argv)
int i;
int fd;
int ret;
+ int err;
/*
* "base" stores the starting point where we create temporary files.
@@ -1245,25 +1246,37 @@ int main(int argc, char **argv)
base = ".";
#endif
+ g_test_init(&argc, &argv, NULL);
+
/* Create temporary blkdebug instructions */
debug_path = g_strdup_printf("%s/qtest-blkdebug.XXXXXX", base);
fd = g_mkstemp(debug_path);
- g_assert(fd >= 0);
+ if (fd < 0) {
+ g_test_message("Could not create %s: %s", debug_path,
+ strerror(errno));
+ goto test_add_done;
+ }
close(fd);
/* Create a temporary raw image */
for (i = 0; i < 2; ++i) {
tmp_path[i] = g_strdup_printf("%s/qtest.XXXXXX", base);
fd = g_mkstemp(tmp_path[i]);
- g_assert(fd >= 0);
+ if (fd < 0) {
+ g_test_message("Could not create %s: %s", tmp_path[i],
+ strerror(errno));
+ goto test_add_done;
+ }
ret = ftruncate(fd, TEST_IMAGE_SIZE);
- g_assert(ret == 0);
+ err = errno;
close(fd);
+ if (ret < 0) {
+ g_test_message("Could not size %s: %s", tmp_path[i],
+ strerror(err));
+ goto test_add_done;
+ }
}
- /* Run the tests */
- g_test_init(&argc, &argv, NULL);
-
qtest_add_func("/ide/read_native", test_specify);
qtest_add_func("/ide/identify", test_identify);
@@ -1288,10 +1301,14 @@ int main(int argc, char **argv)
qtest_add_func("/ide/cdrom/pio_raw", test_cdrom_pio_raw);
qtest_add_func("/ide/cdrom/dma_raw", test_cdrom_dma_raw);
+test_add_done:
ret = g_test_run();
/* Cleanup */
for (i = 0; i < 2; ++i) {
+ if (!tmp_path[i]) {
+ continue;
+ }
unlink(tmp_path[i]);
g_free(tmp_path[i]);
}
--
2.53.0