1c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone# Copyright (c) 2013 The Chromium OS Authors. All rights reserved. 29933ab84a71a3bab32cf8e06fbf99b2abef36922Chris Masone# Use of this source code is governed by a BSD-style license that can be 39933ab84a71a3bab32cf8e06fbf99b2abef36922Chris Masone# found in the LICENSE file. 49933ab84a71a3bab32cf8e06fbf99b2abef36922Chris Masone 53d68fe8213ef86684d7911f889d56d1345bf3272Chris Masoneimport gobject, os, sys 664170f8e7053f92f4bbad501c61a352fdabf6d82Chris Masonefrom dbus.mainloop.glib import DBusGMainLoop 7c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone 8c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masonefrom autotest_lib.client.bin import test, utils 99933ab84a71a3bab32cf8e06fbf99b2abef36922Chris Masonefrom autotest_lib.client.common_lib import error 10e0b08e6170b57f90262726eb7f04e059cb47419cHsinyu Chaofrom autotest_lib.client.common_lib.cros import chrome, session_manager 11e0b08e6170b57f90262726eb7f04e059cb47419cHsinyu Chaofrom autotest_lib.client.cros import constants, ownership 1243fd3caa723f9ce37a559c9683dc1948e6e5a396Chris Masone 139933ab84a71a3bab32cf8e06fbf99b2abef36922Chris Masone 14c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masoneclass login_OwnershipTaken(test.test): 155d010aa50a0694d498e8317fd8044e56474ce7edChris Masone """Sign in and ensure that ownership of the device is taken.""" 169933ab84a71a3bab32cf8e06fbf99b2abef36922Chris Masone version = 1 179933ab84a71a3bab32cf8e06fbf99b2abef36922Chris Masone 18c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone 1943fd3caa723f9ce37a559c9683dc1948e6e5a396Chris Masone def setup(self): 2043fd3caa723f9ce37a559c9683dc1948e6e5a396Chris Masone os.chdir(self.srcdir) 2143fd3caa723f9ce37a559c9683dc1948e6e5a396Chris Masone utils.make('OUT_DIR=.') 2243fd3caa723f9ce37a559c9683dc1948e6e5a396Chris Masone 2343fd3caa723f9ce37a559c9683dc1948e6e5a396Chris Masone 24c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone def initialize(self): 253d68fe8213ef86684d7911f889d56d1345bf3272Chris Masone super(login_OwnershipTaken, self).initialize() 26a2b32851e8716f188dde273c73f4c76058bbd289Chris Masone ownership.restart_ui_to_clear_ownership_files() 27a2b32851e8716f188dde273c73f4c76058bbd289Chris Masone if (os.access(constants.OWNER_KEY_FILE, os.F_OK) or 28a2b32851e8716f188dde273c73f4c76058bbd289Chris Masone os.access(constants.SIGNED_POLICY_FILE, os.F_OK)): 29c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone raise error.TestError('Ownership already taken!') 30c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone 31c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone 32c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone def _validate_policy(self, retrieved_policy, username): 33c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone # Pull in protobuf definitions. 34c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone sys.path.append(self.srcdir) 35c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone from chrome_device_policy_pb2 import ChromeDeviceSettingsProto 36c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone from chrome_device_policy_pb2 import UserWhitelistProto 37c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone from device_management_backend_pb2 import PolicyData 38c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone from device_management_backend_pb2 import PolicyFetchResponse 39c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone 40c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone response_proto = PolicyFetchResponse() 41c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone response_proto.ParseFromString(retrieved_policy) 42c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone ownership.assert_has_policy_data(response_proto) 43c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone 44c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone poldata = PolicyData() 45c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone poldata.ParseFromString(response_proto.policy_data) 46c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone ownership.assert_has_device_settings(poldata) 47c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone ownership.assert_username(poldata, username) 48c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone 49c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone polval = ChromeDeviceSettingsProto() 50c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone polval.ParseFromString(poldata.policy_value) 51c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone ownership.assert_new_users(polval, True) 52c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone ownership.assert_users_on_whitelist(polval, (username,)) 539933ab84a71a3bab32cf8e06fbf99b2abef36922Chris Masone 5443fd3caa723f9ce37a559c9683dc1948e6e5a396Chris Masone 559933ab84a71a3bab32cf8e06fbf99b2abef36922Chris Masone def run_once(self): 5664170f8e7053f92f4bbad501c61a352fdabf6d82Chris Masone bus_loop = DBusGMainLoop(set_as_default=True) 573d68fe8213ef86684d7911f889d56d1345bf3272Chris Masone listener = session_manager.OwnershipSignalListener(gobject.MainLoop()) 583d68fe8213ef86684d7911f889d56d1345bf3272Chris Masone listener.listen_for_new_key_and_policy() 59c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone with chrome.Chrome() as cr: 603d68fe8213ef86684d7911f889d56d1345bf3272Chris Masone listener.wait_for_signals(desc='Owner settings written to disk.') 61c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone 6264170f8e7053f92f4bbad501c61a352fdabf6d82Chris Masone sm = session_manager.connect(bus_loop) 63c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone retrieved_policy = sm.RetrievePolicy(byte_arrays=True) 64c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone if retrieved_policy is None: 65c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone raise error.TestFail('Policy not found.') 66c25b8ee227b0194da2bab175bcb67e23b1b41254Chris Masone self._validate_policy(retrieved_policy, cr.username) 67