From 5ad5f2a4327b4ab209efb653e283edd42a45c626 Mon Sep 17 00:00:00 2001 From: Laramie Crocker Date: Wed, 6 Apr 2011 16:04:26 +0000 Subject: [PATCH] CSPACE-3595 Update XmlReplay to use namespaces so it can deal with new POX format --- .../xmlreplay/ServiceResult.java | 4 +- .../xmlreplay/XmlCompareJdom.java | 48 ++++++++++++++----- .../xmlreplay/XmlReplayTransport.java | 3 +- .../test/XmlCompareJdomTest.java | 10 ++-- .../test/XmlReplayDevTest.java | 16 ++++--- .../test-data/xmlreplay/dev-master.xml | 4 +- .../xmlreplay/objectexit/object-exit.xml | 15 +++--- .../test-data/xmlreplay/objectexit/oe1.xml | 15 +++--- .../xmlreplay/objectexit/res/oe2.res.xml | 18 ++++--- 9 files changed, 83 insertions(+), 50 deletions(-) diff --git a/services/IntegrationTests/src/main/java/org/collectionspace/services/IntegrationTests/xmlreplay/ServiceResult.java b/services/IntegrationTests/src/main/java/org/collectionspace/services/IntegrationTests/xmlreplay/ServiceResult.java index 71b1bf5e1..012c1645d 100755 --- a/services/IntegrationTests/src/main/java/org/collectionspace/services/IntegrationTests/xmlreplay/ServiceResult.java +++ b/services/IntegrationTests/src/main/java/org/collectionspace/services/IntegrationTests/xmlreplay/ServiceResult.java @@ -258,7 +258,7 @@ public class ServiceResult { PayloadLogger.HttpTraffic traffic = PayloadLogger.readPayloads(this.result, this.boundary, this.contentLength); PayloadLogger.Part partFromServer = traffic.getPart(partName); String source = partFromServer.getContent(); - org.jdom.Element element = (org.jdom.Element) XmlCompareJdom.selectSingleNode(source, xpath); + org.jdom.Element element = (org.jdom.Element) XmlCompareJdom.selectSingleNode(source, xpath, null); //todo: passing null for namespace may not work. String sr = element != null ? element.getText() : ""; return sr; } catch (Exception e){ @@ -276,7 +276,7 @@ public class ServiceResult { if (source == null){ return "ERROR:null:requestPayloadsRaw["+partName+"]"; } - org.jdom.Element element = (org.jdom.Element) XmlCompareJdom.selectSingleNode(source, xpath); //e.g. "//shortIdentifier"); + org.jdom.Element element = (org.jdom.Element) XmlCompareJdom.selectSingleNode(source, xpath, null); //e.g. "//shortIdentifier"); //todo: passing null for namespace may not work. String sr = element != null ? element.getText() : ""; return sr; } catch (Exception e){ diff --git a/services/IntegrationTests/src/main/java/org/collectionspace/services/IntegrationTests/xmlreplay/XmlCompareJdom.java b/services/IntegrationTests/src/main/java/org/collectionspace/services/IntegrationTests/xmlreplay/XmlCompareJdom.java index 837b605f3..764e21668 100755 --- a/services/IntegrationTests/src/main/java/org/collectionspace/services/IntegrationTests/xmlreplay/XmlCompareJdom.java +++ b/services/IntegrationTests/src/main/java/org/collectionspace/services/IntegrationTests/xmlreplay/XmlCompareJdom.java @@ -26,6 +26,7 @@ import org.collectionspace.services.common.api.Tools; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; +import org.jdom.Namespace; import org.jdom.input.SAXBuilder; import org.jaxen.XPath; import org.jaxen.jdom.JDOMXPath; @@ -60,6 +61,10 @@ private static final String DEFAULT_SAX_DRIVER_CLASS = "org.apache.xerces.parser } public static TreeWalkResults compareParts(String expectedContent, String leftID, String actualPartContent, String rightID){ + + System.out.println("expected: \r\n"+expectedContent+"\r\n\r\n"); + System.out.println("ACTUAL: \r\n"+actualPartContent); + TreeWalkResults list = new TreeWalkResults(); try { @@ -95,24 +100,36 @@ private static final String DEFAULT_SAX_DRIVER_CLASS = "org.apache.xerces.parser return list; } - public static List select(Element element, String xpathExpression) throws Exception { + public static List select(Element element, String xpathExpression, Namespace namespace) throws Exception { XPath xpath = new JDOMXPath(xpathExpression); + String prefix = namespace.getPrefix(); + String uri = namespace.getURI(); + xpath.addNamespace(prefix, uri); return xpath.selectNodes(element); } - public static Object selectSingleNode(Element element, String xpathExpression) throws Exception { + public static Object selectSingleNode(Element element, String xpathExpression, Namespace namespace) throws Exception { XPath xpath = new JDOMXPath(xpathExpression); + if (namespace != null) { + String prefix = namespace.getPrefix(); + String uri = namespace.getURI(); + xpath.addNamespace(prefix, uri); + } return xpath.selectSingleNode(element); } - public static Object selectSingleNode(String docSource, String xpathExpression) throws Exception { + public static Object selectSingleNode(String docSource, String xpathExpression, Namespace namespace) throws Exception { Document doc = getDocumentFromContent(docSource); Element element = doc.getRootElement(); XPath xpath = new JDOMXPath(xpathExpression); + if (namespace != null) { + String prefix = namespace.getPrefix(); + String uri = namespace.getURI(); + xpath.addNamespace(prefix, uri); + } return xpath.selectSingleNode(element); } - public static boolean treeWalk(Document left, Document right, TreeWalkResults list) throws Exception { boolean res = treeWalk(left.getRootElement(), right.getRootElement(), "/", list); return res; @@ -138,31 +155,35 @@ private static final String DEFAULT_SAX_DRIVER_CLASS = "org.apache.xerces.parser continue; } Element leftChild = (Element)o; - String leftChildName = leftChild.getName(); + //String leftChildName = leftChild.getName(); + String leftChildName = leftChild.getQualifiedName(); if (Tools.isEmpty(leftChildName)){ continue; } + + Namespace namespace = leftChild.getNamespace(); + String leftChildPath = Tools.glue(parentPath, "/", leftChildName); if (foundRepeatingList.indexOf(leftChildPath)>=0){ continue; } - List leftlist = select(left, leftChildName); + List leftlist = select(left, leftChildName, namespace); if (leftlist != null && leftlist.size() > 1){ //System.out.println("-----------------doRepeating------"+leftChildPath); foundRepeatingList.add(leftChildPath); boolean repeatingIdentical = - doRepeatingFieldComparison(leftlist, leftChildPath, leftChildName, left, right, msgList) ; //todo: deal with foundRightMap in this repeating field block. + doRepeatingFieldComparison(leftlist, leftChildPath, leftChildName, left, right, msgList, namespace) ; //todo: deal with foundRightMap in this repeating field block. if ( ! repeatingIdentical ){ //System.out.println("\r\n\r\n\r\n*****************************\r\nOne repeating field failed: "+msgList); return false; } foundRightMap.put(leftChildName, "OK"); } else { - Element rightChild = (Element)selectSingleNode(right,leftChildName); + Element rightChild = (Element)selectSingleNode(right,leftChildName, namespace); if (rightChild == null){ TreeWalkEntry entry = new TreeWalkEntry(); - entry.lpath = leftChildPath; + entry.lpath = leftChildPath; //this works, but is questionable: selectSingleNode(right, "//*[local-name() = \"objectexit_common\"]") entry.status = TreeWalkEntry.STATUS.R_MISSING; msgList.add(entry); continue; @@ -192,7 +213,7 @@ private static final String DEFAULT_SAX_DRIVER_CLASS = "org.apache.xerces.parser continue; } Element rightChild = (Element)r; - String rname = rightChild.getName(); + String rname = rightChild.getQualifiedName(); if (null==foundRightMap.get(rname)){ String rightChildPath = Tools.glue(parentPath, "/", rname); @@ -214,10 +235,10 @@ private static final String DEFAULT_SAX_DRIVER_CLASS = "org.apache.xerces.parser return outputter.outputString(el); } - public static boolean doRepeatingFieldComparison(List leftList, String leftChildPath, String leftChildName, Element left, Element right, TreeWalkResults msgList) + public static boolean doRepeatingFieldComparison(List leftList, String leftChildPath, String leftChildName, Element left, Element right, TreeWalkResults msgList, Namespace namespace) throws Exception { //todo: deal with foundRightMap in this repeating field block. - List rightList = select(right, leftChildName); + List rightList = select(right, leftChildName, namespace); if (rightList == null || rightList.size() == 0 || rightList.size() < leftList.size()){ TreeWalkEntry twe = new TreeWalkEntry(); twe.lpath = leftChildPath; @@ -271,7 +292,8 @@ private static final String DEFAULT_SAX_DRIVER_CLASS = "org.apache.xerces.parser } private static void pl(String name, Element el) throws Exception { - Object lobid = selectSingleNode(el, "@ID"); + Namespace namespace = el.getNamespace(); + Object lobid = selectSingleNode(el, "@ID", namespace); String lid = ""; if (lobid!=null){ lid = lobid.toString(); diff --git a/services/IntegrationTests/src/main/java/org/collectionspace/services/IntegrationTests/xmlreplay/XmlReplayTransport.java b/services/IntegrationTests/src/main/java/org/collectionspace/services/IntegrationTests/xmlreplay/XmlReplayTransport.java index bd31d6629..60ba460c2 100755 --- a/services/IntegrationTests/src/main/java/org/collectionspace/services/IntegrationTests/xmlreplay/XmlReplayTransport.java +++ b/services/IntegrationTests/src/main/java/org/collectionspace/services/IntegrationTests/xmlreplay/XmlReplayTransport.java @@ -184,7 +184,8 @@ public class XmlReplayTransport { ||(partsList.size() != filesList.size())){ throw new Exception("filesList and partsList must not be empty and must have the same number of items each."); } - StringBuffer content = new StringBuffer("\r\n"); + //NO: Patrick sez all test files should be complete XML now: StringBuffer content = new StringBuffer("\r\n"); + StringBuffer content = new StringBuffer(); //content.append(CRLF).append("").append(CRLF); Map contentRaw = new HashMap(); for (int i=0; i\r\n" + +"" +"\r\n"; private static String exDEP =" urn:cspace:org.collectionspace.demo:orgauthority:name(TestOrgAuth):organization:name(Northern Climes Museum)'Northern Climes Museum'\r\n"; private static String exNEW =" objectexitNumber-1290026472360\r\n"; - private static String exFOOT =""; + private static String exFOOT ="" + +""; private static String expectedPartContent = exHEAD + exEN + exDEP + exFOOT; @@ -182,11 +183,14 @@ public class XmlCompareJdomTest { // ============ from-server part, will be used as RIGHT tree ========================================================== private static String srvHEAD = "\r\n" + +"" +"\r\n"; + private static String srvEN = "objectexitNumber-1290026472360\r\n"; private static String srvEN2 = "objectexitNumber-9999999999999\r\n"; private static String srvDEPOSITOR = "urn:cspace:org.collectionspace.demo:orgauthority:name(TestOrgAuth):organization:name(Northern Climes Museum)'Northern Climes Museum'\r\n"; - private static String srvFOOT = "\r\n"; + private static String srvFOOT = "\r\n" + +""; private static String partFromServer = srvHEAD+srvEN+srvDEPOSITOR+srvFOOT; diff --git a/services/IntegrationTests/src/test/java/org/collectionspace/services/IntegrationTests/test/XmlReplayDevTest.java b/services/IntegrationTests/src/test/java/org/collectionspace/services/IntegrationTests/test/XmlReplayDevTest.java index 0389953ba..ff3b52933 100755 --- a/services/IntegrationTests/src/test/java/org/collectionspace/services/IntegrationTests/test/XmlReplayDevTest.java +++ b/services/IntegrationTests/src/test/java/org/collectionspace/services/IntegrationTests/test/XmlReplayDevTest.java @@ -24,10 +24,6 @@ public class XmlReplayDevTest extends XmlReplayTest { @Test public void runMaster() throws Exception { - - if (true) return; - //This was a hack test. - String masterFile = System.getProperty("xmlReplayMaster"); if (Tools.notEmpty(masterFile)){ System.out.println("Using masterFile specified in System property: "+masterFile); @@ -35,9 +31,15 @@ public class XmlReplayDevTest extends XmlReplayTest { masterFile = XmlReplay.DEFAULT_DEV_MASTER_CONTROL; System.out.println("Using default masterFile: "+masterFile); } - //XmlReplay replay = createXmlReplayUsingIntegrationTestsModule(".."); - //List> list = replay.runMaster(masterFile); - //logTestForGroup(list, "XmlReplayMasterTest"); + XmlReplay replay = createXmlReplayUsingIntegrationTestsModule(".."); + List> list = replay.runMaster(masterFile); + logTestForGroup(list, "XmlReplayMasterTest"); + + //used for testing load. + // bigLoop(masterFile); + } + + private void bigLoop(String masterFile){ int MAXWORKERS = 20; long start = System.currentTimeMillis(); for (int t=0; t --> - - + + diff --git a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/objectexit/object-exit.xml b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/objectexit/object-exit.xml index 7b7235751..3669cbc1f 100644 --- a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/objectexit/object-exit.xml +++ b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/objectexit/object-exit.xml @@ -43,20 +43,17 @@ POST /cspace-services/objectexit/ - - - objectexit/oe1.xml - + objectexit/oe1.xml GET /cspace-services/objectexit/${oe1.CSID} - - - - objectexit/res/oe2.res.xml - + + + + + objectexit/res/oe2.res.xml diff --git a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/objectexit/oe1.xml b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/objectexit/oe1.xml index 329ca8e42..78ee56693 100644 --- a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/objectexit/oe1.xml +++ b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/objectexit/oe1.xml @@ -1,7 +1,10 @@ - - urn:cspace:org.collectionspace.demo:orgauthority:name(TestOrgAuth):organization:name(Northern Climes Museum)'Northern Climes Museum' - objectexitNumber-1290026472360 - + + + + urn:cspace:org.collectionspace.demo:orgauthority:name(TestOrgAuth):organization:name(Northern Climes Museum)'Northern Climes Museum' + objectexitNumber-1290026472360 + + diff --git a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/objectexit/res/oe2.res.xml b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/objectexit/res/oe2.res.xml index 24166dc6a..8f0cabfca 100755 --- a/services/IntegrationTests/src/test/resources/test-data/xmlreplay/objectexit/res/oe2.res.xml +++ b/services/IntegrationTests/src/test/resources/test-data/xmlreplay/objectexit/res/oe2.res.xml @@ -1,12 +1,16 @@ - -objectexitNumber-1290026472360 -urn:cspace:org.collectionspace.demo:orgauthority:name(TestOrgAuth):organization:name(Northern Climes Museum)'Northern Climes Museum' - + + + objectexitNumber-1290026472360 + urn:cspace:org.collectionspace.demo:orgauthority:name(TestOrgAuth):organization:name(Northern Climes Museum)'Northern Climes Museum' + + + 1 + 2011-03-31T17:47:11Z + 2011-03-31T17:47:11Z + + -- 2.47.3