78cc20f00730c5f017550bec2e494523bc052c42 |
|
01-Sep-2016 |
Josh Gao <jmgao@google.com> |
libcutils: try all addresses in socket_network_client_timeout. If a connection fails to an address that resolves to multiple sockaddrs, attempt connecting to subsequent addresses if the initial connection fails to a reason other than timeout. This is primarily useful for localhost, which can resolve to both an IPv4 and and IPv6 address. Also, add an adb test to verify that this behavior. Bug: http://b/30313466 Change-Id: Ib2df706a66cf6ef8c1097fdfd7aedb69b8df2d6e Test: python test_adb.py (+ the test fails before this patch)
/system/core/adb/test_adb.py
|
351ecd15b29f0ce528ffac119640b9c01874562b |
|
15-Oct-2015 |
Spencer Low <CompareAndSwap@gmail.com> |
adb: fix adb client running out of sockets on Windows Background ========== On Windows, if you run "adb shell exit" in a loop in two windows, eventually the adb client will be unable to connect to the adb server. I think connect() is returning WSAEADDRINUSE: "Only one usage of each socket address (protocol/network address/port) is normally permitted. (10048)". The Windows System Event Log may also show Event 4227, Tcpip. Netstat output is filled with: # for the adb server TCP 127.0.0.1:5037 127.0.0.1:65523 TIME_WAIT # for the adb client TCP 127.0.0.1:65523 127.0.0.1:5037 TIME_WAIT The error probably means that the client is running out of free address:port pairs. The first netstat line is unavoidable, but the second line exists because the adb client is not waiting for orderly/graceful shutdown of the socket, and that is apparently required on Windows to get rid of the second line. For more info, see https://github.com/CompareAndSwap/SocketCloseTest . This is exacerbated by the fact that "adb shell exit" makes 4 socket connections to the adb server: 1) host:version, 2) host:features, 3) host:version (again), 4) shell:exit. Also exacerbating is the fact that the adb protocol is length-prefixed so the client typically does not have to 'read() until zero' which effectively waits for orderly/graceful shutdown. The Fix ======= Introduce a function, ReadOrderlyShutdown(), that should be called in the adb client to wait for the server to close its socket, before closing the client socket. I reviewed all code where the adb client makes a connection to the adb server and added ReadOrderlyShutdown() when it made sense. I wasn't able to add it to the following: * interactive_shell: this doesn't matter because this is interactive and thus can't be run fast enough to use up ports. * adb sideload: I couldn't get enough test coverage and I don't think this is being called frequently enough to be a problem. * send_shell_command, backup, adb_connect_command, adb shell, adb exec-out, install_multiple_app, adb_send_emulator_command: These already wait for server socket shutdown since they already call recv() until zero. * restore, adb exec-in: protocol design can't have the server close first. * adb start-server: no fd is actually returned * create_local_service_socket, local_connect_arbitrary_ports, connect_device: probably called rarely enough not to be a problem. Also in this change =================== * Clarify comments in when adb_shutdown() is called before exit(). * add some missing adb_close() in adb sideload. * Fixup error handling and comments in adb_send_emulator_command(). * Make SyncConnection::SendQuit return a success boolean. * Add unittest for adb emu kill command. This gets code coverage over this very careful piece of code. Change-Id: Iad0b1336f5b74186af2cd35f7ea827d0fa77a17c Signed-off-by: Spencer Low <CompareAndSwap@gmail.com>
/system/core/adb/test_adb.py
|
1ce06087db2f7c7e39e30cdff6d307e38a24fc9e |
|
17-Sep-2015 |
Spencer Low <CompareAndSwap@gmail.com> |
adb unittest for win32 handle inheritance adb.cpp: launch_server() has a long comment about how stdin/stdout/stderr handles have to be made non-inheritable to prevent hangs in callers to adb.exe. It would be disastrous to do this wrong, and I've modified this code, so here's a unittest to verify that I'm doing it right. The test also runs fine on unix. Change-Id: I3672c3066bc7498635c19212f9e5c50757942439 Signed-off-by: Spencer Low <CompareAndSwap@gmail.com>
/system/core/adb/test_adb.py
|
8e1fdd7806363af51d7bfa7134fcef66523bcc56 |
|
25-Jul-2015 |
Dan Albert <danalbert@google.com> |
Create adb Python package. This is mostly just the AdbWrapper that we used in our tests, but I've cleaned up the API to be a little more Pythonic (mostly in the sense that commands are passed as lists rather than strings that are shlex.split() by the shell command), and implemented the workaround error checking for adb shell. Move the tests up a directory. Having them buried a level down has only been annoying. There are now two files containing Python tests. test_device.py contains tests specifically checking the AndroidDevice API, and test_adb.py checks the ADB client program. To run both, use python -m unittest discover [-v] Change-Id: Ibd158c528d31126a5b048bd00bc93039dbc468bc
/system/core/adb/test_adb.py
|