aboutsummaryrefslogtreecommitdiff
path: root/catapult/devil/devil/android/flag_changer_devicetest.py
blob: 4926ae3a651ec24edbcc1312212cda221d2e8217 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/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

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']
    self.assertItemsEqual(changer.ReplaceFlags(new_flags), new_flags)

    # Restore and go back to the old flags.
    self.assertItemsEqual(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()