Merge lp:~jonas-drange/ubuntu-system-settings/mock-accountsservice into lp:ubuntu-system-settings

Proposed by Jonas G. Drange
Status: Work in progress
Proposed branch: lp:~jonas-drange/ubuntu-system-settings/mock-accountsservice
Merge into: lp:ubuntu-system-settings
Diff against target: 404 lines (+331/-5)
3 files modified
tests/autopilot/ubuntu_system_settings/tests/__init__.py (+23/-0)
tests/autopilot/ubuntu_system_settings/tests/accountsservice.py (+283/-0)
tests/autopilot/ubuntu_system_settings/tests/test_language.py (+25/-5)
To merge this branch: bzr merge lp:~jonas-drange/ubuntu-system-settings/mock-accountsservice
Reviewer Review Type Date Requested Status
PS Jenkins bot continuous-integration Needs Fixing
Ubuntu Touch System Settings Pending
Review via email: mp+269072@code.launchpad.net

Commit message

Mock AccountsService backend using a dbusmock template and assert in the language test that the backend changed.

Description of the change

Mock AccountsService backend using a dbusmock template and assert in the language test that the backend changed.

 * Is your branch in sync with latest trunk (e.g. bzr pull lp:trunk -> no changes)
Yes
 * Did you build your software in a clean sbuild/pbuilder chroot or ppa?
No
 * Did you build your software in a clean sbuild/pbuilder armhf chroot or ppa?
No
 * Has your component "TestPlan” been executed successfully on emulator, N4?
Waiting for debs…
 * Has a 5 minute exploratory testing run been executed on N4?
No
 * If you changed the packaging (debian), did you subscribe a core-dev to this MP?
N/A
 * If you changed the UI, did you subscribe the design-reviewers to this MP?
N/A
 * What components might get impacted by your changes?
Just the test_language autopilot test.
 * Have you requested review by the teams of these owning components?
N/A

To post a comment you must log in.
1510. By Jonas G. Drange

fix bad comment, change the default vendor ext to be unity's accse

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)

Unmerged revisions

1510. By Jonas G. Drange

fix bad comment, change the default vendor ext to be unity's accse

1509. By Jonas G. Drange

allow for vendor extensions

1508. By Jonas G. Drange

also confirm that the dbus backend was majiggered

1507. By Jonas G. Drange

