diff --git a/pykat/testing/test.py b/pykat/testing/test.py index 875e1fb794be98337b6ed4e5ef0d1f839dc5ba81..152b9b92d6c7ead15e582ccefd0204509d5fb036 100644 --- a/pykat/testing/test.py +++ b/pykat/testing/test.py @@ -54,7 +54,7 @@ class FinesseTestProcess(Thread): def __init__(self, TEST_DIR, BASE_DIR, git_commit, run_fast=False, suites=[], test_id="0", - git_bin="",emails="", nobuild=False,*args, **kqwargs): + git_bin="",emails="", nobuild=True,*args, **kqwargs): Thread.__init__(self) self.git_commit = git_commit @@ -104,7 +104,10 @@ class FinesseTestProcess(Thread): self.GIT_BIN = git_bin def percent_done(self): - return 100.0*float(self.done_files)/float(self.total_files) + if self.total_kats == 0: + return 0.0 + else: + return 100.0*float(self.done_kats)/float(self.total_kats) def get_version(self): return self.git_commit @@ -283,6 +286,7 @@ class FinesseTestProcess(Thread): output_differences[suite][out] = (ref_arr[ix], out_arr[ix], np.max(rel_diff)) os.chdir(BASE_DIR) + if not os.path.exists("reports"): os.mkdir("reports") @@ -347,16 +351,6 @@ class FinesseTestProcess(Thread): finally: finished_test = True - # once done check if any other tests need to be ran - #schedule_lock.acquire() - - #if len(scheduled_tests) > 0: - # current_test = scheduled_tests.pop(0) - # current_test.start() - #else: - # current_test = None - - #schedule_lock.release() if __name__ == "__main__": diff --git a/pykat/testing/web/web_interface.py b/pykat/testing/web/web_interface.py index 70f7b0d5167778b974c446c816abd9cbeeb57a66..7b1148bf31e98fba1639630ba1f561dd00acfb70 100644 --- a/pykat/testing/web/web_interface.py +++ b/pykat/testing/web/web_interface.py @@ -9,7 +9,8 @@ from flask import render_template from datetime import datetime from collections import namedtuple from pykat.testing import utils - +from pykat.testing import test as finesse_test +import shutil from pykat.testing.web import app import os @@ -20,11 +21,59 @@ test_id = 0 current_test = None scheduled_tests = [] schedule_lock = Lock() - +watcher = None + print "loading web interface" +class FinesseProcessWatcher(Thread): + process_to_watch = None + + def __init__(self,*args, **kqwargs): + Thread.__init__(self) + + def setProcessToWatch(self, process): + print type(process) + #if type(self.process_to_watch) is not finesse_test.FinesseTestProcess: + # raise Exception("Tried to watch something which wasn't a FinesseTestProcess") + + self.process_to_watch = process + + def run(self): + global schedule_lock,current_test,scheduled_tests, watcher + + if self.process_to_watch is None: + return + + #if type(self.process_to_watch) is not finesse_test.FinesseTestProcess: + # raise Exception("Tried to watch something which wasn't a FinesseTestProcess") + + print "Watcher is watching", self.process_to_watch + + self.process_to_watch.join() + + print "Watcher is continuing" + + # once done check if any other tests need to be ran + schedule_lock.acquire() + + if len(scheduled_tests) > 0: + print "Watcher starting next test" + current_test = scheduled_tests.pop(0) + watcher = FinesseProcessWatcher() + watcher.setProcessToWatch(current_test) + watcher.start() + current_test.start() + else: + print "Watcher found no more tests to run" + current_test = None + + schedule_lock.release() + + + + @app.route('/') -def hello_world(): +def home_page(): return render_template("finesse_test.html") @app.route('/finesse/start_test', methods=["POST"]) @@ -37,16 +86,38 @@ def finesse_start_test(): test_id += 1 git_commit = request.json['git_commit'] - - test = FinesseTestProcess(git_commit, test_id) + + print app.instance_path + + TEST_OUTPUT_PATH = os.path.join(app.instance_path, "tests") + if not os.path.exists(TEST_OUTPUT_PATH): + os.mkdir(TEST_OUTPUT_PATH) + + TEST_RUN_PATH = os.path.join(TEST_OUTPUT_PATH, str(test_id)) + print TEST_RUN_PATH + + if os.path.exists(TEST_RUN_PATH): + shutil.rmtree(TEST_RUN_PATH) + + os.mkdir(TEST_RUN_PATH) + + test = finesse_test.FinesseTestProcess(os.path.join(app.instance_path, "finesse_test"), + TEST_RUN_PATH, + git_commit, + run_fast=False, suites=[], test_id=test_id, + emails="", nobuild=True) # check if anything is running and if it # isn't start this test off if current_test is None: print "running test" current_test = test + watcher = FinesseProcessWatcher() + watcher.setProcessToWatch(test) + watcher.start() test.start() + else: print "queuing test" scheduled_tests.append(test) @@ -111,28 +182,4 @@ def finesse_get_log(count): return jsonify(logs=log2send) - -class FinesseTestProcessRun(): - def __init__(self, init_class=FinesseTestProcess): - self.init_class = init_class - print "Init.." - - def start(self, *args, **kwargs): - print "Calling..." - fjp = self.init_class(*args, **kwargs) - - print '%s threaded process beginning.' % fjp.__class__.__name__ - print fjp.get_progress() - - fjp.start() - - while fjp.is_alive(): - - sleep(1) - - print fjp.get_progress() - - print fjp.get_progress() - print '%s threaded process complete. Now exiting.' % fjp.__class__.__name__ - - \ No newline at end of file + \ No newline at end of file diff --git a/pykat/testing/web_server.py b/pykat/testing/web_server.py index ebb27d74ad5502199ebc1dbb089d5e0a836c3168..d5fd15660915e767778f745e08f1d6b2f0f1abb9 100644 --- a/pykat/testing/web_server.py +++ b/pykat/testing/web_server.py @@ -20,6 +20,9 @@ def start(instance_path,port=5000, debug=True): from pykat.testing.web import app + if(app.instance_path!=instance_path): + raise Exception("Instance path of Flask app didn't match the requested value") + # load up the actual interface code import pykat.testing.web.web_interface @@ -30,6 +33,11 @@ def start(instance_path,port=5000, debug=True): else: # get the latest version for logs etc. utils.git("--git-dir ./finesse_src/.git pull") + + # need local copy of test + if not os.path.exists("./finesse_test"): + print "finesse test folder didn't exist, cloning now..." + utils.git("clone git://gitmaster.atlas.aei.uni-hannover.de/finesse/test.git finesse_test") app.secret_key = os.urandom(24) app.run(debug=debug, port=int(port))