[PATCH xorg-gtest 05/16] xserver: move testing startup to the XServer object

Peter Hutterer peter.hutterer at who-t.net
Thu Jul 5 16:27:49 PDT 2012


On Thu, Jul 05, 2012 at 01:46:42PM -0700, Chase Douglas wrote:
> On 07/03/2012 10:34 PM, Peter Hutterer wrote:
> >On Tue, Jul 03, 2012 at 10:30:28AM -0700, Chase Douglas wrote:
> >>On 07/02/2012 11:44 PM, Peter Hutterer wrote:
> >>>Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> >>
> >>It makes sense to move the startup to the XServer object, but the
> >>environment should then contain an XServer object and start it. The
> >>point of the environment is that it starts up an xserver
> >>automatically.
> >>
> >>The xorg-gtest user is free to not use the environment. But when
> >>they use the environment, it should start a server.
> >
> >It still does, it's just cut off from the Environment::SetUp() hunk though.
> >see below
> >
> >>>---
> >>>  include/xorg/gtest/xorg-gtest-xserver.h |    2 ++
> >>>  src/environment.cpp                     |   35 ---------------------------
> >>>  src/xserver.cpp                         |   40 +++++++++++++++++++++++++++++++
> >>>  3 files changed, 42 insertions(+), 35 deletions(-)
> >>>
> >>>diff --git a/include/xorg/gtest/xorg-gtest-xserver.h b/include/xorg/gtest/xorg-gtest-xserver.h
> >>>index 5c5ce99..52a2fd0 100644
> >>>--- a/include/xorg/gtest/xorg-gtest-xserver.h
> >>>+++ b/include/xorg/gtest/xorg-gtest-xserver.h
> >>>@@ -129,6 +129,8 @@ class XServer : public xorg::testing::Process {
> >>>      XServer(const XServer&);
> >>>      XServer& operator=(const XServer&);
> >>>
> >>>+    void TestStartup(void);
> >>>+
> >>>  };
> >>>  } // namespace testing
> >>>  } // namespace xorg
> >>>diff --git a/src/environment.cpp b/src/environment.cpp
> >>>index 7ed23b3..69972a4 100644
> >>>--- a/src/environment.cpp
> >>>+++ b/src/environment.cpp
> >>>@@ -106,41 +106,6 @@ void xorg::testing::Environment::SetUp() {
> >>>    static char display_string[6];
> >>>    snprintf(display_string, 6, ":%d", d_->display);
> >>>
> >>>-  Display* test_display = XOpenDisplay(display_string);
> >>>-  if (test_display) {
> >>>-    XCloseDisplay(test_display);
> >>>-    std::string message;
> >>>-    message += "A server is already running on ";
> >>>-    message += display_string;
> >>>-    message += ".";
> >>>-    throw std::runtime_error(message);
> >>>-  }
> >>>-
> >>>-  /* The Xorg server won't start unless the log file and the old log file are
> >>>-   * writable. */
> >>>-  std::ofstream log_test;
> >>>-  log_test.open(d_->path_to_log_file.c_str(), std::ofstream::out);
> >>>-  log_test.close();
> >>>-  if (log_test.fail()) {
> >>>-    std::string message;
> >>>-    message += "X.org server log file ";
> >>>-    message += d_->path_to_log_file;
> >>>-    message += " is not writable.";
> >>>-    throw std::runtime_error(message);
> >>>-  }
> >>>-
> >>>-  std::string old_log_file = d_->path_to_log_file.c_str();
> >>>-  old_log_file += ".old";
> >>>-  log_test.open(old_log_file.c_str(), std::ofstream::out);
> >>>-  log_test.close();
> >>>-  if (log_test.fail()) {
> >>>-    std::string message;
> >>>-    message += "X.org old server log file ";
> >>>-    message += old_log_file;
> >>>-    message += " is not writable.";
> >>>-    throw std::runtime_error(message);
> >>>-  }
> >>>-
> >>>    d_->server.SetDisplayNumber(d_->display);
> >>>    d_->server.SetLogfilePath(d_->path_to_log_file);
> >>>    d_->server.SetConfigPath(d_->path_to_conf);
> >
> >is followed by
> >     d_->server.Start(d_->path_to_server);
> >     d_->server.WaitForConnections();
> >
> >So nothing should change over the previous code. I haven't modified the
> >xi2.cpp code in the server which uses this environment and it still works.
> 
> Ahh, right, the code still starts the server, but shouldn't we be
> calling the server TestStartup() method before? As it is in this
> patch, we've removed a bunch of code, moved it to a method of a
> different object, and haven't called the method to ensure the same
> code is executed. Unless I'm misreading again :).

hard to see from the patch I guess, but the new sequence is
    Environment::SetUp()
       ...
       XServer::Start()
            XServer::TestStartup()
            Process::Start()

Cheers,
  Peter

> 
> >>>diff --git a/src/xserver.cpp b/src/xserver.cpp
> >>>index 38394f3..1a46dbb 100644
> >>>--- a/src/xserver.cpp
> >>>+++ b/src/xserver.cpp
> >>>@@ -41,6 +41,7 @@
> >>>  #include <cstring>
> >>>  #include <stdexcept>
> >>>  #include <vector>
> >>>+#include <fstream>
> >>>
> >>>  #include <X11/Xlib.h>
> >>>  #include <X11/extensions/XInput2.h>
> >>>@@ -250,7 +251,46 @@ void xorg::testing::XServer::WaitForConnections(void) {
> >>>    throw std::runtime_error("Unable to open connection to dummy X server");
> >>>  }
> >>>
> >>>+void xorg::testing::XServer::TestStartup(void) {
> >>>+  Display* test_display = XOpenDisplay(GetDisplayString());
> >>>+  if (test_display) {
> >>>+    XCloseDisplay(test_display);
> >>>+    std::string message;
> >>>+    message += "A server is already running on ";
> >>>+    message += GetDisplayString();
> >>>+    message += ".";
> >>>+    throw std::runtime_error(message);
> >>>+  }
> >>>+
> >>>+  /* The Xorg server won't start unless the log file and the old log file are
> >>>+   * writable. */
> >>>+  std::ofstream log_test;
> >>>+  log_test.open(d_->path_to_logfile.c_str(), std::ofstream::out);
> >>>+  log_test.close();
> >>>+  if (log_test.fail()) {
> >>>+    std::string message;
> >>>+    message += "X.org server log file ";
> >>>+    message += d_->path_to_logfile;
> >>>+    message += " is not writable.";
> >>>+    throw std::runtime_error(message);
> >>>+  }
> >>>+
> >>>+  std::string old_log_file = d_->path_to_logfile.c_str();
> >>>+  old_log_file += ".old";
> >>>+  log_test.open(old_log_file.c_str(), std::ofstream::out);
> >>>+  log_test.close();
> >>>+  if (log_test.fail()) {
> >>>+    std::string message;
> >>>+    message += "X.org old server log file ";
> >>>+    message += old_log_file;
> >>>+    message += " is not writable.";
> >>>+    throw std::runtime_error(message);
> >>>+  }
> >>>+
> >>>+}
> >>>+
> >>>  void xorg::testing::XServer::Start(std::string &program) {
> >>>+  TestStartup();
> >>>    Process::Start(program, program.c_str(),
> >>>                   GetDisplayString(),
> >>>                   "-logverbose", "10",
> >>>
> >>
> >_______________________________________________
> >xorg-devel at lists.x.org: X.Org development
> >Archives: http://lists.x.org/archives/xorg-devel
> >Info: http://lists.x.org/mailman/listinfo/xorg-devel
> >
> 


More information about the xorg-devel mailing list