1a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone# Copyright (c) 2013 The Chromium OS Authors. All rights reserved. 2a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone# Use of this source code is governed by a BSD-style license that can be 3a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone# found in the LICENSE file. 4a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone 564170f8e7053f92f4bbad501c61a352fdabf6d82Chris Masonefrom dbus.mainloop.glib import DBusGMainLoop 664170f8e7053f92f4bbad501c61a352fdabf6d82Chris Masone 7a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masonefrom autotest_lib.client.bin import test 8a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masonefrom autotest_lib.client.common_lib import error 9a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masonefrom autotest_lib.client.common_lib.cros import session_manager 10a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masonefrom autotest_lib.client.cros import cros_ui, cryptohome 11a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone 12a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone 13a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masoneclass login_RetrieveActiveSessions(test.test): 14a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone """Ensure that the session_manager correctly tracks active sessions. 15a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone """ 16a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone version = 1 17a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone 18a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone 19a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone def initialize(self): 20a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone super(login_RetrieveActiveSessions, self).initialize() 21a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone cros_ui.restart() 22a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone 23a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone 24a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone def run_once(self): 2564170f8e7053f92f4bbad501c61a352fdabf6d82Chris Masone bus_loop = DBusGMainLoop(set_as_default=True) 2664170f8e7053f92f4bbad501c61a352fdabf6d82Chris Masone sm = session_manager.connect(bus_loop) 27a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone 2864170f8e7053f92f4bbad501c61a352fdabf6d82Chris Masone cryptohome_proxy = cryptohome.CryptohomeProxy(bus_loop) 29a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone users = ['first_user@nowhere.com', 'second_user@nowhere.com'] 30a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone for user in users: 3164170f8e7053f92f4bbad501c61a352fdabf6d82Chris Masone cryptohome_proxy.ensure_clean_cryptohome_for(user) 32a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone 33a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone if not sm.StartSession(users[0], ''): 34a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone raise error.TestError('Could not start session for ' + users[0]) 35a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone self.__check_for_users_in_actives(users[:1], 36a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone sm.RetrieveActiveSessions()) 37a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone 38a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone if not sm.StartSession(users[1], ''): 39a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone raise error.TestError('Could not start session for ' + users[1]) 40a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone self.__check_for_users_in_actives(users, sm.RetrieveActiveSessions()) 41a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone 42a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone 43a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone def __check_for_users_in_actives(self, users, actives): 44a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone """Checks that only members of users are in actives. 45a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone 46a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone If there are too many (or too few) entries in actives, this method 47a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone raises. Also, if each member of users is not present in the keys of 48a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone actives, then the method also raises. 49a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone 50a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone @param users: iterable of user names to be checked for. 51a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone @param actives: a dictionary of {user: userhash}, the keys of which 52a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone are expected to match users. 53a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone 54a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone @raises error.TestFail: if one of the above criteria is not met. 55a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone """ 56a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone expected_sessions = len(users) 57a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone if len(actives) != expected_sessions: 58a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone raise error.TestFail("%d session(s) should be active, not: %s" % 59a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone (expected_sessions, str(actives))) 60a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone 61a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone if set(users) != set(actives.keys()): 62a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone raise error.TestFail("Expected sessions for %s, got %s" % 63a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone (users, actives)) 64a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone 65a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone 66a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone def cleanup(self): 671e3510a040383790a25e8e54dbcc0e43fc440741Chris Masone # Bounce UI, without waiting for the browser to come back. Best effort. 681e3510a040383790a25e8e54dbcc0e43fc440741Chris Masone cros_ui.stop(allow_fail=True) 69a7c9796f6315ce09669847ad754c065d88a2a3bbChris Masone cros_ui.start(allow_fail=True, wait_for_login_prompt=False) 70