This effectively reverts
commit 39c77fe586baccd0a4a9862e8cf7c78ac7af3494
Author: Michal Prívozník <mprivozn(a)redhat.com>
Date: Wed Jan 16 11:58:00 2013 +0100
Introduce event loop to commandtest
because nothing in the current test suite needs this
event loop.
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
tests/commanddata/test27.log | 6 +-
tests/commanddata/test3.log | 2 +-
tests/commandtest.c | 107 ++++++++---------------------------
3 files changed, 28 insertions(+), 87 deletions(-)
diff --git a/tests/commanddata/test27.log b/tests/commanddata/test27.log
index 40b2627c07..bfc83b95e8 100644
--- a/tests/commanddata/test27.log
+++ b/tests/commanddata/test27.log
@@ -1,7 +1,7 @@
ARG:--readfd
-ARG:5
+ARG:3
ARG:--readfd
-ARG:7
+ARG:5
ENV:DISPLAY=:0.0
ENV:HOME=/home/test
ENV:HOSTNAME=test
@@ -13,8 +13,8 @@ ENV:USER=test
FD:0
FD:1
FD:2
+FD:3
FD:5
-FD:7
DAEMON:no
CWD:/tmp
UMASK:0022
diff --git a/tests/commanddata/test3.log b/tests/commanddata/test3.log
index cfa097963b..e5223f0c4e 100644
--- a/tests/commanddata/test3.log
+++ b/tests/commanddata/test3.log
@@ -9,8 +9,8 @@ ENV:USER=test
FD:0
FD:1
FD:2
+FD:3
FD:5
-FD:7
DAEMON:no
CWD:/tmp
UMASK:0022
diff --git a/tests/commandtest.c b/tests/commandtest.c
index cc8676811e..e19ce62207 100644
--- a/tests/commandtest.c
+++ b/tests/commandtest.c
@@ -39,15 +39,6 @@
#define VIR_FROM_THIS VIR_FROM_NONE
-typedef struct _virCommandTestData virCommandTestData;
-typedef virCommandTestData *virCommandTestDataPtr;
-struct _virCommandTestData {
- virMutex lock;
- virThread thread;
- bool quit;
- bool running;
-};
-
#ifdef WIN32
int
@@ -204,8 +195,13 @@ static int test3(const void *unused G_GNUC_UNUSED)
int newfd1 = dup(STDERR_FILENO);
int newfd2 = dup(STDERR_FILENO);
int newfd3 = dup(STDERR_FILENO);
+ struct stat before, after;
int ret = -1;
+ if (fstat(newfd3, &before) < 0) {
+ perror("fstat");
+ goto cleanup;
+ }
virCommandPassFD(cmd, newfd1, 0);
virCommandPassFD(cmd, newfd3,
VIR_COMMAND_PASS_FD_CLOSE_PARENT);
@@ -216,12 +212,28 @@ static int test3(const void *unused G_GNUC_UNUSED)
}
if (fcntl(newfd1, F_GETFL) < 0 ||
- fcntl(newfd2, F_GETFL) < 0 ||
- fcntl(newfd3, F_GETFL) >= 0) {
- puts("fds in wrong state");
+ fcntl(newfd2, F_GETFL) < 0) {
+ puts("fds 1/2 were not open");
goto cleanup;
}
+ /* We expect newfd3 to be closed, but the
+ * fd might have already been reused by
+ * the event loop. So if it is open, we
+ * check if it matches the stat info we
+ * got earlier
+ */
+ if (fcntl(newfd3, F_GETFL) >= 0 &&
+ fstat(newfd3, &after) >= 0) {
+
+ if (before.st_ino == after.st_ino &&
+ before.st_dev == after.st_dev &&
+ before.st_mode == after.st_mode) {
+ puts("fd 3 should not be open");
+ goto cleanup;
+ }
+ }
+
ret = checkoutput("test3", NULL);
cleanup:
@@ -1241,43 +1253,12 @@ static int test27(const void *unused G_GNUC_UNUSED)
return ret;
}
-static void virCommandThreadWorker(void *opaque)
-{
- virCommandTestDataPtr test = opaque;
-
- virMutexLock(&test->lock);
-
- while (!test->quit) {
- virMutexUnlock(&test->lock);
-
- if (virEventRunDefaultImpl() < 0) {
- test->quit = true;
- break;
- }
-
- virMutexLock(&test->lock);
- }
-
- test->running = false;
-
- virMutexUnlock(&test->lock);
- return;
-}
-
-static void
-virCommandTestFreeTimer(int timer G_GNUC_UNUSED,
- void *opaque G_GNUC_UNUSED)
-{
- /* nothing to be done here */
-}
static int
mymain(void)
{
int ret = 0;
int fd;
- virCommandTestDataPtr test = NULL;
- int timer = -1;
int virinitret;
if (chdir("/tmp") < 0)
@@ -1336,28 +1317,6 @@ mymain(void)
if (virinitret < 0)
return EXIT_FAILURE;
- virEventRegisterDefaultImpl();
- if (VIR_ALLOC(test) < 0)
- goto cleanup;
-
- if (virMutexInit(&test->lock) < 0) {
- printf("Unable to init mutex: %d\n", errno);
- goto cleanup;
- }
-
- virMutexLock(&test->lock);
-
- if (virThreadCreate(&test->thread,
- true,
- virCommandThreadWorker,
- test) < 0) {
- virMutexUnlock(&test->lock);
- goto cleanup;
- }
-
- test->running = true;
- virMutexUnlock(&test->lock);
-
environ = (char **)newenv;
# define DO_TEST(NAME) \
@@ -1393,24 +1352,6 @@ mymain(void)
DO_TEST(test26);
DO_TEST(test27);
- virMutexLock(&test->lock);
- if (test->running) {
- test->quit = true;
- /* HACK: Add a dummy timeout to break event loop */
- timer = virEventAddTimeout(0, virCommandTestFreeTimer, NULL, NULL);
- }
- virMutexUnlock(&test->lock);
-
- cleanup:
- if (test->running)
- virThreadJoin(&test->thread);
-
- if (timer != -1)
- virEventRemoveTimeout(timer);
-
- virMutexDestroy(&test->lock);
- VIR_FREE(test);
-
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
--
2.24.1