async def test_spawn_companion(self) -> None:
     tailer = CompanionTailer("idb_path", mock.Mock())
     tailer._log_file_path = mock.Mock()
     with mock.patch(
         "idb.daemon.companion_tailer.asyncio.create_subprocess_exec",
         new=AsyncMock(),
     ) as exec_mock, mock.patch("idb.daemon.companion_tailer.open"):
         process_mock = mock.Mock()
         process_mock.stdout.readline = AsyncMock(return_value=None)
         exec_mock.return_value = process_mock
         await tailer.start()
         exec_mock.assert_called_once_with(
             "idb_path", "--notify", "1", stdout=mock.ANY, stderr=mock.ANY
         )
         self.assertEqual(tailer.process, process_mock)
Пример #2
0
async def start_daemon_server(args: Namespace, logger: Logger) -> Server:
    grpc_port = args.daemon_grpc_port
    notifier_path = args.notifier_path
    companion_manager = CompanionManager(companion_path=notifier_path,
                                         logger=logger)
    boot_manager = BootManager(companion_path=notifier_path)
    grpc_handler = GRPCHandler(companion_manager=companion_manager,
                               boot_manager=boot_manager,
                               logger=logger)
    grpc_server = GRPCServer(handler=grpc_handler, logger=logger)
    await grpc_server.start("localhost", grpc_port)
    servers: List[Server] = [grpc_server]
    if notifier_path:
        companion_tailer = CompanionTailer(notifier_path=notifier_path,
                                           companion_manager=companion_manager)
        await companion_tailer.start()
        servers.append(companion_tailer)
    servers = await plugin.resolve_servers(
        args=args,
        companion_manager=companion_manager,
        boot_manager=boot_manager,
        logger=logger,
        servers=servers,
    )
    logger.debug(f"Started servers {servers}")
    return CompositeServer(servers=servers, logger=logger)
Пример #3
0
 async def test_close(self) -> None:
     tailer = CompanionTailer("idb_path", mock.Mock())
     process_mock = mock.Mock()
     tailer.process = process_mock
     tailer._reading_forever_fut = mock.Mock()
     tailer.close()
     process_mock.terminate.assert_called_once()
     tailer._reading_forever_fut.cancel.assert_called_once()
Пример #4
0
    async def test_read_stream(self) -> None:
        class StreamMock:
            i = 0
            lines: List[bytes] = [
                json.dumps({
                    "udid": "udid",
                    "state": "state",
                    "type": "type",
                    "name": "name",
                    "os_version": "os_version",
                    "architecture": "architecture",
                }).encode("utf-8"),
                json.dumps({
                    "initial_state_ended": True
                }).encode("utf-8"),
            ]

            async def readline(self) -> bytes:
                result = self.lines[self.i]
                self.i += 1
                return result

        manager = CompanionManager(mock.MagicMock())
        tailer = CompanionTailer("idb_path", manager)
        await tailer._read_stream(StreamMock())  # pyre-ignore
        self.assertEqual(
            manager._udid_target_map,
            {
                "udid":
                TargetDescription(
                    udid="udid",
                    name="name",
                    state="state",
                    target_type="type",
                    os_version="os_version",
                    architecture="architecture",
                    companion_info=None,
                    screen_dimensions=None,
                )
            },
        )