| # Copyright 2015 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. |
| |
| |
| import logging |
| import os.path |
| import subprocess |
| import tempfile |
| |
| def copy_private_bucket(host, bucket, filename, destination, timeout_s=30): |
| """ |
| Copies files/directories from a private google storage location to the DUT. |
| Uses a test server box as a temp location. |
| We do this because it's easier than trying to get the client DUT |
| authenticated. The Test server is already authenticated, so copy to the test |
| server and then send file to client. |
| |
| @param host: Autotest host machine object. |
| @param bucket: path to name of gs bucket. |
| @param filename: string, name of the file or dir in 'bucket' to copy. |
| @param destination: path in DUT where the file should be copied to. |
| @param timeout_s: int, timeout in seconds to wait for copy to finish |
| |
| """ |
| |
| assert (bucket.startswith('gs://')) |
| |
| src = os.path.join(bucket, filename) |
| |
| log("SOURCE path: " + src) |
| |
| with tempfile.NamedTemporaryFile(suffix='.wpr') as tempsource: |
| tempsourcepath = tempsource.name |
| |
| args = ['gsutil', 'cp', src, tempsourcepath] |
| log("Copying to temporary test server destination : " + tempsourcepath) |
| |
| p = subprocess.Popen(args, |
| stdout=subprocess.PIPE, |
| stderr=subprocess.PIPE) |
| |
| output = p.communicate() |
| |
| log("STDOUT | " + output[0]) |
| log("STDERR | " + output[1]) |
| |
| if p.returncode: |
| raise subprocess.CalledProcessError(returncode=p.returncode, |
| cmd=args) |
| |
| host.send_file(tempsourcepath, os.path.join(destination, filename)) |
| log("Sent file to DUT : " + host.hostname) |
| |
| |
| def log(message): |
| """ |
| Wraps around logging.debug() and adds a prefix to show that messages are |
| coming from this utility. |
| |
| @param message: string, the message to log. |
| |
| """ |
| message = "| gs wrapper | " + message |
| logging.debug(message) |