Add android-netsim self test

This commit is contained in:
Josh Wu
2025-08-21 14:07:36 +08:00
parent bb2aa8229d
commit cd37027795
2 changed files with 30 additions and 6 deletions

View File

@@ -145,8 +145,6 @@ def publish_grpc_port(grpc_port: int, instance_number: int) -> bool:
async def open_android_netsim_controller_transport( async def open_android_netsim_controller_transport(
server_host: Optional[str], server_port: int, options: dict[str, str] server_host: Optional[str], server_port: int, options: dict[str, str]
) -> Transport: ) -> Transport:
if not server_port:
raise TransportSpecError('invalid port')
if server_host == '_' or not server_host: if server_host == '_' or not server_host:
server_host = 'localhost' server_host = 'localhost'
@@ -168,14 +166,16 @@ async def open_android_netsim_controller_transport(
await self.pump_loop() await self.pump_loop()
except asyncio.CancelledError: except asyncio.CancelledError:
logger.debug('Pump task canceled') logger.debug('Pump task canceled')
self.done.set_result(None) if not self.done.done():
self.done.set_result(None)
async def pump_loop(self): async def pump_loop(self):
while True: while True:
request = await self.context.read() request = await self.context.read()
if request == grpc.aio.EOF: if request == grpc.aio.EOF:
logger.debug('End of request stream') logger.debug('End of request stream')
self.done.set_result(None) if not self.done.done():
self.done.set_result(None)
return return
# If we're not initialized yet, wait for a init packet. # If we're not initialized yet, wait for a init packet.
@@ -220,6 +220,8 @@ async def open_android_netsim_controller_transport(
async def wait_for_termination(self): async def wait_for_termination(self):
await self.done await self.done
server_address = f'{server_host}:{server_port}'
class Server(PacketStreamerServicer, ParserSource): class Server(PacketStreamerServicer, ParserSource):
def __init__(self): def __init__(self):
PacketStreamerServicer.__init__(self) PacketStreamerServicer.__init__(self)
@@ -230,8 +232,8 @@ async def open_android_netsim_controller_transport(
# a server listening on that port, we get an exception. # a server listening on that port, we get an exception.
self.grpc_server = grpc.aio.server(options=(('grpc.so_reuseport', 0),)) self.grpc_server = grpc.aio.server(options=(('grpc.so_reuseport', 0),))
add_PacketStreamerServicer_to_server(self, self.grpc_server) add_PacketStreamerServicer_to_server(self, self.grpc_server)
self.grpc_server.add_insecure_port(f'{server_host}:{server_port}') self.port = self.grpc_server.add_insecure_port(server_address)
logger.debug(f'gRPC server listening on {server_host}:{server_port}') logger.debug('gRPC server listening on %s', server_address)
async def start(self): async def start(self):
logger.debug('Starting gRPC server') logger.debug('Starting gRPC server')

View File

@@ -206,6 +206,28 @@ async def test_unix_connection_abstract():
await server_transport.close() await server_transport.close()
# -----------------------------------------------------------------------------
@pytest.mark.parametrize(
"address,",
("127.0.0.1",),
)
async def test_android_netsim_connection(address):
controller_transport = await transport.open_transport(
"android-netsim:_:0,mode=controller"
)
port = controller_transport.source.port
_make_controller_from_transport(controller_transport)
client_transport = await transport.open_transport(
f"android-netsim:{address}:{port},mode=host"
)
client_device = _make_device_from_transport(client_transport)
await client_device.power_on()
await client_transport.close()
await controller_transport.close()
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
if __name__ == '__main__': if __name__ == '__main__':
test_parser() test_parser()