#!/usr/bin/env python
############################################################################
# Joshua R. Boverhof, LBNL
# See Copyright for copyright notice!
###########################################################################
import unittest, warnings
from ServiceTest import main,CONFIG_PARSER,DOCUMENT,LITERAL,BROKE,TESTS
# General targets
def dispatch():
"""Run all dispatch tests"""
return _dispatchTestSuite(broke=False)
def local():
"""Run all local tests"""
return _localTestSuite(broke=False)
def net():
"""Run all network tests"""
return _netTestSuite(broke=False)
def all():
"""Run all tests"""
return _allTestSuite(broke=False)
# Specialized binding targets
def docLitTestSuite():
"""Run all doc/lit network tests"""
return _netTestSuite(broke=False, document=True, literal=True)
def rpcLitTestSuite():
"""Run all rpc/lit network tests"""
return _netTestSuite(broke=False, document=False, literal=True)
def rpcEncTestSuite():
"""Run all rpc/enc network tests"""
return _netTestSuite(broke=False, document=False, literal=False)
# Low level functions
def _allTestSuite(document=None, literal=None, broke=None):
return _makeTestSuite('all', document, literal, broke)
def _netTestSuite(document=None, literal=None, broke=None):
return _makeTestSuite('net', document, literal, broke)
def _localTestSuite(document=None, literal=None, broke=None):
return _makeTestSuite('local', document, literal, broke)
def _dispatchTestSuite(document=None, literal=None, broke=None):
return _makeTestSuite('dispatch', document, literal, broke)
def _makeTestSuite(test, document=None, literal=None, broke=None):
"""Return a test suite containing all test cases that satisfy
the parameters. None means don't check.
Parameters:
test -- "net" run network tests, "local" run local tests,
"dispatch" run dispatch tests, "all" run all tests.
document -- None, True, False
literal -- None, True, False
broke -- None, True, False
"""
assert test in ['net', 'local', 'dispatch', 'all'],(
'test must be net, local, dispatch, or all')
cp = CONFIG_PARSER
testSections = []
sections = [\
'rpc_encoded' , 'rpc_encoded_broke',
'rpc_literal', 'rpc_literal_broke', 'rpc_literal_broke_interop',
'doc_literal', 'doc_literal_broke', 'doc_literal_broke_interop',
]
boo = cp.getboolean
for s,d,l,b in map(\
lambda sec: \
(sec, (None,boo(sec,DOCUMENT)), (None,boo(sec,LITERAL)), (None,boo(sec,BROKE))), sections):
if document in d and literal in l and broke in b:
testSections.append(s)
suite = unittest.TestSuite()
for section in testSections:
moduleList = cp.get(section, TESTS).split()
for module in map(__import__, moduleList):
def _warn_empty():
warnings.warn('"%s" has no test "%s"' %(module, test))
return unittest.TestSuite()
s = getattr(module, test, _warn_empty)()
suite.addTest(s)
return suite
if __name__ == "__main__":
main()
|