Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(915)

Side by Side Diff: build/android/pylib/local/device/local_device_instrumentation_test_run.py

Issue 2688913003: Add shared preference file modification option to instrumentation test runner (Closed)
Patch Set: Address more comments Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import logging 5 import logging
6 import os 6 import os
7 import posixpath 7 import posixpath
8 import re 8 import re
9 import time 9 import time
10 10
11 from devil.android import device_errors 11 from devil.android import device_errors
12 from devil.android import flag_changer 12 from devil.android import flag_changer
13 from devil.android.sdk import shared_prefs
13 from devil.utils import reraiser_thread 14 from devil.utils import reraiser_thread
14 from pylib import valgrind_tools 15 from pylib import valgrind_tools
15 from pylib.android import logdog_logcat_monitor 16 from pylib.android import logdog_logcat_monitor
16 from pylib.base import base_test_result 17 from pylib.base import base_test_result
17 from pylib.instrumentation import instrumentation_test_instance 18 from pylib.instrumentation import instrumentation_test_instance
18 from pylib.local.device import local_device_environment 19 from pylib.local.device import local_device_environment
19 from pylib.local.device import local_device_test_run 20 from pylib.local.device import local_device_test_run
20 from pylib.utils import logdog_helper 21 from pylib.utils import logdog_helper
21 from py_trace_event import trace_event 22 from py_trace_event import trace_event
22 from py_utils import contextlib_ext 23 from py_utils import contextlib_ext
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 if self._test_instance.flags: 103 if self._test_instance.flags:
103 if not self._test_instance.package_info: 104 if not self._test_instance.package_info:
104 logging.error("Couldn't set debug app: no package info") 105 logging.error("Couldn't set debug app: no package info")
105 elif not self._test_instance.package_info.package: 106 elif not self._test_instance.package_info.package:
106 logging.error("Couldn't set debug app: no package defined") 107 logging.error("Couldn't set debug app: no package defined")
107 else: 108 else:
108 dev.RunShellCommand(['am', 'set-debug-app', '--persistent', 109 dev.RunShellCommand(['am', 'set-debug-app', '--persistent',
109 self._test_instance.package_info.package], 110 self._test_instance.package_info.package],
110 check_return=True) 111 check_return=True)
111 112
113 def edit_shared_prefs():
114 for pref in self._test_instance.edit_shared_prefs:
115 prefs = shared_prefs.SharedPrefs(dev, pref['package'],
116 pref['filename'])
117 prefs.Load()
118 for key in pref.get('remove', []):
119 try:
120 prefs.Remove(key)
121 except KeyError:
122 logging.warning("Attempted to remove non-existent key %s", key)
123 for key, value in pref.get('set', {}).iteritems():
124 if isinstance(value, bool):
125 prefs.SetBoolean(key, value)
126 elif isinstance(value, basestring):
127 prefs.SetString(key, value)
128 elif isinstance(value, long) or isinstance(value, int):
129 prefs.SetLong(key, value)
130 elif isinstance(value, list):
131 prefs.SetStringSet(key, value)
132 else:
133 raise ValueError("Given invalid value type %s for key %s" % (
134 str(type(value)), key))
135 prefs.Commit()
136
112 def push_test_data(): 137 def push_test_data():
113 device_root = posixpath.join(dev.GetExternalStoragePath(), 138 device_root = posixpath.join(dev.GetExternalStoragePath(),
114 'chromium_tests_root') 139 'chromium_tests_root')
115 host_device_tuples_substituted = [ 140 host_device_tuples_substituted = [
116 (h, local_device_test_run.SubstituteDeviceRoot(d, device_root)) 141 (h, local_device_test_run.SubstituteDeviceRoot(d, device_root))
117 for h, d in host_device_tuples] 142 for h, d in host_device_tuples]
118 logging.info('instrumentation data deps:') 143 logging.info('instrumentation data deps:')
119 for h, d in host_device_tuples_substituted: 144 for h, d in host_device_tuples_substituted:
120 logging.info('%r -> %r', h, d) 145 logging.info('%r -> %r', h, d)
121 dev.PushChangedFiles(host_device_tuples_substituted, 146 dev.PushChangedFiles(host_device_tuples_substituted,
(...skipping 10 matching lines...) Expand all
132 logging.error("Couldn't set flags: no cmdline_file") 157 logging.error("Couldn't set flags: no cmdline_file")
133 else: 158 else:
134 self._CreateFlagChangerIfNeeded(dev) 159 self._CreateFlagChangerIfNeeded(dev)
135 logging.debug('Attempting to set flags: %r', 160 logging.debug('Attempting to set flags: %r',
136 self._test_instance.flags) 161 self._test_instance.flags)
137 self._flag_changers[str(dev)].AddFlags(self._test_instance.flags) 162 self._flag_changers[str(dev)].AddFlags(self._test_instance.flags)
138 163
139 valgrind_tools.SetChromeTimeoutScale( 164 valgrind_tools.SetChromeTimeoutScale(
140 dev, self._test_instance.timeout_scale) 165 dev, self._test_instance.timeout_scale)
141 166
142 steps = (install_apk, push_test_data, create_flag_changer) 167 steps = (install_apk, edit_shared_prefs, push_test_data,
168 create_flag_changer)
143 if self._env.concurrent_adb: 169 if self._env.concurrent_adb:
144 reraiser_thread.RunAsync(steps) 170 reraiser_thread.RunAsync(steps)
145 else: 171 else:
146 for step in steps: 172 for step in steps:
147 step() 173 step()
148 if self._test_instance.store_tombstones: 174 if self._test_instance.store_tombstones:
149 tombstones.ClearAllTombstones(dev) 175 tombstones.ClearAllTombstones(dev)
150 176
151 self._env.parallel_devices.pMap( 177 self._env.parallel_devices.pMap(
152 individual_device_set_up, 178 individual_device_set_up,
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
399 timeout = v 425 timeout = v
400 break 426 break
401 else: 427 else:
402 logging.warning('Using default 1 minute timeout for %s', test_name) 428 logging.warning('Using default 1 minute timeout for %s', test_name)
403 timeout = 60 429 timeout = 60
404 430
405 timeout *= cls._GetTimeoutScaleFromAnnotations(annotations) 431 timeout *= cls._GetTimeoutScaleFromAnnotations(annotations)
406 432
407 return timeout 433 return timeout
408 434
OLDNEW
« no previous file with comments | « build/android/pylib/instrumentation/instrumentation_test_instance.py ('k') | build/android/test_runner.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698