# Copyright 2017 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

AUTHOR = "dhaddock, Chromium OS"
NAME = "autoupdate_ForcedOOBEUpdate.full"
PURPOSE = "Test forced update at OOBE."
TIME = "MEDIUM"
TEST_CATEGORY = "Functional"
TEST_CLASS = "platform"
TEST_TYPE = "server"
# TODO(crbug.com/877107) This test is sometimes causing DUTs to download
# and install production images from Omaha, which breaks the DUT.
# Disable the test until we find a better way to stop that event.
# ATTRIBUTES = "suite:bvt-perbuild"
DOC = """
This tests the forced autoupdate flow at OOBE.

Debugging steps:
This test cannot be debugged locally easily because
1. Using a devserver on your workstation is blocked by SNAX
2. The test relies on reading a job_repo_url which is only set by runs
initiated in the lab.

You will need to use a lab DUT and a lab devserver but kick it off from your
workstation. You can start by going to cautotest and locking a DUT.

You will need to pass a job_repo_url param to test_that.

The test needs to be able to ssh into devservers. To ssh into lab devservers
you need to download the chromium key file from:
chromeos_internal//chromeos-admin/puppet/modules/users/files/chromeos-test/
ssh/chromium

Save the file to ~/.ssh/ and run chmod 600 on it.
Then add these lines to your ~/.ssh/config

Host <devserver hostname>
  GSSAPITrustDns no
  GSSAPIDelegateCredentials no
  GSSAPIAuthentication no
  ForwardAgent no
  ForwardX11 no
  PreferredAuthentications publickey
  StrictHostKeyChecking no
  User chromeos-test
  IdentityFile %d/.ssh/chromium

Check that you can now ssh into a lab devserver without a password.
Copy the ssh files to your chroot's .ssh folder to ssh from there.

test_that <hostname>.cros autoupdate_ForcedOOBEUpdate --args="job_repo_url='http://<IP>:<port>/static/<board>-release/RXX-XXXX.X.X/autotest/packages'"
"""

from autotest_lib.client.common_lib import utils

args_dict = utils.args_to_dict(args)

def run(machine):
    host = hosts.create_host(machine)
    job.run_test('autoupdate_ForcedOOBEUpdate', host=host, full_payload=True,
                 **args_dict)

job.parallel_simple(run, machines)
