1#!/usr/bin/env python2 2 3"""Run MiddleKit test script.""" 4 5from TestCommon import * 6import MiddleKit.Run 7 8 9def test(filename, configFilename, pyFilename, deleteData): 10 curDir = os.getcwd() 11 os.chdir(workDir) 12 try: 13 filename = '../' + filename 14 15 if os.path.splitext(filename)[1] == '': 16 filename += '.mkmodel' 17 pyFilename = os.path.join(filename, pyFilename) 18 if not os.path.exists(pyFilename): 19 print 'No such file', pyFilename 20 return 21 22 print 'Testing %s...' % filename 23 24 # Set up the store 25 names = {} 26 src = 'from MiddleKit.Run.%sObjectStore import %sObjectStore as c' % (dbName, dbName) 27 exec src in names 28 objectStoreClass = names['c'] 29 store = objectStoreClass(**storeArgs) 30 store.readModelFileNamed(filename, configFilename=configFilename) 31 assert store.model()._havePythonClasses # @@ 32 33 # Clear the database 34 if deleteData: 35 print 'Deleting all database records for test...' 36 transaction = [] 37 for klass in store.model().klasses().values(): 38 if not klass.isAbstract(): 39 transaction.append('delete from %s;' % klass.name()) 40 ObjectStore.Store.executeSQLTransaction(transaction) 41 42 # Run the test 43 results = {} 44 execfile(pyFilename, results) 45 assert 'test' in results, 'No test defined in %s.' % filename 46 results['test'](store) 47 finally: 48 os.chdir(curDir) 49 50def usage(): 51 print 'TestRun.py <model> <config file> <py file> [delete=no|yes]' 52 print 53 sys.exit(1) 54 55def main(): 56 if len(sys.argv) < 4: 57 usage() 58 59 modelFilename = sys.argv[1] 60 configFilename = sys.argv[2] 61 pyFilename = sys.argv[3] 62 deleteData = True 63 if len(sys.argv) > 4: 64 delArg = sys.argv[4] 65 parts = delArg.split('=') 66 if len(parts) != 2 or parts[0] != 'delete': 67 usage() 68 deleteData = parts[1].lower() in ('yes', 'true', '1') 69 70 test(modelFilename, configFilename, pyFilename, deleteData) 71 72 73if __name__ == '__main__': 74 try: 75 main() 76 except: 77 import traceback 78 exc_info = sys.exc_info() 79 traceback.print_exception(*exc_info) 80 # print '>> ABOUT TO EXIT WITH CODE 1' 81 sys.exit(1) 82