network_ShillInitScripts.py revision f2d52f19e042df144e7d53431fb5fe7d3888ec67
1e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewartimport grp 2e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewartimport logging 3e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewartimport mock_flimflam 4e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewartimport os 5e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewartimport pwd 6e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewartimport stat 7e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewartimport time 8e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewartimport utils 9e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 10e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewartfrom autotest_lib.client.bin import test 11e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewartfrom autotest_lib.client.common_lib import error 12e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 13e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewartclass network_ShillInitScripts(test.test): 14e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ Test that shill init scripts perform as expected. Use the 15e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart real filesystem (doing a best effort to archive and restore 16e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart current state). The shill manager is stopped and a proxy 17e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart DBus entity is installed to accept DBus messages that are sent 18e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart via "dbus-send" in the shill startup scripts. However, the 19e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart "real" shill is still also started from time to time and we 20e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart check that it is run with the right command line arguments. 21e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ 22e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart version = 1 23e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart save_directories = [ '/var/cache/shill', 24e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart '/var/cache/flimflam', 25e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart '/var/run/shill', 26e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart '/home/chronos/user/shill', 27e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart '/home/chronos/user/flimflam', 28e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart '/var/run/state/logged-in', 29e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart '/var/run/dhcpcd', 30e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart '/var/lib/dhcpcd', 31e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart '/home/chronos/.disable_shill' ] 32e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart fake_user = 'not-a-real-user@chromium.org' 33e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart saved_config = '/tmp/network_ShillInitScripts_saved_config.tgz' 34e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart cryptohome_path_command = 'cryptohome-path' 35e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart flimflam_user_profile = '/home/chronos/user/flimflam/flimflam.profile' 36e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart old_shill_user_profile = '/home/chronos/user/shill/shill.profile' 379f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart guest_shill_user_profile_dir = '/var/run/shill/guest_user_profile/shill' 38e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart magic_header = '# --- shill init file test magic header ---' 39e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 40e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def start_shill(self): 41e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart utils.system('start shill') 42e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 43e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def stop_shill(self): 44e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart # Halt the running shill instance. 45e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart utils.system('stop shill', ignore_status=True) 46e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 47e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart for attempt in range(10): 48e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart if not self.find_pid('shill'): 49e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart break 50e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart time.sleep(1) 51e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart else: 52e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart error.TestFail('Shill process does not appear to be dying') 53e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 549f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart def login(self, user=None): 55e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart # Note: "start" blocks until the "script" block completes. 569f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart utils.system('start login CHROMEOS_USER=%s' % (user or self.fake_user)) 579f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart 589f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart def login_guest(self): 599f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart # For guest login, session-manager passes an empty CHROMEOS_USER arg. 609f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart self.login('""') 61e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 62e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def logout(self): 63e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart # Note: "start" blocks until the "script" block completes. 64e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart utils.system('start logout') 65e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 66e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def start_test(self): 67e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.stop_shill() 68e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 69e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart # Deduce the cryptohome directory name for our fake user. 70e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.cryptohome_dir = utils.system_output( 71e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart '%s system %s' % (self.cryptohome_path_command, self.fake_user)) 72e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 73e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart # Just in case this hash actually exists, add this to the list of 74e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart # saved directories. 75e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.save_directories.append(self.cryptohome_dir) 76e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 77e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart # Archive the system state we will be modifying, then remove them. 78e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart utils.system('tar zcvf %s --directory / --ignore-failed-read %s' 79e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart ' 2>/dev/null' % 80e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart (self.saved_config, ' '.join(self.save_directories))) 81e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart utils.system('rm -rf %s' % ' '.join(self.save_directories), 82e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart ignore_status=True) 83e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 84e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart # Create the fake user's system cryptohome directory. 85e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir(self.cryptohome_dir) 86e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.new_shill_user_profile_dir = ('%s/shill' % self.cryptohome_dir) 87e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.new_shill_user_profile = ('%s/shill.profile' % 88e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.new_shill_user_profile_dir) 89e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 90e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart # Start a mock flimflam instance to accept and log DBus calls. 91e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.mock_flimflam = mock_flimflam.MockFlimflam() 92e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.mock_flimflam.start() 93e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 94e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def erase_state(self): 95e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart utils.system('rm -rf %s' % ' '.join(self.save_directories)) 96e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir(self.cryptohome_dir) 97e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 98e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def end_test(self): 99e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.mock_flimflam.quit() 100e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.mock_flimflam.join() 101e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.erase_state() 102e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart utils.system('tar zxvf %s --directory /' % self.saved_config) 103e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart utils.system('rm -f %s' % self.saved_config) 104e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.start_shill() 105e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 106e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def assure(self, must_be_true, assertion_name): 107e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart if not must_be_true: 108e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart raise error.TestFail('Assertion failed: %s' % assertion_name) 109e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 110e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def assure_path_owner(self, path, owner): 111e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(pwd.getpwuid(os.stat(path).st_uid)[0] == owner, 112e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Path %s is owned by %s' % (path, owner)) 113e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 114e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def assure_path_group(self, path, group): 115e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(grp.getgrgid(os.stat(path).st_gid)[0] == group, 116e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Path %s is group-owned by %s' % (path, group)) 117e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 118e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def assure_exists(self, path, assertion_name): 119e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(os.path.exists(path), '%s exists' % assertion_name) 120e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 121e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def assure_is_dir(self, path, assertion_name): 122e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_exists(path, assertion_name) 123e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(stat.S_ISDIR(os.lstat(path).st_mode), 124e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart '%s is a directory' % assertion_name) 125e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 126e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def assure_is_link(self, path, assertion_name): 127e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_exists(path, assertion_name) 128e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(stat.S_ISLNK(os.lstat(path).st_mode), 129e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart '%s is a symbolic link' % assertion_name) 130e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 131e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def assure_is_link_to(self, path, pointer, assertion_name): 132e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_is_link(path, assertion_name) 133e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(os.readlink(path) == pointer, 134e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart '%s is a symbolic link to %s' % (assertion_name, pointer)) 135e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 136e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def assure_method_calls(self, expected_method_calls, assertion_name): 137e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart method_calls = self.mock_flimflam.get_method_calls() 138e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart if len(expected_method_calls) != len(method_calls): 139e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(false, '%s: method call count does not match' % 140e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart assertion_name) 141e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart for expected, actual in zip(expected_method_calls, method_calls): 142e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(actual.method == expected[0], 143e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart '%s: method %s matches expected %s' % 144e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart (assertion_name, actual.method, expected[0])) 145e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(actual.argument == expected[1], 146e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart '%s: argument %s matches expected %s' % 147e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart (assertion_name, actual.argument, expected[1])) 148e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 149e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def create_file_with_contents(self, filename, contents): 150e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart file(filename, 'w').write(contents) 151e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 152e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def touch(self, filename): 153e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.create_file_with_contents(filename, '') 154e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 155e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def create_new_shill_user_profile(self, contents): 156e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir(self.new_shill_user_profile_dir) 157e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.create_file_with_contents(self.new_shill_user_profile, contents) 158e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 159e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def create_old_shill_user_profile(self, contents): 160e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir('/home/chronos/user/shill') 161e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.create_file_with_contents(self.old_shill_user_profile, contents) 162e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 163e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def create_flimflam_user_profile(self, contents): 164e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir('/home/chronos/user/flimflam') 165e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.create_file_with_contents(self.flimflam_user_profile, contents) 166e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 167e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def file_contents(self, filename): 168e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart return file(filename).read() 169e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 170e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def find_pid(self, process_name): 171e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart return utils.system_output('pgrep %s' % process_name, 172e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart ignore_status=True).split('\n') 173e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 174e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def get_commandline(self): 175e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart pid = self.find_pid('shill')[0] 176e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart return file('/proc/%s/cmdline' % pid).read().split('\0') 177e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 178e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def run_once(self): 179e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.start_test() 180e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart try: 181e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.run_tests() 182e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart finally: 183e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart # Stop any shill instances started during testing. 184e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.stop_shill() 185e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.end_test() 186e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 187e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def run_tests(self): 188e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart for test in (self.test_start_shill, 189e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.test_start_logged_in, 190e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.test_start_port_flimflam_profile, 191e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.test_login, 1929f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart self.test_login_guest, 193e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.test_login_profile_exists, 194e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.test_login_old_shill_profile, 195e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.test_login_invalid_old_shill_profile, 196e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.test_login_ignore_old_shill_profile, 197e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.test_login_flimflam_profile, 198e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.test_login_ignore_flimflam_profile, 199e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.test_login_prefer_old_shill_profile, 200e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.test_logout): 201e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart test() 202e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.stop_shill() 203e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.erase_state() 204e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 205e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def test_start_shill(self): 206e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ Test all created pathnames during shill startup. Ensure the 207e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart push argument is not provided by default. 208e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ 209e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.touch('/home/chronos/.disable_shill') 210e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.start_shill() 2119f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart self.assure_is_dir('/var/run/shill', 'Shill run directory') 212e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_is_dir('/var/lib/dhcpcd', 'dhcpcd lib directory') 213e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_path_owner('/var/lib/dhcpcd', 'dhcp') 214e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_path_group('/var/lib/dhcpcd', 'dhcp') 215e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_is_dir('/var/run/dhcpcd', 'dhcpcd run directory') 216e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_path_owner('/var/run/dhcpcd', 'dhcp') 217e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_path_group('/var/run/dhcpcd', 'dhcp') 218e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(not os.path.exists('/home/chronos/.disable_shill'), 219e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Shill disable file does not exist') 220e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure('--push=~chronos/shill' not in self.get_commandline(), 221e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Shill command line does not contain push argument') 222e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 223e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def test_start_logged_in(self): 224e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ The "--push" argument should be added if the shill is started 225e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart while a user is logged in. 226e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ 227f2d52f19e042df144e7d53431fb5fe7d3888ec67Paul Stewart os.mkdir('/var/run/shill') 228f2d52f19e042df144e7d53431fb5fe7d3888ec67Paul Stewart os.mkdir('/var/run/shill/user_profiles') 229f2d52f19e042df144e7d53431fb5fe7d3888ec67Paul Stewart self.create_new_shill_user_profile('') 230f2d52f19e042df144e7d53431fb5fe7d3888ec67Paul Stewart os.symlink(self.new_shill_user_profile_dir, 231f2d52f19e042df144e7d53431fb5fe7d3888ec67Paul Stewart '/var/run/shill/user_profiles/chronos') 232e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.touch('/var/run/state/logged-in') 233e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.start_shill() 234e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart command_line = self.get_commandline() 235e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure('--push=~chronos/shill' in command_line, 236e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Shill command line contains push argument: %s' % 237e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart repr(command_line)) 238e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.unlink('/var/run/state/logged-in') 239e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 240e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def test_start_port_flimflam_profile(self): 241e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ Startup should move an old flimflam profile into place if 242e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart a shill profile does not already exist. 243e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ 244e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir('/var/cache/flimflam') 245e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart flimflam_profile = '/var/cache/flimflam/default.profile' 246e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.create_file_with_contents(flimflam_profile, self.magic_header) 247e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart shill_profile = '/var/cache/shill/default.profile' 248e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.start_shill() 249e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(not os.path.exists(flimflam_profile), 250e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Flimflam profile no longer exists') 251e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(os.path.exists(shill_profile), 252e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Shill profile exists') 253e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(self.magic_header in self.file_contents(shill_profile), 254e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Shill default profile contains our magic header') 255e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 256e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def test_start_ignore_flimflam_profile(self): 257e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ Startup should ignore an old flimflam profile if a shill profile 258e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart already exists. 259e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ 260e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir('/var/cache/flimflam') 261e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir('/var/cache/shill') 262e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart flimflam_profile = '/var/cache/flimflam/default.profile' 263e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.create_file_with_contents(flimflam_profile, self.magic_header) 264e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart shill_profile = '/var/cache/shill/default.profile' 265e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.touch(shill_profile) 266e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.start_shill() 267e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(os.path.exists(flimflam_profile), 268e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Flimflam profile still exists') 269e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(self.magic_header not in self.file_contents(shill_profile), 270e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Shill default profile does not contain our magic header') 271e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 272e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def test_login(self): 273e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ Login should create a profile directory, then create and push 274e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart a user profile, given no previous state. 275e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ 276e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir('/var/run/shill') 277e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.login() 278e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(not os.path.exists(self.flimflam_user_profile), 279e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Flimflam user profile does not exist') 280e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(not os.path.exists(self.old_shill_user_profile), 281e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Old shill user profile does not exist') 282e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(not os.path.exists(self.new_shill_user_profile), 283e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'New shill user profile does not exist') 284e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart # The DBus "CreateProfile" method should have been handled 285e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart # by our mock_flimflam instance, so the profile directory 286e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart # should not have actually been created. 287e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_is_dir(self.new_shill_user_profile_dir, 288e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'New shill user profile directory') 289e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_is_dir('/var/run/shill/user_profiles', 290e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Shill profile root') 291e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_is_link_to('/var/run/shill/user_profiles/chronos', 292e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.new_shill_user_profile_dir, 293e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Shill profile link') 294e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_method_calls([[ 'CreateProfile', '~chronos/shill' ], 295e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart [ 'PushProfile', '~chronos/shill' ]], 296e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'CreateProfile and PushProfile are called') 297e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 2989f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart def test_login_guest(self): 2999f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart """ Login should create a temporary profile directory in /var/run, 3009f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart instead of using one within the root directory for normal users. 3019f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart """ 3029f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart os.mkdir('/var/run/shill') 3039f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart self.login_guest() 3049f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart self.assure(not os.path.exists(self.flimflam_user_profile), 3059f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart 'Flimflam user profile does not exist') 3069f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart self.assure(not os.path.exists(self.old_shill_user_profile), 3079f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart 'Old shill user profile does not exist') 3089f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart self.assure(not os.path.exists(self.new_shill_user_profile), 3099f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart 'New shill user profile does not exist') 3109f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart self.assure(not os.path.exists(self.new_shill_user_profile_dir), 3119f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart 'New shill user profile directory') 3129f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart self.assure_is_dir(self.guest_shill_user_profile_dir, 3139f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart 'shill guest user profile directory') 3149f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart self.assure_is_dir('/var/run/shill/user_profiles', 3159f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart 'Shill profile root') 3169f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart self.assure_is_link_to('/var/run/shill/user_profiles/chronos', 3179f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart self.guest_shill_user_profile_dir, 3189f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart 'Shill profile link') 3199f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart self.assure_method_calls([[ 'CreateProfile', '~chronos/shill' ], 3209f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart [ 'PushProfile', '~chronos/shill' ]], 3219f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart 'CreateProfile and PushProfile are called') 3229f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart 323e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def test_login_profile_exists(self): 324e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ Login script should only push (and not create) the user profile 325e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart if a user profile already exists. 326e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ 327e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir('/var/run/shill') 328e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir(self.new_shill_user_profile_dir) 329e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.touch(self.new_shill_user_profile) 330e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.login() 331e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_method_calls([[ 'PushProfile', '~chronos/shill' ]], 332e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Only PushProfile is called') 333e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 334e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def test_login_old_shill_profile(self): 335e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ Login script should move an old shill user profile into place 336e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart if a new one does not exist. 337e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ 338e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir('/var/run/shill') 339e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.create_old_shill_user_profile(self.magic_header) 340e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.login() 341e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(not os.path.exists(self.old_shill_user_profile), 342e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Old shill user profile no longer exists') 343e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(not os.path.exists('/home/chronos/user/shill'), 344e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Old shill user profile directory no longer exists') 345e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_exists(self.new_shill_user_profile, 346e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'New shill profile') 347e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(self.magic_header in 348e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.file_contents(self.new_shill_user_profile), 349e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Shill user profile contains our magic header') 350e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_method_calls([[ 'PushProfile', '~chronos/shill' ]], 351e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Only PushProfile is called') 352e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 353e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def make_symlink(self, path): 354e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.symlink('/etc/hosts', path) 355e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 356e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def make_special_file(self, path): 357e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mknod(path, stat.S_IFIFO) 358e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 359e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def make_bad_owner(self, path): 360e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.touch(path) 361e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.lchown(path, 1000, 1000) 362e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 363e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def test_login_invalid_old_shill_profile(self): 364e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ Login script should ignore non-regular files or files not owned 365e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart by the correct user. The original file should be removed. 366e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ 367e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir('/var/run/shill') 368e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart for file_creation_method in (self.make_symlink, 369e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.make_special_file, 370e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir, 371e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.make_bad_owner): 372e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir('/home/chronos/user/shill') 373e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart file_creation_method(self.old_shill_user_profile) 374e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.login() 375e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(not os.path.exists(self.old_shill_user_profile), 376e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Old shill user profile no longer exists') 377e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(not os.path.exists('/home/chronos/user/shill'), 378e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Old shill user profile directory no longer exists') 379e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(not os.path.exists(self.new_shill_user_profile), 380e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'New shill profile was not created') 381e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_method_calls([[ 'CreateProfile', '~chronos/shill' ], 382e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart [ 'PushProfile', '~chronos/shill' ]], 383e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'CreateProfile and PushProfile are called') 384e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 385e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def test_login_ignore_old_shill_profile(self): 386e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ Login script should ignore an old shill user profile if a new one 387e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart exists. 388e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ 389e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir('/var/run/shill') 390e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.create_new_shill_user_profile('') 391e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.create_old_shill_user_profile(self.magic_header) 392e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.login() 393e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(os.path.exists(self.old_shill_user_profile), 394e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Old shill user profile still exists') 395e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_exists(self.new_shill_user_profile, 396e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'New shill profile') 397e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(self.magic_header not in 398e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.file_contents(self.new_shill_user_profile), 399e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Shill user profile does not contain our magic header') 400e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_method_calls([[ 'PushProfile', '~chronos/shill' ]], 401e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Only PushProfile is called') 402e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 403e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def test_login_flimflam_profile(self): 404e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ Login script should move a flimflam user profile into place 405e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart if a shill one does not exist. 406e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ 407e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir('/var/run/shill') 408e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.create_flimflam_user_profile(self.magic_header) 409e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.login() 410e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(not os.path.exists(self.flimflam_user_profile), 411e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Flimflam user profile no longer exists') 412e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(not os.path.exists('/home/chronos/user/flimflam'), 413e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Flimflam user profile directory no longer exists') 414e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_exists(self.new_shill_user_profile, 415e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'New shill profile') 416e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(self.magic_header in 417e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.file_contents(self.new_shill_user_profile), 418e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Shill user profile contains our magic header') 419e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_method_calls([[ 'PushProfile', '~chronos/shill' ]], 420e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Only PushProfile is called') 421e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 422e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def test_login_ignore_flimflam_profile(self): 423e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ Login script should ignore an old flimflam user profile if a new 424e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart one exists. 425e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ 426e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir('/var/run/shill') 427e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.create_flimflam_user_profile(self.magic_header) 428e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.create_new_shill_user_profile('') 429e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.login() 430e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_exists(self.new_shill_user_profile, 431e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'New shill profile') 432e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(self.magic_header not in 433e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.file_contents(self.new_shill_user_profile), 434e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Shill user profile does not contain our magic header') 435e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_method_calls([[ 'PushProfile', '~chronos/shill' ]], 436e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Only PushProfile is called') 437e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 438e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def test_login_prefer_old_shill_profile(self): 439e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ Login script should use the old shill user profile in preference 440e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart to a flimflam user profile if the new user profile does not 441e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart exist. 442e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart """ 443e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart os.mkdir('/var/run/shill') 444e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.create_flimflam_user_profile('') 445e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.create_old_shill_user_profile(self.magic_header) 446e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.login() 447e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(not os.path.exists(self.flimflam_user_profile), 448e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Flimflam user profile was removed') 449e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(not os.path.exists(self.old_shill_user_profile), 450e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Old shill user profile no longer exists') 451e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_exists(self.new_shill_user_profile, 452e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'New shill profile') 453e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(self.magic_header in 454e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.file_contents(self.new_shill_user_profile), 455e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Shill user profile contains our magic header') 456e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_method_calls([[ 'PushProfile', '~chronos/shill' ]], 457e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Only PushProfile is called') 458e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 459e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart def test_logout(self): 4609f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart os.makedirs('/var/run/shill/user_profiles') 4619f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart os.makedirs(self.guest_shill_user_profile_dir) 462e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.touch('/var/run/state/logged-in') 463e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.logout() 464e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(not os.path.exists('/var/run/state/logged-in'), 465e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'Logged-in file was removed') 466e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure(not os.path.exists('/var/run/shill/user_profiles'), 467e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'User profile directory was removed') 4689f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart self.assure(not os.path.exists(self.guest_shill_user_profile_dir), 4699f29def08d6ff2f472aee180bee3bc22f8880c74Paul Stewart 'Guest user profile directory was removed') 470e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart self.assure_method_calls([[ 'PopProfile', '~chronos/shill' ]], 471e10e707a71de78209daaba21e0d3bb7d951ba4afPaul Stewart 'PopProfile is called') 472