[PATCH v4 xserver 2/6] tests: Convert test/xi1/ to single binary

Mihail Konev k.mvc at ya.ru
Thu Jan 12 08:21:08 UTC 2017


Part of refactoring the tests into a single binary,
to make partial rebuild slightly faster and less verbose.

Signed-off-by: Mihail Konev <k.mvc at ya.ru>
---
 test/tests-common.c                      | 33 ++++++++++++++++++++++++++++
 test/tests-common.h                      |  9 ++++++++
 test/tests.h                             |  7 ++++++
 test/xi1/.gitignore                      |  2 +-
 test/xi1/Makefile.am                     | 37 ++++++++++++++++++++------------
 test/xi1/protocol-xchangedevicecontrol.c |  2 +-
 test/xi1/tests.c                         | 11 ++++++++++
 test/xi2/Makefile.am                     |  5 ++++-
 test/xi2/protocol-common.h               |  2 ++
 9 files changed, 91 insertions(+), 17 deletions(-)
 create mode 100644 test/tests-common.c
 create mode 100644 test/tests-common.h
 create mode 100644 test/tests.h
 create mode 100644 test/xi1/tests.c

diff --git a/test/tests-common.c b/test/tests-common.c
new file mode 100644
index 000000000000..686852827765
--- /dev/null
+++ b/test/tests-common.c
@@ -0,0 +1,33 @@
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "tests-common.h"
+
+void
+run_test_in_child(int (*func)(void), const char *funcname)
+{
+    int cpid;
+    int csts;
+    int exit_code = -1;
+
+    printf("\n---------------------\n%s...\n", funcname);
+    cpid = fork();
+    if (cpid) {
+        waitpid(cpid, &csts, 0);
+        if (!WIFEXITED(csts))
+            goto child_failed;
+        exit_code = WEXITSTATUS(csts);
+        if (exit_code == 0)
+            printf(" Pass\n");
+        else {
+child_failed:
+            printf(" FAIL\n");
+            exit(exit_code);
+        }
+    } else {
+        exit(func());
+    }
+}
diff --git a/test/tests-common.h b/test/tests-common.h
new file mode 100644
index 000000000000..b02f746f6f56
--- /dev/null
+++ b/test/tests-common.h
@@ -0,0 +1,9 @@
+#ifndef TESTS_COMMON_H
+#define TESTS_COMMON_H
+
+#define run_test(func) run_test_in_child(func, #func)
+
+void run_test_in_child(int (*func)(void), const char *funcname);
+
+#endif /* TESTS_COMMON_H */
+
diff --git a/test/tests.h b/test/tests.h
new file mode 100644
index 000000000000..8a42aa0da592
--- /dev/null
+++ b/test/tests.h
@@ -0,0 +1,7 @@
+#ifndef TESTS_H
+#define TESTS_H
+
+int protocol_xchangedevicecontrol_test(void);
+
+#endif /* TESTS_H */
+
diff --git a/test/xi1/.gitignore b/test/xi1/.gitignore
index c1b9024ee958..2b29f27645f8 100644
--- a/test/xi1/.gitignore
+++ b/test/xi1/.gitignore
@@ -1 +1 @@
-protocol-xchangedevicecontrol
+tests
diff --git a/test/xi1/Makefile.am b/test/xi1/Makefile.am
index b7060e7d48d8..7a054dd80966 100644
--- a/test/xi1/Makefile.am
+++ b/test/xi1/Makefile.am
@@ -1,26 +1,35 @@
 if ENABLE_UNIT_TESTS
 if HAVE_LD_WRAP
-noinst_PROGRAMS =  \
-	protocol-xchangedevicecontrol
+noinst_PROGRAMS = tests
+
+TESTS = tests
 
-TESTS=$(noinst_PROGRAMS)
 TESTS_ENVIRONMENT = $(XORG_MALLOC_DEBUG_ENV)
 
