NEW: Add regression test utility for HandsPlayers
This commit is contained in:
		
							parent
							
								
									fbcf987d97
								
							
						
					
					
						commit
						bb6225f80c
					
				
							
								
								
									
										90
									
								
								pyfpdb/TestHandsPlayers.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								pyfpdb/TestHandsPlayers.py
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,90 @@
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					import codecs
 | 
				
			||||||
 | 
					import pprint
 | 
				
			||||||
 | 
					import PokerStarsToFpdb
 | 
				
			||||||
 | 
					from Hand import *
 | 
				
			||||||
 | 
					import Configuration
 | 
				
			||||||
 | 
					import Database
 | 
				
			||||||
 | 
					import SQL
 | 
				
			||||||
 | 
					import fpdb_import
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def error_report( filename, hand, stat, ghash, testhash):
 | 
				
			||||||
 | 
					    print "Regression Test Error:"
 | 
				
			||||||
 | 
					    print "\tFile: %s" % filename
 | 
				
			||||||
 | 
					    print "\tStat: %s" % stat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def compare(leaf, importer):
 | 
				
			||||||
 | 
					    filename = leaf
 | 
				
			||||||
 | 
					    #print "DEBUG: fileanme: %s" % filename
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Test if this is a hand history file
 | 
				
			||||||
 | 
					    if filename.endswith('.txt'):
 | 
				
			||||||
 | 
					        # test if there is a .hp version of the file
 | 
				
			||||||
 | 
					        importer.addBulkImportImportFileOrDir(filename, site="PokerStars")
 | 
				
			||||||
 | 
					        (stored, dups, partial, errs, ttime) = importer.runImport()
 | 
				
			||||||
 | 
					        if os.path.isfile(filename + '.hp'):
 | 
				
			||||||
 | 
					            # Compare them
 | 
				
			||||||
 | 
					            hashfilename = filename + '.hp'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            in_fh = codecs.open(hashfilename, 'r', 'utf8')
 | 
				
			||||||
 | 
					            whole_file = in_fh.read()
 | 
				
			||||||
 | 
					            in_fh.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            testhash = eval(whole_file)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            hhc = importer.getCachedHHC()
 | 
				
			||||||
 | 
					            handlist = hhc.getProcessedHands()
 | 
				
			||||||
 | 
					            #We _really_ only want to deal with a single hand here.
 | 
				
			||||||
 | 
					            for hand in handlist:
 | 
				
			||||||
 | 
					                ghash = hand.stats.getHandsPlayers()
 | 
				
			||||||
 | 
					                for p in ghash:
 | 
				
			||||||
 | 
					                    pstat = ghash[p]
 | 
				
			||||||
 | 
					                    teststat = testhash[p]
 | 
				
			||||||
 | 
					                    for stat in pstat:
 | 
				
			||||||
 | 
					                        if pstat[stat] == teststat[stat]:
 | 
				
			||||||
 | 
					                            # The stats match - continue
 | 
				
			||||||
 | 
					                            pass
 | 
				
			||||||
 | 
					                        else:
 | 
				
			||||||
 | 
					                            # Stats don't match - Doh!
 | 
				
			||||||
 | 
					                            error_report(filename, hand, stat, ghash, testhash)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        importer.clearFileList()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def walk_testfiles(dir, function, importer):
 | 
				
			||||||
 | 
					    """Walks a directory, and executes a callback on each file """
 | 
				
			||||||
 | 
					    dir = os.path.abspath(dir)
 | 
				
			||||||
 | 
					    for file in [file for file in os.listdir(dir) if not file in [".",".."]]:
 | 
				
			||||||
 | 
					        nfile = os.path.join(dir,file)
 | 
				
			||||||
 | 
					        if os.path.isdir(nfile):
 | 
				
			||||||
 | 
					            walk_testfiles(nfile, compare, importer)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            compare(nfile, importer)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def main(argv=None):
 | 
				
			||||||
 | 
					    if argv is None:
 | 
				
			||||||
 | 
					        argv = sys.argv[1:]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    config = Configuration.Config(file = "HUD_config.test.xml")
 | 
				
			||||||
 | 
					    db = Database.Database(config)
 | 
				
			||||||
 | 
					    sql = SQL.Sql(db_server = 'sqlite')
 | 
				
			||||||
 | 
					    settings = {}
 | 
				
			||||||
 | 
					    settings.update(config.get_db_parameters())
 | 
				
			||||||
 | 
					    settings.update(config.get_tv_parameters())
 | 
				
			||||||
 | 
					    settings.update(config.get_import_parameters())
 | 
				
			||||||
 | 
					    settings.update(config.get_default_paths())
 | 
				
			||||||
 | 
					    db.recreate_tables()
 | 
				
			||||||
 | 
					    importer = fpdb_import.Importer(False, settings, config)
 | 
				
			||||||
 | 
					    importer.setDropIndexes("don't drop")
 | 
				
			||||||
 | 
					    importer.setFailOnError(True)
 | 
				
			||||||
 | 
					    importer.setThreads(-1)
 | 
				
			||||||
 | 
					    importer.setCallHud(False)
 | 
				
			||||||
 | 
					    importer.setFakeCacheHHC(True)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    walk_testfiles("regression-test-files/cash/Stars/", compare, importer)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == '__main__':
 | 
				
			||||||
 | 
					    sys.exit(main())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user