Home | History | Annotate | Download | only in brillo_ADBFileTransfer
      1 # Copyright 2016 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 
      5 import filecmp
      6 import os
      7 import tempfile
      8 
      9 from autotest_lib.client.common_lib import error
     10 from autotest_lib.server import test
     11 
     12 
     13 _DATA_SIZE = 20 * 1000 * 1000
     14 _DATA_STR = ''.join(chr(i) for i in range(256))
     15 _DATA_STR *= (len(_DATA_STR) - 1 + _DATA_SIZE) / len(_DATA_STR)
     16 _DATA_STR = _DATA_STR[:_DATA_SIZE]
     17 
     18 
     19 class brillo_ADBFileTransfer(test.test):
     20     """Verify that ADB file transfers work."""
     21     version = 1
     22 
     23 
     24     def setup(self):
     25         self.temp_file = tempfile.NamedTemporaryFile()
     26         self.temp_file.write(_DATA_STR)
     27         self.temp_file.flush()
     28         os.fsync(self.temp_file.file.fileno())
     29 
     30 
     31     def run_once(self, host=None, iterations=10):
     32         """
     33         Conduct a file transfer and verify that it succeeds.
     34 
     35         @param iterations: Number of times to perform the file transfer.
     36         """
     37 
     38         device_temp_file = os.path.join(host.get_tmp_dir(), 'adb_test_file')
     39 
     40         while iterations:
     41             iterations -= 1
     42             with tempfile.NamedTemporaryFile() as return_temp_file:
     43                 host.send_file(self.temp_file.name, device_temp_file,
     44                                delete_dest=True)
     45                 host.get_file(device_temp_file, return_temp_file.name,
     46                               delete_dest=True)
     47 
     48                 if not filecmp.cmp(self.temp_file.name,
     49                                    return_temp_file.name, shallow=False):
     50                     raise error.TestFail('Got back different file than we sent')
     51 
     52             r = host.run('cat %s' % device_temp_file)
     53             if r.stdout != _DATA_STR:
     54                 raise error.TestFail('Cat did not return same contents we sent')
     55 
     56 
     57     def cleanup(self):
     58         self.temp_file.close()
     59