[PATCH xorg-gtest v2 3/8] xserver: add WaitForConnections()
Peter Hutterer
peter.hutterer at who-t.net
Tue Jul 10 20:28:43 PDT 2012
Moved from Environment to XServer class
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
No changes to v1
include/xorg/gtest/xorg-gtest-xserver.h | 5 +++++
src/environment.cpp | 33 +----------------------------
src/xserver.cpp | 35 +++++++++++++++++++++++++++++++
3 files changed, 41 insertions(+), 32 deletions(-)
diff --git a/include/xorg/gtest/xorg-gtest-xserver.h b/include/xorg/gtest/xorg-gtest-xserver.h
index 58fdc53..1ba2a0f 100644
--- a/include/xorg/gtest/xorg-gtest-xserver.h
+++ b/include/xorg/gtest/xorg-gtest-xserver.h
@@ -47,6 +47,11 @@ class XServer : public xorg::testing::Process {
XServer();
/**
+ * Waits until this server is ready to take connections.
+ */
+ void WaitForConnections(void);
+
+ /**
* Set the display number for this server. This number must be set
* before the server is started to have any effect.
* If unset, the default display number is used.
diff --git a/src/environment.cpp b/src/environment.cpp
index 2f1c4e2..7573b62 100644
--- a/src/environment.cpp
+++ b/src/environment.cpp
@@ -150,40 +150,9 @@ void xorg::testing::Environment::SetUp() {
"-logfile", d_->path_to_log_file.c_str(),
"-config", d_->path_to_conf.c_str(),
NULL);
+ d_->server.WaitForConnections();
Process::SetEnv("DISPLAY", display_string, true);
-
- for (int i = 0; i < 10; ++i) {
- test_display = XOpenDisplay(NULL);
-
- if (test_display) {
- XCloseDisplay(test_display);
- return;
- }
-
- int status;
- int pid = waitpid(d_->server.Pid(), &status, WNOHANG);
- if (pid == d_->server.Pid()) {
- std::string message;
- message += "X server failed to start on display ";
- message += display_string;
- message += ". Ensure that the \"dummy\" video driver is installed.\n"
- "If the X.org server is older than 1.12, "
- "tests will need to be run as root.\nCheck ";
- message += d_->path_to_log_file;
- message += " for any errors";
- throw std::runtime_error(message);
- } else if (pid == 0) {
- sleep(1); /* Give the dummy X server some time to start */
- } else if (pid == -1) {
- throw std::runtime_error("Could not get status of dummy X server "
- "process");
- } else {
- throw std::runtime_error("Invalid child PID returned by Process::Wait()");
- }
- }
-
- throw std::runtime_error("Unable to open connection to dummy X server");
}
void xorg::testing::Environment::TearDown() {
diff --git a/src/xserver.cpp b/src/xserver.cpp
index f36bd10..62bd48f 100644
--- a/src/xserver.cpp
+++ b/src/xserver.cpp
@@ -43,6 +43,7 @@
#include <vector>
#include <map>
+#include <X11/Xlib.h>
#include <X11/extensions/XInput2.h>
struct xorg::testing::XServer::Private {
@@ -218,6 +219,40 @@ bool xorg::testing::XServer::WaitForDevice(::Display *display, const std::string
return false;
}
+void xorg::testing::XServer::WaitForConnections(void) {
+ for (int i = 0; i < 10; ++i) {
+ Display *test_display = XOpenDisplay(GetDisplayString().c_str());
+
+ if (test_display) {
+ XCloseDisplay(test_display);
+ return;
+ }
+
+ int status;
+ int pid = waitpid(Pid(), &status, WNOHANG);
+ if (pid == Pid()) {
+ std::string message;
+ message += "X server failed to start on display ";
+ message += GetDisplayString();
+ message += ". Ensure that the \"dummy\" video driver is installed.\n"
+ "If the X.org server is older than 1.12, "
+ "tests will need to be run as root.\nCheck ";
+ message += d_->options["-logfile"];
+ message += " for any errors";
+ throw std::runtime_error(message);
+ } else if (pid == 0) {
+ sleep(1); /* Give the dummy X server some time to start */
+ } else if (pid == -1) {
+ throw std::runtime_error("Could not get status of dummy X server "
+ "process");
+ } else {
+ throw std::runtime_error("Invalid child PID returned by Process::Wait()");
+ }
+ }
+
+ throw std::runtime_error("Unable to open connection to dummy X server");
+}
+
void xorg::testing::XServer::SetOption(std::string key, std::string value) {
d_->options[key] = value;
}
--
1.7.10.4
More information about the xorg-devel
mailing list