Exemplo n.º 1
0
def replay(f=None, jalangi=util.DEFAULT_INSTALL, analysis=None):
    """
    Invokes the replay.js script and returns the output
    """
    print analysis
    trace = "jalangi_trace" if f == None else f
    if analysis != None:
        return util.run_node_script(jalangi.replay_script(), "--tracefile", trace, "--analysis", analysis, jalangi=jalangi, savestderr=True)
    else:
        return util.run_node_script(jalangi.replay_script(), "--tracefile", trace, jalangi=jalangi, savestderr=True)
Exemplo n.º 2
0
def run_config(config, jalangi=util.DEFAULT_INSTALL):
    def chdir():
        if (config.working == ""):
            os.chdir(jalangi.get_home())
        else:
            os.chdir(config.working)

    chdir()
    if config.cover:
        jalangi.use_coverage = True
    if config.analysis == "concolic":
        ops = config.parameters.split()
        if len(ops) == 2 and ops[0] == "-i":
            concolic(os.path.join(config.working, config.mainfile),
                     int(ops[1]), jalangi)
        else:
            concolic(os.path.join(config.working, config.mainfile), 1000,
                     jalangi)
    elif config.analysis == "record":
        script = config.mainfile
        instrument(script)
        p = config.parameters
        rrserver(p)
        time.sleep(10000)
    elif config.analysis == "replay":
        print util.run_node_script("src/js/commands/createReplay.js",
                                   "jalangi_trace1",
                                   jalangi=jalangi)
        webbrowser.open(os.path.abspath("jalangi_trace1.html"))
    elif config.analysis.startswith("replay/"):
        rm = config.analysis.split("/")[1]
        util.handle_dot_files(config.working, os.path.abspath(config.mainfile))
        print replay(f=config.mainfile, jalangi=jalangi, analysis=rm)
    elif config.analysis == "rerunall":
        rerunall(os.path.join(config.working, config.mainfile), jalangi)
    else:
        if not config.analysis in jalangi.analyses():
            raise util.JalangiException(
                jalangi, "Unknown analysis {}".format(config.analysis))
        analysis(util.get_analysis(config.analysis),
                 os.path.join(config.working, config.mainfile), jalangi)
    if config.dot != False:
        put_dot = config.dot
        chdir()
        p = os.path.dirname(config.mainfile)
        dot_files = []
        for f in glob.glob(os.path.join(p, "*.dot").format(p)):
            try:
                shutil.copy(f, put_dot)
            except:
                pass
            dot_files.append(os.path.abspath(f))
            util.render_dot_files(put_dot, dot_files)
Exemplo n.º 3
0
def replay(f=None, jalangi=util.DEFAULT_INSTALL, analysis=None):
    """
    Invokes the replay.js script and returns the output
    """
    os.putenv("JALANGI_MODE", "replay")
    if analysis != None:
        os.putenv("JALANGI_ANALYSIS", util.get_analysis(analysis))
    if f != None:
        print "Hep",f 
        return util.run_node_script(jalangi.replay_script(),f, jalangi=jalangi)
    else:
        return util.run_node_script(jalangi.replay_script(), jalangi=jalangi)
Exemplo n.º 4
0
def replay(f=None, jalangi=util.DEFAULT_INSTALL, analysis=None):
    """
    Invokes the replay.js script and returns the output
    """
    trace = "jalangi_trace" if f == None else f
    if analysis != None:
        tmp = []
        for x in analysis:
            tmp.append("--analysis")
            tmp.append(x)
        l = ["--tracefile", trace]+tmp
        return util.run_node_script(jalangi.replay_script(), *l, jalangi=jalangi, savestderr=True)
    else:
        return util.run_node_script(jalangi.replay_script(), "--tracefile", trace, jalangi=jalangi, savestderr=True)
Exemplo n.º 5
0
def direct(filee, instrumented_f, jalangi=util.DEFAULT_INSTALL, analysis=None):
    tmp = []
    for x in analysis:
        tmp.append("--analysis")
        tmp.append(x)
    l = ["--smemory"] + tmp + [os.path.join(os.path.dirname(filee + ".js"),instrumented_f)]
    return util.run_node_script(jalangi.direct_script(), *l, jalangi=jalangi, savestderr=True)
