1# Copyright 2017 The Chromium OS Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import logging
6
7from autotest_lib.client.common_lib import error
8from autotest_lib.server import autotest
9from autotest_lib.server import test
10from autotest_lib.server import utils
11
12
13class platform_ImageLoaderServer(test.test):
14    """Does the server side file downloading for the ImageLoader autotest.
15    """
16    version = 1
17
18    def _run_client_test(self, version1, version2):
19        """Runs client test."""
20        try:
21            self.autotest_client.run_test(
22                'platform_ImageLoader',
23                component1=version1,
24                component2=version2,
25                check_client_result=True)
26            logging.info('platform_ImageLoader succeeded')
27        except:
28            raise error.TestError('Failed platform_ImageLoader')
29
30    def run_once(self, host):
31        """Runs platform ImageLoader tests."""
32        self.host = host
33        self.autotest_client = autotest.Autotest(self.host)
34        # Download sample production signed components for simulated updates
35        # from Google Storage. This needs to be done by a server test as the
36        # client is unable to access Google Storage.
37        try:
38            version1 = '/tmp/prod_signed_23.0.0.207.tar.gz'
39            utils.run('gsutil',
40                      args=('cp', 'gs://chromeos-localmirror-private/'
41                            'testing/components/prod_signed_23.0.0.207.tar.gz',
42                            version1),
43                      timeout=300,
44                      ignore_status=False,
45                      verbose=True,
46                      stderr_is_expected=False,
47                      ignore_timeout=False)
48
49            version2 = '/tmp/prod_signed_24.0.0.186.tar.gz'
50            utils.run('gsutil',
51                      args=('cp', 'gs://chromeos-localmirror-private/'
52                            'testing/components/prod_signed_24.0.0.186.tar.gz',
53                            version2),
54                      timeout=300,
55                      ignore_status=False,
56                      verbose=True,
57                      stderr_is_expected=False,
58                      ignore_timeout=False)
59        except error.CmdTimeoutError:
60            raise error.TestError('Slow network')
61        except error.CmdError:
62            raise error.TestError('Lack of Google Storage access permissions.')
63
64        self.host.send_file(version1, version1)
65        self.host.send_file(version2, version2)
66
67        self.host.run('tar xvf "%s" -C "%s"' % (version1, '/home/chronos'))
68        self.host.run('tar xvf "%s" -C "%s"' % (version2, '/home/chronos'))
69        version1_unpack = '/home/chronos/prod_signed_23.0.0.207'
70        version2_unpack = '/home/chronos/prod_signed_24.0.0.186'
71        self.host.run('chmod -R 0755 "%s"' % (version1_unpack))
72        self.host.run('chmod -R 0755 "%s"' % (version2_unpack))
73        # Run the actual test (installing and verifying component updates on
74        # the client.
75        self._run_client_test(version1_unpack, version2_unpack)
76
77        self.host.run('rm -rf "%s" "%s" "%s" "%s"' % (version1,
78                                                      version2,
79                                                      version1_unpack,
80                                                      version2_unpack))
81