]> git.aero2k.de Git - tmp/jakarta-migration.git/commitdiff
CSPACE-3595 Update XmlReplay to use namespaces so it can deal with new POX format
authorLaramie Crocker <laramie@berkeley.edu>
Wed, 6 Apr 2011 16:04:26 +0000 (16:04 +0000)
committerLaramie Crocker <laramie@berkeley.edu>
Wed, 6 Apr 2011 16:04:26 +0000 (16:04 +0000)
services/IntegrationTests/src/main/java/org/collectionspace/services/IntegrationTests/xmlreplay/ServiceResult.java
services/IntegrationTests/src/main/java/org/collectionspace/services/IntegrationTests/xmlreplay/XmlCompareJdom.java
services/IntegrationTests/src/main/java/org/collectionspace/services/IntegrationTests/xmlreplay/XmlReplayTransport.java
services/IntegrationTests/src/test/java/org/collectionspace/services/IntegrationTests/test/XmlCompareJdomTest.java
services/IntegrationTests/src/test/java/org/collectionspace/services/IntegrationTests/test/XmlReplayDevTest.java
services/IntegrationTests/src/test/resources/test-data/xmlreplay/dev-master.xml
services/IntegrationTests/src/test/resources/test-data/xmlreplay/objectexit/object-exit.xml
services/IntegrationTests/src/test/resources/test-data/xmlreplay/objectexit/oe1.xml
services/IntegrationTests/src/test/resources/test-data/xmlreplay/objectexit/res/oe2.res.xml

