Revision: 10955
Author: [email protected]
Date: Wed Mar 7 04:51:31 2012
Log: Implement --download-data for test harness.
This allows the test harness to download missing test suite data if
necessary. We use the bzip2 archive for test262 because it is faster
than cloning the repository and also works without any Mercurial
installation.
[email protected]
Review URL: https://chromiumcodereview.appspot.com/9619002
http://code.google.com/p/v8/source/detail?r=10955
Modified:
/branches/bleeding_edge/test/test262/testcfg.py
/branches/bleeding_edge/tools/test-wrapper-gypbuild.py
/branches/bleeding_edge/tools/test.py
=======================================
--- /branches/bleeding_edge/test/test262/testcfg.py Fri Dec 16 05:37:20 2011
+++ /branches/bleeding_edge/test/test262/testcfg.py Wed Mar 7 04:51:31 2012
@@ -29,8 +29,14 @@
import test
import os
from os.path import join, exists
+import urllib
+import hashlib
+import tarfile
+TEST_262_ARCHIVE_REVISION = '3a890174343c' # This is the r309 revision.
+TEST_262_ARCHIVE_MD5 = 'be5d4cfbe69cef70430907b8f3a92b50'
+TEST_262_URL = 'http://hg.ecmascript.org/tests/test262/archive/%s.tar.bz2'
TEST_262_HARNESS = ['sta.js']
@@ -93,6 +99,28 @@
tests.append(test)
return tests
+ def DownloadData(self):
+ revision = TEST_262_ARCHIVE_REVISION
+ archive_url = TEST_262_URL % revision
+ archive_name = join(self.root, 'test262-%s.tar.bz2' % revision)
+ directory_name = join(self.root, "test262-%s" % revision)
+ if not exists(directory_name) or not exists(archive_name):
+ if not exists(archive_name):
+ print "Downloading test data from %s ..." % archive_url
+ urllib.urlretrieve(archive_url, archive_name)
+ if not exists(directory_name):
+ print "Extracting test262-%s.tar.bz2 ..." % revision
+ md5 = hashlib.md5()
+ with open(archive_name,'rb') as f:
+ for chunk in iter(lambda: f.read(8192), ''):
+ md5.update(chunk)
+ if md5.hexdigest() != TEST_262_ARCHIVE_MD5:
+ raise Exception("Hash mismatch of test data file")
+ archive = tarfile.open(archive_name, 'r:bz2')
+ archive.extractall(join(self.root))
+ if not exists(join(self.root, 'data')):
+ os.symlink(directory_name, join(self.root, 'data'))
+
def GetBuildRequirements(self):
return ['d8']
=======================================
--- /branches/bleeding_edge/tools/test-wrapper-gypbuild.py Mon Dec 12
00:19:30 2011
+++ /branches/bleeding_edge/tools/test-wrapper-gypbuild.py Wed Mar 7
04:51:31 2012
@@ -73,6 +73,8 @@
choices=PROGRESS_INDICATORS, default="mono")
result.add_option("--report", help="Print a summary of the tests to be
run",
default=False, action="store_true")
+ result.add_option("--download-data", help="Download missing test suite
data",
+ default=False, action="store_true")
result.add_option("-s", "--suite", help="A test suite",
default=[], action="append")
result.add_option("-t", "--timeout", help="Timeout in seconds",
@@ -161,6 +163,8 @@
result += ['--progress=' + options.progress]
if options.report:
result += ['--report']
+ if options.download_data:
+ result += ['--download-data']
if options.suite != []:
for suite in options.suite:
result += ['--suite=../../test/' + suite]
=======================================
--- /branches/bleeding_edge/tools/test.py Thu Mar 1 03:37:10 2012
+++ /branches/bleeding_edge/tools/test.py Wed Mar 7 04:51:31 2012
@@ -631,9 +631,15 @@
def GetBuildRequirements(self, path, context):
return self.GetConfiguration(context).GetBuildRequirements()
+ def DownloadData(self, context):
+ config = self.GetConfiguration(context)
+ if 'DownloadData' in dir(config):
+ config.DownloadData()
+
def AddTestsToList(self, result, current_path, path, context, mode):
- for v in self.GetConfiguration(context).VariantFlags():
- tests = self.GetConfiguration(context).ListTests(current_path, path,
mode, v)
+ config = self.GetConfiguration(context)
+ for v in config.VariantFlags():
+ tests = config.ListTests(current_path, path, mode, v)
for t in tests: t.variant_flags = v
result += tests
@@ -655,6 +661,12 @@
result += test.GetBuildRequirements(rest, context)
return result
+ def DownloadData(self, path, context):
+ (name, rest) = CarCdr(path)
+ for test in self.tests:
+ if not name or name.match(test.GetName()):
+ test.DownloadData(context)
+
def ListTests(self, current_path, path, context, mode, variant_flags):
(name, rest) = CarCdr(path)
result = [ ]
@@ -1192,6 +1204,8 @@
default='scons')
result.add_option("--report", help="Print a summary of the tests to be
run",
default=False, action="store_true")
+ result.add_option("--download-data", help="Download missing test suite
data",
+ default=False, action="store_true")
result.add_option("-s", "--suite", help="A test suite",
default=[], action="append")
result.add_option("-t", "--timeout", help="Timeout in seconds",
@@ -1462,6 +1476,11 @@
root.GetTestStatus(context, sections, defs)
config = Configuration(sections, defs)
+ # Download missing test suite data if requested.
+ if options.download_data:
+ for path in paths:
+ root.DownloadData(path, context)
+
# List the tests
all_cases = [ ]
all_unused = [ ]
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev