1976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr# Copyright 2017 The Chromium OS Authors. All rights reserved.
2976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr# Use of this source code is governed by a BSD-style license that can be
3976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr# found in the LICENSE file.
4976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr
5976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerrimport logging
6976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr
7976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerrfrom autotest_lib.client.common_lib import error
8976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerrfrom autotest_lib.server import autotest
9976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerrfrom autotest_lib.server import test
10976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerrfrom autotest_lib.server import utils
11976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr
12976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr
13976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerrclass platform_ImageLoaderServer(test.test):
14976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr    """Does the server side file downloading for the ImageLoader autotest.
15976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr    """
16976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr    version = 1
17976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr
18186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu    def _run_client_test(self, version1, version2, version3):
19976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        """Runs client test."""
20976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        try:
21976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr            self.autotest_client.run_test(
22976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                'platform_ImageLoader',
23976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                component1=version1,
24976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                component2=version2,
25186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu                component3=version3,
26976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                check_client_result=True)
27976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr            logging.info('platform_ImageLoader succeeded')
28976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        except:
2984fbb8b69382c8651a85855f42e1b127ddbca16bIlja H. Friedel            raise error.TestFail('Failed: platform_ImageLoader')
30976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr
31976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr    def run_once(self, host):
32976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        """Runs platform ImageLoader tests."""
33976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        self.host = host
34976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        self.autotest_client = autotest.Autotest(self.host)
35976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        # Download sample production signed components for simulated updates
36976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        # from Google Storage. This needs to be done by a server test as the
37976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        # client is unable to access Google Storage.
38976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        try:
39976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr            version1 = '/tmp/prod_signed_23.0.0.207.tar.gz'
40976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr            utils.run('gsutil',
41976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                      args=('cp', 'gs://chromeos-localmirror-private/'
42976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                            'testing/components/prod_signed_23.0.0.207.tar.gz',
43976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                            version1),
44976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                      timeout=300,
45976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                      ignore_status=False,
46976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                      verbose=True,
47976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                      stderr_is_expected=False,
48976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                      ignore_timeout=False)
49976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr
50976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr            version2 = '/tmp/prod_signed_24.0.0.186.tar.gz'
51976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr            utils.run('gsutil',
52976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                      args=('cp', 'gs://chromeos-localmirror-private/'
53976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                            'testing/components/prod_signed_24.0.0.186.tar.gz',
54976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                            version2),
55976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                      timeout=300,
56976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                      ignore_status=False,
57976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                      verbose=True,
58976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                      stderr_is_expected=False,
59976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr                      ignore_timeout=False)
60186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu
61191d267ebb129ef2b973465ba31c1ffb0e205897Xiaochu Liu            version3 = '/tmp/prod_signed_10209.0.0.tar.gz'
62186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu            utils.run('gsutil',
63186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu                      args=('cp', 'gs://chromeos-localmirror-private/'
64191d267ebb129ef2b973465ba31c1ffb0e205897Xiaochu Liu                            'testing/components/prod_signed_10209.0.0.tar.gz',
65186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu                            version3),
66186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu                      timeout=300,
67186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu                      ignore_status=False,
68186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu                      verbose=True,
69186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu                      stderr_is_expected=False,
70186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu                      ignore_timeout=False)
71976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        except error.CmdTimeoutError:
72976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr            raise error.TestError('Slow network')
73976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        except error.CmdError:
74976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr            raise error.TestError('Lack of Google Storage access permissions.')
75976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr
76976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        self.host.send_file(version1, version1)
77976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        self.host.send_file(version2, version2)
78186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu        self.host.send_file(version3, version3)
79976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr
80976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        self.host.run('tar xvf "%s" -C "%s"' % (version1, '/home/chronos'))
81976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        self.host.run('tar xvf "%s" -C "%s"' % (version2, '/home/chronos'))
82186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu        self.host.run('tar xvf "%s" -C "%s"' % (version3, '/home/chronos'))
83976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        version1_unpack = '/home/chronos/prod_signed_23.0.0.207'
84976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        version2_unpack = '/home/chronos/prod_signed_24.0.0.186'
85191d267ebb129ef2b973465ba31c1ffb0e205897Xiaochu Liu        version3_unpack = '/home/chronos/prod_signed_10209.0.0'
86976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        self.host.run('chmod -R 0755 "%s"' % (version1_unpack))
87976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        self.host.run('chmod -R 0755 "%s"' % (version2_unpack))
88186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu        self.host.run('chmod -R 0755 "%s"' % (version3_unpack))
89976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        # Run the actual test (installing and verifying component updates on
90976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr        # the client.
91186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu        self._run_client_test(version1_unpack, version2_unpack, version3_unpack)
92976b1ad72aee5e071cab5763d2f095ec7350eafbGreg Kerr
93186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu        self.host.run('rm -rf "%s" "%s" "%s" "%s" "%s" "%s"'
94186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu                      % (version1,
95186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu                         version2,
96186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu                         version3,
97186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu                         version1_unpack,
98186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu                         version2_unpack,
99186c0ff72193c9daf7ea2a7e096a7d4c9fb14521Xiaochu Liu                         version3_unpack))
100