index 71b1bf5e1b94b7afd0f857ddc28eb38a44dff816..012c1645d8841da7b95fb8015418f33f0cecd81b 100755 (executable)
@@ -258,7 +258,7 @@ public class ServiceResult {
             PayloadLogger.HttpTraffic traffic = PayloadLogger.readPayloads(this.result, this.boundary, this.contentLength);\r
             PayloadLogger.Part partFromServer = traffic.getPart(partName);\r
             String source = partFromServer.getContent();\r
-            org.jdom.Element element = (org.jdom.Element) XmlCompareJdom.selectSingleNode(source, xpath);\r
+            org.jdom.Element element = (org.jdom.Element) XmlCompareJdom.selectSingleNode(source, xpath, null);  //todo: passing null for namespace may not work.\r
             String sr = element != null ? element.getText() : "";\r
             return sr;\r
         } catch (Exception e){\r
@@ -276,7 +276,7 @@ public class ServiceResult {
             if (source == null){\r
                 return "ERROR:null:requestPayloadsRaw["+partName+"]";\r
             }\r
-            org.jdom.Element element = (org.jdom.Element) XmlCompareJdom.selectSingleNode(source, xpath);   //e.g. "//shortIdentifier");\r
+            org.jdom.Element element = (org.jdom.Element) XmlCompareJdom.selectSingleNode(source, xpath, null);   //e.g. "//shortIdentifier");  //todo: passing null for namespace may not work.\r
             String sr = element != null ? element.getText() : "";\r
             return sr;\r
         } catch (Exception e){\r
index 837b605f35f07ce1c49a6bd349ecda6eaf75e700..764e21668429451279215aac14955645288c2d7f 100755 (executable)
@@ -26,6 +26,7 @@ import org.collectionspace.services.common.api.Tools;
 import org.jdom.Document;\r
 import org.jdom.Element;\r
 import org.jdom.JDOMException;\r
+import org.jdom.Namespace;\r
 import org.jdom.input.SAXBuilder;\r
 import org.jaxen.XPath;\r
 import org.jaxen.jdom.JDOMXPath;\r
@@ -60,6 +61,10 @@ private static final String DEFAULT_SAX_DRIVER_CLASS = "org.apache.xerces.parser
     }\r
 \r
     public static TreeWalkResults compareParts(String expectedContent, String leftID, String actualPartContent, String rightID){\r
+\r
+        System.out.println("expected: \r\n"+expectedContent+"\r\n\r\n");\r
+        System.out.println("ACTUAL: \r\n"+actualPartContent);\r
+\r
         TreeWalkResults list = new TreeWalkResults();\r
         try {\r
 \r
@@ -95,24 +100,36 @@ private static final String DEFAULT_SAX_DRIVER_CLASS = "org.apache.xerces.parser
         return list;\r
     }\r
 \r
-    public static List select(Element element, String xpathExpression) throws Exception {\r
+    public static List select(Element element, String xpathExpression, Namespace namespace) throws Exception {\r
         XPath xpath = new JDOMXPath(xpathExpression);\r
+        String prefix = namespace.getPrefix();\r
+        String uri = namespace.getURI();\r
+        xpath.addNamespace(prefix, uri);\r
         return xpath.selectNodes(element);\r
     }\r
 \r
-    public static Object selectSingleNode(Element element, String xpathExpression) throws Exception {\r
+    public static Object selectSingleNode(Element element, String xpathExpression, Namespace namespace) throws Exception {\r
         XPath xpath = new JDOMXPath(xpathExpression);\r
+        if (namespace != null) {\r
+            String prefix = namespace.getPrefix();\r
+            String uri = namespace.getURI();\r
+            xpath.addNamespace(prefix, uri);\r
+        }\r
         return xpath.selectSingleNode(element);\r
     }\r
 \r
-    public static Object selectSingleNode(String docSource, String xpathExpression) throws Exception {\r
+    public static Object selectSingleNode(String docSource, String xpathExpression, Namespace namespace) throws Exception {\r
         Document doc = getDocumentFromContent(docSource);\r
         Element element = doc.getRootElement();\r
         XPath xpath = new JDOMXPath(xpathExpression);\r
+        if (namespace != null) {\r
+            String prefix = namespace.getPrefix();\r
+            String uri = namespace.getURI();\r
+            xpath.addNamespace(prefix, uri);\r
+        }\r
         return xpath.selectSingleNode(element);\r
     }\r
 \r
-\r
     public static boolean treeWalk(Document left, Document right, TreeWalkResults list) throws Exception {\r
         boolean res = treeWalk(left.getRootElement(), right.getRootElement(), "/", list);\r
         return res;\r
@@ -138,31 +155,35 @@ private static final String DEFAULT_SAX_DRIVER_CLASS = "org.apache.xerces.parser
                 continue;\r
             }\r
             Element leftChild = (Element)o;\r
-            String leftChildName = leftChild.getName();\r
+            //String leftChildName = leftChild.getName();\r
+            String leftChildName = leftChild.getQualifiedName();\r
             if (Tools.isEmpty(leftChildName)){\r
                 continue;\r
             }\r
+\r
+            Namespace namespace =  leftChild.getNamespace();\r
+\r
             String leftChildPath = Tools.glue(parentPath, "/", leftChildName);\r
 \r
             if (foundRepeatingList.indexOf(leftChildPath)>=0){\r
                 continue;\r
             }\r
-            List leftlist = select(left, leftChildName);\r
+            List leftlist = select(left, leftChildName, namespace);\r
             if (leftlist != null && leftlist.size() > 1){\r
                 //System.out.println("-----------------doRepeating------"+leftChildPath);\r
                 foundRepeatingList.add(leftChildPath);\r
                 boolean repeatingIdentical =\r
-                    doRepeatingFieldComparison(leftlist, leftChildPath, leftChildName, left, right, msgList) ; //todo: deal with foundRightMap in this repeating field block.\r
+                    doRepeatingFieldComparison(leftlist, leftChildPath, leftChildName, left, right, msgList, namespace) ; //todo: deal with foundRightMap in this repeating field block.\r
                 if ( ! repeatingIdentical ){\r
                     //System.out.println("\r\n\r\n\r\n*****************************\r\nOne repeating field failed: "+msgList);\r
                     return false;\r
                 }\r
                 foundRightMap.put(leftChildName, "OK");\r
             } else {\r
-                Element rightChild  = (Element)selectSingleNode(right,leftChildName);\r
+                Element rightChild  = (Element)selectSingleNode(right,leftChildName, namespace);\r
                 if (rightChild == null){\r
                     TreeWalkEntry entry = new TreeWalkEntry();\r
-                    entry.lpath = leftChildPath;\r
+                    entry.lpath = leftChildPath;                  //this works, but is questionable: selectSingleNode(right, "//*[local-name() = \"objectexit_common\"]")\r
                     entry.status = TreeWalkEntry.STATUS.R_MISSING;\r
                     msgList.add(entry);\r
                     continue;\r
@@ -192,7 +213,7 @@ private static final String DEFAULT_SAX_DRIVER_CLASS = "org.apache.xerces.parser
                 continue;\r
             }\r
             Element rightChild = (Element)r;\r
-            String rname = rightChild.getName();\r
+            String rname = rightChild.getQualifiedName();\r
             if (null==foundRightMap.get(rname)){\r
                 String rightChildPath = Tools.glue(parentPath, "/", rname);\r
 \r
@@ -214,10 +235,10 @@ private static final String DEFAULT_SAX_DRIVER_CLASS = "org.apache.xerces.parser
         return outputter.outputString(el);\r
     }\r
 \r
-    public static boolean doRepeatingFieldComparison(List leftList, String leftChildPath, String leftChildName, Element left, Element right, TreeWalkResults msgList)\r
+    public static boolean doRepeatingFieldComparison(List leftList, String leftChildPath, String leftChildName, Element left, Element right, TreeWalkResults msgList, Namespace namespace)\r
     throws Exception {\r
         //todo: deal with foundRightMap in this repeating field block.\r
-        List rightList = select(right, leftChildName);\r
+        List rightList = select(right, leftChildName, namespace);\r
         if (rightList == null || rightList.size() == 0 || rightList.size() < leftList.size()){\r
             TreeWalkEntry twe = new TreeWalkEntry();\r
             twe.lpath = leftChildPath;\r
@@ -271,7 +292,8 @@ private static final String DEFAULT_SAX_DRIVER_CLASS = "org.apache.xerces.parser
     }\r
 \r
     private static void pl(String name, Element el) throws Exception {\r
-        Object lobid = selectSingleNode(el, "@ID");\r
+        Namespace namespace = el.getNamespace();\r
+        Object lobid = selectSingleNode(el, "@ID", namespace);\r
         String lid = "";\r
         if (lobid!=null){\r
             lid = lobid.toString();\r
index bd31d6629762787f26164140451100599a1040d2..60ba460c2ebdf523fada3fd4e84d46b2092ef8d0 100755 (executable)
@@ -184,7 +184,8 @@ public class XmlReplayTransport {
             ||(partsList.size() != filesList.size())){\r
             throw new Exception("filesList and partsList must not be empty and must have the same number of items each.");\r
         }\r
-        StringBuffer content = new StringBuffer("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");\r
+        //NO: Patrick sez all test files should be complete XML now:  StringBuffer content = new StringBuffer("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");\r
+        StringBuffer content = new StringBuffer();\r
         //content.append(CRLF).append("<document name=\"objectexit\">").append(CRLF);\r
         Map<String, String> contentRaw = new HashMap<String, String>();\r
         for (int i=0; i<partsList.size(); i++){\r
index c993e79dc5bcea12bab46c24c3c15d5603c55dec..1bf460b02887ccebfe4fe6da888fd49e1b57e657 100755 (executable)
@@ -154,9 +154,9 @@ public class XmlCompareJdomTest {
                                    // addedRight,missingRight,textMismatches,strictMatch,treesMatch\r
     }\r
 \r
-\r
     // ============  expected part, will be used as LEFT tree ==========================================================\r
     private static String exHEAD    ="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"\r
+                                    +"<document name=\"objectexit\">"\r
                                     +"<ns2:objectexit_common \r\n"\r
                                     +"    xmlns:ns2=\"http://collectionspace.org/services/objectexit\" \r\n"\r
                                     +"    xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \r\n"\r
@@ -174,7 +174,8 @@ public class XmlCompareJdomTest {
                                     +" </first>\r\n";\r
     private static String exDEP     =" <depositor>urn:cspace:org.collectionspace.demo:orgauthority:name(TestOrgAuth):organization:name(Northern Climes Museum)'Northern Climes Museum'</depositor>\r\n";\r
     private static String exNEW     =" <newField>objectexitNumber-1290026472360</newField>\r\n";\r
-    private static String exFOOT    ="</ns2:objectexit_common>";\r
+    private static String exFOOT    ="</ns2:objectexit_common>"\r
+                                                     +"</document>";\r
 \r
     private static String expectedPartContent = exHEAD + exEN + exDEP  + exFOOT;\r
 \r
@@ -182,11 +183,14 @@ public class XmlCompareJdomTest {
     // ============  from-server part, will be used as RIGHT tree ==========================================================\r
 \r
     private static String srvHEAD =  "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"\r
+                                    +"<document name=\"objectexit\">"\r
                                     +"<ns2:objectexit_common xmlns:ns2=\"http://collectionspace.org/services/objectexit\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://collectionspace.org/services/objectexit http://services.collectionspace.org/objectexit/objectexit_common.xsd\">\r\n";\r
+\r
     private static String srvEN    = "<exitNumber>objectexitNumber-1290026472360</exitNumber>\r\n";\r
     private static String srvEN2   = "<exitNumber>objectexitNumber-9999999999999</exitNumber>\r\n";\r
     private static String srvDEPOSITOR  = "<depositor>urn:cspace:org.collectionspace.demo:orgauthority:name(TestOrgAuth):organization:name(Northern Climes Museum)'Northern Climes Museum'</depositor>\r\n";\r
-    private static String srvFOOT =  "</ns2:objectexit_common>\r\n";\r
+    private static String srvFOOT =  "</ns2:objectexit_common>\r\n"\r
+                                                       +"</document>";\r
 \r
     private static String partFromServer = srvHEAD+srvEN+srvDEPOSITOR+srvFOOT;\r
 \r
index 0389953bad7f4759145602b4957f2cd7a122e4bf..ff3b52933a058faf654e6c9ea5ce8a1f532f16fb 100755 (executable)
@@ -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<ServiceResult>> list = replay.runMaster(masterFile);
-        //logTestForGroup(list, "XmlReplayMasterTest");
+        XmlReplay replay = createXmlReplayUsingIntegrationTestsModule("..");
+        List<List<ServiceResult>> 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<MAXWORKERS; t++){
index 0343334d45605fea640514828450a2217b6bfa35..0ca9b93cc98865ab08aaf3c60af401bd6c4413bf 100644 (file)
@@ -56,7 +56,7 @@
       Used to measure timings of 1000 records for  CSPACE-3553\r
     <run controlFile="objectexit/object-exit-LOOP.xml" testGroup="LOOP" />\r
     -->\r
-    <run controlFile="objectexit/object-exit-LOOP.xml" testGroup="LOOP" />\r
-    \r
+     <run controlFile="objectexit/object-exit.xml" testGroup="makeone" />\r
+\r
 </xmlReplayMaster>\r
 \r
index 7b72357519581306ba44888a2e6b43b64a2c7948..3669cbc1f906228cd219cfba5f353cf1ae0935c5 100644 (file)
          <test ID="oe1"  auth="test">\r
              <method>POST</method>\r
              <uri>/cspace-services/objectexit/</uri>\r
-             <part>\r
-                 <label>objectexit_common</label>\r
-                 <filename>objectexit/oe1.xml</filename>\r
-             </part>\r
+             <filename>objectexit/oe1.xml</filename>\r
          </test>\r
         <test ID="oe2">\r
             <method>GET</method>\r
             <uri>/cspace-services/objectexit/${oe1.CSID}</uri>\r
             <response>\r
-                <expected level="TEXT" />\r
-                <part>\r
-                     <label>objectexit_common</label>\r
-                     <filename>objectexit/res/oe2.res.xml</filename>\r
-                 </part>\r
+\r
+                <expected level="TREE" />\r
+                <!-- TODO: this is a bit funky right now (2011-03-31) because collectionspace_core adds things like createdAt, which are all part of the POX payload now -->\r
+\r
+                <filename>objectexit/res/oe2.res.xml</filename>\r
              </response>\r
         </test>\r
     </testGroup>\r
index 329ca8e42a9ffe1aebf8423d7e14f7b5182fc59b..78ee566930a38c3c2e3319d3306fd25cf98ad552 100644 (file)
@@ -1,7 +1,10 @@
-<ns2:objectexit_common\r
-xmlns:ns2="http://collectionspace.org/services/objectexit"\r
-xmlns:ns3="http://collectionspace.org/services/jaxb">\r
-  <depositor>urn:cspace:org.collectionspace.demo:orgauthority:name(TestOrgAuth):organization:name(Northern Climes Museum)'Northern Climes Museum'</depositor>\r
-  <exitNumber>objectexitNumber-1290026472360</exitNumber>\r
-</ns2:objectexit_common>\r
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r
+<document name="objectexit">\r
+    <ns2:objectexit_common\r
+            xmlns:ns2="http://collectionspace.org/services/objectexit"\r
+            xmlns:ns3="http://collectionspace.org/services/jaxb">\r
+        <depositor>urn:cspace:org.collectionspace.demo:orgauthority:name(TestOrgAuth):organization:name(Northern Climes Museum)'Northern Climes Museum'</depositor>\r
+        <exitNumber>objectexitNumber-1290026472360</exitNumber>\r
+    </ns2:objectexit_common>\r
+</document>\r
 \r
index 24166dc6a21c073268355eab8d1489b97a91694b..8f0cabfca130c3174078bfa919fc4f1b1ddc56e4 100755 (executable)
@@ -1,12 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>\r
 <document name="objectexit">\r
-<ns2:objectexit_common \r
-  xmlns:ns2="http://collectionspace.org/services/objectexit" \r
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \r
-  xsi:schemaLocation="http://collectionspace.org/services/objectexit http://services.collectionspace.org/objectexit/objectexit_common.xsd">\r
-<exitNumber>objectexitNumber-1290026472360</exitNumber>\r
-<depositor>urn:cspace:org.collectionspace.demo:orgauthority:name(TestOrgAuth):organization:name(Northern Climes Museum)'Northern Climes Museum'</depositor>\r
-<exitMethods></exitMethods>\r
+<ns2:objectexit_common xmlns:ns2="http://collectionspace.org/services/objectexit" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\r
+    <exitMethods/>\r
+    <exitNumber>objectexitNumber-1290026472360</exitNumber>\r
+    <depositor>urn:cspace:org.collectionspace.demo:orgauthority:name(TestOrgAuth):organization:name(Northern Climes Museum)'Northern Climes Museum'\r
+    </depositor>\r
 </ns2:objectexit_common>\r
+<ns2:collectionspace_core xmlns:ns2="http://collectionspace.org/collectionspace_core/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">\r
+    <tenantId>1</tenantId>\r
+    <updatedAt>2011-03-31T17:47:11Z</updatedAt>\r
+    <createdAt>2011-03-31T17:47:11Z</createdAt>\r
+</ns2:collectionspace_core>\r
 </document>\r
 \r
+\r