1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved. 2a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 3a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)# found in the LICENSE file. 4a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 5a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)"""Tests for the AdbWrapper class.""" 6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import os 8a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import tempfile 9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import time 10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import unittest 11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)from pylib.device import adb_wrapper 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)from pylib.device import device_errors 14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class TestAdbWrapper(unittest.TestCase): 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def setUp(self): 19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) devices = adb_wrapper.AdbWrapper.GetDevices() 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) assert devices, 'A device must be attached' 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._adb = devices[0] 22a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._adb.WaitForDevice() 23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) @staticmethod 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) def _MakeTempFile(contents): 26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) """Make a temporary file with the given contents. 27a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Args: 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) contents: string to write to the temporary file. 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) Returns: 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) The absolute path to the file. 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) """ 34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) fi, path = tempfile.mkstemp() 35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) with os.fdopen(fi, 'wb') as f: 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) f.write(contents) 37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return path 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def testShell(self): 40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) output = self._adb.Shell('echo test', expect_rc=0) 41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertEqual(output.strip(), 'test') 42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) output = self._adb.Shell('echo test') 43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertEqual(output.strip(), 'test') 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertRaises(device_errors.AdbCommandFailedError, self._adb.Shell, 45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 'echo test', expect_rc=1) 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def testPushPull(self): 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) path = self._MakeTempFile('foo') 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) device_path = '/data/local/tmp/testfile.txt' 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) local_tmpdir = os.path.dirname(path) 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._adb.Push(path, device_path) 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertEqual(self._adb.Shell('cat %s' % device_path), 'foo') 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._adb.Pull(device_path, local_tmpdir) 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) with open(os.path.join(local_tmpdir, 'testfile.txt'), 'r') as f: 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertEqual(f.read(), 'foo') 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def testInstall(self): 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) path = self._MakeTempFile('foo') 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertRaises(device_errors.AdbCommandFailedError, self._adb.Install, 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch path) 61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def testForward(self): 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertRaises(device_errors.AdbCommandFailedError, self._adb.Forward, 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 0, 0) 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def testUninstall(self): 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.assertRaises(device_errors.AdbCommandFailedError, self._adb.Uninstall, 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 'some.nonexistant.package') 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def testRebootWaitForDevice(self): 71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._adb.Reboot() 72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) print 'waiting for device to reboot...' 73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) while self._adb.GetState() == 'device': 74a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) time.sleep(1) 75a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._adb.WaitForDevice() 76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self.assertEqual(self._adb.GetState(), 'device') 77a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) print 'waiting for package manager...' 78a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) while 'package:' not in self._adb.Shell('pm path android'): 79a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) time.sleep(1) 80a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def testRootRemount(self): 82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._adb.Root() 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) while True: 84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) try: 85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._adb.Shell('start') 86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) break 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch except device_errors.AdbCommandFailedError: 88a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) time.sleep(1) 89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._adb.Remount() 90a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 92a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)if __name__ == '__main__': 93a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) unittest.main() 94