# 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"
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, **args_dict)

job.parallel_simple(run, machines)
