[web] Fixup save not waiting on promise; more robustness on errors

This commit is contained in:
Marc Durdin 2019-03-25 17:24:00 +11:00
parent 6f9faa3b6e
commit 9ca8358a2b
4 changed files with 20 additions and 8 deletions

View file

@ -53,11 +53,9 @@ module.exports = {
let body = [];
function finish(json) {
//console.log(json);
response.setHeader('Content-Type', 'application/json');
if(request.method !== 'POST' || !json || typeof json != 'object' || !json.id || !json.shortname || !json.compilerVersion || !json.engineVersion) {
console.error('/save-results Invalid request');
console.warn('/save-results Invalid request');
response.writeHead(400);
return response.end(JSON.stringify({result: "Invalid request"}));
}
@ -76,7 +74,7 @@ module.exports = {
typeof(json.shortname) != 'string' || !json.shortname.match(/^[a-z]+$/) ||
typeof(compilerVersion) != 'string' || !compilerVersion.match(/^((\d+)(\.\d+)*)|source$/) ||
typeof(engineVersion) != 'string' || !engineVersion.match(/^((\d+)(\.\d+)*)|source$/)) {
console.error('/save-results Invalid request');
console.warn('/save-results Invalid request');
response.writeHead(400);
return response.end(JSON.stringify({result: "Invalid request"}));
}
@ -85,7 +83,7 @@ module.exports = {
let base = path.join(KEYBOARDS_ROOT, json.shortname, json.id);
if(!fs.existsSync(base)) {
const msg = `Keyboard ${json.shortname}/${json.id} not found at ${base}`;
console.error('/save-results 404 '+msg);
console.warn('/save-results 404 '+msg);
response.writeHead(404);
return response.end(JSON.stringify({result: msg}));
}
@ -94,7 +92,7 @@ module.exports = {
fs.mkdirSync(base);
if(!fs.existsSync(base)) {
const msg = `Could not create tests folder ${base}`;
console.error('/save-results 500 '+msg);
console.warn('/save-results 500 '+msg);
response.writeHead(500);
return response.end(JSON.stringify({result: msg}));
}

View file

@ -159,6 +159,7 @@ var testRunner = {
console.log('saving test '+locator);
let json = testRunner.parseLocator(locator);
if(!json.id) throw new Error('Invalid locator: '+locator);
json.results = typeof results == 'string' ? JSON.parse(results) : results;
json.engineVersion = keyman.build.toString();
try {
@ -285,9 +286,13 @@ var testRunner = {
keyman.interface.processKeystroke(keyman.util.physicalDevice, com.keyman.text ? com.keyman.text.Processor.getOutputTarget(receiver) : receiver, e);
this.keyboards[keyboardId].results[testId] = receiver.value;
} catch(err) {
console.error(err);
console.warn(err.toString());
this.keyboards[keyboardId].results[testId] = {error: err.message, filename: err.filename, lineno: err.lineno};
if(!knownFailures[keyboardId]) {
return false;
}
}
return true;
}
},

View file

@ -43,7 +43,7 @@ keyboards.forEach(function(keyboard) {
.then(function() {
return testRunner.loadTests(locator)
.then((shouldRun) => { if(shouldRun) { testRunner.runTests(id); } return shouldRun; })
.then((shouldSave) => { testRunner.saveTestResults(locator, (testRunner.keyboards[id] || {}).results); return shouldSave; });
.then((shouldSave) => testRunner.saveTestResults(locator, (testRunner.keyboards[id] || {}).results));
//.then(() => testRunner.runTests(id))
//.then(() => testRunner.saveTestResults(locator, testRunner.keyboards[id].results));
});

View file

@ -333,6 +333,15 @@ cleanKeyboards.then(() => {
const testsFilename = path.join(KEYBOARDS_ROOT, keyboard.shortname, keyboard.id, 'tests', `${keyboard.id}.tests`);
const testsJSON = JSON.parse(fs.readFileSync(testsFilename, 'utf8'));
// First, check the base result for errors
for(let k in baseResultJSON) {
if(typeof baseResultJSON[k] !== 'string') {
let input = `${testsJSON.inputTests[k].context ? `"${testsJSON.inputTests[k].context}" ` : ""}+ ${keyname(testsJSON.inputTests[k].modifier, testsJSON.inputTests[k].key)}`;
fail(`${keyboard.shortname}/${keyboard.id}[$k]: error in test: ${input}: ${baseResultJSON[k].error}`, 5);
}
}
//console.log(baseResultFilename, baseResult);
testedCompilerVersions.forEach((cv) => {
testedEngineVersions.forEach((ev) => {