Exemplo n.º 6
0
def instrument(filee,output_dir=".",jalangi=util.DEFAULT_INSTALL):
    """
    Invoke Jalangi and instrument the file
    returns: A tuple of the filename of the instrumented version and the output of Jalangi
    """
    print "---- Instrumenting {} ----" .format(filee)
    output = util.run_node_script(jalangi.instrumentation_script(), filee + ".js",  jalangi=jalangi)
    return (os.path.basename(filee) + "_jalangi_.js", output)
Exemplo n.º 7
0
def run_config(config, jalangi=util.DEFAULT_INSTALL):
    def chdir():
        if (config.working == ""):
            os.chdir(jalangi.get_home())
        else:
            os.chdir(config.working)
    chdir()
    if config.cover:
        jalangi.use_coverage = True
    if config.analysis == "concolic":
        ops = config.parameters.split()
        if len(ops) == 2 and ops[0] == "-i":
            concolic( os.path.join(config.working,config.mainfile), int(ops[1]), jalangi)
        else:
            concolic( os.path.join(config.working,config.mainfile), 1000, jalangi)
    elif config.analysis == "record":
        script = config.mainfile
        instrument(script)
        p = config.parameters
        rrserver(p)
        time.sleep(10000)
    elif config.analysis == "replay":
        print util.run_node_script("src/js/commands/createReplay.js", "jalangi_trace1", jalangi=jalangi)
        webbrowser.open(os.path.abspath("jalangi_trace1.html"))
    elif config.analysis.startswith("replay/"):
        rm = config.analysis.split("/")[1]
        util.handle_dot_files(config.working, os.path.abspath(config.mainfile))
        print replay(f=config.mainfile, jalangi=jalangi, analysis=rm)
    elif config.analysis == "rerunall":
        rerunall(os.path.join(config.working,config.mainfile), jalangi)
    else:
        if not config.analysis in jalangi.analyses():
            raise util.JalangiException(jalangi, "Unknown analysis {}".format(config.analysis))
        analysis(util.get_analysis(config.analysis), os.path.join(config.working,config.mainfile) ,  jalangi)
    if config.dot != False:
        put_dot = config.dot
        chdir()
        p = os.path.dirname(config.mainfile)
        dot_files = []
        for f in glob.glob(os.path.join(p, "*.dot").format(p)):
            try: 
                shutil.copy(f,put_dot)
            except: pass
            dot_files.append(os.path.abspath(f))
            util.render_dot_files(put_dot, dot_files)
Exemplo n.º 8
0
def rerunall(filee, jalangi=util.DEFAULT_INSTALL):
    os.chdir("jalangi_tmp")
    try:
        shutil.rmtree(".coverage_data")
        os.remove("inputs.js")
        util.mkempty("inputs.js")
    except: pass
    print "---- Runing tests on {} ----".format(filee)
    util.run_node_script(os.path.join(os.pardir, filee + ".js"), jalangi=jalangi)
    for i in glob.glob("jalangi_inputs*"):
        print "Running {} on {}".format(filee, i)
        shutil.copy(i, "inputs.js")
        util.run_node_script(os.path.join(os.pardir,filee +".js"), jalangi=jalangi)
    if jalangi.coverage():
        time.sleep(2)
        os.system("cover combine")
        os.system("cover report")
        print "Test results are in {}".format("cover_html/index.html")
Exemplo n.º 9
0
def testrr (filee, jalangi=util.DEFAULT_INSTALL):
    try:
        shutil.rmtree("jalangi_tmp")
    except: pass
    os.mkdir("jalangi_tmp")
    os.mkdir("jalangi_tmp/out")
    os.putenv("JALANGI_HOME", jalangi.get_home())
    os.chdir("jalangi_tmp")
    (instrumented_f, out) = instrument(os.path.join(os.pardir,filee), jalangi=jalangi)
    try:                    # Ignore failures on first iteration
        os.remove("inputs.js")
        shutil.copy("jalangi_inputs{}.js".format(i), "inputs.js")
    except:
        pass
    if not os.path.isfile("inputs.js"):
        util.mkempty("inputs.js")
    print "---- Runing without instrumentation ----"
    try:
        os.remove("jalangi_trace")
    except:
        pass
    norm = util.run_node_script(os.path.join(os.pardir,filee + ".js"), jalangi=jalangi)
    #(open("jalangi_normal", "w")).write(norm)
    print "---- Recording execution of {} ----".format(filee)
    rec = record(os.path.join(os.pardir,filee), instrumented_f)
    print "---- Replaying {} ----".format(filee)
    os.putenv("JALANGI_MODE", "replay")
    os.putenv("JALANGI_ANALYSIS", "none")
    rep = replay()
    (open("jalangi_replay", "w")).write(rep)
    #print rep
    try:
	    wcl = util.count_lines("jalangi_trace")
	
	    with open("../jalangi_test_results", 'a') as f:
		f.write("# of lines in jalangi_trace for {}: {}".format(filee,str(wcl)))
		f.write("\n")
    except: pass	
    if norm != rep: #TODO: Factor out this.
        print "{}.js failed".format(filee)
        import difflib
        with open("../jalangi_test_results", 'a') as f:
            f.write("\n")
            for line in difflib.unified_diff(norm.splitlines(1), rec.splitlines(1), fromfile='normal.{}'.format(filee), tofile='replay.{}'.format(filee)):
                f.write(line)
    if rec != rep:
        print "{}.js failed".format(filee)
        import difflib
        with open("../jalangi_test_results", 'a') as f:
            f.write("\n")
            for line in difflib.unified_diff(rec.splitlines(1), rep.splitlines(1), fromfile='replay.{}'.format(filee), tofile='record.{}'.format(filee)):
                f.write(line)
        
    util.move_coverage(jalangi)
Exemplo n.º 10
0
def replay(f=None, jalangi=util.DEFAULT_INSTALL, analysis=None):
    """
    Invokes the replay.js script and returns the output
    """
    trace = "jalangi_trace" if f == None else f
    if analysis != None:
        tmp = []
        for x in analysis:
            tmp.append("--analysis")
            tmp.append(x)
        l = ["--tracefile", trace] + tmp
        return util.run_node_script(jalangi.replay_script(),
                                    *l,
                                    jalangi=jalangi,
                                    savestderr=True)
    else:
        return util.run_node_script(jalangi.replay_script(),
                                    "--tracefile",
                                    trace,
                                    jalangi=jalangi,
                                    savestderr=True)
Exemplo n.º 11
0
def direct(filee, instrumented_f, jalangi=util.DEFAULT_INSTALL, analysis=None):
    tmp = []
    for x in analysis:
        tmp.append("--analysis")
        tmp.append(x)
    l = ["--smemory"] + tmp + [
        os.path.join(os.path.dirname(filee + ".js"), instrumented_f)
    ]
    return util.run_node_script(jalangi.direct_script(),
                                *l,
                                jalangi=jalangi,
                                savestderr=True)
Exemplo n.º 12
0
def record(filee, instrumented_f, jalangi=util.DEFAULT_INSTALL):
    return util.run_node_script(jalangi.record_script(), os.path.join(os.path.dirname(filee + ".js"),instrumented_f), jalangi=jalangi, savestderr=True)
Exemplo n.º 13
0
def parse_stacktrace(iCount, instrumented_f, line_range, jalangi=util.DEFAULT_INSTALL):
	exception = os.path.abspath(os.pardir) + "/jalangi_tmp/jalangi_exception" + iCount + ".js"
	l = ["--exceptionfile", exception, "--instrumentedfile", instrumented_f, "--range", line_range]
	return util.run_node_script(jalangi.parse_stacktrace(), *l, jalangi=jalangi, savestderr=True)
Exemplo n.º 14
0
def direct(filee, instrumented_f, jalangi=util.DEFAULT_INSTALL, analysis=None):
    print instrumented_f
    return util.run_node_script(jalangi.direct_script(), os.path.join(os.path.dirname(filee + ".js"),instrumented_f), "--smemory", "--analysis", analysis, jalangi=jalangi, savestderr=True)