add mock, use mock

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'tests/autopilot/ubuntu_system_settings/tests/__init__.py'
2--- tests/autopilot/ubuntu_system_settings/tests/__init__.py 2015-08-06 20:05:56 +0000
3+++ tests/autopilot/ubuntu_system_settings/tests/__init__.py 2015-08-25 14:39:55 +0000
4@@ -873,6 +873,8 @@
5 dbusmock.DBusTestCase):
6 """ Base class for language settings tests"""
7
8+ accountsservice_parameters = {}
9+
10 def mock_loginmanager(self):
11 self.mock_server = self.spawn_server(LM_SERVICE, LM_PATH,
12 LM_IFACE, system_bus=True,
13@@ -885,6 +887,24 @@
14
15 self.session_mock.AddMethod(LM_IFACE, 'Reboot', 'b', '', '')
16
17+ def mock_accountsservice(self):
18+ template = os.path.join(
19+ os.path.dirname(__file__), 'accountsservice.py'
20+ )
21+ (self.as_mock, self.as_obj) = self.spawn_server_template(
22+ template, parameters=self.accountsservice_parameters,
23+ stdout=subprocess.PIPE)
24+ self.phablet_mock = dbus.Interface(self.dbus_con.get_object(
25+ 'org.freedesktop.Accounts',
26+ '/org/freedesktop/Accounts/User32011'), dbusmock.MOCK_IFACE)
27+
28+ self.phablet_props = dbus.Interface(
29+ self.dbus_con.get_object(
30+ 'org.freedesktop.Accounts',
31+ '/org/freedesktop/Accounts/User32011'),
32+ 'org.freedesktop.DBus.Properties'
33+ )
34+
35 @classmethod
36 def setUpClass(klass):
37 klass.start_system_bus()
38@@ -892,6 +912,7 @@
39
40 def setUp(self):
41 self.mock_loginmanager()
42+ self.mock_accountsservice()
43
44 super(LanguageBaseTestCase, self).setUp()
45 self.language_page = self.main_view.go_to_language_page()
46@@ -899,6 +920,8 @@
47 def tearDown(self):
48 self.mock_server.terminate()
49 self.mock_server.wait()
50+ self.as_mock.terminate()
51+ self.as_mock.wait()
52 super(LanguageBaseTestCase, self).tearDown()
53
54
55
56=== added file 'tests/autopilot/ubuntu_system_settings/tests/accountsservice.py'
57--- tests/autopilot/ubuntu_system_settings/tests/accountsservice.py 1970-01-01 00:00:00 +0000
58+++ tests/autopilot/ubuntu_system_settings/tests/accountsservice.py 2015-08-25 14:39:55 +0000
59@@ -0,0 +1,283 @@
60+'''accountsservice D-BUS mock template'''
61+
62+# This program is free software; you can redistribute it and/or modify it under
63+# the terms of the GNU Lesser General Public License as published by the Free
64+# Software Foundation; either version 3 of the License, or (at your option) any
65+# later version. See http://www.gnu.org/copyleft/lgpl.html for the full text
66+# of the license.
67+import dbus
68+import dbusmock
69+
70+__author__ = 'Jonas G. Drange'
71+__email__ = 'jonas.drange@canonical.com'
72+__copyright__ = '(c) 2015 Canonical Ltd.'
73+__license__ = 'LGPL 3+'
74+
75+BUS_NAME = 'org.freedesktop.Accounts'
76+MAIN_IFACE = 'org.freedesktop.Accounts'
77+MAIN_OBJ = '/org/freedesktop/Accounts'
78+SYSTEM_BUS = True
79+
80+USER_IFACE = 'org.freedesktop.Accounts.User'
81+USER_OBJ_TMPL = '/org/freedesktop/Accounts/User%d'
82+
83+NOT_IMPLEMENTED = '''raise dbus.exceptions.DBusException(
84+ "org.ofono.Error.NotImplemented")'''
85+
86+_parameters = {}
87+
88+
89+def load(mock, parameters):
90+ global _parameters
91+ _parameters = parameters
92+
93+ # Pin the returned user from FindUserById and FindUserByName to phablet.
94+ # Defaults to False.
95+ mock.always_return_phablet = _parameters.get(
96+ 'always_return_phablet', False
97+ )
98+
99+ mock.vendor_extensions = _parameters.get('vendor_extensions', [
100+ {
101+ 'interface': 'com.canonical.unity.AccountsService',
102+ 'properties': {
103+ 'LauncherItems': [{'defaults': True}],
104+ 'demo-edges': False
105+ }
106+ }
107+ ])
108+
109+ mock.users = _parameters.get('users', [
110+ {
111+ 'Uid': dbus.UInt64(32011),
112+ 'UserName': 'phablet',
113+ 'RealName': 'phablet',
114+ 'AccountType': 1,
115+ 'HomeDirectory': '/home/phablet',
116+ 'Shell': '/bin/bash',
117+ 'Email': '',
118+ 'Language': 'en_GB',
119+ 'FormatsLocale': 'en_GB.UTF-8',
120+ 'InputSources': dbus.Array([], signature='a{ss}'),
121+ 'XSession': '',
122+ 'Location': '',
123+ 'LoginFrequency': 47,
124+ 'LoginTime': dbus.Int64(1440492317),
125+ 'XHasMessages': False,
126+ 'XKeyboardLayouts': dbus.Array([], signature='s'),
127+ 'BackgroundFile':
128+ '/usr/share/unity8/graphics/phone_background.jpg',
129+ 'IconFile': '/home/phablet/.face',
130+ 'Locked': False,
131+ 'PasswordMode': 0,
132+ 'PasswordHint': '',
133+ 'AutomaticLogin': False,
134+ 'SystemAccount': False,
135+ 'LocalAccount': False
136+ }
137+ ])
138+
139+ for user in mock.users:
140+ path = USER_OBJ_TMPL % int(user['Uid'])
141+ mock.AddObject(path, USER_IFACE, user, [])
142+ obj = dbusmock.get_object(path)
143+
144+ for ext in mock.vendor_extensions:
145+ obj.AddProperties(ext['interface'], ext['properties'])
146+
147+
148+@dbus.service.method(MAIN_IFACE,
149+ in_signature='', out_signature='ao')
150+def ListCachedUsers(self):
151+ return [USER_OBJ_TMPL % u['Uid'] for u in self.users]
152+
153+
154+@dbus.service.method(MAIN_IFACE,
155+ in_signature='x', out_signature='o')
156+def FindUserById(self, uid):
157+ if self.always_return_phablet:
158+ return USER_OBJ_TMPL % 32011
159+ else:
160+ for u in self.users:
161+ if u['Uid'] == uid:
162+ return USER_OBJ_TMPL % uid
163+ return ''
164+
165+
166+@dbus.service.method(MAIN_IFACE,
167+ in_signature='s', out_signature='o')
168+def FindUserByName(self, name):
169+ if self.always_return_phablet:
170+ return USER_OBJ_TMPL % 32011
171+ else:
172+ for u in self.users:
173+ if u['UserName'] == name:
174+ return USER_OBJ_TMPL % u['Uid']
175+ return ''
176+
177+
178+@dbus.service.method(MAIN_IFACE,
179+ in_signature='ssi', out_signature='o')
180+def CreateUser(self, name, fullname, accountType):
181+ pass
182+
183+
184+@dbus.service.method(MAIN_IFACE,
185+ in_signature='xb', out_signature='')
186+def DeleteUser(self, id, removeFiles):
187+ pass
188+
189+
190+@dbus.service.method(USER_IFACE,
191+ in_signature='s', out_signature='')
192+def SetUserName(self, name):
193+ self.SetProperty(self.__dbus_object_path__,
194+ USER_IFACE, 'UserName', name)
195+
196+
197+@dbus.service.method(USER_IFACE,
198+ in_signature='s', out_signature='')
199+def SetRealName(self, name):
200+ self.SetProperty(self.__dbus_object_path__,
201+ USER_IFACE, 'RealName', name)
202+
203+
204+@dbus.service.method(USER_IFACE,
205+ in_signature='s', out_signature='')
206+def SetEmail(self, email):
207+ self.SetProperty(self.__dbus_object_path__,
208+ USER_IFACE, 'Email', email)
209+
210+
211+@dbus.service.method(USER_IFACE,
212+ in_signature='s', out_signature='')
213+def SetFormatsLocale(self, formats_locale):
214+ self.SetProperty(self.__dbus_object_path__,
215+ USER_IFACE, 'FormatsLocale', formats_locale)
216+
217+
218+@dbus.service.method(USER_IFACE,
219+ in_signature='aa{ss}', out_signature='')
220+def SetInputSources(self, sources):
221+ self.SetProperty(self.__dbus_object_path__,
222+ USER_IFACE, 'InputSources', sources)
223+
224+
225+@dbus.service.method(USER_IFACE,
226+ in_signature='s', out_signature='')
227+def SetXSession(self, x_session):
228+ self.SetProperty(self.__dbus_object_path__,
229+ USER_IFACE, 'XSession', x_session)
230+
231+
232+@dbus.service.method(USER_IFACE,
233+ in_signature='s', out_signature='')
234+def SetLocation(self, location):
235+ self.SetProperty(self.__dbus_object_path__,
236+ USER_IFACE, 'Location', location)
237+
238+
239+@dbus.service.method(USER_IFACE,
240+ in_signature='s', out_signature='')
241+def SetHomeDirectory(self, homedir):
242+ self.SetProperty(self.__dbus_object_path__,
243+ USER_IFACE, 'HomeDirectory', homedir)
244+
245+
246+@dbus.service.method(USER_IFACE,
247+ in_signature='s', out_signature='')
248+def SetShell(self, shell):
249+ self.SetProperty(self.__dbus_object_path__,
250+ USER_IFACE, 'Shell', shell)
251+
252+
253+@dbus.service.method(USER_IFACE,
254+ in_signature='b', out_signature='')
255+def SetXHasMessages(self, has_messages):
256+ self.SetProperty(self.__dbus_object_path__,
257+ USER_IFACE, 'XHasMessages', has_messages)
258+
259+
260+@dbus.service.method(USER_IFACE,
261+ in_signature='as', out_signature='')
262+def SetXKeyboardLayouts(self, layouts):
263+ self.SetProperty(self.__dbus_object_path__,
264+ USER_IFACE, 'XKeyboardLayouts', layouts)
265+
266+
267+@dbus.service.method(USER_IFACE,
268+ in_signature='s', out_signature='')
269+def SetBackgroundFile(self, filename):
270+ self.SetProperty(self.__dbus_object_path__,
271+ USER_IFACE, 'BackgroundFile', filename)
272+
273+
274+@dbus.service.method(USER_IFACE,
275+ in_signature='s', out_signature='')
276+def SetIconFile(self, filename):
277+ self.SetProperty(self.__dbus_object_path__,
278+ USER_IFACE, 'IconFile', filename)
279+
280+
281+@dbus.service.method(USER_IFACE,
282+ in_signature='b', out_signature='')
283+def SetLocked(self, locked):
284+ self.SetProperty(self.__dbus_object_path__,
285+ USER_IFACE, 'Locked', locked)
286+
287+
288+@dbus.service.method(USER_IFACE,
289+ in_signature='i', out_signature='')
290+def SetAccountType(self, accountType):
291+ self.SetProperty(self.__dbus_object_path__,
292+ USER_IFACE, 'AccountType', accountType)
293+
294+
295+@dbus.service.method(USER_IFACE,
296+ in_signature='i', out_signature='')
297+def SetPasswordMode(self, mode):
298+ self.SetProperty(self.__dbus_object_path__,
299+ USER_IFACE, 'PasswordMode', mode)
300+
301+
302+@dbus.service.method(USER_IFACE,
303+ in_signature='ss', out_signature='')
304+def SetPassword(self, password, hint):
305+ self.SetProperty(self.__dbus_object_path__,
306+ USER_IFACE, 'Password', password)
307+ self.SetProperty(self.__dbus_object_path__,
308+ USER_IFACE, 'PasswordHint', hint)
309+
310+
311+@dbus.service.method(USER_IFACE,
312+ in_signature='s', out_signature='')
313+def BeginSetPassword(self, data):
314+ pass
315+
316+
317+@dbus.service.method(USER_IFACE,
318+ in_signature='a(us)', out_signature='')
319+def ContinueSetPassword(self, passwords):
320+ pass
321+
322+
323+@dbus.service.method(USER_IFACE,
324+ in_signature='b', out_signature='')
325+def SetAutomaticLogin(self, enabled):
326+ self.SetProperty(self.__dbus_object_path__,
327+ USER_IFACE, 'AutomaticLogin', enabled)
328+
329+
330+@dbus.service.method(USER_IFACE,
331+ in_signature='s', out_signature='')
332+def SetLanguage(self, language):
333+ self.SetProperty(
334+ self.__dbus_object_path__, USER_IFACE, 'Language', language)
335+
336+
337+@dbus.service.method(dbusmock.MOCK_IFACE,
338+ in_signature='sssv', out_signature='')
339+def SetProperty(self, path, iface, name, value):
340+ obj = dbusmock.get_object(path)
341+ obj.Set(iface, name, value)
342+ obj.EmitSignal(iface, 'PropertiesChanged', 'a{sv}', [{name: value}])
343
344=== modified file 'tests/autopilot/ubuntu_system_settings/tests/test_language.py'
345--- tests/autopilot/ubuntu_system_settings/tests/test_language.py 2014-09-03 22:01:57 +0000
346+++ tests/autopilot/ubuntu_system_settings/tests/test_language.py 2015-08-25 14:39:55 +0000
347@@ -8,7 +8,7 @@
348 from __future__ import absolute_import
349
350 from autopilot.matchers import Eventually
351-from testtools.matchers import Contains, Equals
352+from testtools.matchers import Contains, Equals, NotEquals
353 from ubuntu_system_settings.tests import LanguageBaseTestCase
354 from ubuntu_system_settings.utils.i18n import ugettext as _
355
356@@ -16,6 +16,10 @@
357 class LanguageTestCase(LanguageBaseTestCase):
358 """Tests for Language Page"""
359
360+ accountsservice_parameters = {
361+ 'always_return_phablet': True
362+ }
363+
364 def test_language_page_title_is_correct(self):
365 """Checks whether Language page is available"""
366 self.assertThat(
367@@ -23,17 +27,33 @@
368 Equals(_('Language & Text')))
369
370 def test_change_language(self):
371+ current_dbus_language = self.phablet_props.Get(
372+ 'org.freedesktop.Accounts.User', 'Language'
373+ )
374+ current_dbus_formats_loc = self.phablet_props.Get(
375+ 'org.freedesktop.Accounts.User', 'FormatsLocale'
376+ )
377 current_language = self.language_page.get_current_language()
378 target_language = current_language + 1
379 self.language_page.change_display_language(target_language)
380
381 self.assertThat(
382- lambda:
383- self.language_page.get_current_language(),
384+ lambda: self.language_page.get_current_language(),
385 Eventually(Equals(target_language)))
386
387- self.addCleanup(
388- self.language_page.change_display_language, current_language)
389+ self.assertThat(
390+ lambda: self.phablet_props.Get(
391+ 'org.freedesktop.Accounts.User', 'Language'
392+ ),
393+ Eventually(NotEquals(current_dbus_language))
394+ )
395+
396+ self.assertThat(
397+ lambda: self.phablet_props.Get(
398+ 'org.freedesktop.Accounts.User', 'FormatsLocale'
399+ ),
400+ Eventually(NotEquals(current_dbus_formats_loc))
401+ )
402
403 self.assertThat(
404 lambda: str(self.session_mock.GetCalls()),

Subscribers

People subscribed via source and target branches