Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1616)

Unified Diff: chrome/test/functional/nacl_sdk.py

Issue 222873002: Remove pyauto tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: sync Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/functional/multiprofile.py ('k') | chrome/test/functional/netflix.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/functional/nacl_sdk.py
===================================================================
--- chrome/test/functional/nacl_sdk.py (revision 261231)
+++ chrome/test/functional/nacl_sdk.py (working copy)
@@ -1,796 +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 copy
-import ctypes
-from distutils import version
-import fnmatch
-import glob
-import hashlib
-import logging
-import os
-import platform
-import re
-import shutil
-import subprocess
-import sys
-import tempfile
-import urllib2
-import xml.dom.minidom
-import zipfile
-
-import pyauto_functional # Must be imported before pyauto.
-import pyauto
-import pyauto_utils
-import test_utils
-
-
-class NaClSDKTest(pyauto.PyUITest):
- """Tests for the NaCl SDK."""
- _isExamplesTest = False
- _extracted_sdk_path = None
- _temp_dir = None
- _updated_pepper_versions = []
- _latest_updated_pepper_versions = []
- _settings = {
- 'post_sdk_download_url': 'http://code.google.com/chrome/nativeclient/'
- 'docs/download.html',
- 'post_sdk_zip': 'http://storage.googleapis.com/'
- 'nativeclient-mirror/nacl/nacl_sdk/nacl_sdk.zip',
- 'min_required_chrome_build': 14,
- }
-
- def tearDown(self):
- pyauto.PyUITest.tearDown(self)
- if not self._isExamplesTest:
- self._RemoveDownloadedTestFile()
-
- def testNaClSDK(self):
- """Verify that NaCl SDK is working properly."""
- if not self._HasAllSystemRequirements():
- logging.info('System does not meet the requirements.')
- return
- self._extracted_sdk_path = tempfile.mkdtemp()
- self._VerifyDownloadLinks()
- self._VerifyNaClSDKInstaller()
- self._VerifyInstall()
- self._VerifyUpdate()
- self._LaunchServerAndVerifyExamplesAllPepperVersions()
-
- def NaClSDKExamples(self):
- """Verify if NaCl SDK examples are working."""
- self._isExamplesTest = True
- nacl_sdk_root = os.environ.get('NACL_SDK_ROOT', None)
- pepper_version = os.environ.get('PEPPER_VER', None)
- if nacl_sdk_root and pepper_version:
- self._LaunchServerAndVerifyExamples('pepper_' + pepper_version,
- nacl_sdk_root)
- else:
- self.fail(msg='Missing pepper version to be checked or SDK path.')
-
- def _VerifyDownloadLinks(self):
- """Verify the download links.
-
- Simply verify that NaCl download links exist in html page.
- """
- html = None
- for i in xrange(3):
- try:
- html = urllib2.urlopen(self._settings['post_sdk_download_url']).read()
- break
- except:
- pass
- self.assertTrue(html,
- msg='Cannot open URL: %s' %
- self._settings['post_sdk_download_url'])
- sdk_url = self._settings['post_sdk_zip']
- self.assertTrue(sdk_url in html,
- msg='Missing SDK download URL: %s' % sdk_url)
-
- def _VerifyNaClSDKInstaller(self):
- """Verify NaCl SDK installer."""
- search_list = [
- 'sdk_cache/',
- 'sdk_tools/',
- ]
- mac_lin_additional_search_items = [
- 'naclsdk',
- ]
- win_additional_search_items = [
- 'naclsdk.bat'
- ]
- self._DownloadNaClSDK()
- self._ExtractNaClSDK()
- if pyauto.PyUITest.IsWin():
- self._SearchNaClSDKFile(
- search_list + win_additional_search_items)
- elif pyauto.PyUITest.IsMac() or pyauto.PyUITest.IsLinux():
- self._SearchNaClSDKFile(
- search_list + mac_lin_additional_search_items)
- else:
- self.fail(msg='NaCl SDK does not support this OS.')
-
- def _VerifyInstall(self):
- """Install NACL sdk."""
- # Executing naclsdk(.bat) list
- if pyauto.PyUITest.IsWin():
- source_file = os.path.join(
- self._extracted_sdk_path, 'nacl_sdk', 'naclsdk.bat')
- elif pyauto.PyUITest.IsMac() or pyauto.PyUITest.IsLinux():
- source_file = os.path.join(
- self._extracted_sdk_path, 'nacl_sdk', 'naclsdk')
- subprocess.call(['chmod', '-R', '755', self._extracted_sdk_path])
- else:
- self.fail(msg='NaCl SDK does not support this OS.')
- subprocess.Popen([source_file, 'list'],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE).communicate()
-
- def _VerifyUpdate(self):
- """Update NACL sdk"""
- # Executing naclsdk(.bat) update
- if pyauto.PyUITest.IsWin():
- source_file = os.path.join(self._extracted_sdk_path, 'nacl_sdk',
- 'naclsdk.bat')
- elif pyauto.PyUITest.IsMac() or pyauto.PyUITest.IsLinux():
- source_file = os.path.join(self._extracted_sdk_path, 'nacl_sdk',
- 'naclsdk')
- else:
- self.fail(msg='NaCl SDK does not support this OS.')
- # Executing nacl_sdk(.bat) update to get the latest version.
- updated_output = subprocess.Popen([source_file, 'update'],
- stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0]
- self._updated_pepper_versions.extend(
- re.findall('Updating bundle (pepper_[0-9]{2})', updated_output))
- self._updated_pepper_versions = list(set(self._updated_pepper_versions))
- self._updated_pepper_versions.sort(key=str.lower)
- updated_pepper_versions_len = len(self._updated_pepper_versions)
- self._latest_updated_pepper_versions = filter(
- lambda x: x >= 'pepper_18', self._updated_pepper_versions)
-
- def _GetURLForExampleName(self, name, toolchain):
- return 'http://localhost:5103/%s/index_%s.html' % (name, toolchain)
-
- def _GetExampleNamesAndURLs(self, examples_path):
- """Get a list of all examples as (name, url) tuples.
-
- Args:
- examples_path: The path to the examples directory in the NaCl SDK.
- """
- toolchains = ['newlib', 'glibc', 'pnacl']
-
- examples = []
- for toolchain in toolchains:
- for example in os.listdir(examples_path):
- html_path = os.path.join(examples_path, example,
- 'index_%s.html' % (toolchain,))
- if os.path.exists(html_path):
- example_url = self._GetURLForExampleName(example, toolchain)
- examples.append((example, example_url))
- return examples
-
- def _LaunchServerAndVerifyExamplesAllPepperVersions(self):
- for pepper_version in self._latest_updated_pepper_versions:
- pepper_path = os.path.join(self._extracted_sdk_path,
- 'nacl_sdk', 'pepper_' + str(pepper_version))
- self._LaunchServerAndVerifyExamples(pepper_version, pepper_path)
-
- def _LaunchServerAndVerifyExamples(self, pepper_version, pepper_path):
- """Start local HTTP server and verify examples."""
- if self._ChromeAndPepperVersionMatch(pepper_version):
- # Close server if it's already open.
- if self._IsURLAlive('http://localhost:5103'):
- self._CloseHTTPServer()
-
- examples_path = os.path.join(pepper_path, 'examples')
-
- # Launch local http server.
- proc = subprocess.Popen(['make RUN'], shell=True, cwd=examples_path)
- self.WaitUntil(
- lambda: self._IsURLAlive('http://localhost:5103'),
- timeout=150, retry_sleep=1)
-
- examples = self._GetExampleNamesAndURLs(examples_path)
- try:
- self._OpenExamplesAndStartTest(examples)
- finally:
- self._CloseHTTPServer(proc)
-
- else:
- self.pprint('Pepper Version %s does not match the Chrome version %s.'
- % (pepper_version,
- self.GetBrowserInfo()['properties']['ChromeVersion']))
-
- def _ChromeAndPepperVersionMatch(self, pepper_version='pepper_18'):
- """Determine if chrome and pepper version match"""
- version_number = re.findall('pepper_([0-9]{2})', pepper_version)
- browser_info = self.GetBrowserInfo()
- chrome_version = browser_info['properties']['ChromeVersion']
- chrome_build = int(chrome_version.split('.')[0])
- return int(chrome_build) == int(version_number[0])
-
- def _RemoveDownloadedTestFile(self):
- """Delete downloaded files and dirs from downloads directory."""
- if self._extracted_sdk_path and os.path.exists(self._extracted_sdk_path):
- self._CloseHTTPServer()
-
- def _RemoveFile():
- shutil.rmtree(self._extracted_sdk_path, ignore_errors=True)
- return os.path.exists(self._extracted_sdk_path)
-
- success = self.WaitUntil(_RemoveFile, retry_sleep=2,
- expect_retval=False)
- self.assertTrue(success,
- msg='Cannot remove %s' % self._extracted_sdk_path)
-
- if self._temp_dir:
- pyauto_utils.RemovePath(self._temp_dir)
-
- def _OpenExamplesAndStartTest(self, examples):
- """Open each example and verify that it's working.
-
- Args:
- examples: A list of example (name, url) tuples.
- """
- example_verify_funcs = {
- 'dlopen': self._VerifyDynamicLibraryOpen,
- 'file_io': self._VerifyFileIoExample,
- 'geturl': self._VerifyGetURLExample,
- 'input_events': self._VerifyInputEventsExample,
- 'load_progress': self._VerifyLoadProgressExample,
- 'mt_input_events': self._VerifyMultithreadedInputEventsExample,
- 'pi_generator': self._VerifyPiGeneratorExample,
- 'sine_synth': self._VerifySineSynthExample,
- 'websocket': self._VerifyWebSocketExample,
- }
-
- # Remove examples that we don't yet verify
- examples = [(name, url) for name, url in examples
- if name in example_verify_funcs]
-
- # Open all examples.
- for name, url in examples:
- self.AppendTab(pyauto.GURL(url))
- self._CheckForCrashes()
-
- # Verify all examples are working.
- for name, url in examples:
- self._VerifyAnExample(name, url, example_verify_funcs[name])
- self._CheckForCrashes()
-
- # Close each tab and check for crashes.
- tab_count = self.GetTabCount()
- for index in xrange(tab_count - 1, 0, -1):
- self.CloseTab(tab_index=index)
- self._CheckForCrashes()
-
- def _VerifyAnExample(self, name, url, verify_func):
- """Verify NaCl example is working.
-
- Args:
- name: A string name of the example.
- url: A string url of the example.
- verify_func: The function to verify the example.
- Takes (tab_index, name, url) as parameters.
- """
- if not verify_func:
- self.fail(msg='No test available for %s.' % name)
-
- info = self.GetBrowserInfo()
- tabs = info['windows'][0]['tabs']
- tab_index = None
- for tab in tabs:
- if url == tab['url']:
- self.ActivateTab(tab['index'])
- tab_index = tab['index']
- break
-
- if tab_index:
- verify_func(tab_index, name, url)
-
- def _VerifyElementPresent(self, element_id, expected_value, tab_index, msg,
- attribute='innerHTML', timeout=150):
- """Determine if dom element has the expected value.
-
- Args:
- element_id: Dom element's id.
- expected_value: String to be matched against the Dom element.
- tab_index: Tab index to work on.
- attribute: Attribute to match |expected_value| against, if
- given. Defaults to 'innerHTML'.
- timeout: The max timeout (in secs) for which to wait.
- """
- js_code = """
- var output = document.getElementById('%s').%s;
- var result;
- if (output.indexOf('%s') != -1)
- result = 'pass';
- else
- result = 'fail';
- window.domAutomationController.send(result);
- """ % (element_id, attribute, expected_value)
- success = self.WaitUntil(
- lambda: self.ExecuteJavascript(js_code, tab_index),
- timeout=timeout, expect_retval='pass')
- self.assertTrue(success, msg=msg)
-
- def _CreateJSToSimulateMouseclick(self):
- """Create javascript to simulate mouse click event."""
- js_code = """
- var rightClick = document.createEvent('MouseEvents');
- rightClick.initMouseEvent(
- 'mousedown', true, true, document,
- 1, 32, 121, 10, 100,
- false, false, false, false,
- 2, common.naclModule
- );
- common.naclModule.dispatchEvent(rightClick);
- window.domAutomationController.send('done');
- """
- return js_code
-
- def _VerifyInputEventsExample(self, tab_index, name, url):
- """Verify Input Events Example.
-
- Args:
- tab_index: Tab index integer that the example is on.
- name: A string name of the example.
- url: A string url of the example.
- """
- success = self._VerifyElementPresent('eventString', 'DidChangeView',
- tab_index, msg='Example %s failed. URL: %s' % (name, url))
-
- # Simulate mouse click on event module.
- js_code = self._CreateJSToSimulateMouseclick()
- self.ExecuteJavascript(js_code, tab_index)
-
- # Check if 'eventString' has handled above mouse click.
- success = self.WaitUntil(
- lambda: re.search('DidHandleInputEvent', self.GetDOMValue(
- 'document.getElementById("eventString").innerHTML',
- tab_index)).group(), expect_retval='DidHandleInputEvent')
- self.assertTrue(success, msg='Example %s failed. URL: %s' % (name, url))
-
- def _VerifyMultithreadedInputEventsExample(self, tab_index, name, url):
- """Verify Input Events Example.
-
- Args:
- tab_index: Tab index integer that the example is on.
- name: A string name of the example.
- url: A string url of the example.
- """
- success = self.WaitUntil(
- lambda: bool(self.GetDOMValue(
- 'document.getElementById("eventString").innerHTML',
- tab_index).find('DidChangeView') + 1))
-
- self.assertTrue(success, msg='Example %s failed. URL: %s' % (name, url))
-
- # Simulate mouse click on event module.
- js_code = self._CreateJSToSimulateMouseclick()
- self.ExecuteJavascript(js_code, tab_index)
-
- # Check if above mouse click is handled.
- success = self._VerifyElementPresent('eventString', 'Mouse event',
- tab_index, msg='Example %s failed. URL: %s' % (name, url))
-
- # Kill worker thread and queue
- js_code = """
- document.getElementsByTagName('button')[0].click();
- window.domAutomationController.send('done');
- """
- self.ExecuteJavascript(js_code, tab_index)
-
- # Check if main thread has cancelled queue.
- success = self._VerifyElementPresent('eventString', 'Received cancel',
- tab_index, msg='Example %s failed. URL: %s' % (name, url))
-
- # Simulate mouse click on event module.
- js_code = self._CreateJSToSimulateMouseclick()
- self.ExecuteJavascript(js_code, tab_index)
-
- # Check if above mouse click is not handled after killing worker thread.
- def _CheckMouseClickEventStatus():
- return self.GetDOMValue(
- 'document.getElementById("eventString").innerHTML',
- tab_index).find('Mouse event', self.GetDOMValue(
- 'document.getElementById("eventString").innerHTML', tab_index).find(
- 'Received cancel'))
-
- success = self.WaitUntil(_CheckMouseClickEventStatus, expect_retval=-1)
- self.assertTrue(success, msg='Example %s failed. URL: %s' % (name, url))
-
- def _VerifyFileIoExample(self, tab_index, name, url):
- """Verify File IO Example.
-
- Args:
- tab_index: Tab index integer that the example is on.
- name: A string name of the example.
- url: A string url of the example.
- """
- def _CheckStatus(substring_expected, fail_msg):
- self.assertTrue(
- self.WaitUntil(
- lambda: self.GetDOMValue(
- 'document.getElementById("statusField").innerHTML', tab_index)\
- .find(substring_expected) != -1, expect_retval=True),
- msg='Example %s failed. URL: %s. Reason: %s' % (name, url, fail_msg))
-
- # Give permission to use file system by clicking infobar OK
- infobar_index = test_utils.WaitForInfobarTypeAndGetIndex(self,
- 'confirm_infobar', 0, tab_index)
- self.PerformActionOnInfobar('accept', infobar_index, 0, tab_index)
- _CheckStatus('Ready!', 'NaCl module load')
-
- # Check that deleting non-existing files gives file not found
- js_code = """
- document.getElementById('file_name').value = '/abc';
- document.getElementById('file_editor').value = 'test';
- document.getElementById('delete_but').click();
- window.domAutomationController.send('done');
- """
- self.ExecuteJavascript(js_code, tab_index)
- _CheckStatus('File not found', 'Delete non-existing')
-
- # Check that saving works
- js_code = """
- document.getElementById('save_but').click();
- window.domAutomationController.send('done');
- """
- self.ExecuteJavascript(js_code, tab_index)
- _CheckStatus('Save successful', 'Save test')
-
- # Check that we load what we saved
- js_code = """
- document.getElementById('file_editor').value = 'different';
- document.getElementById('load_but').click();
- window.domAutomationController.send('done');
- """
- self.ExecuteJavascript(js_code, tab_index)
- _CheckStatus('Load complete', 'Load test')
- self.assertTrue(
- self.GetDOMValue('document.getElementById("file_editor").value',
- tab_index).find('test') != -1, msg='Loaded wrong text or failed')
-
- # Check that we delete files successfully
- js_code = """
- document.getElementById('delete_but').click();
- window.domAutomationController.send('done');
- """
- self.ExecuteJavascript(js_code, tab_index)
- _CheckStatus('File deleted', 'Delete test')
-
- # Check that file is deleted and load produces not found
- js_code = """
- document.getElementById('load_but').click();
- window.domAutomationController.send('done');
- """
- self.ExecuteJavascript(js_code, tab_index)
- _CheckStatus('File not found', 'Load deleted test')
-
- def _VerifyWebSocketExample(self, tab_index, name, url):
- """Verify Web Socket Open Example.
-
- Args:
- tab_index: Tab index integer that the example is on.
- name: A string name of the example.
- url: A string url of the example.
- """
- # Check if example is loaded.
- success = self.WaitUntil(
- lambda: self.GetDOMValue(
- 'document.getElementById("statusField").innerHTML', tab_index),
- expect_retval='SUCCESS')
- self.assertTrue(success, msg='Example %s failed. URL: %s' % (name, url))
-
- # Simulate clicking on Connect button to establish a connection.
- js_code = """
- document.getElementsByTagName('input')[1].click();
- window.domAutomationController.send('done');
- """
- self.ExecuteJavascript(js_code, tab_index)
-
- # Check if connected
- success = self._VerifyElementPresent('log', 'connected', tab_index,
- msg='Example %s failed. URL: %s' % (name, url))
-
- # Simulate clicking on Send button to send text message in log.
- js_code = """
- document.getElementsByTagName('input')[3].click();
- window.domAutomationController.send('done');
- """
- self.ExecuteJavascript(js_code, tab_index)
- success = self.WaitUntil(
- lambda: bool(re.search('send:', self.GetDOMValue(
- 'document.getElementById("log").textContent', tab_index))))
- self.assertTrue(success, msg='Example %s failed. URL: %s' % (name, url))
-
- def _VerifyDynamicLibraryOpen(self, tab_index, name, url):
- """Verify Dynamic Library Open Example.
-
- Args:
- tab_index: Tab index integer that the example is on.
- name: A string name of the example.
- url: A string url of the example.
- """
- # Check if example is loaded.
- success = self._VerifyElementPresent('log', 'Eightball loaded!',
- tab_index, msg='Example %s failed. URL: %s' % (name, url))
-
- # Simulate clicking on ASK button and check answer log for desired answer.
- js_code = """
- document.getElementsByTagName('input')[1].click();
- window.domAutomationController.send('done');
- """
- self.ExecuteJavascript(js_code, tab_index)
- def _CheckAnswerLog():
- return bool(re.search(r'NO|YES|42|MAYBE NOT|DEFINITELY|'
- 'ASK ME TOMORROW|MAYBE|PARTLY CLOUDY',
- self.GetDOMValue('document.getElementById("log").innerHTML',
- tab_index)))
-
- success = self.WaitUntil(_CheckAnswerLog)
- self.assertTrue(success, msg='Example %s failed. URL: %s' % (name, url))
-
- def _VerifyLoadProgressExample(self, tab_index, name, url):
- """Verify Dynamic Library Open Example.
-
- Args:
- tab_index: Tab index integer that the example is on.
- name: A string name of the example.
- url: A string url of the example.
- """
- # Check if example loads and displays loading progress.
- success = self.WaitUntil(
- lambda: self.GetDOMValue(
- 'document.getElementById("statusField").innerHTML', tab_index),
- timeout=150, expect_retval='SUCCESS')
- self.assertTrue(success, msg='Example %s failed. URL: %s' % (name, url))
-
- def _CheckLoadProgressStatus():
- return re.search(
- r'(loadstart).+(progress:).+(load).+(loadend).+(lastError:)',
- self.GetDOMValue(
- 'document.getElementById("log").innerHTML', tab_index))
- success = self.WaitUntil(_CheckLoadProgressStatus)
- self.assertTrue(success, msg='Example %s failed. URL: %s' % (name, url))
-
- def _VerifyPiGeneratorExample(self, tab_index, name, url):
- """Verify Pi Generator Example.
-
- Args:
- tab_index: Tab index integer that the example is on.
- name: A string name of the example.
- url: A string url of the example.
- """
- success = self.WaitUntil(
- lambda: self.GetDOMValue('document.getElementById("pi").value',
- tab_index)[0:3],
- expect_retval='3.1')
- self.assertTrue(success, msg='Example %s failed. URL: %s' % (name, url))
-
- def _VerifySineSynthExample(self, tab_index, name, url):
- """Verify Sine Wave Synthesizer Example.
-
- Args:
- tab_index: Tab index integer that the example is on.
- name: A string name of the example.
- url: A string url of the example.
- """
- success = self.WaitUntil(
- lambda: self.GetDOMValue(
- 'document.getElementById("frequency_field").value',
- tab_index), timeout=150, expect_retval='440')
- self.assertTrue(success, msg='Example %s failed. URL: %s' % (name, url))
- self.ExecuteJavascript(
- 'document.body.getElementsByTagName("button")[0].click();'
- 'window.domAutomationController.send("done")',
- tab_index)
-
- def _VerifyGetURLExample(self, tab_index, name, url):
- """Verify GetURL Example.
-
- Args:
- tab_index: Tab index integer that the example is on.
- name: A string name of the example.
- url: A string url of the example.
- """
- success = self.WaitUntil(
- lambda: self.GetDOMValue(
- 'document.getElementById("statusField").innerHTML',
- tab_index), timeout=150, expect_retval='SUCCESS')
- self.assertTrue(success, msg='Example %s failed. URL: %s' % (name, url))
- self.ExecuteJavascript(
- 'document.getElementById("button").click();'
- 'window.domAutomationController.send("done")',
- tab_index)
- success = self._VerifyElementPresent('general_output', 'test passed',
- tab_index, msg='Example %s failed. URL: %s' % (name, url))
-
- def _CheckForCrashes(self):
- """Check for any browser/tab crashes and hangs."""
- self.assertTrue(self.GetBrowserWindowCount(),
- msg='Browser crashed, no window is open.')
-
- info = self.GetBrowserInfo()
- breakpad_folder = info['properties']['DIR_CRASH_DUMPS']
- old_dmp_files = glob.glob(os.path.join(breakpad_folder, '*.dmp'))
-
- # Verify there're no crash dump files.
- for dmp_file in glob.glob(os.path.join(breakpad_folder, '*.dmp')):
- self.assertTrue(dmp_file in old_dmp_files,
- msg='Crash dump %s found' % dmp_file)
-
- # Check for any crashed tabs.
- tabs = info['windows'][0]['tabs']
- for tab in tabs:
- if tab['url'] != 'about:blank':
- if not self.GetDOMValue('document.body.innerHTML', tab['index']):
- self.fail(msg='Tab crashed on %s' % tab['url'])
-
- def _GetPlatformArchitecture(self):
- """Get platform architecture.
-
- Returns:
- A string representing the platform architecture.
- """
- if pyauto.PyUITest.IsWin():
- if os.environ['PROGRAMFILES'] == 'C:\\Program Files (x86)':
- return '64bit'
- else:
- return '32bit'
- elif pyauto.PyUITest.IsMac() or pyauto.PyUITest.IsLinux():
- if platform.machine() == 'x86_64':
- return '64bit'
- else:
- return '32bit'
- return '32bit'
-
- def _HasPathInTree(self, pattern, is_file, root=os.curdir):
- """Recursively checks if a file/directory matching a pattern exists.
-
- Args:
- pattern: Pattern of file or directory name.
- is_file: True if looking for file, or False if looking for directory.
- root: Directory to start looking.
-
- Returns:
- True, if root contains the directory name pattern, or
- False otherwise.
- """
- for path, dirs, files in os.walk(os.path.abspath(root)):
- if is_file:
- if len(fnmatch.filter(files, pattern)):
- return True
- else:
- if len(fnmatch.filter(dirs, pattern)):
- return True
- return False
-
- def _HasAllSystemRequirements(self):
- """Verify NaCl SDK installation system requirements.
-
- Returns:
- True, if system passed requirements, or
- False otherwise.
- """
- # Check python version.
- if sys.version_info[0:2] < (2, 6):
- return False
-
- # Check OS requirements.
- if pyauto.PyUITest.IsMac():
- mac_min_version = version.StrictVersion('10.6')
- mac_version = version.StrictVersion(platform.mac_ver()[0])
- if mac_version < mac_min_version:
- return False
- elif pyauto.PyUITest.IsWin():
- if not (self.IsWin7() or self.IsWinVista() or self.IsWinXP()):
- return False
- elif pyauto.PyUITest.IsLinux():
- pass # TODO(chrisphan): Check Lin requirements.
- else:
- return False
-
- # Check for Chrome version compatibility.
- # NaCl supports Chrome 10 and higher builds.
- min_required_chrome_build = self._settings['min_required_chrome_build']
- browser_info = self.GetBrowserInfo()
- chrome_version = browser_info['properties']['ChromeVersion']
- chrome_build = int(chrome_version.split('.')[0])
- return chrome_build >= min_required_chrome_build
-
- def _DownloadNaClSDK(self):
- """Download NaCl SDK."""
- self._temp_dir = tempfile.mkdtemp()
- dl_file = urllib2.urlopen(self._settings['post_sdk_zip'])
- file_path = os.path.join(self._temp_dir, 'nacl_sdk.zip')
-
- try:
- f = open(file_path, 'wb')
- f.write(dl_file.read())
- except IOError:
- self.fail(msg='Cannot open %s.' % file_path)
- finally:
- f.close()
-
- def _ExtractNaClSDK(self):
- """Extract NaCl SDK."""
- source_file = os.path.join(self._temp_dir, 'nacl_sdk.zip')
- if zipfile.is_zipfile(source_file):
- zip = zipfile.ZipFile(source_file, 'r')
- zip.extractall(self._extracted_sdk_path)
- else:
- self.fail(msg='%s is not a valid zip file' % source_file)
-
- def _IsURLAlive(self, url):
- """Test if URL is alive."""
- try:
- urllib2.urlopen(url)
- except:
- return False
- return True
-
- def _CloseHTTPServer(self, proc=None):
- """Close HTTP server.
-
- Args:
- proc: Process that opened the HTTP server.
- proc is None when there is no pointer to HTTP server process.
- """
- if not self._IsURLAlive('http://localhost:5103'):
- return
- response = urllib2.urlopen('http://localhost:5103')
- html = response.read()
- if not 'Native Client' in html:
- self.fail(msg='Port 5103 is in use.')
-
- urllib2.urlopen('http://localhost:5103?quit=1')
- success = self.WaitUntil(
- lambda: self._IsURLAlive('http://localhost:5103'),
- retry_sleep=1, expect_retval=False)
- if not success:
- if not proc:
- self.fail(msg='Failed to close HTTP server.')
- else:
- if proc.poll() == None:
- try:
- proc.kill()
- except:
- self.fail(msg='Failed to close HTTP server.')
-
- def _SearchNaClSDKFile(self, search_list):
- """Search NaCl SDK file for example files and directories in Windows.
-
- Args:
- search_list: A list of strings, representing file and
- directory names for which to search.
- """
- missing_items = []
- for name in search_list:
- is_file = name.find('/') < 0
- if not is_file:
- name = name.replace('/', '')
- if not self._HasPathInTree(name, is_file, self._extracted_sdk_path):
- missing_items.append(name)
- self.assertEqual(len(missing_items), 0,
- msg='Missing files or directories: %s' %
- ', '.join(map(str, missing_items)))
-
- def ExtraChromeFlags(self):
- """Ensures Nacl is enabled.
-
- Returns:
- A list of extra flags to pass to Chrome when it is launched.
- """
- extra_chrome_flags = [
- '--enable-nacl',
- '--enable-nacl-exception-handling',
- '--nacl-gdb',
- ]
- return pyauto.PyUITest.ExtraChromeFlags(self) + extra_chrome_flags
-
-if __name__ == '__main__':
- pyauto_functional.Main()
« no previous file with comments | « chrome/test/functional/multiprofile.py ('k') | chrome/test/functional/netflix.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698