diff options
author | Josh Gao <jmgao@google.com> | 2020-02-27 14:29:38 -0800 |
---|---|---|
committer | Josh Gao <jmgao@google.com> | 2020-03-02 12:44:50 -0800 |
commit | 9ddc42aa936e8843adc90eba8239b7611e058ab1 (patch) | |
tree | b436b118a1af735620a415f9ef1a945f1b7eb931 | |
parent | f6b7731868d9414a504483196fc770aec19d77fe (diff) |
adb: don't hardcode ports in test_adb.
If we get unlucky and something else (or ourselves, in another thread)
beats us to listening on our hardcoded ports, we can deadlock.
Bug: http://b/149829737
Test: ./test_adb.py
Change-Id: I8f14004a6b2e77366abad6e88786ea8941629020
(cherry picked from commit e8829c6bfcf55d9706d38a875bd5764587ee8e86)
-rwxr-xr-x | adb/test_adb.py | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/adb/test_adb.py b/adb/test_adb.py index 3d6de2665..c872fb0f7 100755 --- a/adb/test_adb.py +++ b/adb/test_adb.py @@ -33,6 +33,11 @@ import time import unittest import warnings +def find_open_port(): + # Find an open port. + with socket.socket() as s: + s.bind(("localhost", 0)) + return s.getsockname()[1] @contextlib.contextmanager def fake_adbd(protocol=socket.AF_INET, port=0): @@ -126,10 +131,7 @@ def adb_server(): This creates an ADB server and returns the port it's listening on. """ - port = 5038 - # Kill any existing server on this non-default port. - subprocess.check_output(["adb", "-P", str(port), "kill-server"], - stderr=subprocess.STDOUT) + port = find_open_port() read_pipe, write_pipe = os.pipe() if sys.platform == "win32": @@ -224,10 +226,7 @@ class ServerTest(unittest.TestCase): # adb server, this also tests whether multiple instances of the adb # server conflict on adb.log. - port = 5038 - # Kill any existing server on this non-default port. - subprocess.check_output(["adb", "-P", str(port), "kill-server"], - stderr=subprocess.STDOUT) + port = find_open_port() try: # We get warnings for unclosed files for the subprocess's pipes, @@ -289,12 +288,8 @@ class ServerTest(unittest.TestCase): """ Tests that the server can start up on ::1 and that it's accessible """ - server_port = 5037 - # Kill any existing server on this non-default port. - subprocess.check_output( - ["adb", "-P", str(server_port), "kill-server"], - stderr=subprocess.STDOUT, - ) + + server_port = find_open_port() try: subprocess.check_output( ["adb", "-L", "tcp:[::1]:{}".format(server_port), "server"], |