#!/usr/bin/env python3
# Copyright 2020 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Set up ADB auth with ARC.

A test ADB key is pre-installed in ARC on CrOS test image (go/tast-adb-key).
This script installs the private ADB key (paired with the pre-installed key)
to local ADB server.
"""

import os
from pathlib import Path
import subprocess
import sys

THIS_FILE = Path(__file__).resolve()
SOURCE_ROOT = THIS_FILE.parents[2]
TRADEFED_PATH = SOURCE_ROOT / "src/third_party/autotest/files/server/cros/tradefed"

def main(argv):
    # We import tradefed_constants.py and use private ADB key in it.
    sys.path.append(str(TRADEFED_PATH))
    import tradefed_constants  # pylint: disable=import-error

    print("INFO: Installing private ADB key to ~/.android/arc_adbkey")
    android_path = Path("~/.android").expanduser()
    android_path.mkdir(exist_ok=True)
    adbkey_path = android_path / "arc_adbkey"
    adbkey_path.write_text(tradefed_constants.PRIVATE_KEY, encoding="utf-8")

    print("INFO: Restarting ADB server with the new key path.")
    os.environ["ADB_VENDOR_KEYS"] = str(adbkey_path)
    subprocess.call(["adb", "kill-server"])
    subprocess.call(["adb", "start-server"])

    print("INFO: ADB set up complete. You are ready to run adb connect.")


if __name__ == "__main__":
    sys.exit(main(sys.argv[1:]))
