diff options
Diffstat (limited to 'tests/test-snap.cpp')
-rw-r--r-- | tests/test-snap.cpp | 354 |
1 files changed, 6 insertions, 348 deletions
diff --git a/tests/test-snap.cpp b/tests/test-snap.cpp index f663381..2c53900 100644 --- a/tests/test-snap.cpp +++ b/tests/test-snap.cpp @@ -25,19 +25,12 @@ #include <notifications/dbus-shared.h> #include <notifications/notifications.h> -#include <libdbustest/dbus-test.h> - -#include <glib.h> - -#include <unistd.h> // getuid() -#include <sys/types.h> // getuid() +#include "notification-fixture.h" using namespace ayatana::indicator::datetime; namespace uin = ayatana::indicator::notifications; -#include "glib-fixture.h" - /*** **** ***/ @@ -49,341 +42,6 @@ namespace using namespace ayatana::indicator::datetime; -class SnapFixture: public GlibFixture -{ -private: - - typedef GlibFixture super; - - static constexpr char const * NOTIFY_BUSNAME {"org.freedesktop.Notifications"}; - static constexpr char const * NOTIFY_INTERFACE {"org.freedesktop.Notifications"}; - static constexpr char const * NOTIFY_PATH {"/org/freedesktop/Notifications"}; - -protected: - - static constexpr char const * HAPTIC_METHOD_VIBRATE_PATTERN {"VibratePattern"}; - - static constexpr int SCREEN_COOKIE {8675309}; - static constexpr char const * SCREEN_METHOD_KEEP_DISPLAY_ON {"keepDisplayOn"}; - static constexpr char const * SCREEN_METHOD_REMOVE_DISPLAY_ON_REQUEST {"removeDisplayOnRequest"}; - - static constexpr int POWERD_SYS_STATE_ACTIVE = 1; - static constexpr char const * POWERD_COOKIE {"567-48-8307"}; - static constexpr char const * POWERD_METHOD_REQUEST_SYS_STATE {"requestSysState"}; - static constexpr char const * POWERD_METHOD_CLEAR_SYS_STATE {"clearSysState"}; - - static constexpr int FIRST_NOTIFY_ID {1000}; - - static constexpr int NOTIFICATION_CLOSED_EXPIRED {1}; - static constexpr int NOTIFICATION_CLOSED_DISMISSED {2}; - static constexpr int NOTIFICATION_CLOSED_API {3}; - static constexpr int NOTIFICATION_CLOSED_UNDEFINED {4}; - - static constexpr char const * METHOD_CLOSE {"CloseNotification"}; - static constexpr char const * METHOD_GET_CAPS {"GetCapabilities"}; - static constexpr char const * METHOD_GET_INFO {"GetServerInformation"}; - static constexpr char const * METHOD_NOTIFY {"Notify"}; - - static constexpr char const * SIGNAL_CLOSED {"NotificationClosed"}; - - static constexpr char const * HINT_TIMEOUT {"x-canonical-snap-decisions-timeout"}; - - static constexpr char const * AS_BUSNAME {"org.freedesktop.Accounts"}; - static constexpr char const * AS_INTERFACE {"com.ubuntu.touch.AccountsService.Sound"}; - static constexpr char const * PROP_OTHER_VIBRATIONS {"OtherVibrate"}; - static constexpr char const * PROP_SILENT_MODE {"SilentMode"}; - - Appointment appt; - Appointment ualarm; - GDBusConnection * system_bus = nullptr; - GDBusConnection * session_bus = nullptr; - DbusTestService * service = nullptr; - DbusTestDbusMock * as_mock = nullptr; - DbusTestDbusMock * notify_mock = nullptr; - DbusTestDbusMock * powerd_mock = nullptr; - DbusTestDbusMock * screen_mock = nullptr; - DbusTestDbusMock * haptic_mock = nullptr; - DbusTestDbusMockObject * as_obj = nullptr; - DbusTestDbusMockObject * notify_obj = nullptr; - DbusTestDbusMockObject * powerd_obj = nullptr; - DbusTestDbusMockObject * screen_obj = nullptr; - DbusTestDbusMockObject * haptic_obj = nullptr; - - void SetUp() override - { - GError * error = nullptr; - char * str = nullptr; - - super::SetUp(); - - // init an Appointment - appt.color = "green"; - appt.summary = "Christmas"; - appt.uid = "D4B57D50247291478ED31DED17FF0A9838DED402"; - appt.type = Appointment::EVENT; - const auto christmas = DateTime::Local(2015,12,25,0,0,0); - appt.begin = christmas.start_of_day(); - appt.end = christmas.end_of_day(); - appt.alarms.push_back(Alarm{"Ho Ho Ho!", "", appt.begin}); - - // init an Ubuntu Alarm - ualarm.color = "red"; - ualarm.summary = "Wakeup"; - ualarm.uid = "E4B57D50247291478ED31DED17FF0A9838DED403"; - ualarm.type = Appointment::UBUNTU_ALARM; - const auto tomorrow = DateTime::NowLocal().add_days(1); - ualarm.begin = tomorrow; - ualarm.end = tomorrow; - ualarm.alarms.push_back(Alarm{"It's Tomorrow!", "", appt.begin}); - - service = dbus_test_service_new(nullptr); - - /// - /// Add the AccountsService mock - /// - - as_mock = dbus_test_dbus_mock_new(AS_BUSNAME); - auto as_path = g_strdup_printf("/org/freedesktop/Accounts/User%lu", (gulong)getuid()); - as_obj = dbus_test_dbus_mock_get_object(as_mock, - as_path, - AS_INTERFACE, - &error); - g_free(as_path); - g_assert_no_error(error); - - // PROP_SILENT_MODE - dbus_test_dbus_mock_object_add_property(as_mock, - as_obj, - PROP_SILENT_MODE, - G_VARIANT_TYPE_BOOLEAN, - g_variant_new_boolean(false), - &error); - g_assert_no_error(error); - - // PROP_OTHER_VIBRATIONS - dbus_test_dbus_mock_object_add_property(as_mock, - as_obj, - PROP_OTHER_VIBRATIONS, - G_VARIANT_TYPE_BOOLEAN, - g_variant_new_boolean(true), - &error); - g_assert_no_error(error); - dbus_test_service_add_task(service, DBUS_TEST_TASK(as_mock)); - - /// - /// Add the Notifications mock - /// - - notify_mock = dbus_test_dbus_mock_new(NOTIFY_BUSNAME); - notify_obj = dbus_test_dbus_mock_get_object(notify_mock, - NOTIFY_PATH, - NOTIFY_INTERFACE, - &error); - g_assert_no_error(error); - - // METHOD_GET_INFO - str = g_strdup("ret = ('mock-notify', 'test vendor', '1.0', '1.1')"); - dbus_test_dbus_mock_object_add_method(notify_mock, - notify_obj, - METHOD_GET_INFO, - nullptr, - G_VARIANT_TYPE("(ssss)"), - str, - &error); - g_assert_no_error (error); - g_free (str); - - // METHOD_NOTIFY - str = g_strdup_printf("try:\n" - " self.NextNotifyId\n" - "except AttributeError:\n" - " self.NextNotifyId = %d\n" - "ret = self.NextNotifyId\n" - "self.NextNotifyId += 1\n", - FIRST_NOTIFY_ID); - dbus_test_dbus_mock_object_add_method(notify_mock, - notify_obj, - METHOD_NOTIFY, - G_VARIANT_TYPE("(susssasa{sv}i)"), - G_VARIANT_TYPE_UINT32, - str, - &error); - g_assert_no_error (error); - g_free (str); - - // METHOD_CLOSE - str = g_strdup_printf("self.EmitSignal('%s', '%s', 'uu', [ args[0], %d ])", - NOTIFY_INTERFACE, - SIGNAL_CLOSED, - NOTIFICATION_CLOSED_API); - dbus_test_dbus_mock_object_add_method(notify_mock, - notify_obj, - METHOD_CLOSE, - G_VARIANT_TYPE("(u)"), - nullptr, - str, - &error); - g_assert_no_error (error); - g_free (str); - - dbus_test_service_add_task(service, DBUS_TEST_TASK(notify_mock)); - - /// - /// Add the powerd mock - /// - - powerd_mock = dbus_test_dbus_mock_new(BUS_POWERD_NAME); - powerd_obj = dbus_test_dbus_mock_get_object(powerd_mock, - BUS_POWERD_PATH, - BUS_POWERD_INTERFACE, - &error); - g_assert_no_error(error); - - str = g_strdup_printf ("ret = '%s'", POWERD_COOKIE); - dbus_test_dbus_mock_object_add_method(powerd_mock, - powerd_obj, - POWERD_METHOD_REQUEST_SYS_STATE, - G_VARIANT_TYPE("(si)"), - G_VARIANT_TYPE("(s)"), - str, - &error); - g_assert_no_error (error); - g_free (str); - - dbus_test_dbus_mock_object_add_method(powerd_mock, - powerd_obj, - POWERD_METHOD_CLEAR_SYS_STATE, - G_VARIANT_TYPE("(s)"), - nullptr, - "", - &error); - g_assert_no_error (error); - - dbus_test_service_add_task(service, DBUS_TEST_TASK(powerd_mock)); - - /// - /// Add the Screen mock - /// - - screen_mock = dbus_test_dbus_mock_new(BUS_SCREEN_NAME); - screen_obj = dbus_test_dbus_mock_get_object(screen_mock, - BUS_SCREEN_PATH, - BUS_SCREEN_INTERFACE, - &error); - g_assert_no_error(error); - - str = g_strdup_printf ("ret = %d", SCREEN_COOKIE); - dbus_test_dbus_mock_object_add_method(screen_mock, - screen_obj, - SCREEN_METHOD_KEEP_DISPLAY_ON, - nullptr, - G_VARIANT_TYPE("(i)"), - str, - &error); - g_assert_no_error (error); - g_free (str); - - dbus_test_dbus_mock_object_add_method(screen_mock, - screen_obj, - SCREEN_METHOD_REMOVE_DISPLAY_ON_REQUEST, - G_VARIANT_TYPE("(i)"), - nullptr, - "", - &error); - g_assert_no_error (error); - dbus_test_service_add_task(service, DBUS_TEST_TASK(screen_mock)); - - /// - /// Add the haptic mock - /// - - haptic_mock = dbus_test_dbus_mock_new(BUS_HAPTIC_NAME); - haptic_obj = dbus_test_dbus_mock_get_object(haptic_mock, - BUS_HAPTIC_PATH, - BUS_HAPTIC_INTERFACE, - &error); - - dbus_test_dbus_mock_object_add_method(haptic_mock, - haptic_obj, - HAPTIC_METHOD_VIBRATE_PATTERN, - G_VARIANT_TYPE("(auu)"), - nullptr, - "", - &error); - g_assert_no_error (error); - dbus_test_service_add_task(service, DBUS_TEST_TASK(haptic_mock)); - - - // start 'em up. - // make the system bus work off the mock bus too, since that's - // where the upower and screen are on the system bus... - - dbus_test_service_start_tasks(service); - g_setenv("DBUS_SYSTEM_BUS_ADDRESS", g_getenv("DBUS_SESSION_BUS_ADDRESS"), TRUE); - - session_bus = g_bus_get_sync(G_BUS_TYPE_SESSION, nullptr, nullptr); - ASSERT_NE(nullptr, session_bus); - g_dbus_connection_set_exit_on_close(session_bus, false); - g_object_add_weak_pointer(G_OBJECT(session_bus), (gpointer *)&session_bus); - - system_bus = g_bus_get_sync(G_BUS_TYPE_SYSTEM, nullptr, nullptr); - ASSERT_NE(nullptr, system_bus); - g_dbus_connection_set_exit_on_close(system_bus, FALSE); - g_object_add_weak_pointer(G_OBJECT(system_bus), (gpointer *)&system_bus); - } - - void TearDown() override - { - g_clear_object(&haptic_mock); - g_clear_object(&screen_mock); - g_clear_object(&powerd_mock); - g_clear_object(¬ify_mock); - g_clear_object(&as_mock); - g_clear_object(&service); - g_object_unref(session_bus); - g_object_unref(system_bus); - - // wait a little while for the scaffolding to shut down, - // but don't block on it forever... - unsigned int cleartry = 0; - while (((system_bus != nullptr) || (session_bus != nullptr)) && (cleartry < 50)) - { - g_usleep(100000); - while (g_main_pending()) - g_main_iteration(true); - cleartry++; - } - - super::TearDown(); - } - - void make_interactive() - { - // GetCapabilities returns an array containing 'actions', - // so our snap decision will be interactive. - // For this test, it means we should get a timeout Notify Hint - // that matches duration_minutes - GError * error = nullptr; - dbus_test_dbus_mock_object_add_method(notify_mock, - notify_obj, - METHOD_GET_CAPS, - nullptr, - G_VARIANT_TYPE_STRING_ARRAY, - "ret = ['actions', 'body']", - &error); - g_assert_no_error (error); - } - - std::shared_ptr<Snap> create_snap(const std::shared_ptr<uin::Engine>& ne, - const std::shared_ptr<uin::SoundBuilder>& sb, - const std::shared_ptr<Settings>& settings) - { - auto snap = std::make_shared<Snap>(ne, sb, settings); - wait_msec(100); // wait a moment for the Snap to finish its async dbus bootstrapping - return snap; - } -}; - /*** **** ***/ @@ -397,7 +55,7 @@ namespace }; } -TEST_F(SnapFixture, InteractiveDuration) +TEST_F(NotificationFixture, InteractiveDuration) { static constexpr int duration_minutes = 120; auto settings = std::make_shared<Settings>(); @@ -450,7 +108,7 @@ TEST_F(SnapFixture, InteractiveDuration) **** ***/ -TEST_F(SnapFixture, InhibitSleep) +TEST_F(NotificationFixture, InhibitSleep) { auto settings = std::make_shared<Settings>(); auto ne = std::make_shared<ayatana::indicator::notifications::Engine>(APP_NAME); @@ -506,7 +164,7 @@ TEST_F(SnapFixture, InhibitSleep) **** ***/ -TEST_F(SnapFixture, ForceScreen) +TEST_F(NotificationFixture, ForceScreen) { auto settings = std::make_shared<Settings>(); auto ne = std::make_shared<ayatana::indicator::notifications::Engine>(APP_NAME); @@ -588,7 +246,7 @@ std::string path_to_uri(const std::string& path) return uri; } -TEST_F(SnapFixture,DefaultSounds) +TEST_F(NotificationFixture,DefaultSounds) { auto settings = std::make_shared<Settings>(); auto ne = std::make_shared<ayatana::indicator::notifications::Engine>(APP_NAME); @@ -619,7 +277,7 @@ TEST_F(SnapFixture,DefaultSounds) **** ***/ -TEST_F(SnapFixture,Notification) +TEST_F(NotificationFixture,Notification) { // Feed different combinations of system settings, // indicator-datetime settings, and event types, |