| OLD | NEW | 
|    1 #!/usr/bin/python |    1 #!/usr/bin/python | 
|    2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. |    2 # Copyright (c) 2010 The Chromium Authors. All rights reserved. | 
|    3 # Use of this source code is governed by a BSD-style license that can be |    3 # Use of this source code is governed by a BSD-style license that can be | 
|    4 # found in the LICENSE file. |    4 # found in the LICENSE file. | 
|    5  |    5  | 
|    6 import commands |    6 import commands | 
|    7 import filecmp |    7 import filecmp | 
|    8 import logging |    8 import logging | 
|    9 import os |    9 import os | 
|   10 import shutil |   10 import shutil | 
|   11 import sys |   11 import sys | 
|   12 import tempfile |   12 import tempfile | 
|   13 import urllib |   13 import urllib | 
|   14  |   14  | 
|   15 import pyauto_functional  # Must be imported before pyauto |   15 import pyauto_functional  # Must be imported before pyauto | 
|   16 import pyauto |   16 import pyauto | 
|   17 import pyauto_utils |   17 import pyauto_utils | 
 |   18 import test_utils | 
|   18  |   19  | 
|   19  |   20  | 
|   20 class DownloadsTest(pyauto.PyUITest): |   21 class DownloadsTest(pyauto.PyUITest): | 
|   21   """TestCase for Downloads.""" |   22   """TestCase for Downloads.""" | 
|   22  |   23  | 
|   23   def setUp(self): |   24   def setUp(self): | 
|   24     pyauto.PyUITest.setUp(self) |   25     pyauto.PyUITest.setUp(self) | 
|   25     # Record all entries in the download dir |   26     # Record all entries in the download dir | 
|   26     download_dir = self.GetDownloadDirectory().value() |   27     download_dir = self.GetDownloadDirectory().value() | 
|   27     self._existing_downloads = [] |   28     self._existing_downloads = [] | 
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   86     """Make a file on-the-fly with the given size. Returns the path to the |   87     """Make a file on-the-fly with the given size. Returns the path to the | 
|   87        file. |   88        file. | 
|   88     """ |   89     """ | 
|   89     fd, file_path = tempfile.mkstemp(suffix='.zip', prefix='file-downloads-') |   90     fd, file_path = tempfile.mkstemp(suffix='.zip', prefix='file-downloads-') | 
|   90     os.lseek(fd, size, 0) |   91     os.lseek(fd, size, 0) | 
|   91     os.write(fd, 'a') |   92     os.write(fd, 'a') | 
|   92     os.close(fd) |   93     os.close(fd) | 
|   93     logging.debug('Created temporary file %s of size %d' % (file_path, size)) |   94     logging.debug('Created temporary file %s of size %d' % (file_path, size)) | 
|   94     return file_path |   95     return file_path | 
|   95  |   96  | 
|   96   def _CallFunctionWithNewTimeout(self, new_timeout, function): |  | 
|   97     """Sets the timeout to |new_timeout| and calls |function|. |  | 
|   98  |  | 
|   99     This method resets the timeout before returning. |  | 
|  100     """ |  | 
|  101     timeout_changer = pyauto.PyUITest.CmdExecutionTimeoutChanger( |  | 
|  102         self, new_timeout) |  | 
|  103     logging.info('Automation execution timeout has been changed to %d. ' |  | 
|  104                  'If the timeout is large the test might appear to hang.' |  | 
|  105                  % new_timeout) |  | 
|  106     function() |  | 
|  107     del timeout_changer |  | 
|  108  |  | 
|  109   def _GetAllDownloadIDs(self): |   97   def _GetAllDownloadIDs(self): | 
|  110     """Return a list of all download ids.""" |   98     """Return a list of all download ids.""" | 
|  111     return [download['id'] for download in self.GetDownloadsInfo().Downloads()] |   99     return [download['id'] for download in self.GetDownloadsInfo().Downloads()] | 
|  112  |  100  | 
|  113   def testNoDownloadWaitingNeeded(self): |  101   def testNoDownloadWaitingNeeded(self): | 
|  114     """Make sure "wait for downloads" returns quickly if we have none.""" |  102     """Make sure "wait for downloads" returns quickly if we have none.""" | 
|  115     self.WaitForAllDownloadsToComplete() |  103     self.WaitForAllDownloadsToComplete() | 
|  116  |  104  | 
|  117   def testZip(self): |  105   def testZip(self): | 
|  118     """Download a zip and verify that it downloaded correctly. |  106     """Download a zip and verify that it downloaded correctly. | 
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  214     file_path = self._MakeFile(2**30) |  202     file_path = self._MakeFile(2**30) | 
|  215     self._DeleteAfterShutdown(file_path) |  203     self._DeleteAfterShutdown(file_path) | 
|  216     file_url = self.GetFileURLForPath(file_path) |  204     file_url = self.GetFileURLForPath(file_path) | 
|  217     downloaded_pkg = os.path.join(self.GetDownloadDirectory().value(), |  205     downloaded_pkg = os.path.join(self.GetDownloadDirectory().value(), | 
|  218                                   os.path.basename(file_path)) |  206                                   os.path.basename(file_path)) | 
|  219     self._ClearLocalDownloadState(downloaded_pkg) |  207     self._ClearLocalDownloadState(downloaded_pkg) | 
|  220     self.DownloadAndWaitForStart(file_url) |  208     self.DownloadAndWaitForStart(file_url) | 
|  221     self._DeleteAfterShutdown(downloaded_pkg) |  209     self._DeleteAfterShutdown(downloaded_pkg) | 
|  222     # Waiting for big file to download might exceed automation timeout. |  210     # Waiting for big file to download might exceed automation timeout. | 
|  223     # Temporarily increase the automation timeout. |  211     # Temporarily increase the automation timeout. | 
|  224     self._CallFunctionWithNewTimeout(4 * 60 * 1000,  # 4 min. |  212     test_utils.CallFunctionWithNewTimeout(self, 4 * 60 * 1000,  # 4 min. | 
|  225                                      self.WaitForAllDownloadsToComplete) |  213                                           self.WaitForAllDownloadsToComplete) | 
|  226     # Verify that the file was correctly downloaded |  214     # Verify that the file was correctly downloaded | 
|  227     self.assertTrue(os.path.exists(downloaded_pkg), |  215     self.assertTrue(os.path.exists(downloaded_pkg), | 
|  228                     'Downloaded file %s missing.' % downloaded_pkg) |  216                     'Downloaded file %s missing.' % downloaded_pkg) | 
|  229     self.assertTrue(self._EqualFileContents(file_path, downloaded_pkg), |  217     self.assertTrue(self._EqualFileContents(file_path, downloaded_pkg), | 
|  230                     'Downloaded file %s does not match original' % |  218                     'Downloaded file %s does not match original' % | 
|  231                       downloaded_pkg) |  219                       downloaded_pkg) | 
|  232  |  220  | 
|  233   def testFileRenaming(self): |  221   def testFileRenaming(self): | 
|  234     """Test file renaming when downloading a already-existing filename.""" |  222     """Test file renaming when downloading a already-existing filename.""" | 
|  235     test_dir = os.path.join(os.path.abspath(self.DataDir()), 'downloads') |  223     test_dir = os.path.join(os.path.abspath(self.DataDir()), 'downloads') | 
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  374     self.assertTrue(pause_dict['is_paused']) |  362     self.assertTrue(pause_dict['is_paused']) | 
|  375     self.assertTrue(pause_dict['state'] == 'IN_PROGRESS') |  363     self.assertTrue(pause_dict['state'] == 'IN_PROGRESS') | 
|  376  |  364  | 
|  377     # Resume the download and assert it is not paused. |  365     # Resume the download and assert it is not paused. | 
|  378     resume_dict = self.PerformActionOnDownload(self._GetDownloadId(), |  366     resume_dict = self.PerformActionOnDownload(self._GetDownloadId(), | 
|  379                                                'toggle_pause') |  367                                                'toggle_pause') | 
|  380     self.assertFalse(resume_dict['is_paused']) |  368     self.assertFalse(resume_dict['is_paused']) | 
|  381  |  369  | 
|  382     # Waiting for big file to download might exceed automation timeout. |  370     # Waiting for big file to download might exceed automation timeout. | 
|  383     # Temporarily increase the automation timeout. |  371     # Temporarily increase the automation timeout. | 
|  384     self._CallFunctionWithNewTimeout(2 * 60 * 1000,  # 2 min. |  372     test_utils.CallFunctionWithNewTimeout(self, 2 * 60 * 1000,  # 2 min. | 
|  385                                      self.WaitForAllDownloadsToComplete) |  373                                           self.WaitForAllDownloadsToComplete) | 
|  386  |  374  | 
|  387     # Verify that the file was correctly downloaded after pause and resume. |  375     # Verify that the file was correctly downloaded after pause and resume. | 
|  388     self.assertTrue(os.path.exists(downloaded_pkg), |  376     self.assertTrue(os.path.exists(downloaded_pkg), | 
|  389                     'Downloaded file %s missing.' % downloaded_pkg) |  377                     'Downloaded file %s missing.' % downloaded_pkg) | 
|  390     self.assertTrue(self._EqualFileContents(file_path, downloaded_pkg), |  378     self.assertTrue(self._EqualFileContents(file_path, downloaded_pkg), | 
|  391                     'Downloaded file %s does not match original' % |  379                     'Downloaded file %s does not match original' % | 
|  392                     downloaded_pkg) |  380                     downloaded_pkg) | 
|  393  |  381  | 
|  394   def testCancelDownload(self): |  382   def testCancelDownload(self): | 
|  395     """Verify that we can cancel a download.""" |  383     """Verify that we can cancel a download.""" | 
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  471       return |  459       return | 
|  472     file_path = os.path.join(self.DataDir(), 'downloads', 'a_zip_file.zip') |  460     file_path = os.path.join(self.DataDir(), 'downloads', 'a_zip_file.zip') | 
|  473     file_url = self.GetFileURLForPath(file_path) |  461     file_url = self.GetFileURLForPath(file_path) | 
|  474     downloaded_pkg = os.path.join(self.GetDownloadDirectory().value(), |  462     downloaded_pkg = os.path.join(self.GetDownloadDirectory().value(), | 
|  475                                   os.path.basename(file_path)) |  463                                   os.path.basename(file_path)) | 
|  476     os.path.exists(downloaded_pkg) and os.remove(downloaded_pkg) |  464     os.path.exists(downloaded_pkg) and os.remove(downloaded_pkg) | 
|  477     self.DownloadAndWaitForStart(file_url) |  465     self.DownloadAndWaitForStart(file_url) | 
|  478     self.WaitForAllDownloadsToComplete() |  466     self.WaitForAllDownloadsToComplete() | 
|  479     id = self._GetDownloadId() |  467     id = self._GetDownloadId() | 
|  480     self.PerformActionOnDownload(id, 'toggle_open_files_like_this') |  468     self.PerformActionOnDownload(id, 'toggle_open_files_like_this') | 
|  481     os.path.exists(downloaded_pkg) and os.remove(downloaded_pkg) |  | 
|  482     # Retesting the flag we set |  469     # Retesting the flag we set | 
|  483     file_url2 = self.GetFileURLForDataPath(os.path.join('zip', 'test.zip')) |  470     file_url2 = self.GetFileURLForDataPath(os.path.join('zip', 'test.zip')) | 
|  484     unzip_path = os.path.join(self.GetDownloadDirectory().value(), |  471     unzip_path = os.path.join(self.GetDownloadDirectory().value(), | 
|  485                               'test', 'foo') |  472                               'test', 'foo') | 
|  486     os.path.exists(downloaded_pkg) and os.remove(downloaded_pkg) |  | 
|  487     os.path.exists(unzip_path) and pyauto_utils.RemovePath(unzip_path) |  473     os.path.exists(unzip_path) and pyauto_utils.RemovePath(unzip_path) | 
|  488     self.DownloadAndWaitForStart(file_url2) |  474     self.DownloadAndWaitForStart(file_url2) | 
|  489     self.WaitForAllDownloadsToComplete() |  475     self.WaitForAllDownloadsToComplete() | 
|  490     # When the downloaded zip gets 'opened', a_file.txt will become available. |  476     # When the downloaded zip gets 'opened', a_file.txt will become available. | 
|  491     self.assertTrue(self.WaitUntil(lambda: os.path.exists(unzip_path)), |  477     self.assertTrue(self.WaitUntil(lambda: os.path.exists(unzip_path)), | 
|  492                     'Did not open the filetype') |  478                     'Did not open the filetype') | 
|  493     os.path.exists(downloaded_pkg) and os.remove(downloaded_pkg) |  479     os.path.exists(downloaded_pkg) and os.remove(downloaded_pkg) | 
|  494     os.path.exists(unzip_path) and pyauto_utils.RemovePath(unzip_path) |  480     os.path.exists(unzip_path) and pyauto_utils.RemovePath(unzip_path) | 
|  495  |  481  | 
|  496   def testExtendedAttributesOnMac(self): |  482   def testExtendedAttributesOnMac(self): | 
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  595  |  581  | 
|  596     # Verify download in Incognito Window. |  582     # Verify download in Incognito Window. | 
|  597     # WaitForAllDownloadsToComplete does not wait for incognito downloads |  583     # WaitForAllDownloadsToComplete does not wait for incognito downloads | 
|  598     self.assertTrue(self.WaitUntil( |  584     self.assertTrue(self.WaitUntil( | 
|  599         lambda: os.path.exists(downloaded_pkg_incog))) |  585         lambda: os.path.exists(downloaded_pkg_incog))) | 
|  600     self.assertTrue(self._EqualFileContents(file_path, downloaded_pkg_incog)) |  586     self.assertTrue(self._EqualFileContents(file_path, downloaded_pkg_incog)) | 
|  601  |  587  | 
|  602  |  588  | 
|  603 if __name__ == '__main__': |  589 if __name__ == '__main__': | 
|  604   pyauto_functional.Main() |  590   pyauto_functional.Main() | 
| OLD | NEW |