Commit ddac2012 authored by Daniel Brown's avatar Daniel Brown
Browse files

Adding kat selection and more reporting

parent 5e2a451f
......@@ -56,9 +56,10 @@ class FinesseTestProcess(Thread):
errorOccurred = None
diffFound = False
diffing = False
kats_to_run = []
def __init__(self, TEST_DIR, BASE_DIR, test_commit,
run_fast=False, suites=[], test_id="0",
run_fast=False, kats=[], test_id="0",
git_bin="",emails="", nobuild=True,*args, **kqwargs):
Thread.__init__(self)
......@@ -104,12 +105,8 @@ class FinesseTestProcess(Thread):
if not os.path.isdir(self.TEST_DIR):
raise Exception("TEST_DIR was not a valid directory, should point to a clone of the FINESSE test repository")
if not suites:
self.suites = ["physics","random"]
else:
self.suites = []
self.suites.extend(suites)
self.kats_to_run = kats
self.GIT_BIN = git_bin
def cancelCheck(self):
......@@ -127,9 +124,9 @@ class FinesseTestProcess(Thread):
def get_progress(self):
if self.diffing:
return 'Diffing {0} out of {1} ({2} in {3})'.format(self.done_kats, self.total_kats, self.running_kat, self.running_suite)
return 'Diffing {0} out of {1} ({2} in {3})'.format(self.done_kats, self.total_kats/2, self.running_kat, self.running_suite)
if self.built:
return 'Running {0} out of {1} ({2} in {3})'.format(self.done_kats, self.total_kats, self.running_kat, self.running_suite)
return 'Running {0} out of {1} ({2} in {3})'.format(self.done_kats, self.total_kats/2, self.running_kat, self.running_suite)
else:
return 'Building FINESSE executable'
......@@ -223,31 +220,23 @@ class FinesseTestProcess(Thread):
# create dictionary structures
# and count up total number of files to process
for suite in self.suites:
for suite in self.kats_to_run.keys():
kat_run_exceptions[suite] = {}
output_differences[suite] = {}
run_times[suite] = {}
os.chdir(os.path.join(self.TEST_DIR,"kat_test",suite))
for files in os.listdir("."):
if files.endswith(".kat"):
self.total_kats += 1
self.total_kats += len(self.kats_to_run[suite])
# multiply as we include the diffining in the percentage
# done
self.total_kats *= 2
for suite in self.suites:
for suite in self.kats_to_run.keys():
self.cancelCheck()
print "Running suite: " + suite + "..."
kats = []
kats = self.kats_to_run[suite]
os.chdir(os.path.join(self.TEST_DIR,"kat_test",suite))
for files in os.listdir("."):
if files.endswith(".kat"):
kats.append(files)
SUITE_OUTPUT_DIR = os.path.join(OUTPUTS_DIR,suite)
os.mkdir(SUITE_OUTPUT_DIR)
......@@ -277,7 +266,7 @@ class FinesseTestProcess(Thread):
self.cancelCheck()
for suite in self.suites:
for suite in self.kats_to_run.keys():
if len(kat_run_exceptions[suite].keys()) > 0:
print "Could not run the following kats:\n" + "\n".join(kat_run_exceptions.keys()) + " in " + suite
else:
......@@ -286,7 +275,7 @@ class FinesseTestProcess(Thread):
self.diffing = True
# Now we have generated the output files compare them to the references
for suite in self.suites:
for suite in self.kats_to_run.keys():
self.cancelCheck()
print "Diffing suite: " + suite + "..."
......@@ -304,6 +293,7 @@ class FinesseTestProcess(Thread):
for out in outs:
self.cancelCheck()
self.running_kat = out
ref_file = os.path.join(REF_DIR,out)
......@@ -339,11 +329,9 @@ class FinesseTestProcess(Thread):
os.mkdir("reports")
os.chdir("reports")
today = datetime.datetime.utcnow()
today = datetime.utcnow()
reportname = today.strftime('%d%m%y')
print "Writing report to " + reportname
self.cancelCheck()
f = open(reportname,'w')
f.write("Python Nightly Test\n")
......@@ -359,7 +347,7 @@ class FinesseTestProcess(Thread):
isError = False
for suite in suites:
for suite in self.kats_to_run.keys():
f.write("\n\n" + str(len(output_differences[suite].keys())) + " differences in suite " + suite)
for k in output_differences[suite].keys():
isError = True
......@@ -376,24 +364,24 @@ class FinesseTestProcess(Thread):
f.close()
self.cancelCheck()
if self.emails:
#if self.emails:
#
# if isError:
# subject = "Finesse test ERROR"
# else:
# subject = "Finesse test OK"
# emails = self.emails
# args = ["mailx", "-s", subject, emails]
# p = sub.Popen(args, stdout=sub.PIPE, stderr=sub.PIPE, stdin=sub.PIPE)
# r = open(reportname,"r")
# out, err = p.communicate(r.read())
#else:
# print "No emails specified"
return output_differences
if isError:
subject = "Finesse test ERROR"
else:
subject = "Finesse test OK"
emails = self.emails
args = ["mailx", "-s", subject, emails]
p = sub.Popen(args, stdout=sub.PIPE, stderr=sub.PIPE, stdin=sub.PIPE)
r = open(reportname,"r")
out, err = p.communicate(r.read())
else:
print "No emails specified"
def run(self):
try:
......
......@@ -3,6 +3,26 @@
<!--<link rel="stylesheet" type="text/css" href="/css/style.css"/>-->
<link rel="stylesheet" type="text/css" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css"/>
<link rel="stylesheet" type="text/css" href="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/css/jquery.dataTables.css">
<style type="text/css">
SELECT, INPUT[type="text"] {
width: 300px;
box-sizing: border-box;
}
SECTION {
width: 700px;
padding: 8px;
overflow: auto;
}
SECTION > DIV {
float: left;
padding: 4px;
}
SECTION > DIV + DIV {
width: 40px;
text-align: center;
}
</style>
</head>
<body>
......@@ -49,6 +69,22 @@
<input type="button" value="Refresh" id="btnGetLogs"/>
<input type="button" value="Start new FINESSSE test" id="btnStartTest"/>
<section class="container">
<div>
<div>Files to run</div>
<select id="leftValues" size="12" multiple></select>
</div>
<div style="padding-top:100px;">
<input type="button" id="btnLeft" value="&lt;&lt;" />
<input type="button" id="btnRight" value="&gt;&gt;" />
</div>
<div>
<div style="width: 100px;">Files available</div>
<select id="rightValues" size="12" multiple>
</select>
</div>
</section>
</div>
<div class="prev_test">
......@@ -67,6 +103,7 @@
$(document).ready(function(){
updateBranches();
getPreviousTests();
updateKats();
window.setInterval(function(){
updateQueuedTests();
......@@ -75,6 +112,16 @@
});
$("#btnLeft").click(function () {
var selectedItem = $("#rightValues option:selected");
$("#leftValues").append(selectedItem);
});
$("#btnRight").click(function () {
var selectedItem = $("#leftValues option:selected");
$("#rightValues").append(selectedItem);
});
$('#btnGetPrevTests').click(function(){
getPreviousTests();
});
......@@ -107,6 +154,27 @@
updateProgress();
});
function updateKats(){
$.ajax({
type: "POST",
url: "/finesse/get/kats",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(data){
rlist = $('#rightValues')
rlist.empty()
$('#leftValues').empty()
for(var i=0; i < data.kats.length; i++){
rlist.append($('<option>', { value: data.kats[i], text: data.values[i]}));
}
},
error: function(o,a,err){
alert("Error getting kats : " + err);
}
});
}
function getPreviousTests() {
$.ajax({
type: "POST",
......@@ -234,9 +302,21 @@
}
function startNewTest(){
opts = $('#leftValues option');
kats = {};
for(var i=0; i<opts.length; i++){
suite = opts[i].text.split(" - ")[0]
if(!(suite in kats)){
kats[suite] = [];
}
kats[suite].push(opts[i].value);
}
list = $("#commit_list");
data = JSON.stringify({"git_commit": list.val()});
data = JSON.stringify({"git_commit": list.val(), "kats":kats});
$.ajax({
type: "POST",
......
......@@ -49,8 +49,6 @@ if db.exists():
print "Current test_id: " + str(test_id)
for a in db.all('srccommit'):
print a
else:
db.create()
db.add_index(TestIDIndex(db.path, 'testid'))
......@@ -227,10 +225,11 @@ def finesse_start_rerun(id):
return "ok"
@app.route('/finesse/start_test', methods=["POST"])
def finesse_start_test(git_commit):
return jsonify(__finesse_start_test(request.json["git_commit"]))
def finesse_start_test():
def __finesse_start_test(git_commit):
return jsonify(__finesse_start_test(request.json["git_commit"], request.json["kats"]))
def __finesse_start_test(git_commit, kats):
global current_test, test_id
try:
......@@ -252,7 +251,7 @@ def __finesse_start_test(git_commit):
test = finesse_test.FinesseTestProcess(os.path.join(app.instance_path, "finesse_test"),
TEST_RUN_PATH,
git_commit,
run_fast=True, suites=[], test_id=test_id,
run_fast=False, kats=kats, test_id=test_id,
emails="", nobuild=False)
db.insert(dict(t="test",
......@@ -474,9 +473,22 @@ def finesse_view(view_test_id):
# pass
@app.route("/finesse/get/kats", methods=["POST"])
def finesse_get_kats():
suites = ["physics","random"]
kats = []
values = []
for suite in suites:
suite_path = os.path.join(app.instance_path,"finesse_test","kat_test",suite)
for file in os.listdir(suite_path):
if file.endswith(".kat"):
kats.append(str(file))
values.append(suite + " - " + str(file))
return jsonify(kats=kats, values=values)
print "Starting commit watch from most recent commit: " + latest_commit_id_tested
def setInterval(interval):
......@@ -495,7 +507,8 @@ def setInterval(interval):
return wrapper
return decorator
@setInterval(10)
@setInterval(600)
def checkLatestCommits():
global latest_commit_id_tested
out = utils.git(["--git-dir",SRC_GIT_PATH,"log",latest_commit_id_tested + "..HEAD",'--pretty=format:"%H"'])
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment