diff --git a/python/getManybugs.py b/python/getManybugs.py index 2329a4b..3404dff 100644 --- a/python/getManybugs.py +++ b/python/getManybugs.py @@ -56,25 +56,27 @@ def export(): if not os.path.exists(join(BUGDIR)): os.mkdir(join(BUGDIR)) - cmd = 'bugzoo bug list | grep Yes' - o,e = shellGitCheckout(cmd) + # cmd = 'bugzoo bug list | grep Yes' + # o,e = shellGitCheckout(cmd) + # + # # if o =='': + # # with open(join(DATA_PATH,'bugzooList'),mode='r') as b: + # # o = b.read() + # + # bugList = [] + # for line in o.split('\n'): + # if(line.strip() == ''): + # continue + # bugList.append(line.split('|')[1].strip()) + # bugList + # # bugList = [i.replace(':', '-').replace('manybugs-', 'squareslab/manybugs:') for i in bugList] + # # exportCore(bugList[0]) + # # print("bugList length: {}".format(len(bugList))) - if o =='': - with open(join(DATA_PATH,'bugzooList'),mode='r') as b: - o = b.read() - bugList = [] - for line in o.split('\n'): - if(line.strip() == ''): - continue - bugList.append(line.split('|')[1].strip()) - bugList - # bugList = [i.replace(':', '-').replace('manybugs-', 'squareslab/manybugs:') for i in bugList] - # exportCore(bugList[0]) - # print("bugList length: {}".format(len(bugList))) + bugList = ['manybugs:gmp:14166-14167','manybugs:gzip:2009-08-16-3fe0caeada-39a362ae9d','manybugs:gzip:2009-10-09-1a085b1446-118a107f2d','manybugs:gzip:2010-02-19-3eb6091d69-884ef6d16c','manybugs:libtiff:2005-12-21-3b848a7-3edb9cd','manybugs:libtiff:2006-02-23-b2ce5d8-207c78a','manybugs:libtiff:2006-03-03-a72cf60-0a36d7f','manybugs:libtiff:2006-03-03-eec4c06-ee65c74','manybugs:libtiff:2007-07-13-09e8220-f2d989d','manybugs:libtiff:2007-11-02-371336d-865f7b2','manybugs:libtiff:2009-02-05-764dbba-2e42d63','manybugs:libtiff:2009-08-28-e8a47d4-023b6df','manybugs:libtiff:2010-11-27-eb326f9-eec7ec0','manybugs:lighttpd:1948-1949','manybugs:lighttpd:2254-2259','manybugs:lighttpd:2661-2662','manybugs:lighttpd:2785-2786','manybugs:php:2011-03-25-8138f7de40-3acdca4703','manybugs:php:2011-04-02-70075bc84c-5a8c917c37','manybugs:php:2011-11-19-eeba0b5681-d3b20b4058','manybugs:php:2011-12-04-1e6a82a1cf-dfa08dc325','manybugs:php:2011-12-10-74343ca506-52c36e60c4','manybugs:php:2012-02-08-ff63c09e6f-6672171672'] - - - for b in [b for b in bugList if b in sosbugs]: + # for b in [b for b in bugList if b in sosbugs]: + for b in [b for b in sosbugs]: # cmd = 'bugzoo bug build ' + b # o,e = shellGitCheckout(cmd) # print(o) diff --git a/python/patch_validate.py b/python/patch_validate.py index d309038..28b8719 100755 --- a/python/patch_validate.py +++ b/python/patch_validate.py @@ -5,6 +5,70 @@ import os from common.commons import * DATA_PATH = os.environ["DATA_PATH"] ROOT_DIR = os.environ["ROOT_DIR"] +DATASET = os.environ["dataset"] +COCCI_PATH = join(os.environ["coccinelle"],'spatch') +def patchSourceFile(bugPath,spfile,bugName): + # print(bugPath) + srcName = bugPath.split('/')[-1].split('-')[0] + srcPath = bugPath + patchName = srcName + + + + if(isfile(join(DATA_PATH,"manybugs",bugName,'patched',patchName+spfile+'.c'))): + return join(DATA_PATH,"manybugs",bugName,'patched',patchName+spfile+'.c') + + if not (isfile(join(DATA_PATH,"manybugs",bugName,'patches',patchName+spfile+'.txt'))): + cmd = COCCI_PATH + ' --sp-file ' + join(DATASET, 'cocci', spfile) + ' ' + srcPath + ' --patch -o' + join( + DATA_PATH, "manybugs", bugName, 'patches', patchName) + ' > ' + join(DATA_PATH, "manybugs", bugName, + 'patches', + patchName + spfile + '.txt') + + output, e = shellGitCheckout(cmd) + # logging.info(output) + patchSize = os.path.getsize(join(DATA_PATH,"manybugs",bugName,'patches',patchName+spfile+'.txt')) + if patchSize == 0 : + # os.remove(join(DATA_PATH,"introclass",bugName,'patches',patchName+spfile+'.txt')) + return None + else: + + cmd = 'patch -d '+'/'.join(srcPath.split('/')[:-1])+' -i '+join(DATA_PATH,"manybugs",bugName,'patches',patchName+spfile+'.txt')+' -o '+join(DATA_PATH,"manybugs",bugName,'patched',patchName+spfile+'.c') + o,e = shellGitCheckout(cmd) + return join(DATA_PATH, "manybugs", bugName, 'patched', patchName + spfile + '.c') + +sosbugs = ['manybugs:gmp:14166-14167', 'manybugs:gzip:2009-08-16-3fe0caeada-39a362ae9d', + 'manybugs:gzip:2009-10-09-1a085b1446-118a107f2d', 'manybugs:gzip:2010-02-19-3eb6091d69-884ef6d16c', + 'manybugs:libtiff:2005-12-21-3b848a7-3edb9cd', 'manybugs:libtiff:2006-03-03-a72cf60-0a36d7f', + 'manybugs:libtiff:2006-03-03-eec4c06-ee65c74', 'manybugs:libtiff:2007-07-13-09e8220-f2d989d', + 'manybugs:libtiff:2007-11-02-371336d-865f7b2', 'manybugs:libtiff:2009-02-05-764dbba-2e42d63', + 'manybugs:libtiff:2009-08-28-e8a47d4-023b6df', 'manybugs:libtiff:2010-11-27-eb326f9-eec7ec0', + 'manybugs:libtiff:2006-02-23-b2ce5d8-207c78a', 'manybugs:lighttpd:2661-2662', 'manybugs:lighttpd:2254-2259', + 'manybugs:lighttpd:2785-2786', 'manybugs:lighttpd:1948-1949', + 'manybugs:php:2011-12-10-74343ca506-52c36e60c4', 'manybugs:php:2011-04-02-70075bc84c-5a8c917c37', + 'manybugs:php:2011-03-25-8138f7de40-3acdca4703', 'manybugs:php:2011-12-04-1e6a82a1cf-dfa08dc325', + 'manybugs:php:2012-02-08-ff63c09e6f-6672171672', 'manybugs:php:2011-11-19-eeba0b5681-d3b20b4058', + 'manybugs:php:2011-04-07-77ed819430-efcb9a71cd', 'manybugs:php:2011-02-01-01745fa657-1f49902999', + 'manybugs:php:2012-03-12-7aefbf70a8-efc94f3115', 'manybugs:php:2011-10-15-0a1cc5f01c-05c5c8958e', + 'manybugs:php:2011-01-30-5bb0a44e06-1e91069eb4', 'manybugs:php:2011-02-01-fefe9fc5c7-0927309852', + 'manybugs:php:2011-02-27-e65d361fde-1d984a7ffd', 'manybugs:php:2011-03-19-5d0c948296-8deb11c0c3', + 'manybugs:php:2011-03-23-63673a533f-2adf58cfcf', 'manybugs:php:2011-04-06-187eb235fe-2e25ec9eb7', + 'manybugs:php:2011-04-09-db01e840c2-09b990f499', 'manybugs:php:2011-05-17-453c954f8a-daecb2c0f4', + 'manybugs:php:2011-05-24-b60f6774dc-1056c57fa9', 'manybugs:php:2011-10-16-1f78177e2b-d4ae4e79db', + 'manybugs:php:2011-10-31-2e5d5e5ac6-b5f15ef561', 'manybugs:php:2011-10-31-c4eb5f2387-2e5d5e5ac6', + 'manybugs:php:2011-11-01-ceac9dc490-9b0d73af1d', 'manybugs:php:2011-11-11-fcbfbea8d2-c1e510aea8', + 'manybugs:php:2011-11-15-236120d80e-fb37f3b20d', 'manybugs:php:2011-11-16-55acfdf7bd-3c7a573a2c', + 'manybugs:php:2011-11-22-ecc6c335c5-b548293b99', 'manybugs:php:2011-11-23-eca88d3064-db0888dfc1', + 'manybugs:php:2012-01-27-544e36dfff-acaf9c5227', 'manybugs:php:2012-01-30-9de5b6dc7c-4dc8b1ad11', + 'manybugs:php:2012-02-25-c1322d2505-cfa9c90b20', 'manybugs:php:2012-03-04-60dfd64bf2-34fe62619d', + 'manybugs:php:2012-03-08-0169020e49-cdc512afb3', 'manybugs:php:2012-03-11-3954743813-d4f05fbffc', + 'manybugs:php:2012-03-12-438a30f1e7-7337a901b7', 'manybugs:python:69223-69224', + 'manybugs:python:69368-69372', 'manybugs:python:70098-70101', 'manybugs:python:70056-70059', + 'manybugs:wireshark:37112-37111', 'manybugs:wireshark:37122-37123', 'manybugs:gmp:13420-13421', + 'manybugs:gzip:2009-09-26-a1d3d4019d-f17cbd13a1', 'manybugs:lighttpd:1913-1914', + 'manybugs:php:2011-11-19-51a4ae6576-bc810a443d', 'manybugs:php:2011-03-11-d890ece3fc-6e74d95f34', + 'manybugs:php:2011-11-19-eeba0b5681-f330c8ab4e', 'manybugs:php:2012-01-01-80dd931d40-7c3177e5ab'] + + def readTestSuite(testPath): regex = r"([p|n0-9]+)\)" with open(testPath,mode='r') as testFile: @@ -18,112 +82,232 @@ def readTestSuite(testPath): groupNum = groupNum + 1 testList.append(match.group(groupNum)) return testList -def myvalidateCore(t): - bugName, port = t - container = None - with bugzoo.server.ephemeral(port=port, verbose=False, timeout_connection=30000) as client: - try: +# def myvalidateCore(t): +# bugName, port = t +# container = None +# with bugzoo.server.ephemeral(port=port, verbose=False, timeout_connection=30000) as client: +# try: +# +# bug = client.bugs[bugName] +# if client.bugs.is_installed(bug): +# pass +# else: +# client.bugs.build(bug) +# fix = 'failure' +# output = '' +# output += 'bugName:' + bugName + ', ' +# container = client.containers.provision(bug) +# # output += 'First_test:' +# +# preId, postId = bugName.split(':')[-1].split('-')[-2:] +# originalBugs = get_filepaths(join(DATA_PATH, 'manybugs', bugName, 'diffs'), preId) +# # for ob in originalBugs: +# # filepath = ob.split('diffs')[-1] +# # cmd = 'cp /experiment/diffs' + filepath + ' src' + filepath.replace('-' + preId, '') +# # client.containers.exec(container=container, command=cmd, context='/experiment/') +# +# validTests = readTestSuite(join(DATA_PATH, 'manybugs', bugName, 'test.sh')) +# output += 'total ' + str(len(bug.tests._tests)) + ' newtotal ' + str(len(validTests)) +# # client.containers.build(container) +# # pre_failure_cases, pre_failure, total, pre_test_outcomes = test_all(bug, container, client,validTests) +# # if pre_failure == 0: +# # logging.error(bugName + ' no failed test initially') +# # return '' +# # output += '@fail:' + ','.join(pre_failure) + '@total:' + str(total) + ', ' + '@newtotal:' + str(len(validTests)) + ', ' +# # +# # fixBugs = get_filepaths(join(DATA_PATH, 'manybugs', bugName, 'diffs'), postId) +# # for ob in fixBugs: +# # filepath = ob.split('diffs')[-1] +# # cmd = 'cp /experiment/diffs' + filepath + ' src' + filepath.replace('-' + postId, '') +# # client.containers.exec(container=container, command=cmd, context='/experiment/') +# # client.containers.build(container) +# # diff_files = get_diff(bug.name, client, container) +# # patch_result = patch_application(client, container, diff_files) +# # if not patch_result: +# # print("@{}@".format(patch_result)) +# # continue +# # print("@{}@".format(patch_result),end=' ') +# # +# # +# # print("Second_test:",end=' ') +# # post_test_outcomes = {} +# # post_failure_cases, post_failure, total, post_test_outcomes = test_all(bug, container, client,validTests) +# # output += ','.join(post_failure) + ' ' +# # if len(post_failure) == 0: +# # # times += 1 +# # fix = 'success' +# # # print("fix {} by {}".format(bugName, patch_name)) +# # output += 'fix {} '.format(bugName) +# +# +# # patch_names = os.listdir(join(DATA_PATH,'manybugs',bugName,'patched')) +# # patch_names = [i for i in patch_names if not i.endswith('.DS_Store')] +# # if len(originalBugs) != 1: +# # members = [] +# # +# # for member in set([i.split('-')[0] for i in patch_names]): +# # members.append([i for i in patch_names if i.startswith(member)]) +# # +# # patch_names= list(itertools.product(*members)) +# # patch_names +# # times = 0 +# # for patch_name in patch_names: +# # if isinstance(patch_name, tuple): +# # for i in patch_name: +# # copyPatch(bugName, client, container, originalBugs, i, preId) +# # else: +# # copyPatch(bugName, client, container, originalBugs, patch_name, preId) +# # +# # patch_result = client.containers.build(container) +# # if not patch_result.successful: +# # output += '@False@F ' +# # continue +# # output += '@True@' +# # +# # post_test_outcomes = {} +# # post_failure_cases, post_failure, total, post_test_outcomes = test_all(bug, container, client,validTests) +# # +# # output += ','.join(post_failure) + ' ' +# # if len(post_failure) == 0: +# # # times += 1 +# # fix = 'success' +# # # print("fix {} by {}".format(bugName, patch_name)) +# # output += 'fix {} '.format(bugName) +# # +# # output += 'times:{}, '.format(times) + fix +# +# print(output) +# return output +# +# except Exception as e: +# logging.error(e) +# # continue +# finally: +# # '' +# cmd = 'docker stop {}'.format(container.id) +# out, e = shellGitCheckout(cmd) +# # docker stop $(docker ps -q) - bug = client.bugs[bugName] - if client.bugs.is_installed(bug): - pass +def checkDataset(bugName,preId,postId,container,client,output,bug): + originalBugs = get_filepaths(join(DATA_PATH, 'manybugs', bugName, 'diffs'), preId) + for ob in originalBugs: + filepath = ob.split('diffs')[-1] + cmd = 'cp diffs' + filepath + ' src' + filepath.replace('-' + preId, '') + client.containers.exec(container=container, command=cmd, context='/experiment/') + + validTests = readTestSuite(join(DATA_PATH, 'manybugs', bugName, 'test.sh')) + client.containers.build(container) + pre_failure_cases, pre_failure, total, pre_test_outcomes = test_all_(bug, container, client, validTests) + if pre_failure == 0: + logging.error(bugName + ' no failed test initially') + return '' + output += '@fail:' + ','.join(pre_failure) + '@total:' + str(total) + ', ' + '@newtotal:' + str( + len(validTests)) + ', ' + + fixBugs = get_filepaths(join(DATA_PATH, 'manybugs', bugName, 'diffs'), postId) + for ob in fixBugs: + filepath = ob.split('diffs')[-1] + cmd = 'cp diffs' + filepath + ' src' + filepath.replace('-' + postId, '') + client.containers.exec(container=container, command=cmd, context='/experiment/') + + times = 0 + name = ob + patch_result = client.containers.build(container) + if patch_result.successful: + failure_cases, failure, total, test_outcomes = test_all_(bug, container, client, validTests) + if len(failure) == 0: + times += 1 + output += ' fixed by {}'.format(name) + else: + output += ' {}'.format(failure_cases) + else: + output += ' {}'.format('build error') + output += ' times:{}'.format(times) + if times > 0: + output += ' success' + else: + output += ' failure' + + return output + + +def checkTemplates(bugName,preId,postId,container,client,output,bug): + originalBugs = get_filepaths(join(DATA_PATH, 'manybugs', bugName, 'diffs'), preId) + + if not os.path.exists(join(DATA_PATH, 'manybugs', bugName, 'patches')): + os.makedirs(join(DATA_PATH, 'manybugs', bugName, 'patches')) + if not os.path.exists(join(join(DATA_PATH, 'manybugs', bugName, 'patched'))): + os.makedirs(join(DATA_PATH, 'manybugs', bugName, 'patched')) + + fix = 'failure' + + # for ob in originalBugs: + # filepath = ob.split('diffs')[-1] + # cmd = 'cp diffs' + filepath + ' src' + filepath.replace('-' + preId, '') + # client.containers.exec(container=container, command=cmd, context='/experiment/') + # + # validTests = readTestSuite(join(DATA_PATH, 'manybugs', bugName, 'test.sh')) + # client.containers.build(container) + # pre_failure_cases, pre_failure, total, pre_test_outcomes = test_all(bug, container, client, validTests) + # if pre_failure == 0: + # logging.error(bugName + ' no failed test initially') + # return '' + # output += '@fail:' + ','.join(pre_failure) + '@total:' + str(total) + ', ' + '@newtotal:' + str( + # len(validTests)) + ', ' + + # fixBugs = get_filepaths(join(DATA_PATH, 'manybugs', bugName, 'diffs'), postId) + + spfiles = listdir(join(DATASET, 'cocci')) + # print("patching... " + bugName) + for idx, spfile in enumerate(spfiles): + if spfile == '.DS_Store': + continue + + # path = join(DATA_PATH, 'manybugs', bugName) + + path= originalBugs[0] + patch = patchSourceFile(path, spfile, bugName) + + times = 0 + if patch is None: + continue + + # for ob in fixBugs: + + cmd = 'docker cp ' + patch + ' ' + container.id + ':/experiment/src' + path.split(bugName + '/diffs')[-1].replace('-' + preId, '') + o, e = shellGitCheckout(cmd) + + cmd = 'sudo chown $(whoami):$(whoami) "{}"' + cmd = cmd.format('/experiment/src' + path.split(bugName + '/diffs')[-1].replace('-' + preId, '')) + o = client.containers.exec(container=container, command=cmd, context='/experiment/') + + patch_result = client.containers.build(container) + if patch_result.successful: + + output += '@True:' + str(idx) + ':' + patch.split('/')[-1] + '@' + + failure_cases, failure, total, test_outcomes = test_all(bug, container, client) + if failure == 0: + fix = 'success' + # print("fix {} by {}".format(bugName, patch_name)) + output += 'fix {} by {} '.format(bugName, patch) + break else: - client.bugs.build(bug) - fix = 'failure' - output = '' - output += 'bugName:' + bugName + ', ' - container = client.containers.provision(bug) - # output += 'First_test:' + output += ' {}'.format(failure_cases) + else: + output += '@False:' + str(idx) + ':' + patch.split('/')[-1] + '@' + # output += ' {}'.format('build error') + # output += ' times:{}'.format(times) + # if times > 0: + # output += ' success' + # else: + # output += ' failure' - preId, postId = bugName.split(':')[-1].split('-')[-2:] - originalBugs = get_filepaths(join(DATA_PATH, 'manybugs', bugName, 'diffs'), preId) - # for ob in originalBugs: - # filepath = ob.split('diffs')[-1] - # cmd = 'cp /experiment/diffs' + filepath + ' src' + filepath.replace('-' + preId, '') - # client.containers.exec(container=container, command=cmd, context='/experiment/') + output += 'times:{}, '.format(times) + fix - validTests = readTestSuite(join(DATA_PATH, 'manybugs', bugName, 'test.sh')) - output += 'total ' + str(len(bug.tests._tests)) + ' newtotal ' + str(len(validTests)) - # client.containers.build(container) - # pre_failure_cases, pre_failure, total, pre_test_outcomes = test_all(bug, container, client,validTests) - # if pre_failure == 0: - # logging.error(bugName + ' no failed test initially') - # return '' - # output += '@fail:' + ','.join(pre_failure) + '@total:' + str(total) + ', ' + '@newtotal:' + str(len(validTests)) + ', ' - # - # fixBugs = get_filepaths(join(DATA_PATH, 'manybugs', bugName, 'diffs'), postId) - # for ob in fixBugs: - # filepath = ob.split('diffs')[-1] - # cmd = 'cp /experiment/diffs' + filepath + ' src' + filepath.replace('-' + postId, '') - # client.containers.exec(container=container, command=cmd, context='/experiment/') - # client.containers.build(container) - # diff_files = get_diff(bug.name, client, container) - # patch_result = patch_application(client, container, diff_files) - # if not patch_result: - # print("@{}@".format(patch_result)) - # continue - # print("@{}@".format(patch_result),end=' ') - # - # - # print("Second_test:",end=' ') - # post_test_outcomes = {} - # post_failure_cases, post_failure, total, post_test_outcomes = test_all(bug, container, client,validTests) - # output += ','.join(post_failure) + ' ' - # if len(post_failure) == 0: - # # times += 1 - # fix = 'success' - # # print("fix {} by {}".format(bugName, patch_name)) - # output += 'fix {} '.format(bugName) + return output - # patch_names = os.listdir(join(DATA_PATH,'manybugs',bugName,'patched')) - # patch_names = [i for i in patch_names if not i.endswith('.DS_Store')] - # if len(originalBugs) != 1: - # members = [] - # - # for member in set([i.split('-')[0] for i in patch_names]): - # members.append([i for i in patch_names if i.startswith(member)]) - # - # patch_names= list(itertools.product(*members)) - # patch_names - # times = 0 - # for patch_name in patch_names: - # if isinstance(patch_name, tuple): - # for i in patch_name: - # copyPatch(bugName, client, container, originalBugs, i, preId) - # else: - # copyPatch(bugName, client, container, originalBugs, patch_name, preId) - # - # patch_result = client.containers.build(container) - # if not patch_result.successful: - # output += '@False@F ' - # continue - # output += '@True@' - # - # post_test_outcomes = {} - # post_failure_cases, post_failure, total, post_test_outcomes = test_all(bug, container, client,validTests) - # - # output += ','.join(post_failure) + ' ' - # if len(post_failure) == 0: - # # times += 1 - # fix = 'success' - # # print("fix {} by {}".format(bugName, patch_name)) - # output += 'fix {} '.format(bugName) - # - # output += 'times:{}, '.format(times) + fix - - print(output) - return output - - except Exception as e: - logging.error(e) - # continue - finally: - # '' - cmd = 'docker stop {}'.format(container.id) - out, e = shellGitCheckout(cmd) - # docker stop $(docker ps -q) - def validateCore(t): bugName, port = t container = None @@ -143,7 +327,7 @@ def validateCore(t): pass else: client.bugs.build(bug) - fix = 'failure' + output = '' output += 'bugName:' + bugName + ', ' container = client.containers.provision(bug) @@ -169,43 +353,10 @@ def validateCore(t): # cmd = cmd.format('passing.tests.txt') # o = client.containers.exec(container=container, command=cmd, context='/experiment/') - originalBugs = get_filepaths(join(DATA_PATH, 'manybugs', bugName, 'diffs'), preId) - for ob in originalBugs: - filepath = ob.split('diffs')[-1] - cmd = 'cp diffs' + filepath + ' src' + filepath.replace('-' + preId, '') - client.containers.exec(container=container, command=cmd, context='/experiment/') - validTests = readTestSuite(join(DATA_PATH, 'manybugs', bugName, 'test.sh')) - client.containers.build(container) - pre_failure_cases, pre_failure, total, pre_test_outcomes = test_all(bug, container, client,validTests) - if pre_failure == 0: - logging.error(bugName + ' no failed test initially') - return '' - output += '@fail:' + ','.join(pre_failure) + '@total:' + str(total) + ', ' + '@newtotal:' + str(len(validTests)) + ', ' + output = checkTemplates(bugName,preId,postId,container,client,output,bug) + # output = checkDataset(bugName,preId,postId,container,client,output,bug) - fixBugs = get_filepaths(join(DATA_PATH, 'manybugs', bugName, 'diffs'), postId) - for ob in fixBugs: - filepath = ob.split('diffs')[-1] - cmd = 'cp diffs' + filepath + ' src' + filepath.replace('-' + postId, '') - client.containers.exec(container=container, command=cmd, context='/experiment/') - - times = 0 - name = ob - patch_result = client.containers.build(container) - if patch_result.successful: - failure_cases, failure, total, test_outcomes = test_all(bug, container, client,validTests) - if failure == 0: - times += 1 - output += ' fixed by {}'.format(name) - else: - output += ' {}'.format(failure_cases) - else: - output += ' {}'.format('build error') - output += ' times:{}'.format(times) - if times > 0: - output += ' success' - else: - output += ' failure' # client.containers.build(container) # diff_files = get_diff(bug.name, client, container) # patch_result = patch_application(client, container, diff_files) @@ -274,7 +425,8 @@ def validateCore(t): try: client.shutdown() except Exception as e: - logging.error(e) + e + # logging.error(e) # docker stop $(docker ps -q) @@ -306,12 +458,25 @@ def patch_validate(): if isinstance(v,logging.Logger): v.setLevel(logging.ERROR) - buglist = listdir(join(DATA_PATH,'manybugs_sos')) + # buglist = listdir(join(DATA_PATH,'manybugs_sos')) + buglist = ['manybugs:gmp:14166-14167', 'manybugs:gzip:2009-08-16-3fe0caeada-39a362ae9d', + 'manybugs:gzip:2009-10-09-1a085b1446-118a107f2d', 'manybugs:gzip:2010-02-19-3eb6091d69-884ef6d16c', + 'manybugs:libtiff:2005-12-21-3b848a7-3edb9cd', 'manybugs:libtiff:2006-02-23-b2ce5d8-207c78a', + 'manybugs:libtiff:2006-03-03-a72cf60-0a36d7f', 'manybugs:libtiff:2006-03-03-eec4c06-ee65c74', + 'manybugs:libtiff:2007-07-13-09e8220-f2d989d', 'manybugs:libtiff:2007-11-02-371336d-865f7b2', + 'manybugs:libtiff:2009-02-05-764dbba-2e42d63', 'manybugs:libtiff:2009-08-28-e8a47d4-023b6df', + 'manybugs:libtiff:2010-11-27-eb326f9-eec7ec0', 'manybugs:lighttpd:1948-1949', + 'manybugs:lighttpd:2254-2259', 'manybugs:lighttpd:2661-2662', 'manybugs:lighttpd:2785-2786', + 'manybugs:php:2011-03-25-8138f7de40-3acdca4703', 'manybugs:php:2011-04-02-70075bc84c-5a8c917c37', + 'manybugs:php:2011-11-19-eeba0b5681-d3b20b4058', 'manybugs:php:2011-12-04-1e6a82a1cf-dfa08dc325', + 'manybugs:php:2011-12-10-74343ca506-52c36e60c4', 'manybugs:php:2012-02-08-ff63c09e6f-6672171672'] + + # buglist = ['manybugs:gzip:2010-02-19-3eb6091d69-884ef6d16c'] # for i in range(0,len(bugList)): bugList = [] port = 6000 - for b in buglist: + for b in sosbugs: if b== '.DS_Store': continue t = b, port @@ -331,7 +496,7 @@ def patch_validate(): results = parallelRunMerge(validateCore, bugList) # # print(results) - with open(join(DATA_PATH, 'mayBugsValidateNew'), 'w', + with open(join(DATA_PATH, 'manyBugsValidateNewInitial'), 'w', encoding='utf-8') as writeFile: # if levelPatch == 0: writeFile.write('\n'.join(results)) @@ -431,7 +596,7 @@ def patch_validate_mine(): from bugzoo import Patch, Client -def test_all(bug, container, client,validTests): +def test_all_(bug, container, client,validTests): test_outcomes = {} # type: Dict[TestCase, TestOutcome] failure_cases = [] failure = [] @@ -447,6 +612,21 @@ def test_all(bug, container, client,validTests): return failure_cases, failure, total, test_outcomes +def test_all(bug, container, client): + test_outcomes = {} # type: Dict[TestCase, TestOutcome] + failure_cases = [] + failure = 0 + total = len(bug.tests._tests) + for test in bug.tests: + test_outcomes[test] = client.containers.test(container, test) + # if test.expected_outcome != test_outcomes[test].passed: + if test_outcomes[test].passed != True: + failure += 1 + failure_cases.append(test.command) + break + return failure_cases, failure, total, test_outcomes + + def fixTests(t): bugName, port = t container = None