From 8b098068cd122b850ce05c4e1b41ddf1d5181a29 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Mon, 18 Feb 2013 16:39:52 +1000 Subject: server/xephyr: add test for crash on 24bpp host Signed-off-by: Peter Hutterer --- tests/server/Makefile.am | 7 +++- tests/server/xephyr.cpp | 104 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 tests/server/xephyr.cpp diff --git a/tests/server/Makefile.am b/tests/server/Makefile.am index c5c8fa8..b1a2da4 100644 --- a/tests/server/Makefile.am +++ b/tests/server/Makefile.am @@ -1,6 +1,6 @@ include $(top_srcdir)/common.mk -noinst_PROGRAMS = server +noinst_PROGRAMS = server xephyr TESTS=$(noinst_PROGRAMS) server_SOURCES = \ @@ -21,3 +21,8 @@ server_SOURCES = \ server_LDADD = $(XIT_LIBS) $(GTEST_LDADDS) $(XTEST_LIBS) $(XFIXES_LIBS) $(XSCREENSAVER_LIBS) $(XIT_LIBS) $(DGA_LIBS) $(PIXMAN_LIBS) server_CPPFLAGS = $(AM_CPPFLAGS) $(PIXMAN_CFLAGS) + +xephyr_SOURCES= xephyr.cpp + +xephyr_LDADD = $(XIT_LIBS) $(GTEST_LDADDS) +xephyr_CPPFLAGS = $(AM_CPPFLAGS) diff --git a/tests/server/xephyr.cpp b/tests/server/xephyr.cpp new file mode 100644 index 0000000..c5fb474 --- /dev/null +++ b/tests/server/xephyr.cpp @@ -0,0 +1,104 @@ +/* + * Copyright © 2013 Red Hat, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +#if HAVE_CONFIG_H +#include +#endif + +#include + +#include + +#include "xit-server-input-test.h" +#include "device-interface.h" +#include "helpers.h" + +using namespace xorg::testing; + +class Xephyr24bppTest : public XITServerTest { + virtual void SetUpConfigAndLog() { + config.SetAutoAddDevices(true); + config.AppendRawConfig( + "Section \"ServerLayout\"\n" + " Identifier \"X.org Configured\"\n" + " Screen \"Screen0\"\n" + "EndSection\n" + "\n" + "Section \"ServerFlags\"\n" + " Option \"Pixmap\" \"24\"" + "EndSection\n" + "\n" + "Section \"Device\"\n" + " Identifier \"Card0\"\n" + " Driver \"dummy\"\n" + "EndSection\n" + "\n" + "Section \"Screen\"\n" + " Identifier \"Screen0\"\n" + " Device \"Card0\"\n" + " SubSection \"Display\"\n" + " Depth 24" + " EndSubSection\n" + "EndSection"); + + config.WriteConfig(); + } +}; + +TEST_F(Xephyr24bppTest, CrashOn24bppHost) +{ + XORG_TESTCASE("Start Xephyr on a 24bpp host.\n" + "Verify Xephyr doesn't crash\n" + "https://bugzilla.redhat.com/show_bug.cgi?id=518960"); + + ::Display *dpy = Display(); + int depth = DefaultDepth(dpy, 0); + ASSERT_EQ(depth, 24); + + + Process xephyr; + setenv("DISPLAY", server.GetDisplayString().c_str(), 1); + xephyr.Start("Xephyr", ":134", NULL); + ASSERT_GT(xephyr.Pid(), 0); + ASSERT_EQ(xephyr.GetState(), xorg::testing::Process::RUNNING); + + ::Display *ephdpy = NULL; + + int i = 0; + while (i++ < 10 && !ephdpy) { + ephdpy = XOpenDisplay(":134"); + if (!ephdpy) + usleep(10000); + } + ASSERT_EQ(xephyr.GetState(), xorg::testing::Process::RUNNING); + ASSERT_TRUE(ephdpy); + + xephyr.Terminate(1000); +} + + +int main(int argc, char **argv) { + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} -- cgit v1.2.3