Delete download_test_build.py

The file was added in 2013, and performs the same function as crosdl.py
but with fewer options. If anyone is still using this, they should
switch to crosdl.py.

BUG=chromium:1031760
TEST=None

Change-Id: Icdb632604dd3d8a2983a9cf245a457e1aa51457d
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crostestutils/+/1959067
Tested-by: Greg Edelston <gredelston@google.com>
Reviewed-by: Katherine Threlkeld <kathrelkeld@chromium.org>
Reviewed-by: Aviv Keshet <akeshet@chromium.org>
Commit-Queue: Greg Edelston <gredelston@google.com>
diff --git a/provingground/download_test_build.py b/provingground/download_test_build.py
deleted file mode 100755
index 0d9c462..0000000
--- a/provingground/download_test_build.py
+++ /dev/null
@@ -1,398 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-# Copyright (c) 2013 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 os
-import subprocess as sub
-import sys
-import xml.parsers.expat
-
-
-"""
-This script can be used to download chromeos test images from the the cloud
-storage. We assume that the cloud storage path remains similar all the time.
-
-eg: gs://chromeos-releases/dev-channel/link/4162.0.0/
-    ChromeOS-R29-4162.0.0-link.zip
-
-So passing the above value to 'gstuil cp ' will download
-the relevant CrOS image.
-
-After downloading the file we uzip the file and wait for the user
-to give the path to which the image should be copied.
-
-eg: /dev/sdb
-
-This script will create a build_defaults.xml file with the defaults info in
-the scripts folder. So please run this from a folder with a write permissions.
-
-"""
-
-
-def run_command(command, shell=False):
-    """ Run a given command using subprocess.
-
-    @param command: The command to run. Should be a list.
-    @param shell: Flag to use bash to run the command.
-
-    @return out: Output of the process.
-    """
-    process = sub.Popen(command, stdout=sub.PIPE,
-                        stderr=sub.PIPE, shell=shell)
-    (out, err) = process.communicate()
-
-    if err and 'Copying gs://chromeos-releases/' not in err:
-        raise Exception('We got an error %s' % err)
-    return out
-
-
-class defaults():
-    # TODO: Have a defaults file to read/write into it.
-    channel_list = ['dev', 'beta', 'stable']
-    device_list = ['x86-mario', 'x86-zgb', 'x86-alex', 'daisy', 'stout',
-                   'link', 'butterfly', 'stout', 'stumpy', 'parrot', 'lumpy',]
-    default_dict = {'channel': None, 'device': None,
-                    'branch': None, 'version': None}
-    defaults_file = 'build_defaults.xml'
-
-
-    def __init__(self):
-        if not os.path.exists(self.defaults_file):
-            self._create_defaults()
-
-
-    def set_defaults(self, channel, device, version, branch):
-        """Set the new defaults.
-
-        @param channel: default channel to be saved.
-        @param device: defalut device to be saved.
-        @param version: default version to be saved.
-        @param branch: default branch to be saved.
-        """
-        self.default_dict['channel'] = channel
-        self.default_dict['branch'] = branch
-        self.default_dict['version'] = version
-        self.default_dict['device'] = device
-        self._update_defaults()
-
-
-    def _create_defaults_element(self, initial=True):
-        """Create a defaults element to be added to the xml file.
-
-        @param initial: Flag to check if we are creating or updating the
-                        defaults.
-
-        @return defaults_element: Element with defaults attributes to be added.
-        """
-        defaults_element = '<defaults '
-        for key in self.default_dict.keys():
-            if initial or self.default_dict[key]:
-                defaults_element += '%s="%s" ' % (key, self.default_dict[key])
-        defaults_element += ('></defaults>\n')
-        return defaults_element
-
-
-    def _update_defaults(self):
-        """Update the defaults list in database/xml."""
-        defaults_element = self._create_defaults_element(initial=False)
-        lines = open(self.defaults_file, 'r').readlines()
-        os.remove(self.defaults_file)
-        fin = open(self.defaults_file, 'w')
-        for line in lines:
-            if '<defaults ' in line:
-                fin.write(defaults_element)
-                break  # this will always be the last line
-            else:
-                fin.write(line)
-        fin.close()
-
-
-    def _create_defaults(self):
-        """Create all the defaults."""
-        print 'Creating Defaults file.'
-        fout = open(self.defaults_file, 'wb')
-        root = '<feed xmlns=\'http://www.w3.org/2005/Atom\' xml:lang=\'en\'>\n'
-        fout.write(root)
-        channel_element = '<channel>'
-        for channel in self.channel_list:
-            channel_element += '%s, ' % channel
-        channel_element += ('</channel>\n')
-        fout.write(channel_element)
-        device_element = '<device>'
-        for device in self.device_list:
-            device_element += '%s, ' % device
-        device_element += ('</device>\n')
-        fout.write(device_element)
-        defaults_element = self._create_defaults_element()
-        fout.write(defaults_element)
-        fout.close()
-
-
-    def previous_defaults(self):
-        """Get the default values."""
-        # Parse and read the xml data
-        self.read_xml()
-        return self.default_dict
-
-
-    def start_element(self, name, attrs):
-        if name == 'defaults':
-            self.default_dict = attrs
-
-
-    def char_data(self, data):
-        if 'dev' in data:
-            self.add_default_channel(data)
-        if 'link' in data:
-            self.add_default_devices(data)
-
-
-    def read_xml(self):
-        """Read and parse the xml file."""
-        fin = open(self.defaults_file, 'r')
-        parse_data = fin.read()
-        parser = xml.parsers.expat.ParserCreate()
-        parser.StartElementHandler = self.start_element
-        parser.CharacterDataHandler = self.char_data
-        parser.Parse(parse_data)
-
-
-    def channel(self):
-        """Read the default channel from the logs"""
-        return self.channel_list
-
-
-    def add_default_channel(self, data):
-        """Add a channel if it does not exist in defaults."""
-        for channel in data.split(','):
-            if channel and (channel not in self.channel_list):
-                self.channel_list.append(channel)
-
-
-    def add_default_devices(self, data):
-        """Add a device if it does not exist in defaults."""
-        for device in data.split(','):
-            if device and device not in self.device_list:
-                self.device_list.append(device)
-
-
-    def element_in_list(self, element, element_list):
-        for old_element in element_list:
-            if element in old_element:
-                return False
-        return True
-
-
-class download_image():
-    # This script will work until the image path remains unchanged. If the
-    # cloud team decides to change the default path to the images, change this
-    # path constant accordingly. This is used build_source.
-    image_path = 'gs://chromeos-releases/%s-channel/%s/%s/ChromeOS-%s-%s-%s.zip'
-
-    def file_check(self, dest, folder=True, action=False):
-        """ Check if a file or folder exists.
-        This is used in two places, first to check if we have the test
-        folder and second to check if we already have the file to download.
-
-        @param dest: The path to look for. Should be a string.
-        @param folder: Flag to indicate if the path is a directory or not.
-        @param action: Flag to indicate if an action is required.
-                       eg: Creation or deletion.
-        """
-        if folder and not os.path.exists(dest):
-           if action:
-               os.makedirs(dest)
-               print 'Created directory %s' % dest
-           else:
-               raise Exception('The path %s does not exist' % dest)
-        elif folder and not os.path.isdir(dest):
-           raise Exception('The path %s exists and is not a folder.' % dest)
-        elif not folder and os.path.exists(dest):
-           zip_file = os.path.basename(dest)
-           file_type = 'file'
-           if os.path.isdir(zip_file):
-              file_type = 'folder'
-           if action:
-               print ('The %s %s exists or is downloaded in %s' %
-                     (os.path.basename(dest), file_type, os.path.dirname(dest)))
-               delete_flag = raw_input('Do you want to remove the existing?'
-                                       ' (Y/N): ')
-               if delete_flag.lower() == 'y':
-                   print 'Removing the file %s' % dest
-                   os.remove(dest)
-               else:
-                   print 'Continuing with the download.'
-
-
-    def check_download(self, dest, source):
-        """Check if the download was successful. Verify the checksum and the
-           size of the downloaded file.
-
-        @param dest:   The complete path to the downloaded file
-        @param source: The complete path to the file in cloudstorage.
-        """
-        out = run_command(['gsutil', 'ls', '-L', source])
-        checksum = size = ''
-        for line in out.split('\n'):
-            if 'ETag:' in line:
-                checksum = line.split(':')[1].strip('\t')
-            elif 'Content-Length:' in line:
-                size = line.split(':')[1].strip('\t')
-        sout = run_command(['ls -Sl %s' % dest], shell=True)
-        md5out = run_command(['md5sum', dest])
-        if not size in sout:
-           raise Exception ('File did not download completely. '
-                            'It should be %s and we got %s' % (size, sout))
-        elif not checksum in  md5out:
-           raise Exception ('The downloaded file is corrupted. '
-                            'The checksum should %s and we got %s' %
-                            (checksum, md5out))
-
-
-    def download(self, device=None, channel=None, version=None, branch=None):
-        """Download a zip file containing the test image. The user is
-           expected to provide a clean input. A blank input means that
-           we use defaults. Defaults will be the last build
-           that the script attempted to download.
-
-        @param device : The device under test. eg: x86-mario, link. This should
-                        be the exact name of the device as shown in the
-                        http://chromeos-images.
-        @param channel: The channel under which we can get the test build.
-                        eg: dev, beta, stable.
-        @param version: The version of the build. eg:3701.0.0, 3701.71.0.
-        @param branch : The branch under which we can find the version.
-                        eg: R26, R27.
-
-        @return final_dest: The complete downloaded file path.
-        """
-        # TODO: download stops at 4109631488, check why
-        build_info = self.build_source(device=device, channel=channel,
-                                       version=version, branch=branch)
-        source = build_info[0]
-        dest = '/tmp/%s/test' % build_info[1]
-        final_dest = os.path.join(dest, os.path.basename(source))
-        self.file_check(dest, folder=True, action=True)
-        self.file_check(final_dest, folder=False, action=True)
-        print 'Downloading %s, Please wait ...' % source
-        run_command(['gsutil', 'cp', source, dest])
-        self.file_check(final_dest, folder=False)
-        self.check_download(final_dest, source)
-        run_command(['nautilus', dest])
-        return final_dest
-
-
-    def build_source(self, device=None, channel=None,
-                     version=None, branch=None):
-        """Multiple option parser. Allows user to give arguments or options
-           or call the function from their module to create the source path
-           of the CrOS test build zip file to be downloaded. The user is
-           expected to provide a clean input. A blank input means that we
-           use defaults. Defaults will be the last build
-           that the script attempted to download.
-
-        @param device : The device under test. eg: x86-mario, link. This should
-                        be the exact name of the device as shown in the
-                        http://chromeos-images.
-        @param channel: The channel under which we can get the test build.
-                        eg: dev, beta, stable.
-        @param version: The version of the build. eg:3701.0.0, 3701.71.0.
-        @param branch : The branch under which we can find the version.
-                        eg: R26, R27.
-        """
-        default = defaults()
-        # We save the previous configuration as default
-        prev_values = default.previous_defaults()
-        defa_channel = prev_values['channel']
-        defa_version = prev_values['version']
-        defa_branch = prev_values['branch']
-        defa_device = prev_values['device']
-        if not (channel and branch and version and device):
-            channel = raw_input('Enter the channel(default: %s): ' %
-                                 defa_channel)
-            device = raw_input('Enter the device(default: %s): ' %
-                                defa_device)
-            branch = raw_input('Enter the branch(default: %s): ' %
-                                defa_branch)
-            version = raw_input('Enter the version(default: %s): ' %
-                                 defa_version)
-
-        # Check the inputs again
-        if not (channel and branch and version and device):
-            if not (defa_channel and defa_branch and defa_version and
-                    defa_device):
-                raise Exception ('Insufficient input to download the build. '
-                                 'Please use \"build_down.py --help\" to get '
-                                 'more information about passing arguments.')
-                sys.exit(0)
-            if not channel:  # If no input, we use defaults
-               channel = defa_channel
-            if not branch:
-               branch = defa_branch
-            if not version:
-               version = defa_version
-            if not device:
-               device = defa_device
-        path = (self.image_path % (channel, device, version, branch,
-                version, device))
-        default.set_defaults(channel=channel, device=device,
-                             version=version, branch=branch)
-        return [path, device]
-
-
-class unzip_burn():
-
-   def unzip_file(self, zip_file):
-       """ Unzip the given file into a folder with the same name.
-
-       @param zip_file: The file to be unzipped.
-
-       @return dest: The folder with unzipped files.
-       """
-       dest = os.path.splitext(zip_file)[0]
-       # We avoid all the unnecesssary files to reduce the unzip time
-       command = ['unzip', zip_file, '-d', dest, '-x',
-                  'autotest.tar.bz2', 'chromiumos_base_image.bin',
-                  'recovery_image.bin']
-       large_zips = ['stout', 'link']
-       for board in large_zips:
-           if board in zip_file:
-               command.append('chromiumos_qemu_image.bin')
-               break
-       if run_command(command):
-           return dest
-
-
-   def burn(self, image, drive):
-       """ Burn the image to the given drive.
-
-       @param image: The complete path to the image.
-       @param drive: The complete path to the drive.
-       """
-       print 'Burning the image %s on to drive %s ...' % (image, drive)
-       if run_command(['sudo dd if=%s of=%s' % (image, drive)],
-                         shell=True):
-          print 'Image is now on %s drive.'
-
-
-def main():
-    download = download_image()
-    image = download.download()
-    burn = unzip_burn()
-    print 'Unzipping the folder, please wait ...'
-    dest = burn.unzip_file(image)
-    if dest:
-       download_path = os.path.join(dest, 'chromiumos_test_image.bin')
-       print 'The test image is in %s' % download_path
-       drive_path = raw_input('Which drive to use?(default: /dev/sdc): ')
-       if '/dev' not in drive_path:
-          print 'Using the default drive path /dev/sdc.'
-          drive_path = '/dev/sdc'
-       if os.path.exists(download_path) and os.path.exists(drive_path):
-           burn.burn(download_path, drive_path)
-
-
-if __name__ == '__main__':
-    main()
diff --git a/provingground/test_build_download.py b/provingground/test_build_download.py
deleted file mode 100644
index 67b1d80..0000000
--- a/provingground/test_build_download.py
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/sbin/python
-# -*- coding: utf-8 -*-
-# Copyright (c) 2013 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 download_test_build
-import os
-import unittest
-
-"""
-This test can be used to download multiple test images using
-download_test_build.
-"""
-
-
-class TestBuilds(unittest.TestCase):
-      channel = 'dev'
-      branch = 'R28'
-      version = '4100.17.0'
-      image = []
-
-      def setUp(self):
-          self.build = download_test_build.download_image()
-
-      def tearDown(self):
-          """Remove all test paths."""
-#         disabled by default
-#          for path in self.image:
-#              print 'Removing the download %s' % path
-#              os.remove(path)
-
-      def test_daisy(self):
-          """Test downloading daisy."""
-          path = self.build.download(channel=self.channel,
-                                     device='daisy', branch=self.branch,
-                                     version=self.version)
-          self.image.append(path)
-          self.failUnless(os.path.exists(path))
-
-
-      def test_link(self):
-          """Test downloading link."""
-          path = self.build.download(channel=self.channel,
-                                     device='link', version=self.version,
-                                     branch=self.branch)
-          self.image.append(path)
-          self.failUnless(os.path.exists(path))
-
-
-      def test_parrot(self):
-          """Test downloading parrot."""
-          path = self.build.download(channel=self.channel,
-                                     device='parrot', branch=self.branch,
-                                     version=self.version)
-          self.image.append(path)
-          self.failUnless(os.path.exists(path))
-
-if __name__ == '__main__':
-    unittest.main()