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)
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)
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)
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)
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)
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)
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)
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")
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)