qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 7/8] qtest/ahci: add qcow2 support to ahci-test


From: John Snow
Subject: Re: [Qemu-devel] [PATCH 7/8] qtest/ahci: add qcow2 support to ahci-test
Date: Wed, 25 Feb 2015 17:40:00 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0



On 02/25/2015 10:27 AM, Stefan Hajnoczi wrote:
On Thu, Feb 19, 2015 at 05:30:02PM -0500, John Snow wrote:
diff --git a/tests/libqos/libqos.c b/tests/libqos/libqos.c
index bc8beb2..3577401 100644
--- a/tests/libqos/libqos.c
+++ b/tests/libqos/libqos.c
@@ -61,3 +61,33 @@ void qtest_shutdown(QOSState *qs)
      qtest_quit(qs->qts);
      g_free(qs);
  }
+
+int mkqcow2(const char *file, unsigned size_mb)
+{
+    pid_t pid;
+    int rc;
+    char buff[32];
+
+    snprintf(buff, 32, "%uM", size_mb);
+
+    pid = fork();
+    switch (pid) {
+    case -1:
+        perror("fork failed");
+        return -1;
+    case 0:
+        close(fileno(stdout));
+        rc = open("/dev/null", O_WRONLY);
+        g_assert_cmpint(rc, ==, fileno(stdout));
+        execl("./qemu-img", "qemu-img", "create", "-f", "qcow2",
+              file, buff, NULL);

Where is the current working directory set?


Nowhere in-program. We assume you are running this via `make check` which further assumes that qemu-img is in your build tree. We actually never set an explicit path for where the QEMU binary is either: it's set to e.g.:

QTEST_QEMU_BINARY=x86_64-softmmu/qemu-system-x86_64
and then executed via execlp("exec QTEST_QEMU_BINARY", ...)

This patch pulls a similar shortcut.

The Makefile blob doesn't actually appear to really ever explicitly set a path for where the binaries should be; qemu-img is not defined to be in any sort of path, so we can assume that all paths are relative to the Makefile.

What I will do is set QTEST_QEMU_IMG to at least match the direct name of the QEMU_IMG we generated, so it will have $(EXESUF) attached to it, for instance.

Will this work for both in-tree and out-of-tree builds?


Yes. I usually run out of tree, but it works fine in-tree too. As long as relative to the Makefile ./qemu-img$(EXESUF) exists, you will be fine.

If you decide to run this outside of make check, you can always set QTEST_QEMU_IMG yourself.

BTW, glib abstracts process spawning, maybe all this can be done in a
single function call:
https://developer.gnome.org/glib/stable/glib-Spawning-Processes.html#g-spawn-sync


OK, I've implemented it with this call instead. Will send a V2.

+        perror("execl failed");
+        exit(-1);

EXIT_FAILURE is provided by the C standard for returning failure.  (-1
is confusing because the shell exit code value cannot be negative.)

+    default:
+        wait(&rc);
+        g_assert_cmpint(rc, ==, 0);
+        return rc;
+    }
+
+    g_assert_not_reached();
+}
diff --git a/tests/libqos/libqos.h b/tests/libqos/libqos.h
index 612d41e..5abd2bd 100644
--- a/tests/libqos/libqos.h
+++ b/tests/libqos/libqos.h
@@ -19,6 +19,7 @@ typedef struct QOSState {
  QOSState *qtest_vboot(QOSOps *ops, const char *cmdline_fmt, va_list ap);
  QOSState *qtest_boot(QOSOps *ops, const char *cmdline_fmt, ...);
  void qtest_shutdown(QOSState *qs);
+int mkqcow2(const char *file, unsigned size_mb);

  static inline uint64_t qmalloc(QOSState *q, size_t bytes)
  {
--
1.9.3





reply via email to

[Prev in Thread] Current Thread [Next in Thread]