Exemplo n.º 15
0
def concolic (filee, inputs, jalangi=util.DEFAULT_INSTALL):
    try:
        shutil.rmtree("jalangi_tmp")
    except: pass
    os.mkdir("jalangi_tmp")
    os.mkdir("jalangi_tmp/out")
    os.putenv("JALANGI_HOME", jalangi.get_home())
    os.chdir("jalangi_tmp")
    (instrumented_f, out) = instrument(os.path.join(os.pardir,filee), jalangi=jalangi)
    i = 0
    iters = 0
    mismatch = False
    while i <= iters and i <= inputs:
        try:                    # Ignore failures on first iteration
            os.remove("inputs.js")
            shutil.copy("jalangi_inputs{}.js".format(i), "inputs.js")
        except:
            pass
        if not os.path.isfile("inputs.js"):
            util.mkempty("inputs.js")
        print "==== Input {} ====".format(i)
        print "---- Runing without instrumentation ----"
        try:
            os.remove("jalangi_trace")
        except:
            pass
        norm = util.run_node_script(os.path.join(os.pardir,filee + ".js"), jalangi=jalangi, savestderr=True)
        #(open("jalangi_normal", "w")).write(norm)
        print "---- Recording execution of {} ----".format(filee)
        rec = record(os.path.join(os.pardir,filee), instrumented_f)
        print "---- Replaying {} ----".format(filee)
        os.putenv("JALANGI_MODE", "replay")
        os.putenv("JALANGI_ANALYSIS", "analyses/concolic/SymbolicEngine")
        rep = replay()
        (open("jalangi_replay", "w")).write(rep)
        print rep
	try:
		wcl = util.count_lines("jalangi_trace")
	
		with open("../jalangi_test_results", 'a') as f:
		    f.write("# of lines in jalangi_trace for {}: {}".format(filee,str(wcl)))
		    f.write("\n")
	except: pass	
        if norm != rep: #TODO: Factor out this.
            import difflib
            with open("../jalangi_test_results", 'a') as f:
                f.write("\n")
                for line in difflib.unified_diff(norm.splitlines(1), rec.splitlines(1), fromfile='normal.{}'.format(filee), tofile='replay.{}'.format(filee)):
                    f.write(line)
        if rec != rep:
            import difflib
            with open("../jalangi_test_results", 'a') as f:
                f.write("\n")
                for line in difflib.unified_diff(rec.splitlines(1), rep.splitlines(1), fromfile='replay.{}'.format(filee), tofile='record.{}'.format(filee)):
                    f.write(line)
	
        try:
            iters = int(util.head("jalangi_tail",1)[0])
        except: pass
        i = i + 1
        
    for i in glob.glob("jalangi_inputs*"):
        print "*** Generated ({}:1:1) for ({}.js:1:1)".format(os.path.abspath(i),filee)
    iters = iters + 1
    if iters == inputs:
        print "{}.js passed".format(filee)
    else:
        print "{}.js failed".format(filee)
    util.move_coverage(jalangi)
Exemplo n.º 16
0
def replay(jalangi=util.DEFAULT_INSTALL):
    """
    Invokes the replay.js script and returns the output
    """
    return util.run_node_script(jalangi.replay_script(), jalangi=jalangi)
Exemplo n.º 17
0
def record(filee, instrumented_f, jalangi=util.DEFAULT_INSTALL):
    os.putenv("JALANGI_MODE", "record")
    os.putenv("JALANGI_ANALYSIS", "none")
    print instrumented_f
    return util.run_node_script(os.path.join(os.path.dirname(filee + ".js"),instrumented_f), jalangi=jalangi)
Exemplo n.º 18
0
def record(filee, instrumented_f, jalangi=util.DEFAULT_INSTALL):
    return util.run_node_script(jalangi.record_script(),
                                os.path.join(os.path.dirname(filee + ".js"),
                                             instrumented_f),
                                jalangi=jalangi,
                                savestderr=True)