package gov.nist.registry.common2.testkit;
import gov.nist.registry.common2.exception.XdsException;
import gov.nist.registry.common2.exception.XdsInternalException;
import gov.nist.registry.common2.registry.MetadataSupport;
import java.util.HashMap;
import javax.xml.namespace.QName;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.xpath.AXIOMXPath;
import org.apache.log4j.Logger;
import org.jaxen.JaxenException;
public class LogModel {
String test_num;
HashMap<String, OMElement> logs;
protected final static Logger logger = Logger.getLogger(LogModel.class);
public LogModel(String test_num) {
logs = new HashMap<String, OMElement>();
this.test_num = test_num;
}
String getEndpoint(OMElement log) throws XdsInternalException {
String endpoint = null;
try {
AXIOMXPath xpathExpression = new AXIOMXPath ("//Endpoint");
endpoint = xpathExpression.stringValueOf(log);
} catch (JaxenException e) {
throw new XdsInternalException ("XPath error", e);
}
return endpoint;
}
boolean hasNode(OMElement log, String name) throws XdsInternalException {
try {
AXIOMXPath xpathExpression = new AXIOMXPath ("//Endpoint");
if (xpathExpression.selectSingleNode(log) == null)
return false;
return true;
} catch (JaxenException e) {
throw new XdsInternalException ("XPath error", e);
}
}
boolean isPnR(OMElement log) throws XdsInternalException {
return hasNode(log, "ProvideAndRegisterTransaction");
}
boolean isR(OMElement log) throws XdsInternalException {
return hasNode(log, "RegisterTransaction");
}
public void addLog(OMElement log) throws XdsInternalException, XdsException {
String root_element_name = log.getLocalName();
if (root_element_name == null || ( !root_element_name.equals("TestResults") && !root_element_name.equals("XdsEvsResult") ) )
throw new XdsException("Root of test log is " + root_element_name + " instead of TestResults or XdsEvsResult");
if (root_element_name.equals("TestResults")) {
OMElement test_ele = MetadataSupport.firstChildWithLocalName(log, "Test");
if (test_ele == null) throw new XdsInternalException("Log has no Test element");
String test_result_num = test_ele.getText();
if (test_result_num == null || test_result_num.equals("")) throw new XdsInternalException("Log has empty Test element");
logger.info("test = " + test_result_num + " test_num = " + test_num);
String endpoint = getEndpoint(log);
if (test_num.equals("11882") && test_result_num.equals("11881/create_folder")) {
test_result_num = "11882/create_folder"; //
test_ele.setText("11882/create_folder");
}
else if (test_num.equals("11882") && test_result_num.equals("11881/eval")) {
test_result_num = "11882/eval"; //
test_ele.setText("11882/eval");
}
else if (test_num.equals("11882") && test_result_num.equals("11881/add_to_folder")) {
test_result_num = "11882/add_to_folder"; //
test_ele.setText("11882/add_to_folder");
}
else if (test_num.equals("11983") && test_result_num.equals("11982/eval")) {
test_result_num = "11983/eval"; //
test_ele.setText("11983/eval");
}
else if (test_num.equals("11983") && test_result_num.equals("11986/submit")) {
test_result_num = "11983"; //
test_ele.setText("11983/submit");
}
else if (test_num.equals("11986") && test_result_num.equals("11986/submit")) {
test_result_num = "11986"; //
test_ele.setText("11986");
}
else if (test_num.equals("12002") && test_result_num.equals("11881/create_folder")) {
test_result_num = "12002/create_folder"; //
test_ele.setText("12002/create_folder");
}
else if (test_num.equals("12002") && test_result_num.equals("11881/add_to_folder")) {
test_result_num = "12002/add_to_folder"; //
test_ele.setText("12002/add_to_folder");
}
else if (test_num.equals("12002") && test_result_num.equals("11881/eval")) {
test_result_num = "12002/eval"; //
test_ele.setText("12002/eval");
}
else if (test_num.equals("12029") && test_result_num.startsWith("12330")) {
test_result_num = test_result_num.replaceAll("12330", "12029"); //
test_ele.setText(test_result_num);
}
// tls
else if (test_num.equals("12005") && test_result_num.startsWith("11990")) {
test_result_num = "12005"; //
test_ele.setText(test_result_num);
}
else if (test_num.equals("12005") && test_result_num.startsWith("11897")) {
test_result_num = "12005"; //
test_ele.setText(test_result_num);
}
else if (test_num.equals("12301") )
throw new XdsException("Cannot get credit for running the example against the Public Registry");
else if (test_num.equals("12306") )
throw new XdsException("Cannot get credit for running the example against the Public Registry");
else if (test_num.equals("12037") && (test_result_num.equals("12038")))
test_result_num = "12037"; //
else if (test_num.equals("12083") && (test_result_num.startsWith("12038"))) {
if (endpoint == null || endpoint.indexOf("https") == -1)
throw new XdsException("Endpoint must be https");
test_result_num = "12083"; //
}
else if (test_num.equals("12085") && (test_result_num.startsWith("11827/submit"))) {
if (endpoint == null || endpoint.indexOf("https") == -1)
throw new XdsException("Endpoint must be https");
test_result_num = "12085"; //
}
else if (test_num.equals("12086")) {
if (!isPnR(log))
throw new XdsException("Transaction must be ProvideAndRegister");
if (endpoint == null || endpoint.indexOf("https") == -1)
throw new XdsException("Endpoint must be https");
test_result_num = "12086"; //
}
else if (test_num.equals("11740")) {
if (!isR(log))
throw new XdsException("Transaction must be Register");
if (endpoint == null || endpoint.indexOf("https") == -1)
throw new XdsException("Endpoint must be https");
test_result_num = "11740"; //
}
String[] test_parts = test_result_num.split("/");
String section_name = (test_parts.length>1) ? test_parts[1] : "";
if (test_parts.length > 1) {
if ( test_num.equals(test_parts[0]) && section_name != null && !section_name.equals(""))
logs.put(section_name, log);
} else {
logs.put(test_result_num, log);
}
}
else if (root_element_name.equals("XdsEvsResult")) {
boolean is_a_result = true;
OMElement testEle = MetadataSupport.firstChildWithLocalName(log, "Test");
String test_result_num = testEle.getText();
OMElement endpointEle = MetadataSupport.firstChildWithLocalName(log, "Endpoint");
if (endpointEle == null) throw new XdsInternalException("EVS has empty Endpoint element");
String endpoint = endpointEle.getText();
boolean is_tls = endpoint.indexOf("https") != -1;
if (test_result_num == null || test_result_num.equals("")) throw new XdsInternalException("EVS has empty Test element");
if (test_result_num.startsWith("Test"))
test_result_num = test_result_num.substring(4);
logger.info("test = " + test_result_num + " test_num = " + test_num);
if ( !test_num.equals(test_result_num)) {
if (test_num.equals("12328") &&
(
test_result_num.equals("11936") ||
test_result_num.equals("11937") ||
test_result_num.equals("11938") ||
test_result_num.equals("11939") ||
test_result_num.equals("11940") ||
test_result_num.equals("11941") ||
test_result_num.equals("11942") ||
test_result_num.equals("11943") ||
test_result_num.equals("11944") ||
test_result_num.equals("11945") ||
test_result_num.equals("11946") ||
test_result_num.equals("11947") ||
test_result_num.equals("11948") ||
test_result_num.startsWith("SQ")
))
test_result_num = test_num; // ok - all these SQ tests get reported under test 12328
else if (test_num.equals("11936") && test_result_num.startsWith("SQ"))
test_result_num = test_num;
else if (test_num.equals("11937") && test_result_num.startsWith("SQ"))
test_result_num = test_num;
else if (test_num.equals("11938") && test_result_num.startsWith("SQ"))
test_result_num = test_num;
else if (test_num.equals("11939") && test_result_num.startsWith("SQ"))
test_result_num = test_num;
else if (test_num.equals("11940") && test_result_num.startsWith("SQ"))
test_result_num = test_num;
else if (test_num.equals("11941") && test_result_num.startsWith("SQ"))
test_result_num = test_num;
else if (test_num.equals("11942") && test_result_num.startsWith("SQ"))
test_result_num = test_num;
else if (test_num.equals("11943") && test_result_num.startsWith("SQ"))
test_result_num = test_num;
else if (test_num.equals("11944") && test_result_num.startsWith("SQ"))
test_result_num = test_num;
else if (test_num.equals("11945") && test_result_num.startsWith("SQ"))
test_result_num = test_num;
else if (test_num.equals("11946") && test_result_num.startsWith("SQ"))
test_result_num = test_num;
else if (test_num.equals("11947") && test_result_num.startsWith("SQ"))
test_result_num = test_num;
else if (test_num.equals("11948") && test_result_num.startsWith("SQ"))
test_result_num = test_num;
else if (test_num.equals("11746") && test_result_num.startsWith("PnR.a"))
test_result_num = "11746";
else if (test_num.equals("11747") && test_result_num.equals("PnR.a 2Doc"))
test_result_num = "11747";
else if (test_num.equals("11802") && test_result_num.equals("SQ.b"))
test_result_num = "11802"; //
else if (test_num.equals("11898") && test_result_num.equals("11898"))
test_result_num = "11898"; //
else if (test_num.equals("11903") && test_result_num.equals("11903"))
test_result_num = "11903"; //
else if (test_num.equals("11905") && test_result_num.equals("11905"))
test_result_num = "11905"; //
else if (test_num.equals("11906") && test_result_num.equals("11906"))
test_result_num = "11906"; //
else if (test_num.equals("11923") && test_result_num.equals("SQ.b"))
test_result_num = "11923"; //
else if (test_num.equals("11936") && test_result_num.equals("SQ.a"))
test_result_num = "11936"; //
else if (test_num.equals("11940") && test_result_num.equals("SQ.a"))
test_result_num = "11940"; //
else if (test_num.equals("11948") && test_result_num.equals("SQ.a"))
test_result_num = "11948"; //
else if (test_num.equals("11969") && test_result_num.equals("PnR.b 11969"))
test_result_num = "11969"; //
else if (test_num.equals("11970") && (test_result_num.equals("PnR.b") || test_result_num.equals("PnR.b 11970")))
test_result_num = "11970"; //
else if (test_num.equals("11973") && test_result_num.equals("PnR.b"))
test_result_num = "11973"; //
else if (test_num.equals("11971") && test_result_num.equals("PnR.b"))
test_result_num = "11971"; //
else if (test_num.equals("11974") && (test_result_num.equals("PnR.b")))
test_result_num = "11974"; //
else if (test_num.equals("12306") && (test_result_num.equals("XGQ")))
test_result_num = "12306"; //
else if (test_num.equals("12308") && (test_result_num.equals("XGR")))
test_result_num = "12308"; //
else if (test_num.equals("12307") && (test_result_num.equals("XGQ")))
test_result_num = "12307"; //
else if (test_num.equals("12300") && (test_result_num.equals("XGQ")))
test_result_num = "12300"; //
else if (test_num.equals("12328") && (test_result_num.startsWith("SQ")))
test_result_num = "12328"; //
else if (test_num.equals("12338") && (test_result_num.startsWith("PnR.b")))
test_result_num = "12338"; //
else if (test_num.equals("12339") && (test_result_num.startsWith("SQ.b")))
test_result_num = "12339"; //
else if (test_num.equals("12301") && (test_result_num.equals("XGR")))
test_result_num = "12301"; //
else if (test_num.equals("11927") && (test_result_num.equals("SQL.a")))
test_result_num = test_num; //
else if (test_num.equals("11923") && (test_result_num.equals("SQL.a")))
test_result_num = test_num; //
else if (test_num.equals("11924") && (test_result_num.equals("SQL.a")))
test_result_num = test_num; //
else if (test_num.equals("11925") && (test_result_num.equals("SQL.a")))
test_result_num = test_num; //
else if (test_num.equals("11926") && (test_result_num.equals("SQL.a")))
test_result_num = test_num; //
else if (test_num.equals("11927") && (test_result_num.equals("SQL.a")))
test_result_num = test_num; //
else if (test_num.equals("11928") && (test_result_num.equals("SQL.a")))
test_result_num = test_num; //
else if (test_num.equals("11929") && (test_result_num.equals("SQL.a")))
test_result_num = test_num; //
else if (test_num.equals("11930") && (test_result_num.equals("SQL.a")))
test_result_num = test_num; //
else if (test_num.equals("11931") && (test_result_num.equals("SQL.a")))
test_result_num = test_num; //
else if (test_num.equals("11932") && (test_result_num.equals("SQL.a")))
test_result_num = test_num; //
else if (test_num.equals("11933") && (test_result_num.equals("SQL.a")))
test_result_num = test_num; //
else if (test_num.equals("11934") && (test_result_num.equals("SQL.a")))
test_result_num = test_num; //
else if (test_num.equals("11935") && (test_result_num.equals("SQL.a")))
test_result_num = test_num; //
else if (test_num.equals("11801") && (test_result_num.startsWith("SQ")))
test_result_num = test_num; //
else if (test_num.equals("12049") && (test_result_num.startsWith("PnR.b"))) {
if (endpoint.indexOf("repositoryBonedoc") == -1)
throw new XdsException("repositoryBonedoc endpoint must be used");
test_result_num = "12049"; //
}
else if (test_num.equals("12023") && (test_result_num.equals("RET.b")))
test_result_num = "12023"; //
else if (test_num.equals("12047") && (test_result_num.startsWith("PnR.b"))) {
if (endpoint.indexOf("repositoryB2doc") == -1)
throw new XdsException("repositoryB2doc endpoint must be used");
test_result_num = "12047"; //
}
else if (test_num.equals("12020") && (test_result_num.equals("RET.b"))) {
test_result_num = "12020"; //
if ( !is_tls )
throw new XdsException("Endpoint must be https - this is a TLS test");
}
else if (test_num.equals("12046") && (test_result_num.startsWith("PnR.b"))) {
test_result_num = "12046"; //
if ( !is_tls )
throw new XdsException("Endpoint must be https - this is a TLS test");
}
else if (test_num.equals("11743") && (test_result_num.startsWith("PnR.a"))) {
test_result_num = "11743"; //
if ( !is_tls )
throw new XdsException("Endpoint must be https - this is a TLS test");
}
else {
is_a_result = false;
//throw new XdsException("EVSfile Test element value, " + test + ", does not belong to test " + this.test_num);
}
}
if (is_a_result) {
OMElement resultEle = MetadataSupport.firstChildWithLocalName(log, "Result");
String result = (resultEle != null) ? resultEle.getText() : null;
if (result == null || result.equals("")) throw new XdsInternalException("EVS has empty Result element");
logs.put(test_result_num, log);
if (test_num.equals("12328"))
logs.put("12328", log);
} else {
logger.info("Skipping " + test_result_num);
}
}
}
public boolean hasSubtest(String subtest_name) { return logs.containsKey(subtest_name); }
public boolean isPass(String subtest_name) throws XdsInternalException, XdsException {
OMElement log = get_log(subtest_name);
String eleName = log.getLocalName();
if (eleName.equals("TestResults")) {
String status = log.getAttributeValue(new QName("status"));
if (status == null || status.equals("")) throw new XdsException("isPass: no status found for subtest " + subtest_name);
return status.equals("Pass");
}
else if (eleName.equals("XdsEvsResult")) {
OMElement resultEle = MetadataSupport.firstChildWithLocalName(log, "Result");
String result = (resultEle != null) ? resultEle.getText() : null;
if (result == null || result.equals("")) throw new XdsInternalException("EVS has empty Result element");
return result.equals("Pass");
}
throw new XdsInternalException("Not TestResults or XdsEvsRequest");
}
public void checkFatalError(String subtest_name) throws XdsInternalException, XdsException {
OMElement log = get_log(subtest_name);
OMElement fatal_ele = MetadataSupport.firstChildWithLocalName(log, "FatalError");
if (fatal_ele != null)
throw new XdsException("Subtest " + subtest_name + " log file has fatal error: " + fatal_ele.getText());
}
OMElement get_log(String subtest_name) throws XdsInternalException, XdsException {
OMElement log = logs.get(subtest_name);
if (log == null) throw new XdsInternalException("Results Error: No evidence supporing test/subtest <" + subtest_name +
"> found in submission, only (" + logs.keySet().toString() + ") were found");
return log;
}
}