1 #!/usr/bin/env python2.7
3 from erp5
.util
import taskdistribution
5 # XXX: This import is required, just to populate sys.modules['test_suite'].
6 # Even if it's not used in this file. Yuck.
7 import ERP5TypeTestSuite
9 def _parsingErrorHandler(data
, _
):
10 print >> sys
.stderr
, 'Error parsing data:', repr(data
)
11 taskdistribution
.patchRPCParser(_parsingErrorHandler
)
13 def makeSuite(node_quantity
=None, test_suite
=None, revision
=None,
14 db_list
=None, **kwargs
):
15 # BBB tests (plural form) is only checked for backward compatibility
16 for k
in sys
.modules
.keys():
17 if k
in ('tests', 'test',) or k
.startswith('tests.') or k
.startswith('test.'):
19 singular_succeed
= True
21 module_name
, class_name
= ('%s.%s' %
(singular_succeed
and 'test' or 'tests',
22 test_suite
)).rsplit('.', 1)
24 suite_class
= getattr(__import__(module_name
, None, None, [class_name
]),
26 except (AttributeError, ImportError):
27 if not singular_succeed
:
29 singular_succeed
= False
32 suite
= suite_class(revision
=revision
,
33 max_instance_count
=node_quantity
,
34 mysql_db_list
=db_list
.split(','),
39 parser
= argparse
.ArgumentParser(description
='Run a test suite.')
40 parser
.add_argument('--test_suite', help='The test suite name')
41 parser
.add_argument('--test_suite_title', help='The test suite title',
43 parser
.add_argument('--test_node_title', help='The test node title',
45 parser
.add_argument('--project_title', help='The project title',
47 parser
.add_argument('--revision', help='The revision to test',
48 default
='dummy_revision')
49 parser
.add_argument('--node_quantity', help='Number of parallel tests to run',
51 parser
.add_argument('--master_url',
52 help='The Url of Master controling many suites',
54 parser
.add_argument('--db_list', help='A list of sql connection strings')
55 # parameters that needs to be passed to runUnitTest
56 parser
.add_argument('--conversion_server_hostname', default
=None)
57 parser
.add_argument('--conversion_server_port', default
=None)
58 parser
.add_argument('--volatile_memcached_server_hostname', default
=None)
59 parser
.add_argument('--volatile_memcached_server_port', default
=None)
60 parser
.add_argument('--persistent_memcached_server_hostname', default
=None)
61 parser
.add_argument('--persistent_memcached_server_port', default
=None)
62 parser
.add_argument('--bt5_path', default
=None)
63 parser
.add_argument("--xvfb_bin", default
=None)
64 parser
.add_argument("--firefox_bin", default
=None)
66 args
= parser
.parse_args()
67 if args
.bt5_path
is not None:
68 sys
.path
[0:0] = args
.bt5_path
.split(",")
69 master
= taskdistribution
.TaskDistributionTool(args
.master_url
)
70 test_suite_title
= args
.test_suite_title
or args
.test_suite
71 revision
= args
.revision
72 suite
= makeSuite(test_suite
=args
.test_suite
,
73 node_quantity
=args
.node_quantity
,
76 bt5_path
=args
.bt5_path
,
77 firefox_bin
=args
.firefox_bin
,
78 xvfb_bin
=args
.xvfb_bin
)
79 test_result
= master
.createTestResult(revision
, suite
.getTestList(),
80 args
.test_node_title
, suite
.allow_restart
, test_suite_title
,
82 if test_result
is not None:
83 assert revision
== test_result
.revision
, (revision
, test_result
.revision
)
84 while suite
.acquire():
85 test
= test_result
.start(suite
.running
.keys())
87 suite
.start(test
.name
, lambda status_dict
, __test
=test
:
88 __test
.stop(**status_dict
))
89 elif not suite
.running
: