blob: f589d599342b1d2eb5be8fcd62dbf9396b8ca969 [file] [log] [blame]
///////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2000-2017 Ericsson Telecom AB //
// //
// All rights reserved. This program and the accompanying materials //
// are made available under the terms of the Eclipse Public License v2.0 //
// which accompanies this distribution, and is available at //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
///////////////////////////////////////////////////////////////////////////////
function AjvSelfTest() {
"use strict";
var ajv = new Ajv({
allErrors : true,
format : "full",
verbose : true,
inlineRefs : false
});
/* selftest:
The selftest.pass[].inputs are known good.
The selftest.fail[].inputs are known bad.
A selftest step fails if the validator's result does not match the expected result.
This is for semantically checking our JSON schema.
*/
var selftest = {
"pass" : {
"expects" : true,
"inputs" : []
},
"fail" : {
"expects" : false,
"inputs" : []
}
};
selftest.pass.inputs.push({
"requests" : [{
"getData" : {
"source" : "DsRestAPI_Test_DataSource",
"element" : "EntityGroups",
"params" : [],
"children" : [{
"getData" : {
"source" : "DsRestAPI_Test_DataSource2",
"element" : "EntityGroups2"
}
}
]
}
}
]
});
selftest.pass.inputs.push({
"requests" : [{
"getData" : {
"source" : "DsRestAPI_Test_DataSource",
"element" : "EntityGroups"
}
}
]
});
selftest.pass.inputs.push({
"requests" : [{
"getData" : {
"source" : "DsRestAPI_Test_DataSource",
"element" : "EntityGroups",
"children" : [{
"getData" : {
"source" : "DsRestAPI_Test_DataSource",
"element" : "Scenarios",
"params" : [{
"paramName" : "EntityGroup",
"paramValue" : "%Parent0%"
}
],
"children" : [{
"getData" : {
"source" : "DsRestAPI_Test_DataSource",
"element" : "TrafficCases",
"params" : [{
"paramName" : "EntityGroup",
"paramValue" : "%Parent0%"
}, {
"paramName" : "Scenario",
"paramValue" : "%Parent1%"
}
],
"children" : [{
"getData" : {
"source" : "DsRestAPI_Test_DataSource",
"element" : "TcStart",
"params" : [{
"paramName" : "EntityGroup",
"paramValue" : "%Parent0%"
}, {
"paramName" : "Scenario",
"paramValue" : "%Parent1%"
}, {
"paramName" : "TrafficCase",
"paramValue" : "%Parent2%"
}
]
}
}, {
"getData" : {
"source" : "DsRestAPI_Test_DataSource",
"element" : "TcStop",
"params" : [{
"paramName" : "EntityGroup",
"paramValue" : "%Parent0%"
}, {
"paramName" : "Scenario",
"paramValue" : "%Parent1%"
}, {
"paramName" : "TrafficCase",
"paramValue" : "%Parent2%"
}
]
}
}
]
}
}, {
"getData" : {
"source" : "DsRestAPI_Test_DataSource",
"element" : "Dummy",
"params" : [{
"paramName" : "EntityGroup",
"paramValue" : "%Parent0%"
}, {
"paramName" : "Scenario",
"paramValue" : "%Parent1%"
}
]
}
}, {
"getData" : {
"source" : "DsRestAPI_Test_DataSource",
"element" : "ScStart",
"params" : [{
"paramName" : "EntityGroup",
"paramValue" : "%Parent0%"
}, {
"paramName" : "Scenario",
"paramValue" : "%Parent1%"
}
]
}
}, {
"getData" : {
"source" : "DsRestAPI_Test_DataSource",
"element" : "ScStop",
"params" : [{
"paramName" : "EntityGroup",
"paramValue" : "%Parent0%"
}, {
"paramName" : "Scenario",
"paramValue" : "%Parent1%"
}
]
}
}
]
}
}, {
"getData" : {
"source" : "DsRestAPI_Test_DataSource",
"element" : "EGrpType",
"params" : [{
"paramName" : "EntityGroup",
"paramValue" : "%Parent0%"
}
]
}
}, {
"getData" : {
"source" : "DsRestAPI_Test_DataSource",
"element" : "EGrpSize",
"params" : [{
"paramName" : "EntityGroup",
"paramValue" : "%Parent0%"
}
]
}
}
]
}
}
]
});
selftest.pass.inputs.push({
"requests" : []
});
selftest.fail.inputs.push({
"requests" : [{
"getData" : {
"source" : "DsRestAPI_Test_DataSource",
"element" : "EntityGroups",
"params" : [],
"children" : [{
"apple" : "20"
}
]
}
}
]
});
selftest.fail.inputs.push({
"horgxxp" : [{
"xxetData" : {
"source" : "DsRestAPI_Test_DataSource"
}
}
]
});
selftest.fail.inputs.push({
"requests" : [{
"getData" : {
"source" : "DsRestAPI_Test_DataSource",
"element" : "EntityGroups",
"params" : [],
"children" : [{
"getData" : {
"source" : "DsRestAPI_Test_DataSource",
"element" : "Ent7658765ityGroups",
"children" : [{
"getData" : {
"source" : "DsRestAPI_Test_DataSource",
"element" : "EntityGroug76ps",
"params" : [],
"children" : [{
"deep_apple" : "20"
}
]
}
}
]
}
}
]
}
}
]
});
this.validate = function (schema) {
var validateSchema = ajv.compile({
"$ref" : "http://json-schema.org/draft-04/schema#"
});
var isSchemaValid = validateSchema(schema);
if (!isSchemaValid) {
console.error("Our JSON Schema is not syntactically valid per json-schema draft-04! Cannot continue...", validateSchema.errors);
return false;
}
var validator = ajv.compile(schema);
var validator_result = true;
for (var key in selftest) {
if (selftest.hasOwnProperty(key)) {
for (var i = 0; i < selftest[key].inputs.length; ++i) {
var result = validator(selftest[key].inputs[i]);
if (result !== selftest[key].expects) {
validator_result = false;
console.error("Selftest failure: ", key + "[" + (i + 1) + "]: ", result + " returned but expected " + selftest[key].expects, "!!!", validator.errors);
}
}
}
}
return validator_result;
};
}