From 0b63ef0ea8625d713b9f726c8d664fdbeb37481d Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 6 Nov 2012 20:14:53 -0600 Subject: Reimplement test-service s.t. we actually test activating the service via dbus. Drop unneeded Xorg baggage. --- configure.ac | 13 +- tests/Makefile.am | 49 +++-- tests/gtest-dbus-helper.h | 418 ------------------------------------- tests/indicator-session.service.in | 3 + tests/test-service.cc | 140 +++++++++++-- 5 files changed, 160 insertions(+), 463 deletions(-) delete mode 100644 tests/gtest-dbus-helper.h create mode 100644 tests/indicator-session.service.in diff --git a/configure.ac b/configure.ac index 3de4063..bb46782 100644 --- a/configure.ac +++ b/configure.ac @@ -28,6 +28,7 @@ m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) # Dependencies ########################### +GIO_REQUIRED_VERSION=2.33 GLIB_REQUIRED_VERSION=2.33 GTK_REQUIRED_VERSION=3.0 INDICATOR_REQUIRED_VERSION=0.3.19 @@ -138,16 +139,15 @@ if test "x$enable_tests" != "xno"; then AC_MSG_ERROR([tests were requested but gtest is not installed.]) fi if test "x$enable_tests" = "xyes"; then - PKG_CHECK_MODULES([TEST_SERVICE],[indicator3-0.4 >= $INDICATOR_REQUIRED_VERSION - dbustest-1 >= $DBUSTEST_REQUIRED_VERSION - dbusmenu-glib-0.4 >= $DBUSMENUGLIB_REQUIRED_VERSION], - [enable_tests="yes"], - [enable_tests="no"]) + PKG_CHECK_MODULES([TEST_SERVICE],[glib-2.0 >= $GLIB_REQUIRED_VERSION + gio-2.0 >= $GIO_REQUIRED_VERSION], + [enable_tests="yes"], + [enable_tests="no"]) fi fi AM_CONDITIONAL([BUILD_TESTS],[test "x$enable_tests" = "xyes"]) AC_SUBST([TEST_SERVICE_CFLAGS]) -AC_SUBST([TEST_SERVICE_LDFLAGS]) +AC_SUBST([TEST_SERVICE_LIBS]) ############################## # Custom Junk @@ -214,6 +214,7 @@ data/icons/scalable/actions/Makefile data/icons/scalable/status/Makefile data/extra-sessions/Makefile tests/Makefile +tests/indicator-session.service po/Makefile.in ]) diff --git a/tests/Makefile.am b/tests/Makefile.am index 9371c2e..eedef3a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,31 +1,42 @@ TESTS = CLEANFILES = +BUILT_SOURCES = +check_PROGRAMS = + +### +### +### # stock UMB tests on user-visible strings include $(srcdir)/Makefile.am.strings -AM_CPPFLAGS = \ - $(GTEST_CPPFLAGS) \ - $(XORG_GTEST_CPPFLAGS) \ - $(INDICATOR_CFLAGS) \ - -I${top_srcdir}/src \ - -Wall -Werror +check_LIBRARIES = libgtest.a +nodist_libgtest_a_SOURCES = \ + $(GTEST_SOURCE)/src/gtest-all.cc \ + $(GTEST_SOURCE)/src/gtest_main.cc + +AM_CPPFLAGS = $(GTEST_CPPFLAGS) -I${top_srcdir}/src -Wall -Werror AM_CXXFLAGS = $(GTEST_CXXFLAGS) -TESTS = test-service -check_PROGRAMS = test-service -test_service_SOURCES = \ - test-service.cc \ - gtest-dbus-helper.h -test_service_LDADD = $(TEST_SERVICE_LIBS) libgtest.a $(XORG_GTEST_MAIN_LIBS) $(X11_LIBS) +BUILT_SOURCES += gschemas.compiled +CLEANFILES += gschemas.compiled +gschemas.compiled: Makefile + @glib-compile-schemas --targetdir=$(abs_builddir) $(top_builddir)/data + +### +### +### + +TESTS += test-service +check_PROGRAMS += test-service +test_service_SOURCES = test-service.cc +test_service_LDADD = \ + $(TEST_SERVICE_LIBS) \ + libgtest.a test_service_CPPFLAGS = \ + -DINDICATOR_SERVICE_DIR="\"$(abs_builddir)\"" \ + -DINDICATOR_SERVICE_PATH="\"$(top_builddir)/src/indicator-session-service\"" \ $(TEST_SERVICE_CFLAGS) \ - $(AM_CPPFLAGS) \ - -DINDICATOR_SERVICE_PATH="\"$(top_builddir)/src/indicator-session-service\"" + $(AM_CPPFLAGS) -check_LIBRARIES = libgtest.a -nodist_libgtest_a_SOURCES = \ - $(XORG_GTEST_SOURCE)/src/xorg-gtest-all.cpp \ - $(GTEST_SOURCE)/src/gtest-all.cc \ - $(XORG_GTEST_SOURCE)/src/xorg-gtest_main.cpp diff --git a/tests/gtest-dbus-helper.h b/tests/gtest-dbus-helper.h deleted file mode 100644 index c893606..0000000 --- a/tests/gtest-dbus-helper.h +++ /dev/null @@ -1,418 +0,0 @@ -/* -Copyright 2012 Canonical Ltd. - -Authors: - Charles Kerr - -This program is free software: you can redistribute it and/or modify it -under the terms of the GNU General Public License version 3, as published -by the Free Software Foundation. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranties of -MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR -PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along -with this program. If not, see . -*/ - -#ifndef INDICATOR_SERVICE_TEST_H -#define INDICATOR_SERVICE_TEST_H - -#include -#include -#include -#include - -#include -#include -#include -#include - -/*** -**** -***/ - -/** - * Convenience class for looking at a DbusmenuClient's items for testing - * - * Examples: - * - * // confirm that there are N menuitems of type T - * TEST_EQ (helper.count_type(T), N); - * - * // confirm that there are N visible menuitems - * TEST_EQ (helper.count_property_bool(DBUSMENU_MENUITEM_PROP_VISIBLE,true), N); - * - * // get a sorted list of all the menuitems of type T - * std::vector items = helper.find_type(T); - */ -class DbusmenuClientHelper -{ - public: - - DbusmenuClientHelper (DbusmenuClient * client_): client(client_) { - g_object_ref (G_OBJECT(client)); - } - ~DbusmenuClientHelper() { - g_object_unref(G_OBJECT(client)); - client = NULL; - } - - private: - - static void foreach_accumulate_func (DbusmenuMenuitem * mi, gpointer gset) { - static_cast*>(gset)->push_back (mi); - } - - public: - - std::vector - get_all_menuitems () const - { - std::vector items; - - DbusmenuMenuitem * root = dbusmenu_client_get_root (client); - if (root != NULL) - dbusmenu_menuitem_foreach (root, foreach_accumulate_func, &items); - - return items; - } - - private: - - template class PropertyPredicate: - public std::unary_function { - protected: - const std::string _key; - const value_type _value; - virtual value_type get_value(DbusmenuMenuitem * mi) const = 0; - public: - PropertyPredicate (const char * propertyName, value_type propertyValue): - _key(propertyName), _value(propertyValue) { } - bool operator()(const DbusmenuMenuitem* cmi) const { - // FIXME: remove const_cast after the dbusmenu_menuitem_propperty_get*() functions are constified - DbusmenuMenuitem * mi = const_cast(cmi); - return dbusmenu_menuitem_property_exist (mi, _key.c_str()) && (_value == get_value(mi)); - } - }; - - class StringPropertyPredicate: public PropertyPredicate { - protected: - virtual std::string get_value (DbusmenuMenuitem * mi) const { - return dbusmenu_menuitem_property_get(mi, _key.c_str()); - } - public: - StringPropertyPredicate (const char * propName, const char * propValue): - PropertyPredicate (propName, propValue) {} - }; - - class IntPropertyPredicate: public PropertyPredicate { - protected: - virtual int get_value (DbusmenuMenuitem * mi) const { - return dbusmenu_menuitem_property_get_int(mi, _key.c_str()); - } - public: - IntPropertyPredicate (const char * propName, int propValue): - PropertyPredicate (propName, propValue) {} - }; - - class BoolPropertyPredicate: public PropertyPredicate { - protected: - virtual bool get_value (DbusmenuMenuitem * mi) const { - return dbusmenu_menuitem_property_get_bool(mi, _key.c_str()); - } - public: - BoolPropertyPredicate (const char * propName, bool propValue): - PropertyPredicate (propName, propValue) {} - }; - - public: - - typedef std::vector menuitems_t; - - void - match_property (menuitems_t& items, const char * key, const char * value) const - { - const StringPropertyPredicate pred (key, value); - items.erase (std::remove_if (items.begin(), items.end(), std::not1(pred)), items.end()); - } - - void - match_property_int (menuitems_t& items, const char * key, int value) const - { - const IntPropertyPredicate pred (key, value); - items.erase (std::remove_if (items.begin(), items.end(), std::not1(pred)), items.end()); - } - - void - match_property_bool (menuitems_t& items, const char * key, bool value) const - { - const BoolPropertyPredicate pred (key, value); - items.erase (std::remove_if (items.begin(), items.end(), std::not1(pred)), items.end()); - } - - menuitems_t find_property (const char * prop_name, const char * prop_value) const - { - menuitems_t items; - g_return_val_if_fail (prop_name!=NULL, items); - g_return_val_if_fail (prop_value!=NULL, items); - - items = get_all_menuitems (); - match_property (items, prop_name, prop_value); - return items; - } - - menuitems_t find_property_int (const char * prop_name, int prop_value) const - { - std::vector items; - g_return_val_if_fail (prop_name!=NULL, items); - - items = get_all_menuitems (); - match_property_int (items, prop_name, prop_value); - return items; - } - - menuitems_t find_property_bool (const char * prop_name, bool prop_value) const - { - std::vector items; - g_return_val_if_fail (prop_name!=NULL, items); - - items = get_all_menuitems (); - match_property_bool (items, prop_name, prop_value); - return items; - } - - menuitems_t find_type (const char * type) const - { - return find_property (DBUSMENU_MENUITEM_PROP_TYPE, type); - } - - int count_property (const char * propName, const char * propValue) const - { - return find_property (propName, propValue).size(); - } - - int count_type (const char * type) const - { - return count_property (DBUSMENU_MENUITEM_PROP_TYPE, type); - } - - int count_property_int (const char * propName, int propValue) const - { - return find_property_int (propName, propValue).size(); - } - - int count_property_bool (const char * propName, bool propValue) const - { - return find_property_bool (propName, propValue).size(); - } - - private: - - DbusmenuClient * client; -}; - -/** - * Fixture class for using Google Test on an indicator-service's - * com.canonical.dbusmenu interface. - * - * The SetUp() function starts the service up, waits for it to - * be visible on the bus, then creates a DbusmenuClient and waits - * for its layout-changed signal. This way the test function - * is reached after the menu is available and populated. - * - * TearDown() cleans up the DBus scaffolding and stops the service. - */ -class IndicatorServiceTest : public ::testing::Test -{ - public: - - IndicatorServiceTest(const char * service_name_, - const char * menu_object_path_, - const char * executable_): - menu_client(0), - menu_helper(0), - test_service(0), - indicator_service_proxy(0), - handler_id(0), - executable(executable_), - service_name(service_name_), - menu_object_path(menu_object_path_) - { - // glib one-time init stuff - g_type_init(); - g_assert (g_thread_supported()); - mainloop = g_main_loop_new (NULL, FALSE); - } - - private: - - static void - on_layout_updated_static (DbusmenuClient * client, IndicatorServiceTest * self) - { - g_debug ("LAYOUT UPDATED"); - self->on_layout_updated (client); - } - void - on_layout_updated (DbusmenuClient * client) - { - ASSERT_EQ (client, menu_client); - ASSERT_NE (handler_id, 0); - ASSERT_TRUE (g_signal_handler_is_connected (client, handler_id)); - - // stop listening for this event - g_signal_handler_disconnect (client, handler_id); - handler_id = 0; - - ready(); - } - - private: - - static gboolean - on_timeout_static (gpointer self) - { - static_cast(self)->on_timeout(); - return false; - } - void - on_timeout() - { - ASSERT_NE (handler_id, 0ul); - g_source_remove (handler_id); - handler_id = 0; - ready(); - } - - protected: - - virtual void - SetUp() - { - ASSERT_EQ (NULL, test_service); - ASSERT_EQ (NULL, menu_helper); - ASSERT_EQ (NULL, indicator_service_proxy); - - test_service = dbus_test_service_new (NULL); - - // Start the executable and wait until it shows up on the bus. - // Unset the NO_WATCHERS env var to ensure that the service - // will shut down when there are no watchers... otherwise - // this task will never finish - g_unsetenv("INDICATOR_ALLOW_NO_WATCHERS"); - DbusTestProcess * indicator_service_task = dbus_test_process_new (executable.c_str()); - dbus_test_service_add_task (test_service, DBUS_TEST_TASK(indicator_service_task)); - g_object_unref (G_OBJECT(indicator_service_task)); - - // create a menu task that waits for our service before it runs - DbusTestTask * wait_task = dbus_test_task_new (); - dbus_test_task_set_wait_for (wait_task, service_name.c_str()); - dbus_test_service_add_task (test_service, wait_task); - g_object_unref (G_OBJECT(wait_task)); - - g_debug ("starting tasks"); - dbus_test_service_start_tasks(test_service); - - // at this point the indicator service is running, let's Watch it - // to ensure it stays alive for the duration of the test - GError * error = NULL; - GDBusConnection * bus_connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); - indicator_service_proxy = g_dbus_proxy_new_sync (bus_connection, - G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START, - NULL, - service_name.c_str(), - "/org/ayatana/indicator/service", - "org.ayatana.indicator.service", - NULL, - &error); - GVariant * result = g_dbus_proxy_call_sync (indicator_service_proxy, "Watch", - NULL, G_DBUS_CALL_FLAGS_NO_AUTO_START, - -1, NULL, &error); - guint a, b; - g_variant_get (result, "(uu)", &a, &b); - g_debug ("Sending 'Watch' to proxy %p yielded %u %u", indicator_service_proxy, a, b); - g_variant_unref (result); - EXPECT_EQ(NULL, error); - if (error != NULL) { - g_message ("%s Unable to Watch indicator-service : %s", G_STRFUNC, error->message); - g_clear_error (&error); - } - g_object_unref (G_OBJECT(bus_connection)); - - menu_client = dbusmenu_client_new (service_name.c_str(), menu_object_path.c_str()); - menu_helper = new DbusmenuClientHelper (menu_client); - - // wait for a "layout-updated" signal before we let SetUp finish - wait_for_layout_update(); - } - - virtual void - TearDown() - { - ASSERT_EQ (handler_id, 0); - - // tear down the mainloop - ASSERT_TRUE (mainloop != NULL); - g_main_loop_unref (mainloop); - mainloop = NULL; - - // tear down the menu client - if (menu_helper != NULL) { - delete menu_helper; - menu_helper = NULL; - } - if (menu_client != NULL) { - g_object_unref(G_OBJECT(menu_client)); - menu_client = NULL; - } - - // tear down the indicator proxy - EXPECT_TRUE (G_IS_DBUS_PROXY(indicator_service_proxy)); - g_object_unref (G_OBJECT(indicator_service_proxy)); - indicator_service_proxy = NULL; - } - - void wait_for_layout_update() - { - ASSERT_EQ (handler_id, 0ul); - handler_id = g_signal_connect (menu_client, - DBUSMENU_CLIENT_SIGNAL_LAYOUT_UPDATED, - G_CALLBACK(on_layout_updated_static), - this); - g_debug ("waiting for layout update..."); - g_main_loop_run (mainloop); - } - - void wait_seconds (int seconds) - { - ASSERT_EQ (handler_id, 0ul); - handler_id = g_timeout_add_seconds (seconds, on_timeout_static, this); - g_debug ("waiting %d seconds...", seconds); - g_main_loop_run (mainloop); - } - - protected: - - DbusmenuClient * menu_client; - DbusmenuClientHelper * menu_helper; - - private: - - void ready() - { - g_debug("done waiting"); - g_main_loop_quit (mainloop); - } - - GMainLoop * mainloop; - DbusTestService * test_service; - GDBusProxy * indicator_service_proxy; - gulong handler_id; - const std::string executable; - const std::string service_name; - const std::string menu_object_path; -}; - -#endif // #ifndef INDICATOR_SERVICE_TEST_H diff --git a/tests/indicator-session.service.in b/tests/indicator-session.service.in new file mode 100644 index 0000000..80aab0d --- /dev/null +++ b/tests/indicator-session.service.in @@ -0,0 +1,3 @@ +[D-BUS Service] +Name=com.canonical.indicator.session +Exec=@abs_top_builddir@/src/indicator-session-service diff --git a/tests/test-service.cc b/tests/test-service.cc index 37ba4a9..dce665c 100644 --- a/tests/test-service.cc +++ b/tests/test-service.cc @@ -17,39 +17,139 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#include "gtest-dbus-helper.h" +#include +#include +#include + +#include + #include "shared-names.h" /*** **** ***/ -/** - * Fixture class for testing indicator-session-service with Google Test. - */ -class SessionServiceTest: public IndicatorServiceTest +#define INDICATOR_SERVICE_OBJECT_PATH "/org/ayatana/indicator/service" +#define INDICATOR_SERVICE_INTERFACE_NAME "org.ayatana.indicator.service" + +class ClientTest : public ::testing::Test { - public: - virtual ~SessionServiceTest() {} - SessionServiceTest(): IndicatorServiceTest(INDICATOR_SESSION_DBUS_NAME, - INDICATOR_SESSION_DBUS_OBJECT, - INDICATOR_SERVICE_PATH) { } - public: - virtual void SetUp() { - wait_seconds(1); - IndicatorServiceTest::SetUp(); + protected: + + GTestDBus * test_dbus; + GDBusConnection * session_bus; + GMainLoop * main_loop; + + virtual void SetUp() + { + test_dbus = NULL; + session_bus = NULL; + main_loop = NULL; + + static bool ran_once_init = false; + if (!ran_once_init) + { + g_type_init(); + g_setenv ("INDICATOR_SERVICE_SHUTDOWN_TIMEOUT", "1000", TRUE); + g_unsetenv ("INDICATOR_ALLOW_NO_WATCHERS"); + g_unsetenv ("INDICATOR_SERVICE_REPLACE_MODE"); + ran_once_init = true; + } + + main_loop = g_main_loop_new (NULL, FALSE); + // pull up a test dbus that's pointed at our test .service file + test_dbus = g_test_dbus_new (G_TEST_DBUS_NONE); + g_debug (G_STRLOC" service dir path is \"%s\"", INDICATOR_SERVICE_DIR); + g_test_dbus_add_service_dir (test_dbus, INDICATOR_SERVICE_DIR); + + // allow the service to exist w/o a sync indicator + g_setenv ("INDICATOR_ALLOW_NO_WATCHERS", "1", TRUE); + + g_test_dbus_up (test_dbus); + g_debug (G_STRLOC" this test bus' address is \"%s\"", g_test_dbus_get_bus_address(test_dbus)); + session_bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL); + g_debug (G_STRLOC" the dbus connection %p unique name is \"%s\"", session_bus, g_dbus_connection_get_unique_name(session_bus)); + g_debug (G_STRLOC" the dbus connection %p refcount is %d", session_bus, G_OBJECT(session_bus)->ref_count); } - virtual void TearDown() { - IndicatorServiceTest::TearDown(); + + // undo SetUp + virtual void TearDown() + { + g_clear_object (&session_bus); + g_debug (G_STRLOC" tearing down the bus"); + g_test_dbus_down (test_dbus); + g_clear_object (&test_dbus); + g_clear_pointer (&main_loop, g_main_loop_unref); + } + + protected: + + void CallIndicatorServiceMethod (const gchar * method) + { + GVariant * response; + + ASSERT_TRUE (session_bus != NULL); + //ASSERT_TRUE (service_proxy != NULL); + //ASSERT_TRUE (ServiceProxyIsOwned ()); + + g_clear_pointer (&response, g_variant_unref); } }; +/*** +**** +***/ /** - * Basic sanity test to see if we can account for all our menuitems. + * This is a basic test to see if we can launch indicator-session-service + * and call its "GetUserRealName" method. The test succeeds if we can launch + * the service, call the method, and get response that equals g_get_real_name(). + * + * (You may be wondering why GetUserRealName() exists at all, instead of clients + * using g_get_real_name(). It's because the former updates itslef when the user + * edits his real name, while the latter returns its cached copy of the old name.) */ -TEST_F(SessionServiceTest, HelloWorld) +TEST_F (ClientTest, TestCanStartService) { - ASSERT_TRUE(true); -} + GError * error; + GVariant * result; + const gchar * name; + error = NULL; + result = g_dbus_connection_call_sync (session_bus, + INDICATOR_SESSION_DBUS_NAME, + INDICATOR_SESSION_SERVICE_DBUS_OBJECT, + INDICATOR_SESSION_SERVICE_DBUS_IFACE, + "GetUserRealName", + NULL, + G_VARIANT_TYPE("(s)"), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + &error); + + EXPECT_TRUE (error == NULL); + ASSERT_TRUE (result != NULL); + + if (error != NULL) + { + g_warning ("GetUserRealName failed: %s", error->message); + g_clear_error (&error); + } + + name = NULL; + g_variant_get (result, "(&s)", &name); + ASSERT_STREQ (g_get_real_name(), name); + g_clear_pointer (&result, g_variant_unref); + + /* call the IndicatorService object's Shutdown() method for a clean shutdown */ + result = g_dbus_connection_call_sync (session_bus, + INDICATOR_SESSION_DBUS_NAME, + "/org/ayatana/indicator/service", + "org.ayatana.indicator.service", + "Shutdown", NULL, + NULL, + G_DBUS_CALL_FLAGS_NONE, + -1, NULL, NULL); + g_clear_pointer (&result, g_variant_unref); +} -- cgit v1.2.3 From f7aa585e8a8065fc2d68ac4fb9ccedbf5c37a83d Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 6 Nov 2012 20:20:44 -0600 Subject: remove unused function CallIndicatorServiceMethod() --- tests/test-service.cc | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/tests/test-service.cc b/tests/test-service.cc index dce665c..cd57c8b 100644 --- a/tests/test-service.cc +++ b/tests/test-service.cc @@ -81,19 +81,6 @@ class ClientTest : public ::testing::Test g_clear_object (&test_dbus); g_clear_pointer (&main_loop, g_main_loop_unref); } - - protected: - - void CallIndicatorServiceMethod (const gchar * method) - { - GVariant * response; - - ASSERT_TRUE (session_bus != NULL); - //ASSERT_TRUE (service_proxy != NULL); - //ASSERT_TRUE (ServiceProxyIsOwned ()); - - g_clear_pointer (&response, g_variant_unref); - } }; /*** @@ -115,6 +102,8 @@ TEST_F (ClientTest, TestCanStartService) GVariant * result; const gchar * name; + // call GetUserRealName(), which as a side effect should activate + // indicator-session-service via the .service file in the tests/ directory error = NULL; result = g_dbus_connection_call_sync (session_bus, INDICATOR_SESSION_DBUS_NAME, @@ -142,7 +131,7 @@ TEST_F (ClientTest, TestCanStartService) ASSERT_STREQ (g_get_real_name(), name); g_clear_pointer (&result, g_variant_unref); - /* call the IndicatorService object's Shutdown() method for a clean shutdown */ + // call IndicatorService's Shutdown() method for a clean exit result = g_dbus_connection_call_sync (session_bus, INDICATOR_SESSION_DBUS_NAME, "/org/ayatana/indicator/service", -- cgit v1.2.3 From 696c57e3fce174d7a30d2dd32cdb299c1dd663c3 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Wed, 7 Nov 2012 20:20:25 -0600 Subject: wrap the g_dbus_connection_call_sync() calls in g_message to see whether or not this is where the jenkins failures are coming from --- tests/test-service.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/test-service.cc b/tests/test-service.cc index cd57c8b..2f82bb3 100644 --- a/tests/test-service.cc +++ b/tests/test-service.cc @@ -105,6 +105,7 @@ TEST_F (ClientTest, TestCanStartService) // call GetUserRealName(), which as a side effect should activate // indicator-session-service via the .service file in the tests/ directory error = NULL; +g_message ("calling g_dbus_connection_call_sync"); result = g_dbus_connection_call_sync (session_bus, INDICATOR_SESSION_DBUS_NAME, INDICATOR_SESSION_SERVICE_DBUS_OBJECT, @@ -116,6 +117,7 @@ TEST_F (ClientTest, TestCanStartService) -1, NULL, &error); +g_message ("done calling g_dbus_connection_call_sync"); EXPECT_TRUE (error == NULL); ASSERT_TRUE (result != NULL); @@ -132,6 +134,7 @@ TEST_F (ClientTest, TestCanStartService) g_clear_pointer (&result, g_variant_unref); // call IndicatorService's Shutdown() method for a clean exit +g_message ("calling g_dbus_connection_call_sync"); result = g_dbus_connection_call_sync (session_bus, INDICATOR_SESSION_DBUS_NAME, "/org/ayatana/indicator/service", @@ -140,5 +143,6 @@ TEST_F (ClientTest, TestCanStartService) NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL); +g_message ("calling g_clear_pointer"); g_clear_pointer (&result, g_variant_unref); } -- cgit v1.2.3 From 1e5206eed3848d8014a225b5d8252c5c7aeb137e Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Thu, 8 Nov 2012 21:10:09 -0600 Subject: ensure that the service unit test can find all the GSettings schemas that it needs. --- tests/Makefile.am | 11 +- tests/org.gnome.desktop.lockdown.gschema.xml | 45 +++++ ....settings-daemon.plugins.media-keys.gschema.xml | 203 +++++++++++++++++++++ tests/test-service.cc | 8 +- 4 files changed, 260 insertions(+), 7 deletions(-) create mode 100644 tests/org.gnome.desktop.lockdown.gschema.xml create mode 100644 tests/org.gnome.settings-daemon.plugins.media-keys.gschema.xml diff --git a/tests/Makefile.am b/tests/Makefile.am index eedef3a..088b283 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -18,14 +18,16 @@ nodist_libgtest_a_SOURCES = \ AM_CPPFLAGS = $(GTEST_CPPFLAGS) -I${top_srcdir}/src -Wall -Werror AM_CXXFLAGS = $(GTEST_CXXFLAGS) +### +### +### + BUILT_SOURCES += gschemas.compiled CLEANFILES += gschemas.compiled gschemas.compiled: Makefile - @glib-compile-schemas --targetdir=$(abs_builddir) $(top_builddir)/data + $(AM_V_at) cp -f $(top_builddir)/data/*gschema.xml . + $(AM_V_GEN) $(GLIB_COMPILE_SCHEMAS) --targetdir=. . -### -### -### TESTS += test-service check_PROGRAMS += test-service @@ -34,6 +36,7 @@ test_service_LDADD = \ $(TEST_SERVICE_LIBS) \ libgtest.a test_service_CPPFLAGS = \ + -DSCHEMA_DIR="\"$(top_builddir)/tests/\"" \ -DINDICATOR_SERVICE_DIR="\"$(abs_builddir)\"" \ -DINDICATOR_SERVICE_PATH="\"$(top_builddir)/src/indicator-session-service\"" \ $(TEST_SERVICE_CFLAGS) \ diff --git a/tests/org.gnome.desktop.lockdown.gschema.xml b/tests/org.gnome.desktop.lockdown.gschema.xml new file mode 100644 index 0000000..6ccee17 --- /dev/null +++ b/tests/org.gnome.desktop.lockdown.gschema.xml @@ -0,0 +1,45 @@ + + + + + false + Disable command line + Prevent the user from accessing the terminal or specifying a command line to be executed. For example, this would disable access to the panel's "Run Application" dialog. + + + false + Disable saving files to disk + Prevent the user from saving files to disk. For example, this would disable access to all applications' "Save as" dialogs. + + + false + Disable printing + Prevent the user from printing. For example, this would disable access to all applications' "Print" dialogs. + + + false + Disable print setup + Prevent the user from modifying print settings. For example, this would disable access to all applications' "Print Setup" dialogs. + + + false + Disable user switching + Prevent the user from switching to another account while his session is active. + + + false + Disable lock screen + Prevent the user to lock his screen. + + + false + Disable URL and MIME type handlers + Prevent running any URL or MIME type handler applications. + + + false + Disable log out + Prevent the user from logging out. + + + \ No newline at end of file diff --git a/tests/org.gnome.settings-daemon.plugins.media-keys.gschema.xml b/tests/org.gnome.settings-daemon.plugins.media-keys.gschema.xml new file mode 100644 index 0000000..3f8dd50 --- /dev/null +++ b/tests/org.gnome.settings-daemon.plugins.media-keys.gschema.xml @@ -0,0 +1,203 @@ + + + + + true + Activation of this plugin + Whether this plugin would be activated by gnome-settings-daemon or not + + + [] + Custom keybindings + List of custom keybindings + + + 'XF86Calculator' + Launch calculator + Binding to launch the calculator. + + + 'XF86Mail' + Launch email client + Binding to launch the email client. + + + 'XF86Eject' + Eject + Binding to eject an optical disc. + + + '' + Launch help browser + Binding to launch the help browser. + + + 'XF86Explorer' + Home folder + Binding to open the Home folder. + + + 'XF86AudioMedia' + Launch media player + Binding to launch the media player. + + + 'XF86AudioNext' + Next track + Binding to skip to next track. + + + 'XF86AudioPause' + Pause playback + Binding to pause playback. + + + 'XF86AudioPlay' + Play (or play/pause) + Binding to start playback (or toggle play/pause). + + + '<Control><Alt>Delete' + Log out + Binding to log out. + + + 'XF86AudioPrev' + Previous track + Binding to skip to previous track. + + + 98 + Priority to use for this plugin + Priority to use for this plugin in gnome-settings-daemon startup queue + + + '<Control><Alt>l' + Lock screen + Binding to lock the screen. + + + 'XF86Search' + Search + Binding to launch the search tool. + + + 'XF86AudioStop' + Stop playback + Binding to stop playback. + + + 'XF86AudioLowerVolume' + Volume down + Binding to lower the system volume. + + + 'XF86AudioMute' + Volume mute + Binding to mute the system volume. + + + 'XF86AudioRaiseVolume' + Volume up + Binding to raise the system volume. + + + 'Print' + Take a screenshot + Binding to take a screenshot. + + + '<Alt>Print' + Take a screenshot of a window + Binding to take a screenshot of a window. + + + '<Shift>Print' + Take a screenshot of an area + Binding to take a screenshot of an area. + + + '<Ctrl>Print' + Copy a screenshot to clipboard + Binding to copy a screenshot to clipboard. + + + '<Ctrl><Alt>Print' + Copy a screenshot of a window to clipboard + Binding to copy a screenshot of a window to clipboard. + + + '<Ctrl><Shift>Print' + Copy a screenshot of an area to clipboard + Binding to copy a screenshot of an area to clipboard. + + + '<Primary><Alt>t' + Launch terminal + Binding to launch the terminal. + + + 'XF86WWW' + Launch web browser + Binding to launch the web browser. + + + '' + Toggle magnifier + Binding to show the screen magnifier + + + '' + Toggle screen reader + Binding to start the screen reader + + + '' + Toggle on-screen keyboard + Binding to show the on-screen keyboard + + + '' + Increase text size + Binding to increase the text size + + + '' + Decrease text size + Binding to decrease the text size + + + '' + Toggle contrast + Binding to toggle the interface contrast + + + '' + Magnifier zoom in + Binding for the magnifier to zoom in + + + '' + Magnifier zoom out + Binding for the magnifier to zoom out + + + + + + '' + Name + Name of the custom binding + + + '' + Binding + Binding for the custom binding + + + '' + Command + Command to run when the binding is invoked + + + \ No newline at end of file diff --git a/tests/test-service.cc b/tests/test-service.cc index 2f82bb3..21967cb 100644 --- a/tests/test-service.cc +++ b/tests/test-service.cc @@ -46,14 +46,16 @@ class ClientTest : public ::testing::Test session_bus = NULL; main_loop = NULL; - static bool ran_once_init = false; - if (!ran_once_init) + static bool first_run = true; + if (first_run) { g_type_init(); g_setenv ("INDICATOR_SERVICE_SHUTDOWN_TIMEOUT", "1000", TRUE); g_unsetenv ("INDICATOR_ALLOW_NO_WATCHERS"); g_unsetenv ("INDICATOR_SERVICE_REPLACE_MODE"); - ran_once_init = true; + g_setenv ("GSETTINGS_SCHEMA_DIR", SCHEMA_DIR, TRUE); + g_setenv ("GSETTINGS_BACKEND", "memory", TRUE); + first_run = false; } main_loop = g_main_loop_new (NULL, FALSE); -- cgit v1.2.3 From 9f1a3f8f6338dc0ed7db17df8d03937410e02cf4 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Tue, 13 Nov 2012 14:08:13 -0600 Subject: revert the g_message() tracers added in r372 --- tests/test-service.cc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tests/test-service.cc b/tests/test-service.cc index 21967cb..4d540d6 100644 --- a/tests/test-service.cc +++ b/tests/test-service.cc @@ -107,7 +107,6 @@ TEST_F (ClientTest, TestCanStartService) // call GetUserRealName(), which as a side effect should activate // indicator-session-service via the .service file in the tests/ directory error = NULL; -g_message ("calling g_dbus_connection_call_sync"); result = g_dbus_connection_call_sync (session_bus, INDICATOR_SESSION_DBUS_NAME, INDICATOR_SESSION_SERVICE_DBUS_OBJECT, @@ -119,7 +118,6 @@ g_message ("calling g_dbus_connection_call_sync"); -1, NULL, &error); -g_message ("done calling g_dbus_connection_call_sync"); EXPECT_TRUE (error == NULL); ASSERT_TRUE (result != NULL); @@ -136,7 +134,6 @@ g_message ("done calling g_dbus_connection_call_sync"); g_clear_pointer (&result, g_variant_unref); // call IndicatorService's Shutdown() method for a clean exit -g_message ("calling g_dbus_connection_call_sync"); result = g_dbus_connection_call_sync (session_bus, INDICATOR_SESSION_DBUS_NAME, "/org/ayatana/indicator/service", @@ -145,6 +142,5 @@ g_message ("calling g_dbus_connection_call_sync"); NULL, G_DBUS_CALL_FLAGS_NONE, -1, NULL, NULL); -g_message ("calling g_clear_pointer"); g_clear_pointer (&result, g_variant_unref); } -- cgit v1.2.3 From 0ad2ca4e77671f8a7279a58f0e477bac0fe6c554 Mon Sep 17 00:00:00 2001 From: Charles Kerr Date: Fri, 16 Nov 2012 12:55:58 -0600 Subject: re-enable the tests/ directory --- debian/changelog | 6 +----- debian/control | 1 - debian/rules | 3 --- 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/debian/changelog b/debian/changelog index 418d825..5fca7cd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,14 +4,10 @@ indicator-session (12.10.5-0ubuntu1) UNRELEASED; urgency=low - Add DPKG_GENSYMBOLS_CHECK_LEVEL=4. - Use the dh sequencer with autoreconf. - Override dh_autoreconf to run autogen.sh. - - Temporarily disable running tests due to an issue with getting the - gsettings schema for testing. * debian/control: - Add dh-autoreconf to Build-Depends. - Add gnome-common to Build-Depends. - - Add libdbustest1-dev, dbus-test-runner to Build-Depends. - - Explicitly list libgtest-dev in Build-Depends, even though it does get - pulled in via libxorg-gtest-dev. + - Add libgtest-dev, libdbustest1-dev, dbus-test-runner to Build-Depends. - Adjust style to be consistent and use trailing commas in lists. - Update Vcs-Bzr and Vcs-Browser fields and add notice for uploaders. * Automatic snapshot from revision 373 (bootstrap): diff --git a/debian/control b/debian/control index de9dc22..2c6a551 100644 --- a/debian/control +++ b/debian/control @@ -7,7 +7,6 @@ Build-Depends: debhelper (>= 9), dh-translations, intltool, gnome-common, - libxorg-gtest-dev, libgtest-dev, libdbustest1-dev, dbus-test-runner, diff --git a/debian/rules b/debian/rules index cafefe7..54cfd06 100644 --- a/debian/rules +++ b/debian/rules @@ -5,9 +5,6 @@ export DPKG_GENSYMBOLS_CHECK_LEVEL=4 %: dh $@ --with translations,autoreconf -override_dh_auto_test: - # TESTS TEMPORARILY DISABLED: need fixing for gsettings schema. - override_dh_autoreconf: NOCONFIGURE=1 dh_autoreconf ./autogen.sh -- cgit v1.2.3