-AM_CFLAGS = $(DIX_CFLAGS) @XORG_CFLAGS@
-AM_CPPFLAGS = @XORG_INCS@ -I$(srcdir)/../xi2
-TEST_LDADD=../libxservertest.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) $(GLX_SYS_LIBS)
-COMMON_SOURCES=$(srcdir)/../xi2/protocol-common.c
-COMMON_LD_FLAGS = -Wl,-wrap,dixLookupWindow -Wl,-wrap,dixLookupClient
+tests_CFLAGS = $(DIX_CFLAGS) @XORG_CFLAGS@
+tests_CPPFLAGS = \
+	@XORG_INCS@ \
+	-I$(srcdir)/.. \
+	-I$(srcdir)/../xi2 \
+	$()
 
-if SPECIAL_DTRACE_OBJECTS
-TEST_LDADD += $(OS_LIB) $(DIX_LIB)
-endif
+tests_LDFLAGS = \
+	-Wl,-wrap,dixLookupWindow \
+	-Wl,-wrap,dixLookupClient \
+	-Wl,-wrap,WriteToClient \
+	$()
 
-protocol_xchangedevicecontrol_LDADD=$(TEST_LDADD)
+tests_LDADD =../libxservertest.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) $(GLX_SYS_LIBS)
 
-protocol_xchangedevicecontrol_LDFLAGS=$(COMMON_LD_FLAGS) -Wl,-wrap,WriteToClient
+tests_SOURCES = \
+	$(srcdir)/../tests-common.c \
+	$(srcdir)/../xi2/protocol-common.c \
+	protocol-xchangedevicecontrol.c \
+	tests.c
 
-protocol_xchangedevicecontrol_SOURCES=$(COMMON_SOURCES) protocol-xchangedevicecontrol.c
+if SPECIAL_DTRACE_OBJECTS
+tests_LDADD += $(OS_LIB) $(DIX_LIB)
+endif
 
 else
 # Print that xi1-tests were skipped (exit code 77 for automake test harness)
diff --git a/test/xi1/protocol-xchangedevicecontrol.c b/test/xi1/protocol-xchangedevicecontrol.c
index 64d2ca29bb95..57a15c4076f5 100644
--- a/test/xi1/protocol-xchangedevicecontrol.c
+++ b/test/xi1/protocol-xchangedevicecontrol.c
@@ -113,7 +113,7 @@ test_ChangeDeviceControl(void)
 }
 
 int
-main(int argc, char **argv)
+protocol_xchangedevicecontrol_test(void)
 {
     init_simple();
 
diff --git a/test/xi1/tests.c b/test/xi1/tests.c
new file mode 100644
index 000000000000..df4638dc98ab
--- /dev/null
+++ b/test/xi1/tests.c
@@ -0,0 +1,11 @@
+#include <string.h>
+#include "tests.h"
+#include "tests-common.h"
+
+int
+main(int argc, char **argv)
+{
+    run_test(protocol_xchangedevicecontrol_test);
+
+    return 0;
+}
diff --git a/test/xi2/Makefile.am b/test/xi2/Makefile.am
index 9231e92db96c..49aaebb36e4b 100644
--- a/test/xi2/Makefile.am
+++ b/test/xi2/Makefile.am
@@ -17,7 +17,10 @@ TESTS=$(noinst_PROGRAMS)
 TESTS_ENVIRONMENT = $(XORG_MALLOC_DEBUG_ENV)
 
 AM_CFLAGS = $(DIX_CFLAGS) @XORG_CFLAGS@
-AM_CPPFLAGS = @XORG_INCS@
+AM_CPPFLAGS = \
+	@XORG_INCS@ \
+	-I$(srcdir)/..
+
 TEST_LDADD=../libxservertest.la $(XORG_SYS_LIBS) $(XSERVER_SYS_LIBS) $(GLX_SYS_LIBS)
 COMMON_SOURCES=protocol-common.h protocol-common.c
 COMMON_LD_FLAGS= -Wl,-wrap,dixLookupWindow -Wl,-wrap,dixLookupClient
diff --git a/test/xi2/protocol-common.h b/test/xi2/protocol-common.h
index f8504787f790..7190ef0ddb22 100644
--- a/test/xi2/protocol-common.h
+++ b/test/xi2/protocol-common.h
@@ -30,6 +30,8 @@
 #include "exevents.h"
 #include <assert.h>
 
+#include "tests.h"
+
 #ifndef PROTOCOL_COMMON_H
 #define PROTOCOL_COMMON_H
 
-- 
2.9.2



More information about the xorg-devel mailing list