|
From: | Anthony Liguori |
Subject: | Re: [Qemu-devel] [PATCH 3/6] qtest: add C version of test infrastructure |
Date: | Wed, 18 Jan 2012 10:08:41 -0600 |
User-agent: | Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.23) Gecko/20110922 Lightning/1.0b2 Thunderbird/3.1.15 |
On 01/18/2012 10:00 AM, Kevin Wolf wrote:
Am 13.01.2012 19:32, schrieb Anthony Liguori:This also includes a qtest wrapper script to make it easier to launch qtest tests directly. Signed-off-by: Anthony Liguori<address@hidden>+QTestState *qtest_init(const char *extra_args) +{ + QTestState *s; + struct sockaddr_un addr; + int sock, ret, i; + gchar *socket_path; + gchar *pid_file; + gchar *command; + const char *qemu_binary; + pid_t pid; + + qemu_binary = getenv("QTEST_QEMU_BINARY"); + g_assert(qemu_binary != NULL); + + socket_path = g_strdup_printf("/tmp/qtest-%d.sock", getpid()); + pid_file = g_strdup_printf("/tmp/qtest-%d.pid", getpid()); + + s = g_malloc(sizeof(*s)); + + sock = socket(PF_UNIX, SOCK_STREAM, 0); + g_assert_no_errno(sock); + + addr.sun_family = AF_UNIX; + snprintf(addr.sun_path, sizeof(addr.sun_path), "%s", socket_path); + + pid = fork(); + if (pid == 0) { + command = g_strdup_printf("%s " + "-qtest unix:%s,server,nowait " + "-qtest-log /dev/null " + "-pidfile %s " + "-machine accel=qtest " + "%s", qemu_binary, socket_path, + pid_file, + extra_args ?: ""); + + ret = system(command); + exit(ret); + g_free(command); + } + + do { + sleep(1);This is the line that takes the greatest part of the time for make check-qtest. Can we use some shorter delay if it's required at all?
Ah, good catch. It should change to a usleep().It is needed, you can't guarantee that qemu is listening yet on the sockets when you try to connect.
Regards, Anthony Liguori
+ ret = connect(sock, (struct sockaddr *)&addr, sizeof(addr)); + } while (ret == -1); + g_assert_no_errno(ret); + + s->fd = sock; + s->rx = g_string_new(""); + s->pid_file = pid_file; + for (i = 0; i< MAX_IRQ; i++) { + s->irq_level[i] = false; + } + + g_free(socket_path); + + return s; +}Kevin
[Prev in Thread] | Current Thread | [Next in Thread] |