Index: chrome/test/functional/wifi_downloads.py |
diff --git a/chrome/test/functional/wifi_downloads.py b/chrome/test/functional/wifi_downloads.py |
deleted file mode 100755 |
index f998934c1b73c0650d498c22b4d0e57ed60af8a3..0000000000000000000000000000000000000000 |
--- a/chrome/test/functional/wifi_downloads.py |
+++ /dev/null |
@@ -1,201 +0,0 @@ |
-#!/usr/bin/env python |
-# Copyright (c) 2012 The Chromium 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 hashlib |
-import logging |
-import os |
-import time |
-import urllib2 |
- |
-import pyauto_functional # Must be imported before pyauto |
-import pyauto |
-import pyauto_utils |
-import chromeos_network |
- |
- |
-MAX_WAIT_TIME_IN_MSEC = 15 * 60 * 1000 |
- |
- |
-class WifiDownloadsTest(chromeos_network.PyNetworkUITest): |
- """TestCase for ChromeOS Wifi Downloads |
- |
- This test makes a few assumptions. It needs to have access to the power |
- strip used in pyautolib/chromeos/wifi_downloads.py. It also assumes access |
- to the server 172.22.12.98:8080. If the server is passed a filname in the |
- format <integer>.lf, it will generate a file of size <integer> in KB. In |
- addition the name of the file returned is the md5 checksum of the file. |
- |
- In addition the download times are written to a file in |
- /tmp/wifi_download_time.csv. All times are appended to the file if it |
- already exists. |
- """ |
- |
- def setUp(self): |
- chromeos_network.PyNetworkUITest.setUp(self) |
- self.InitWifiPowerStrip() |
- # The power strip is a shared resource and if we every crash in the middle |
- # of a test we will be in an unknown state. This returns us to 'all off'. |
- self.TurnOffAllRouters() |
- # Downloading files of a large size, can take a while, bump the timeout |
- self.changer = pyauto.PyUITest.ActionTimeoutChanger(self, 4 * 1000 * 60) |
- self.log_file_path = '/tmp/wifi_download_time.csv' |
- |
- def _WriteTimeToFile(self, output_file, router_name, file_size, dl_time): |
- """Write or append a time into a csv file. |
- |
- This method will create or append the amount of time a download took for a |
- given filesize and router to a file at the given path. |
- |
- The format of the output file is as follows: |
- <router name A>,<file size A>,time,time,time,time,time,time,time,time |
- <router name A>,<file size B>,time,time,time,time,time,time,time,time |
- <router name B>,<file size C>,time,time,time,time,time,time,time,time |
- |
- Args: |
- output_file: the complete path of the file to write to |
- file_size: the size of the file, this is the row header |
- dl_time: the amount of time in seconds |
- """ |
- file_data = [] |
- if os.path.exists(output_file): |
- file_handle = open(output_file) |
- lines = file_handle.readlines() |
- file_handle.close() |
- # Convert the file to a full data structure. |
- for line in lines: |
- values = line.strip().split(',') |
- file_data.append(values) |
- for values in file_data: |
- found_existing_time = False |
- if values[0] == router_name and values[1] == file_size: |
- values.append('%2.2f' % dl_time) |
- found_existing_time = True |
- break |
- if not found_existing_time: |
- new_line = [router_name, file_size, ('%2.2f' % dl_time)] |
- file_data.append(new_line) |
- else: |
- file_data = [[router_name, file_size, ('%2.2f' % dl_time)]] |
- # Write the data back out |
- file_handle = open(output_file, 'w') |
- for line in file_data: |
- if len(line) > 2: |
- file_handle.write(','.join(line)) |
- file_handle.write('\n') |
- file_handle.close() |
- |
- def _Md5Checksum(self, file_path): |
- """Returns the md5 checksum of a file at a given path. |
- |
- Args: |
- file_path: The complete path of the file to generate the md5 checksum for. |
- """ |
- file_handle = open(file_path, 'rb') |
- m = hashlib.md5() |
- while True: |
- data = file_handle.read(8192) |
- if not data: |
- break |
- m.update(data) |
- file_handle.close() |
- return m.hexdigest() |
- |
- def _ConnectToRouterAndVerify(self, router_name): |
- """Generic routine for connecting to a router. |
- |
- Args: |
- router_name: The name of the router to connect to. |
- """ |
- router = self.GetRouterConfig(router_name) |
- self.RouterPower(router_name, True) |
- |
- self.assertTrue(self.WaitUntilWifiNetworkAvailable(router['ssid']), |
- 'Wifi network %s never showed up.' % router['ssid']) |
- |
- # Verify connect did not have any errors. |
- error = self.ConnectToWifiRouter(router_name) |
- self.assertFalse(error, 'Failed to connect to wifi network %s. ' |
- 'Reason: %s.' % (router['ssid'], error)) |
- |
- # Verify the network we connected to. |
- ssid = self.GetConnectedWifi() |
- self.assertEqual(ssid, router['ssid'], |
- 'Did not successfully connect to wifi network %s.' % ssid) |
- |
- def _DownloadAndVerifyFile(self, download_url): |
- """Downloads a file at a given URL and validates it |
- |
- This method downloads a file from a server whose filename matches the md5 |
- checksum. Then we manually generate the md5 and check it against the |
- filename. |
- |
- Args: |
- download_url: URL of the file to download. |
- |
- Returns: |
- The download time in seconds. |
- """ |
- start = time.time() |
- # Make a copy of the download directory now to work around segfault |
- downloads_dir = self.GetDownloadDirectory().value() |
- try: |
- self.DownloadAndWaitForStart(download_url) |
- except AssertionError: |
- # We need to redo this since the external server may not respond the |
- # first time. |
- logging.info('Could not start download. Retrying ...') |
- self.DownloadAndWaitForStart(download_url) |
- # Maximum wait time is set as 15 mins as an 100MB file may take somewhere |
- # between 8-12 mins to download. |
- self.WaitForAllDownloadsToComplete(timeout=MAX_WAIT_TIME_IN_MSEC) |
- end = time.time() |
- logging.info('Download took %2.2f seconds to complete' % (end - start)) |
- downloaded_files = os.listdir(downloads_dir) |
- self.assertEquals(len(downloaded_files), 1, |
- msg='Expected only one file in the Downloads folder. ' |
- 'but got this instead: %s' % ', '.join(downloaded_files)) |
- filename = os.path.splitext(downloaded_files[0])[0] |
- file_path = os.path.join(self.GetDownloadDirectory().value(), |
- downloaded_files[0]) |
- md5_sum = self._Md5Checksum(file_path) |
- md5_url = download_url[:-4] + '.md5' # replacing .slf with .md5 |
- md5_file = urllib2.urlopen(md5_url).readlines()[0] |
- self.assertTrue(md5_file.rstrip().endswith(md5_sum.encode()), |
- msg='Unexpected checksum. The download is incomplete.') |
- return end - start |
- |
- def testDownload1MBFile(self): |
- """Test downloading a 1MB file from a wireless router.""" |
- download_url = 'http://172.22.12.98:80/downloads/1M.slf' |
- router_name = 'Nfiniti' |
- self._ConnectToRouterAndVerify(router_name) |
- download_time = self._DownloadAndVerifyFile(download_url) |
- self._WriteTimeToFile(self.log_file_path, router_name, '1MB', |
- download_time) |
- self.DisconnectFromWifiNetwork() |
- |
- def testDownload10MBFile(self): |
- """Test downloading a 10MB file from a wireless router.""" |
- download_url = 'http://172.22.12.98:80/downloads/10M.slf' |
- router_name = 'Linksys_WRT54G2' |
- self._ConnectToRouterAndVerify(router_name) |
- download_time = self._DownloadAndVerifyFile(download_url) |
- self._WriteTimeToFile(self.log_file_path, router_name, '10MB', |
- download_time) |
- self.DisconnectFromWifiNetwork() |
- |
- def testDownload100MBFile(self): |
- """Test downloading a 100MB file from a wireless router.""" |
- download_url = 'http://172.22.12.98:80/downloads/100M.slf' |
- router_name = 'Trendnet_639gr_4' |
- self._ConnectToRouterAndVerify(router_name) |
- download_time = self._DownloadAndVerifyFile(download_url) |
- self._WriteTimeToFile(self.log_file_path, router_name, '100MB', |
- download_time) |
- self.DisconnectFromWifiNetwork() |
- |
- |
-if __name__ == '__main__': |
- pyauto_functional.Main() |