blob: 5b9cd43d8a4c11b89ebda5e9131121b4e1fb9ad1 [file] [log] [blame]
#!/usr/bin/env python
# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""
Unit tests for the contents of flag_changer.py.
The test will invoke real devices
"""
import os
import posixpath
import sys
import unittest
import six
if __name__ == '__main__':
sys.path.append(
os.path.abspath(os.path.join(
os.path.dirname(__file__),
'..',
'..',
)))
from devil.android import device_test_case
from devil.android import device_utils
from devil.android import flag_changer
from devil.android.sdk import adb_wrapper
_CMDLINE_FILE = 'dummy-command-line'
class FlagChangerTest(device_test_case.DeviceTestCase):
def setUp(self):
super(FlagChangerTest, self).setUp()
self.adb = adb_wrapper.AdbWrapper(self.serial)
self.adb.WaitForDevice()
self.device = device_utils.DeviceUtils(
self.adb, default_timeout=10, default_retries=0)
# pylint: disable=protected-access
self.cmdline_path = posixpath.join(flag_changer._CMDLINE_DIR, _CMDLINE_FILE)
self.cmdline_path_legacy = posixpath.join(flag_changer._CMDLINE_DIR_LEGACY,
_CMDLINE_FILE)
def tearDown(self):
super(FlagChangerTest, self).tearDown()
self.device.RemovePath([self.cmdline_path, self.cmdline_path_legacy],
force=True,
as_root=True)
def testFlagChanger_restoreFlags(self):
if not self.device.HasRoot():
self.skipTest('Test needs a rooted device')
# Write some custom chrome command line flags.
self.device.WriteFile(self.cmdline_path, 'chrome --some --old --flags')
# Write some more flags on a command line file in the legacy location.
self.device.WriteFile(
self.cmdline_path_legacy, 'some --stray --flags', as_root=True)
self.assertTrue(self.device.PathExists(self.cmdline_path_legacy))
changer = flag_changer.FlagChanger(self.device, _CMDLINE_FILE)
# Legacy command line file is removed, ensuring Chrome picks up the
# right file.
self.assertFalse(self.device.PathExists(self.cmdline_path_legacy))
# Write some new files, and check they are set.
new_flags = ['--my', '--new', '--flags=with special value']
six.assertCountEqual(self, changer.ReplaceFlags(new_flags), new_flags)
# Restore and go back to the old flags.
six.assertCountEqual(self, changer.Restore(),
['--some', '--old', '--flags'])
def testFlagChanger_removeFlags(self):
self.device.RemovePath(self.cmdline_path, force=True)
self.assertFalse(self.device.PathExists(self.cmdline_path))
with flag_changer.CustomCommandLineFlags(self.device, _CMDLINE_FILE,
['--some', '--flags']):
self.assertTrue(self.device.PathExists(self.cmdline_path))
self.assertFalse(self.device.PathExists(self.cmdline_path))
if __name__ == '__main__':
unittest.main()