| # Copyright 2019 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| import time |
| |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.client.cros.enterprise import enterprise_policy_base |
| |
| |
| class policy_DeviceAllowBluetooth( |
| enterprise_policy_base.EnterprisePolicyTest): |
| """ |
| Test for the DeviceAllowBluetooth policy. |
| |
| If the policy is set to True/None then bluetooth button is available in |
| status tray menu. If the policy is set to False then bluetooth button |
| is not available. |
| |
| """ |
| version = 1 |
| _POLICY = 'DeviceAllowBluetooth' |
| |
| def _is_bluetooth_button_present(self, ext): |
| bt_present = ext.EvaluateJavaScript(""" |
| var root; |
| chrome.automation.getDesktop(r => root = r); |
| bt = root.find({attributes: {role: "button", name: /Bluetooth/}}); |
| bt; |
| """) |
| if bt_present is None: |
| return False |
| return True |
| |
| def bluetooth_check(self, case): |
| # Click the status tray button in bottom right. |
| ext = self.cr.autotest_ext |
| ext.ExecuteJavaScript(""" |
| chrome.automation.getDesktop(root => { |
| var button_to_click = root.find( |
| {attributes: { |
| role: "button", name: /Status tray/}}).doDefault(); |
| }); |
| """) |
| time.sleep(1) |
| |
| bluetooth_button = self._is_bluetooth_button_present(ext) |
| |
| if case is False: |
| if bluetooth_button: |
| raise error.TestFail( |
| 'Bluetooth option is available and it should not be') |
| else: |
| if not bluetooth_button: |
| raise error.TestFail( |
| 'Bluetooth option should be available but it is not.') |
| |
| def run_once(self, case): |
| """ |
| Entry point of this test. |
| |
| @param case: True, False, or None for the value of the policy. |
| |
| """ |
| self.setup_case( |
| device_policies={self._POLICY: case}, |
| enroll=True) |
| self.bluetooth_check(case) |