示例#1
0
def run_tests(master_repo_url, pull_request_repo_url, pull_request_branch,
        master_repo_path, test_command, interpreter, python3):
    """
    This is a test runner function.

    It doesn't access any global variables. It assumes that the master
    repository is checked out at 'master_repo_path' (for example in the /tmp
    directory somewhere). It does the following:

    1) fetches the 'pull_request_branch' from 'pull_request_repo_url' and tries
    to apply it

    2) runs tests using 'test_command' and the Python 'interpreter'.

    3) saves report and logs into the out/ directory.

    4) Returns status, which is one of the following strings:

        fetch ... fetch failed (no tests run)
        conflicts ... there were merge conflicts (no tests run)
        FAILED ... tests run, but failed
        PASSED ... tests run, passed

    """
    print "Running tests with the following setup:"
    print "master_repo_url =", master_repo_url
    print "pull_request_repo_url =", pull_request_repo_url
    print "pull_request_branch =", pull_request_branch
    print "master_repo_path =", master_repo_path
    print "test_command =", test_command
    print "interpreter =", interpreter
    try:
        cmd("cd %s; git fetch %s %s:test" % (master_repo_path,
            pull_request_repo_url, pull_request_branch), echo=True)
    except CmdException:
        return {"result": "fetch", "log": ""}
    cmd("cd %s; git checkout test" % master_repo_path, echo=True)
    try:
        cmd("cd %s; git merge master" % master_repo_path, echo=True)
    except CmdException:
        return {"result": "conflicts", "log": ""}
    if python3:
        cmd("cd %s; bin/use2to3" % master_repo_path)
        master_repo_path = master_repo_path + "/py3k-sympy"
    log, r = cmd2("cd %s; %s %s" % (master_repo_path,
        interpreter, test_command))
    print "Return code:", r
    if r == 0:
        result = "Passed"
    else:
        result = "Failed"
    return {"result": result, "log": log, "return_code": r}
示例#2
0
def run_tests(master_repo_url, pull_request_repo_url, pull_request_branch,
        master_repo_path, test_command, interpreter, python3, master_commit):
    """
    This is a test runner function.

    It doesn't access any global variables. It assumes that the master
    repository is checked out at 'master_repo_path' (for example in the /tmp
    directory somewhere). It does the following:

    1) fetches the 'pull_request_branch' from 'pull_request_repo_url' and tries
    to apply it

    2) runs tests using 'test_command' and the Python 'interpreter'.

    3) saves report and logs into the out/ directory.

    4) Returns status, which is one of the following strings:

        error .. there was an error
        fetch ... fetch failed (no tests run)
        conflicts ... there were merge conflicts (no tests run)
        FAILED ... tests run, but failed
        PASSED ... tests run, passed

    """
    result = {
            "log": "",
            "xpassed": "",
            "master_hash": "",
            "branch_hash": "",
        }
    print "Running tests with the following setup:"
    print "master_repo_url =", master_repo_url
    print "pull_request_repo_url =", pull_request_repo_url
    print "pull_request_branch =", pull_request_branch
    print "master_repo_path =", master_repo_path
    print "test_command =", test_command
    print "interpreter =", interpreter
    try:
        cmd("cd %s && git fetch %s %s:test" % (master_repo_path,
            pull_request_repo_url, pull_request_branch), echo=True)
    except CmdException:
        result["result"] = "fetch"
        return result
    cmd("cd %s && git checkout test" % master_repo_path, echo=True)
    # remember the hashes before the merge occurs:
    try:
        result["master_hash"] = cmd("cd %s && git rev-parse %s" % (master_repo_path,
            master_commit), capture=True).strip()
    except CmdException:
        print "Could not parse commit %s." % master_commit
        result["result"]= "error"
        return result
    result["branch_hash"] = cmd("cd %s && git rev-parse test" % master_repo_path,
            capture=True).strip()

    merge_log, r = cmd2("cd %s && git merge %s" % (master_repo_path,
        master_commit))
    if r != 0:
        conflicts = cmd("cd %s && git --no-pager diff" % master_repo_path,
                capture=True)
        result["result"] = "conflicts"
        result["log"] = merge_log + "\nLIST OF CONFLICTS\n" + conflicts
        return result
    if python3:
        cmd("cd %s && python bin/use2to3" % master_repo_path)
        master_repo_path = master_repo_path + "/py3k-sympy"
    log, r = cmd2("cd %s && %s %s" % (master_repo_path,
        interpreter, test_command))
    result["log"] = log
    result["return_code"] = r


    result["xpassed"] = get_xpassed_info_from_log(log)
    print "Return code:", r
    if r == 0:
        result["result"] = "Passed"
    else:
        result["result"] = "Failed"
    return result