Merge lp:~azzar1/unity/sc_dbus_manager_tests into lp:unity

Proposed by Andrea Azzarone
Status: Merged
Approved by: Marco Trevisan (Treviño)
Approved revision: no longer in the source branch.
Merged at revision: 4000
Proposed branch: lp:~azzar1/unity/sc_dbus_manager_tests
Merge into: lp:unity
Diff against target: 432 lines (+301/-19)
5 files modified
lockscreen/ScreenSaverDBusManager.cpp (+33/-9)
lockscreen/ScreenSaverDBusManager.h (+11/-10)
lockscreen/ScreenSaverDBusManagerImpl.h (+50/-0)
tests/CMakeLists.txt (+1/-0)
tests/test_screensaver_dbus_manager.cpp (+206/-0)
To merge this branch: bzr merge lp:~azzar1/unity/sc_dbus_manager_tests
Reviewer Review Type Date Requested Status
Marco Trevisan (Treviño) Approve
PS Jenkins bot (community) continuous-integration Approve
Review via email: mp+216187@code.launchpad.net

Commit message

Add unit tests for unity::lockscreen::DBusManager.

Description of the change

Add unit tests for unity::lockscreen::DBusManager.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Marco Trevisan (Treviño) (3v1n0) wrote :

Lovely!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'lockscreen/ScreenSaverDBusManager.cpp'
2--- lockscreen/ScreenSaverDBusManager.cpp 2014-04-10 04:47:58 +0000
3+++ lockscreen/ScreenSaverDBusManager.cpp 2015-09-08 02:34:14 +0000
4@@ -18,6 +18,7 @@
5 */
6
7 #include "ScreenSaverDBusManager.h"
8+#include "ScreenSaverDBusManagerImpl.h"
9
10 #include "LockScreenSettings.h"
11 #include "GLibDBusProxy.h"
12@@ -30,6 +31,7 @@
13 namespace dbus
14 {
15 const std::string NAME = "org.gnome.ScreenSaver";
16+const std::string TEST_NAME = "org.gnome.Test.ScreenSaver";
17 const std::string INTERFACE = "org.gnome.ScreenSaver";
18 const std::string OBJECT_PATH = "/org/gnome/ScreenSaver";
19 const std::string INTROSPECTION_XML =
20@@ -53,16 +55,22 @@
21 </node>)";
22 }
23
24-DBusManager::DBusManager(session::Manager::Ptr const& session)
25- : active(false)
26+//
27+// Start Private Implementation
28+//
29+
30+DBusManager::Impl::Impl(DBusManager* manager, session::Manager::Ptr const& session, bool test_mode)
31+ : manager_(manager)
32 , session_(session)
33+ , test_mode_(test_mode)
34 , object_(std::make_shared<glib::DBusObject>(dbus::INTROSPECTION_XML, dbus::INTERFACE))
35 , time_(0)
36 {
37- active.changed.connect(sigc::mem_fun(this, &DBusManager::SetActive));
38+ manager_->active = false;
39+ manager_->active.changed.connect(sigc::mem_fun(this, &DBusManager::Impl::SetActive));
40
41 // This is a workaround we use to fallback to use gnome-screensaver if the screen reader is enabled
42- Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &DBusManager::EnsureService)));
43+ Settings::Instance().use_legacy.changed.connect(sigc::hide(sigc::mem_fun(this, &Impl::EnsureService)));
44
45 object_->SetMethodsCallsHandler([this] (std::string const& method, GVariant* parameters) -> GVariant* {
46 if (method == "Lock")
47@@ -71,7 +79,7 @@
48 }
49 else if (method == "GetActive")
50 {
51- return g_variant_new("(b)", active() ? TRUE : FALSE);
52+ return g_variant_new("(b)", manager_->active() ? TRUE : FALSE);
53 }
54 else if (method == "GetActiveTime")
55 {
56@@ -86,7 +94,7 @@
57 }
58 else if (method == "SimulateUserActivity")
59 {
60- simulate_activity.emit();
61+ manager_->simulate_activity.emit();
62 }
63
64 return nullptr;
65@@ -95,13 +103,14 @@
66 EnsureService();
67 }
68
69-void DBusManager::EnsureService()
70+void DBusManager::Impl::EnsureService()
71 {
72 if (!Settings::Instance().use_legacy())
73 {
74 if (!server_)
75 {
76- server_ = std::make_shared<glib::DBusServer>(dbus::NAME, G_BUS_TYPE_SESSION, G_BUS_NAME_OWNER_FLAGS_REPLACE);
77+ server_ = std::make_shared<glib::DBusServer>(test_mode_ ? dbus::TEST_NAME : dbus::NAME,
78+ G_BUS_TYPE_SESSION, G_BUS_NAME_OWNER_FLAGS_REPLACE);
79 server_->AddObject(object_, dbus::OBJECT_PATH);
80 }
81 }
82@@ -115,11 +124,26 @@
83 }
84 }
85
86-void DBusManager::SetActive(bool active)
87+void DBusManager::Impl::SetActive(bool active)
88 {
89 time_ = active ? time(nullptr) : 0;
90 object_->EmitSignal("ActiveChanged", g_variant_new("(b)", active ? TRUE : FALSE));
91 }
92
93+//
94+// End private implemenation
95+//
96+
97+DBusManager::DBusManager(session::Manager::Ptr const& session)
98+ : impl_(new Impl(this, session, /* test_mode */ false))
99+{}
100+
101+DBusManager::DBusManager(session::Manager::Ptr const& session, DBusManager::TestMode const&)
102+ : impl_(new Impl(this, session, /* test_mode */ true))
103+{}
104+
105+DBusManager::~DBusManager()
106+{}
107+
108 } // lockscreen
109 } // unity
110
111=== modified file 'lockscreen/ScreenSaverDBusManager.h'
112--- lockscreen/ScreenSaverDBusManager.h 2014-04-10 04:47:58 +0000
113+++ lockscreen/ScreenSaverDBusManager.h 2015-09-08 02:34:14 +0000
114@@ -29,29 +29,30 @@
115 namespace lockscreen
116 {
117
118-class DBusManager : public sigc::trackable
119+class DBusManager
120 {
121 public:
122 typedef std::shared_ptr<DBusManager> Ptr;
123
124 DBusManager(session::Manager::Ptr const&);
125+ ~DBusManager();
126
127 nux::Property<bool> active;
128
129 sigc::signal<void> simulate_activity;
130
131+protected:
132+ struct TestMode {};
133+ DBusManager(session::Manager::Ptr const&, TestMode const&);
134+
135 private:
136- void SetActive(bool active);
137- void EnsureService();
138-
139- session::Manager::Ptr session_;
140- glib::DBusServer::Ptr server_;
141- glib::DBusObject::Ptr object_;
142-
143- time_t time_;
144+ struct Impl;
145+ std::unique_ptr<Impl> impl_;
146+
147+ friend struct TestScreenSaverDBusManager;
148 };
149
150-} // session
151+} // lockscreen
152 } // unity
153
154 #endif
155
156=== added file 'lockscreen/ScreenSaverDBusManagerImpl.h'
157--- lockscreen/ScreenSaverDBusManagerImpl.h 1970-01-01 00:00:00 +0000
158+++ lockscreen/ScreenSaverDBusManagerImpl.h 2015-09-08 02:34:14 +0000
159@@ -0,0 +1,50 @@
160+// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
161+/*
162+* Copyright (C) 2014 Canonical Ltd
163+*
164+* This program is free software: you can redistribute it and/or modify
165+* it under the terms of the GNU General Public License version 3 as
166+* published by the Free Software Foundation.
167+*
168+* This program is distributed in the hope that it will be useful,
169+* but WITHOUT ANY WARRANTY; without even the implied warranty of
170+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
171+* GNU General Public License for more details.
172+*
173+* You should have received a copy of the GNU General Public License
174+* along with this program. If not, see <http://www.gnu.org/licenses/>.
175+*
176+* Authored by: Andrea Azzarone <andrea.azzarone@canonical.com>
177+*/
178+
179+#ifndef UNITYSHELL_SCREENSAVER_DBUS_MANAGER_IMPL_H
180+#define UNITYSHELL_SCREENSAVER_DBUS_MANAGER_IMPL_H
181+
182+#include <UnityCore/GLibDBusServer.h>
183+#include <UnityCore/SessionManager.h>
184+
185+namespace unity
186+{
187+namespace lockscreen
188+{
189+
190+struct DBusManager::Impl : sigc::trackable
191+{
192+ Impl(DBusManager*, session::Manager::Ptr const& session, bool test_mode);
193+
194+ void SetActive(bool active);
195+ void EnsureService();
196+
197+ DBusManager* manager_;
198+ session::Manager::Ptr session_;
199+ bool test_mode_;
200+ glib::DBusServer::Ptr server_;
201+ glib::DBusObject::Ptr object_;
202+
203+ time_t time_;
204+};
205+
206+}
207+}
208+
209+#endif
210
211=== modified file 'tests/CMakeLists.txt'
212--- tests/CMakeLists.txt 2014-11-04 19:00:40 +0000
213+++ tests/CMakeLists.txt 2015-09-08 02:34:14 +0000
214@@ -269,6 +269,7 @@
215 test_resultviewgrid.cpp
216 test_scope_bar.cpp
217 test_scope_view.cpp
218+ test_screensaver_dbus_manager.cpp
219 test_searchbar.cpp
220 test_session_button.cpp
221 test_session_controller.cpp
222
223=== added file 'tests/test_screensaver_dbus_manager.cpp'
224--- tests/test_screensaver_dbus_manager.cpp 1970-01-01 00:00:00 +0000
225+++ tests/test_screensaver_dbus_manager.cpp 2015-09-08 02:34:14 +0000
226@@ -0,0 +1,206 @@
227+// -*- Mode: C++; indent-tabs-mode: nil; tab-width: 2 -*-
228+/*
229+* Copyright (C) 2014 Canonical Ltd
230+*
231+* This program is free software: you can redistribute it and/or modify
232+* it under the terms of the GNU General Public License version 3 as
233+* published by the Free Software Foundation.
234+*
235+* This program is distributed in the hope that it will be useful,
236+* but WITHOUT ANY WARRANTY; without even the implied warranty of
237+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
238+* GNU General Public License for more details.
239+*
240+* You should have received a copy of the GNU General Public License
241+* along with this program. If not, see <http://www.gnu.org/licenses/>.
242+*
243+* Authored by: Andrea Azzarone <andrea.azzarone@canonical.com>
244+*/
245+
246+#include <gtest/gtest.h>
247+using namespace testing;
248+
249+
250+#include "lockscreen/LockScreenSettings.h"
251+#include "lockscreen/ScreenSaverDBusManager.h"
252+#include "lockscreen/ScreenSaverDBusManagerImpl.h"
253+#include "test_mock_session_manager.h"
254+#include "test_utils.h"
255+
256+#include "GLibDBusProxy.h"
257+#include "Variant.h"
258+
259+namespace unity
260+{
261+namespace lockscreen
262+{
263+
264+struct TestScreenSaverDBusManager : Test
265+{
266+ TestScreenSaverDBusManager()
267+ : session_manager(std::make_shared<session::MockManager>())
268+ , sc_dbus_manager(std::make_shared<WrapperDBusManager>(session_manager))
269+ {
270+ gs_proxy = std::make_shared<glib::DBusProxy>("org.gnome.Test.ScreenSaver",
271+ "/org/gnome/ScreenSaver",
272+ "org.gnome.ScreenSaver");
273+
274+ Utils::WaitUntilMSec([this] { return gs_proxy->IsConnected(); });
275+ }
276+
277+ struct WrapperDBusManager : DBusManager
278+ {
279+ WrapperDBusManager(session::Manager::Ptr const& session_manager)
280+ : DBusManager(session_manager, DBusManager::TestMode())
281+ {}
282+
283+ using DBusManager::impl_;
284+ };
285+
286+ unity::lockscreen::Settings lockscreen_settings;
287+ session::MockManager::Ptr session_manager;
288+ WrapperDBusManager::Ptr sc_dbus_manager;
289+ glib::DBusProxy::Ptr gs_proxy;
290+};
291+
292+TEST_F(TestScreenSaverDBusManager, Contructor)
293+{
294+ EXPECT_FALSE(sc_dbus_manager->active());
295+}
296+
297+TEST_F(TestScreenSaverDBusManager, ContructorLegacy)
298+{
299+ lockscreen_settings.use_legacy = true;
300+ auto sc_dbus_manager_tmp = std::make_shared<WrapperDBusManager>(session_manager);
301+
302+ ASSERT_EQ(nullptr, sc_dbus_manager_tmp->impl_->server_.get());
303+}
304+
305+TEST_F(TestScreenSaverDBusManager, ContructorNoLegacy)
306+{
307+ lockscreen_settings.use_legacy = false;
308+ auto sc_dbus_manager_tmp = std::make_shared<WrapperDBusManager>(session_manager);
309+
310+ ASSERT_NE(nullptr, sc_dbus_manager_tmp->impl_->server_.get());
311+}
312+
313+TEST_F(TestScreenSaverDBusManager, Lock)
314+{
315+ EXPECT_CALL(*session_manager, LockScreen())
316+ .Times(1);
317+
318+ bool call_finished = false;
319+ gs_proxy->Call("Lock", nullptr, [&call_finished](GVariant*) {
320+ call_finished = true;
321+ });
322+
323+ Utils::WaitUntil(call_finished);
324+}
325+
326+TEST_F(TestScreenSaverDBusManager, SetActiveTrue)
327+{
328+ EXPECT_CALL(*session_manager, ScreenSaverActivate())
329+ .Times(1);
330+
331+ bool call_finished = false;
332+ gs_proxy->Call("SetActive", g_variant_new("(b)", TRUE), [&call_finished](GVariant*) {
333+ call_finished = true;
334+ });
335+
336+ Utils::WaitUntil(call_finished);
337+}
338+
339+TEST_F(TestScreenSaverDBusManager, SetActiveFalse)
340+{
341+ EXPECT_CALL(*session_manager, ScreenSaverDeactivate())
342+ .Times(1);
343+
344+ bool call_finished = false;
345+ gs_proxy->Call("SetActive", g_variant_new("(b)", FALSE), [&call_finished](GVariant*) {
346+ call_finished = true;
347+ });
348+
349+ Utils::WaitUntil(call_finished);
350+}
351+
352+TEST_F(TestScreenSaverDBusManager, GetActive)
353+{
354+ bool call_finished = false;
355+ bool active = false;
356+
357+ auto get_active_cb = [&call_finished, &active](GVariant* value) {
358+ call_finished = true;
359+ active = glib::Variant(value).GetBool();
360+ };
361+
362+ gs_proxy->Call("GetActive", nullptr, get_active_cb);
363+
364+ Utils::WaitUntil(call_finished);
365+ ASSERT_FALSE(active);
366+
367+ /* simulate SetActive */
368+ sc_dbus_manager->active = true;
369+
370+ call_finished = false;
371+ gs_proxy->Call("GetActive", nullptr, get_active_cb);
372+
373+ Utils::WaitUntil(call_finished);
374+ ASSERT_TRUE(active);
375+}
376+
377+TEST_F(TestScreenSaverDBusManager, GetActiveTime)
378+{
379+ bool call_finished = false;
380+ time_t active_time;
381+
382+ auto get_active_time_cb = [&call_finished, &active_time](GVariant* value) {
383+ call_finished = true;
384+ active_time = glib::Variant(value).GetUInt32();
385+ };
386+
387+ gs_proxy->Call("GetActiveTime", nullptr, get_active_time_cb);
388+
389+ Utils::WaitUntil(call_finished);
390+ ASSERT_EQ(0, active_time);
391+
392+ /* simulate SetActive */
393+ sc_dbus_manager->active = true;
394+
395+ // GetActiveTime counts the number of seconds so we need to wait a while.
396+ Utils::WaitForTimeout(2);
397+
398+ call_finished = false;
399+ gs_proxy->Call("GetActiveTime", nullptr, get_active_time_cb);
400+
401+ Utils::WaitUntil(call_finished);
402+ ASSERT_NE(0, active_time);
403+}
404+
405+TEST_F(TestScreenSaverDBusManager, ActiveChanged)
406+{
407+ bool call_finished = false;
408+ time_t active;
409+
410+ gs_proxy->Connect("ActiveChanged", [&call_finished, &active](GVariant* value) {
411+ call_finished = true;
412+ active = glib::Variant(value).GetBool();
413+ });
414+
415+ /* simulate SetActive */
416+ sc_dbus_manager->active = true;
417+
418+ Utils::WaitUntil(call_finished);
419+ ASSERT_TRUE(active);
420+
421+ /* simulate SetActive */
422+ call_finished = false;
423+ sc_dbus_manager->active = false;
424+
425+ Utils::WaitUntil(call_finished);
426+ ASSERT_FALSE(active);
427+}
428+
429+
430+
431+}
432+}