[PATCH xorg-gtest] xserver: add GetVersion() to retrieve server version
Chase Douglas
chase.douglas at canonical.com
Wed Aug 8 09:23:11 PDT 2012
On 08/07/2012 09:34 PM, Peter Hutterer wrote:
> For non-integrated tests, knowing the X server version is important.
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
> ---
> I thought about decomposing this string into numbers, but really, strcmp()
> will likely handle 90% of the cases we need
>
> include/xorg/gtest/xorg-gtest-xserver.h | 10 ++++++++++
> src/xserver.cpp | 31 +++++++++++++++++++++++++++++++
> 2 files changed, 41 insertions(+)
>
> diff --git a/include/xorg/gtest/xorg-gtest-xserver.h b/include/xorg/gtest/xorg-gtest-xserver.h
> index 71857d3..0776d36 100644
> --- a/include/xorg/gtest/xorg-gtest-xserver.h
> +++ b/include/xorg/gtest/xorg-gtest-xserver.h
> @@ -133,6 +133,16 @@ class XServer : public xorg::testing::Process {
> const std::string& GetDisplayString(void);
>
> /**
> + * Get the X server version as printed into the log file, usually in the
> + * form a.b.c[.d], with d being the optional part for release
> + * candidates.
> + *
> + * @return A string representing this server's version. If the server
> + * hasn't been started yet, GetVersion() returns an empty string.
> + */
> + const std::string& GetVersion();
> +
> + /**
> * Set startup options for the server.
> *
> * For arguments that do not take/need a value, use the empty string as
> diff --git a/src/xserver.cpp b/src/xserver.cpp
> index 2c551ff..08ff864 100644
> --- a/src/xserver.cpp
> +++ b/src/xserver.cpp
> @@ -60,6 +60,7 @@ struct xorg::testing::XServer::Private {
> std::string display_string;
> std::string path_to_server;
> std::map<std::string, std::string> options;
> + std::string version;
> };
>
> xorg::testing::XServer::XServer() : d_(new Private) {
> @@ -286,6 +287,36 @@ void xorg::testing::XServer::TestStartup(void) {
>
> }
>
> +const std::string& xorg::testing::XServer::GetVersion(void) {
> + if (Pid() == -1 || !d_->version.empty())
> + return d_->version;
> +
> + std::ifstream logfile;
> + logfile.open(d_->options["-logfile"].c_str());
> +
> + std::string prefix = "X.Org X Server ";
> +
> + if (logfile.is_open()) {
> + std::string line;
> + while (getline(logfile, line)) {
> + size_t start = line.find(prefix);
> + if (start == line.npos)
> + continue;
> +
> + line = line.substr(prefix.size());
> + /* RCs have the human-readable version after the version */
> + size_t end = line.find(" ");
> + if (end == line.npos)
> + end = line.size();
> +
> + d_->version = line.substr(0, end);
> + break;
> + }
> + }
> +
> + return d_->version;
> +}
> +
> void xorg::testing::XServer::Start(const std::string &program) {
> TestStartup();
This almost seems like something that should be an actual request to the
server. I worry this may be a bit fragile. However, it's merely intended
to be used for diagnostics, I presume, so I'm ok with it.
Reviewed-by: Chase Douglas <chase.douglas at canonical.com>
Pushed as commit 89d366ba5b8ad1023ded09e79d1fe093f20860eb.
Thanks!
-- Chase
More information about the xorg-devel
mailing list