"""ADB device reboot stress test.

usage: adb_reboot_stress.py [-h] [-d float] [-c int]

optional arguments:
  -h, --help                     Show this help message and exit.
  -d float, --duration float     Duration of time to run stress test (in hrs).
  -c int, --count int            Number of devices/emulators connected.
  -p, --progress                 Print progress.
  --log-dir                      Base directory under which logs will be placed.
"""

import os
import subprocess
import time

import util


def test_reboot(dut):
    """Verify that rebooting the device is successful.

    Args:
      dut: Device under test.

    Returns:
      True if successful, else False.
    """
    arg = 'adb -s ' + str(dut) + ' reboot'
    process = subprocess.Popen(arg.split(), stdout=subprocess.PIPE)
    output, error = process.communicate()
    success = True
    for line in output.split('\n'):
        if line.startswith('adb: error'):
            success = False
            print('\nERROR:\nFAILED to reboot device: ' + str(dut))
            print(output)

    return success


def wait_for_reboot(devices):
    """Wait for devices to become available again after reboot.

    Args:
      devices: List of devices to wait for.

    Returns:
      True if successful, else False.
    """
    # We currently just sleep for 2 minutes.
    # It would be better to check (perhaps via `adb shell`)
    # whether the devices are available again, with an appropriate timeout.
    time.sleep(2*60)
    return True


def test_device(dut):
    return test_reboot(dut) and wait_for_reboot(dut)


if __name__ == '__main__':
    args = util.parse_args()
    util.launcher(test_device, args.duration, args.count, is_print_progress=args.progress,
                  log_dir=os.path.join(args.log_dir, 'adb_reboot_stress'))