зеркало из https://github.com/mozilla/gecko-dev.git
Bug 793739 - mirror mozbase to m-c for week of Sept 24, 2012 @ b12b008846
;r=jhammel
This commit is contained in:
Родитель
86a811afdc
Коммит
4ebb07022f
|
@ -19,12 +19,6 @@ import sys
|
|||
from fnmatch import fnmatch
|
||||
from optparse import OptionParser
|
||||
|
||||
version = '0.5.4' # package version
|
||||
try:
|
||||
from setuptools import setup
|
||||
except:
|
||||
setup = None
|
||||
|
||||
# we need relpath, but it is introduced in python 2.6
|
||||
# http://docs.python.org/library/os.path.html
|
||||
try:
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -7,77 +7,77 @@ from devicemanagerSUT import DeviceManagerSUT
|
|||
import StringIO
|
||||
|
||||
class DroidMixin(object):
|
||||
"""Mixin to extend DeviceManager with Android-specific functionality"""
|
||||
"""Mixin to extend DeviceManager with Android-specific functionality"""
|
||||
|
||||
def launchApplication(self, appName, activityName, intent, url=None,
|
||||
extras=None):
|
||||
"""
|
||||
Launches an Android application
|
||||
returns:
|
||||
success: True
|
||||
failure: False
|
||||
"""
|
||||
# only one instance of an application may be running at once
|
||||
if self.processExist(appName):
|
||||
return False
|
||||
def launchApplication(self, appName, activityName, intent, url=None,
|
||||
extras=None):
|
||||
"""
|
||||
Launches an Android application
|
||||
returns:
|
||||
success: True
|
||||
failure: False
|
||||
"""
|
||||
# only one instance of an application may be running at once
|
||||
if self.processExist(appName):
|
||||
return False
|
||||
|
||||
acmd = [ "am", "start", "-W", "-n", "%s/%s" % (appName, activityName)]
|
||||
acmd = [ "am", "start", "-W", "-n", "%s/%s" % (appName, activityName)]
|
||||
|
||||
if intent:
|
||||
acmd.extend(["-a", intent])
|
||||
if intent:
|
||||
acmd.extend(["-a", intent])
|
||||
|
||||
if extras:
|
||||
for (key, val) in extras.iteritems():
|
||||
if type(val) is int:
|
||||
extraTypeParam = "--ei"
|
||||
elif type(val) is bool:
|
||||
extraTypeParam = "--ez"
|
||||
else:
|
||||
extraTypeParam = "--es"
|
||||
acmd.extend([extraTypeParam, str(key), str(val)])
|
||||
if extras:
|
||||
for (key, val) in extras.iteritems():
|
||||
if type(val) is int:
|
||||
extraTypeParam = "--ei"
|
||||
elif type(val) is bool:
|
||||
extraTypeParam = "--ez"
|
||||
else:
|
||||
extraTypeParam = "--es"
|
||||
acmd.extend([extraTypeParam, str(key), str(val)])
|
||||
|
||||
if url:
|
||||
acmd.extend(["-d", url])
|
||||
if url:
|
||||
acmd.extend(["-d", url])
|
||||
|
||||
# shell output not that interesting and debugging logs should already
|
||||
# show what's going on here... so just create an empty memory buffer
|
||||
# and ignore
|
||||
shellOutput = StringIO.StringIO()
|
||||
if self.shell(acmd, shellOutput) == 0:
|
||||
return True
|
||||
# shell output not that interesting and debugging logs should already
|
||||
# show what's going on here... so just create an empty memory buffer
|
||||
# and ignore
|
||||
shellOutput = StringIO.StringIO()
|
||||
if self.shell(acmd, shellOutput) == 0:
|
||||
return True
|
||||
|
||||
return False
|
||||
return False
|
||||
|
||||
def launchFennec(self, appName, intent="android.intent.action.VIEW",
|
||||
mozEnv=None, extraArgs=None, url=None):
|
||||
"""
|
||||
Convenience method to launch Fennec on Android with various debugging
|
||||
arguments
|
||||
WARNING: FIXME: This would go better in mozrunner. Please do not
|
||||
use this method if you are not comfortable with it going away sometime
|
||||
in the near future
|
||||
returns:
|
||||
success: True
|
||||
failure: False
|
||||
"""
|
||||
extras = {}
|
||||
def launchFennec(self, appName, intent="android.intent.action.VIEW",
|
||||
mozEnv=None, extraArgs=None, url=None):
|
||||
"""
|
||||
Convenience method to launch Fennec on Android with various debugging
|
||||
arguments
|
||||
WARNING: FIXME: This would go better in mozrunner. Please do not
|
||||
use this method if you are not comfortable with it going away sometime
|
||||
in the near future
|
||||
returns:
|
||||
success: True
|
||||
failure: False
|
||||
"""
|
||||
extras = {}
|
||||
|
||||
if mozEnv:
|
||||
# mozEnv is expected to be a dictionary of environment variables: Fennec
|
||||
# itself will set them when launched
|
||||
for (envCnt, (envkey, envval)) in enumerate(mozEnv.iteritems()):
|
||||
extras["env" + str(envCnt)] = envkey + "=" + envval
|
||||
if mozEnv:
|
||||
# mozEnv is expected to be a dictionary of environment variables: Fennec
|
||||
# itself will set them when launched
|
||||
for (envCnt, (envkey, envval)) in enumerate(mozEnv.iteritems()):
|
||||
extras["env" + str(envCnt)] = envkey + "=" + envval
|
||||
|
||||
# Additional command line arguments that fennec will read and use (e.g.
|
||||
# with a custom profile)
|
||||
if extraArgs:
|
||||
extras['args'] = " ".join(extraArgs)
|
||||
# Additional command line arguments that fennec will read and use (e.g.
|
||||
# with a custom profile)
|
||||
if extraArgs:
|
||||
extras['args'] = " ".join(extraArgs)
|
||||
|
||||
return self.launchApplication(appName, ".App", intent, url=url,
|
||||
extras=extras)
|
||||
return self.launchApplication(appName, ".App", intent, url=url,
|
||||
extras=extras)
|
||||
|
||||
class DroidADB(DeviceManagerADB, DroidMixin):
|
||||
pass
|
||||
pass
|
||||
|
||||
class DroidSUT(DeviceManagerSUT, DroidMixin):
|
||||
pass
|
||||
pass
|
||||
|
|
|
@ -68,13 +68,13 @@ class SUTCli(object):
|
|||
'help_args': '<remote>',
|
||||
'help': 'list files on device'
|
||||
},
|
||||
'rm': { 'function': lambda file: self.dm.removeFile(file),
|
||||
'rm': { 'function': lambda f: self.dm.removeFile(f),
|
||||
'min_args': 1,
|
||||
'max_args': 1,
|
||||
'help_args': '<remote>',
|
||||
'help': 'remove file from device'
|
||||
},
|
||||
'rmdir': { 'function': lambda dir: self.dm.removeDir(dir),
|
||||
'rmdir': { 'function': lambda d: self.dm.removeDir(d),
|
||||
'min_args': 1,
|
||||
'max_args': 1,
|
||||
'help_args': '<remote>',
|
||||
|
|
|
@ -7,19 +7,32 @@ import socket
|
|||
import mozdevice
|
||||
from threading import Thread
|
||||
import unittest
|
||||
import sys
|
||||
import time
|
||||
|
||||
class BasicTest(unittest.TestCase):
|
||||
|
||||
def _serve_thread(self):
|
||||
conn, addr = self._sock.accept()
|
||||
conn.send("$>\x00")
|
||||
conn = None
|
||||
while self.commands:
|
||||
if not conn:
|
||||
conn, addr = self._sock.accept()
|
||||
conn.send("$>\x00")
|
||||
(command, response) = self.commands.pop(0)
|
||||
data = conn.recv(1024).strip()
|
||||
self.assertEqual(data, command)
|
||||
# send response and prompt separately to test for bug 789496
|
||||
conn.send("%s\n" % response)
|
||||
conn.send("$>\x00")
|
||||
# FIXME: Improve the mock agent, since overloading the meaning
|
||||
# of 'response' is getting confusing.
|
||||
if response is None:
|
||||
conn.shutdown(socket.SHUT_RDWR)
|
||||
conn.close()
|
||||
conn = None
|
||||
elif type(response) is int:
|
||||
time.sleep(response)
|
||||
else:
|
||||
conn.send("%s\n" % response)
|
||||
conn.send("$>\x00")
|
||||
|
||||
def _serve(self, commands):
|
||||
self.commands = commands
|
||||
|
@ -37,7 +50,25 @@ class BasicTest(unittest.TestCase):
|
|||
("cd /mnt/sdcard/tests", ""),
|
||||
("cwd", "/mnt/sdcard/tests"),
|
||||
("ver", "SUTAgentAndroid Version XX")])
|
||||
|
||||
|
||||
port = self._sock.getsockname()[1]
|
||||
mozdevice.DroidSUT.debug = 4
|
||||
d = mozdevice.DroidSUT("127.0.0.1", port=port)
|
||||
thread.join()
|
||||
|
||||
def test_reconnect(self):
|
||||
"""Tests DeviceManager initialization."""
|
||||
self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
self._sock.bind(("127.0.0.1", 0))
|
||||
self._sock.listen(1)
|
||||
|
||||
thread = self._serve([("testroot", "/mnt/sdcard"),
|
||||
("cd /mnt/sdcard/tests", ""),
|
||||
("cwd", None),
|
||||
("cd /mnt/sdcard/tests", ""),
|
||||
("cwd", "/mnt/sdcard/tests"),
|
||||
("ver", "SUTAgentAndroid Version XX")])
|
||||
|
||||
port = self._sock.getsockname()[1]
|
||||
mozdevice.DroidSUT.debug = 4
|
||||
d = mozdevice.DroidSUT("127.0.0.1", port=port)
|
||||
|
@ -60,5 +91,44 @@ class BasicTest(unittest.TestCase):
|
|||
dm = mozdevice.DroidSUT("127.0.0.1", port=port)
|
||||
thread.join()
|
||||
|
||||
def test_timeout_normal(self):
|
||||
"""Tests DeviceManager timeout, normal case."""
|
||||
self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
self._sock.bind(("127.0.0.1", 0))
|
||||
self._sock.listen(1)
|
||||
|
||||
thread = self._serve([("testroot", "/mnt/sdcard"),
|
||||
("cd /mnt/sdcard/tests", ""),
|
||||
("cwd", "/mnt/sdcard/tests"),
|
||||
("ver", "SUTAgentAndroid Version XX"),
|
||||
("rm /mnt/sdcard/tests/test.txt", "Removed the file")])
|
||||
|
||||
port = self._sock.getsockname()[1]
|
||||
mozdevice.DroidSUT.debug = 4
|
||||
d = mozdevice.DroidSUT("127.0.0.1", port=port)
|
||||
data = d.removeFile('/mnt/sdcard/tests/test.txt')
|
||||
self.assertEqual(data, "Removed the file")
|
||||
thread.join()
|
||||
|
||||
def test_timeout_timeout(self):
|
||||
"""Tests DeviceManager timeout, timeout case."""
|
||||
self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
self._sock.bind(("127.0.0.1", 0))
|
||||
self._sock.listen(1)
|
||||
|
||||
thread = self._serve([("testroot", "/mnt/sdcard"),
|
||||
("cd /mnt/sdcard/tests", ""),
|
||||
("cwd", "/mnt/sdcard/tests"),
|
||||
("ver", "SUTAgentAndroid Version XX"),
|
||||
("rm /mnt/sdcard/tests/test.txt", 3)])
|
||||
|
||||
port = self._sock.getsockname()[1]
|
||||
mozdevice.DroidSUT.debug = 4
|
||||
d = mozdevice.DroidSUT("127.0.0.1", port=port)
|
||||
d.default_timeout = 1
|
||||
data = d.removeFile('/mnt/sdcard/tests/test.txt')
|
||||
self.assertEqual(data, None)
|
||||
thread.join()
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
|
Загрузка…
Ссылка в новой задаче