vgritsenko 2003/12/11 17:38:12
Modified: java/tests/src/org/apache/xindice/integration/client/services IndexedSearchTest.java Log: Reduce expected indexed query speedup on 4 tests from 10 to 7-8 Revision Changes Path 1.2 +394 -441 xml-xindice/java/tests/src/org/apache/xindice/integration/client/services/IndexedSearchTest.java Index: IndexedSearchTest.java =================================================================== RCS file: /home/cvs/xml-xindice/java/tests/src/org/apache/xindice/integration/client/services/IndexedSearchTest.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- IndexedSearchTest.java 6 Dec 2003 22:44:36 -0000 1.1 +++ IndexedSearchTest.java 12 Dec 2003 01:38:12 -0000 1.2 @@ -59,34 +59,27 @@ package org.apache.xindice.integration.client.services; -import org.custommonkey.xmlunit.XMLAssert; - -import org.xml.sax.InputSource; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.xindice.integration.client.AbstractXmlDbClientTest; +import org.apache.xindice.integration.client.XmlDbClientSetup; +import org.apache.xindice.xml.TextWriter; +import org.custommonkey.xmlunit.XMLAssert; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; - +import org.xml.sax.InputSource; import org.xmldb.api.base.Collection; import org.xmldb.api.base.ResourceSet; -import org.xmldb.api.base.XMLDBException; import org.xmldb.api.modules.XMLResource; import org.xmldb.api.modules.XPathQueryService; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.apache.xindice.integration.client.AbstractXmlDbClientTest; -import org.apache.xindice.integration.client.XmlDbClientSetup; -import org.apache.xindice.util.XindiceException; -import org.apache.xindice.xml.TextWriter; - -import java.io.StringReader; -import java.util.Arrays; -import java.util.Vector; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; +import java.io.StringReader; + /** * Implements test cases for testing functionality of * indexed xpath searching. @@ -101,100 +94,87 @@ */ public static String PARENT_COLLECTION_PATH = XmlDbClientSetup.INSTANCE_NAME + "/" + XmlDbClientSetup.TEST_COLLECTION_NAME; public static String SUBCOLLECTION_NAME = "indexedsearch"; - public static String INDEXED_SEARCH_TEST_COLLECTION_PATH = PARENT_COLLECTION_PATH + "/" + SUBCOLLECTION_NAME; + public static String INDEXED_SEARCH_TEST_COLLECTION_PATH = PARENT_COLLECTION_PATH + "/" + SUBCOLLECTION_NAME; private static boolean docsCreated = false; private static boolean aCollectionCreated = false; public final static String TEST_DOCUMENT_PREFIX = "indexedsearchtestdoc"; private final static DocumentBuilderFactory itsDocumentBuilderFactory = DocumentBuilderFactory.newInstance(); private static final Log itsLog = LogFactory.getLog(IndexedSearchTest.class); - + /** * Performs setup for each test case. */ public void setUp() throws Exception { - super.setUp(); - if(!aCollectionCreated) - { - try - { + if (!aCollectionCreated) { + try { this.client.dropCollection(PARENT_COLLECTION_PATH, SUBCOLLECTION_NAME); - } - catch(Exception anException) - { + } catch (Exception anException) { /** * ignore problems during drop collection above... **/ - } - finally - { + } finally { this.client.createCollection(PARENT_COLLECTION_PATH, SUBCOLLECTION_NAME); aCollectionCreated = true; } } - if(!docsCreated) { + if (!docsCreated) { createTestDocs(); docsCreated = true; } } - + /** * Creates 104 test documents and inserts them into the test Collection. */ private void createTestDocs() throws Exception { - for(int anIndex = 0; anIndex < 100; ++anIndex) { + for (int anIndex = 0; anIndex < 100; ++anIndex) { String aNumber = String.valueOf(anIndex); String aDocument = "<?xml version='1.0'?>" + - "<person number='" + aNumber + "'>" + - "<first>Sally</first>" + - "<last>Jones" + aNumber + "</last>" + - "<phone type='home'>555-345-6789</phone>" + - "</person>"; + "<person number='" + aNumber + "'>" + + "<first>Sally</first>" + + "<last>Jones" + aNumber + "</last>" + + "<phone type='home'>555-345-6789</phone>" + + "</person>"; this.client.insertDocument(INDEXED_SEARCH_TEST_COLLECTION_PATH, "doc" + String.valueOf(anIndex), aDocument); } } - - private class IndexerTestDefinition - { - public class Result - { + + private class IndexerTestDefinition { + public class Result { private ResourceSet itsResourceSet; private long itsElapsedTime; - + /** * Creates a new object. */ - public Result( - ResourceSet theResourceSet, - long theElapsedTime) - { + public Result(ResourceSet theResourceSet, + long theElapsedTime) { itsResourceSet = theResourceSet; itsElapsedTime = theElapsedTime; } - + /** * Provides this Result's ResourceSet. * * @return the ResourceSet of this result */ - public ResourceSet getResourceSet() - { + public ResourceSet getResourceSet() { return itsResourceSet; } - + /** * Provides this Result's elapsed time (how long the query took). * * @return the elapsed time in milliseconds */ - public long getElapsedTime() - { + public long getElapsedTime() { return itsElapsedTime; } } - + private String itsTestQuery; private String itsTestIndexName; private String itsTestIndexType; @@ -221,17 +201,15 @@ * any resources provided will be checked against the query results in order provided; * if null will not be checked) */ - public IndexerTestDefinition( - String theDescription, - String theTestQuery, - String theTestIndexName, - String theTestIndexType, - String theTestIndexPattern, - int theIndexSpeedupFactor, - String[] theTestDocuments, - long theExpectedResourceCount, - Object[] theExpectedResources) - { + public IndexerTestDefinition(String theDescription, + String theTestQuery, + String theTestIndexName, + String theTestIndexType, + String theTestIndexPattern, + int theIndexSpeedupFactor, + String[] theTestDocuments, + long theExpectedResourceCount, + Object[] theExpectedResources) { itsDescription = theDescription; itsTestQuery = theTestQuery; itsTestIndexName = theTestIndexName; @@ -242,103 +220,97 @@ itsExpectedResourceCount = theExpectedResourceCount; itsExpectedResources = theExpectedResources; } - + /** * Runs the test. If any test failure occurs, a JUnit exception is thrown. */ - public void runTest() throws Exception - { - try - { + public void runTest() throws Exception { + try { + Result aResult; addTestDocuments(); - Result aResult = runNonIndexed(); + + aResult = runNonIndexed(); checkResult(aResult); long aNonIndexedTime = aResult.getElapsedTime(); aResult = runIndexed(); + checkResult(aResult); long anIndexedTime = aResult.getElapsedTime(); - itsLog.info(itsDescription + ": Non-indexed time = " + aNonIndexedTime + " Indexed time = " + anIndexedTime + - " Index speedup:" + - (anIndexedTime > 0 ? " " + aNonIndexedTime/anIndexedTime + "X" : - anIndexedTime == 0 ? " >" + aNonIndexedTime + "X" : " (Indexed query not run)")); - if(anIndexedTime * itsIndexSpeedupFactor > aNonIndexedTime) { + itsLog.info(itsDescription + + ": Non-indexed time = " + aNonIndexedTime + + " Indexed time = " + anIndexedTime + + " Index speedup:" + (anIndexedTime > 0 ? " " + aNonIndexedTime / anIndexedTime + "X" : + anIndexedTime == 0 ? " >" + aNonIndexedTime + "X" : " (Indexed query not run)")); + if (anIndexedTime * itsIndexSpeedupFactor > aNonIndexedTime) { fail("Query apparently did not use index" + - " Non-indexed time = " + aNonIndexedTime + " Indexed time = " + anIndexedTime); + " Non-indexed time = " + aNonIndexedTime + " Indexed time = " + anIndexedTime); } - } - finally - { + } finally { removeTestDocuments(); dropIndex(); } } - + /** * Runs the test query without an index. * * @return a Result containing the query result (ResourceSet) and elapsed time */ - public Result runNonIndexed() throws Exception - { - runIndexed(); + public Result runNonIndexed() throws Exception { return runQuery(); } - + /** * Runs the test query with an index. * * @return a Result containing the query result (ResourceSet) and elapsed time */ - public Result runIndexed() throws Exception - { + public Result runIndexed() throws Exception { createIndex(); - Result aResult = runQuery(); - dropIndex(); - return aResult; + try { + return runQuery(); + } finally { + dropIndex(); + } } - + /** * Runs the test query. * * @return a Result containing the query result (ResourceSet) and elapsed time */ - public Result runQuery() throws Exception - { + public Result runQuery() throws Exception { Collection col = IndexedSearchTest.this.client.getCollection(IndexedSearchTest.INDEXED_SEARCH_TEST_COLLECTION_PATH); XPathQueryService xpathservice = (XPathQueryService) col.getService("XPathQueryService", "1.0"); - + org.apache.xindice.Stopwatch aStopwatch = new org.apache.xindice.Stopwatch("Non-indexed starts-with query", true); ResourceSet resultSet = xpathservice.query(itsTestQuery); aStopwatch.stop(); - return new Result(resultSet, aStopwatch.elapsed()); + return new Result(resultSet, aStopwatch.elapsed()); } - + /** * Checks the result of a test. Throws an assertion exception * if any check fails. * * @param theResult Result to check */ - public void checkResult(Result theResult) throws Exception - { + public void checkResult(Result theResult) throws Exception { assertNotNull("Parameter theResult is null", theResult); ResourceSet aResourceSet = theResult.getResourceSet(); assertNotNull("theResult contains a null ResourceSet", aResourceSet); - if(itsExpectedResourceCount >= 0) - { + if (itsExpectedResourceCount >= 0) { assertEquals("Result did not contain expected number of resources", - itsExpectedResourceCount, aResourceSet.getSize()); + itsExpectedResourceCount, aResourceSet.getSize()); } - - if(itsExpectedResources != null && itsExpectedResources.length > 1) - { - for(int anIndex = 0; anIndex < itsExpectedResources.length / 2; anIndex += 2) - { + + if (itsExpectedResources != null && itsExpectedResources.length > 1) { + for (int anIndex = 0; anIndex < itsExpectedResources.length / 2; anIndex += 2) { XMLResource aResource = (XMLResource) aResourceSet.getResource(anIndex); Node aNode = aResource.getContentAsDOM(); - int anExpectedSourceDocumentIndex = ((Integer)itsExpectedResources[anIndex]).intValue(); - String anExpected = "<?xml version=\"1.0\"?>\n" + addSource((String)itsExpectedResources[anIndex + 1], - TEST_DOCUMENT_PREFIX + anIndex, - IndexedSearchTest.INDEXED_SEARCH_TEST_COLLECTION_PATH); + int anExpectedSourceDocumentIndex = ((Integer) itsExpectedResources[anIndex]).intValue(); + String anExpected = "<?xml version=\"1.0\"?>\n" + addSource((String) itsExpectedResources[anIndex + 1], + TEST_DOCUMENT_PREFIX + anIndex, + IndexedSearchTest.INDEXED_SEARCH_TEST_COLLECTION_PATH); String anActual = TextWriter.toString(aNode); //itsLog.info(itsDescription); //itsLog.info("Expected resource " + (anIndex / 2) + ":"); @@ -347,34 +319,32 @@ //itsLog.info("Actual:"); //itsLog.info(anActual); XMLAssert.assertXMLEqual("While checking target Resource " + anIndex / 2, - anExpected, anActual); + anExpected, anActual); } } } - + /** * Adds the xindice source document/collection information to the * root of the specified XML and rreturns the XML as a string. * * @param theXML XML to add source to * @param theKey document key to add - * @param theCollection source collection to add + * @param theCollectionName source collection to add */ - public String addSource(String theXML, String theKey, String theCollectionName) throws Exception - { + public String addSource(String theXML, String theKey, String theCollectionName) throws Exception { DocumentBuilder aBuilder = itsDocumentBuilderFactory.newDocumentBuilder(); Document aDocument = aBuilder.parse( - new InputSource(new StringReader(theXML))); + new InputSource(new StringReader(theXML))); Element aRootElement = aDocument.getDocumentElement(); org.xmldb.api.base.Collection aCollection = IndexedSearchTest.this.client.getCollection( - theCollectionName); + theCollectionName); final String aPrefix = "src"; - aRootElement.setAttribute(org.apache.xindice.xml.dom.NodeImpl.XMLNS_PREFIX + ":" + aPrefix, - org.apache.xindice.xml.NodeSource.SOURCE_NS); + org.apache.xindice.xml.NodeSource.SOURCE_NS); aRootElement.setAttribute(aPrefix + ":" + org.apache.xindice.xml.NodeSource.SOURCE_COL, - "/" + INDEXED_SEARCH_TEST_COLLECTION_PATH); + "/" + INDEXED_SEARCH_TEST_COLLECTION_PATH); aRootElement.setAttribute(aPrefix + ":" + org.apache.xindice.xml.NodeSource.SOURCE_KEY, theKey); return TextWriter.toString(aRootElement); } @@ -382,46 +352,39 @@ /** * Creates the index used by this test. */ - public void createIndex() throws Exception - { - if(!itsIndexCreated) - { + public void createIndex() throws Exception { + if (!itsIndexCreated) { IndexedSearchTest.this.client.createIndexer(INDEXED_SEARCH_TEST_COLLECTION_PATH, itsTestIndexName, - "<?xml version='1.0'?><index name='" + itsTestIndexName + "' " + - "class='org.apache.xindice.core.indexer." + itsTestIndexType + "Indexer' " + - "pattern='" + itsTestIndexPattern + "' />"); + "<?xml version='1.0'?><index name='" + itsTestIndexName + "' " + + "class='org.apache.xindice.core.indexer." + itsTestIndexType + "Indexer' " + + "pattern='" + itsTestIndexPattern + "' />"); itsIndexCreated = true; - - // wait for the indexer to do the background indexing - Thread.sleep(1000); + + // Wait for the indexer to do the background indexing + Thread.sleep(1250); } } - + /** * Drops the index used by this test. */ - public void dropIndex() throws Exception - { - if(itsIndexCreated) - { + public void dropIndex() throws Exception { + if (itsIndexCreated) { IndexedSearchTest.this.client.dropIndexer(INDEXED_SEARCH_TEST_COLLECTION_PATH, itsTestIndexName); itsIndexCreated = false; } } - + /** * Adds all test-specific documents supplied for this test to the test collection. */ - public void addTestDocuments() throws Exception - { - if(!itsTestDocumentsAdded && itsTestDocuments != null) - { - for(int anIndex = 0; anIndex < itsTestDocuments.length; ++anIndex) - { + public void addTestDocuments() throws Exception { + if (!itsTestDocumentsAdded && itsTestDocuments != null) { + for (int anIndex = 0; anIndex < itsTestDocuments.length; ++anIndex) { String aDocumentName = TEST_DOCUMENT_PREFIX + anIndex; IndexedSearchTest.this.client.insertDocument( - INDEXED_SEARCH_TEST_COLLECTION_PATH, - aDocumentName, itsTestDocuments[anIndex]); + INDEXED_SEARCH_TEST_COLLECTION_PATH, + aDocumentName, itsTestDocuments[anIndex]); } itsTestDocumentsAdded = true; } @@ -430,24 +393,19 @@ /** * Removes all test-specific documents supplied for this test from the test collection. */ - public void removeTestDocuments() throws Exception - { - if(itsTestDocumentsAdded && itsTestDocuments != null) - { - for(int anIndex = 0; anIndex < itsTestDocuments.length; ++anIndex) - { + public void removeTestDocuments() throws Exception { + if (itsTestDocumentsAdded && itsTestDocuments != null) { + for (int anIndex = 0; anIndex < itsTestDocuments.length; ++anIndex) { String aDocumentName = TEST_DOCUMENT_PREFIX + anIndex; IndexedSearchTest.this.client.removeDocument( - INDEXED_SEARCH_TEST_COLLECTION_PATH, - aDocumentName); + INDEXED_SEARCH_TEST_COLLECTION_PATH, + aDocumentName); } itsTestDocumentsAdded = false; } } - - } - + /** * Tests the functionality of indexed searches on a Collection * with a name index that has a pattern specifying a specific Element @@ -455,34 +413,34 @@ */ public void testSpecificElementNoAttributeNameIndexer() throws Exception { IndexerTestDefinition aTest = new IndexerTestDefinition( - "testSpecificElementNoAttributeNameIndexer", // description - "/person/address", // query - "SENA", // index name - "Name", // index type - "address", // index pattern - 10, // indexed query speedup expected (conservative) - new String[] { // test docs specifically for this test - "<?xml version='1.0'?>" + - "<person number3='yes'>" + - "<first surname='no' given='yes'>Sally</first>" + - "<last surname='yes'>aSm</last>" + - "<phone call='no' type='work'>555-345-6789</phone>" + + "testSpecificElementNoAttributeNameIndexer", // description + "/person/address", // query + "SENA", // index name + "Name", // index type + "address", // index pattern + 8, // indexed query speedup expected (conservative) + new String[] { // test docs specifically for this test + "<?xml version='1.0'?>" + + "<person number3='yes'>" + + "<first surname='no' given='yes'>Sally</first>" + + "<last surname='yes'>aSm</last>" + + "<phone call='no' type='work'>555-345-6789</phone>" + + "<address> " + + "<street>" + + "<number given='no' />" + + "</street>" + + "</address>" + + "</person>" + }, + 1, // expected result count + new Object[] { // expected resources to check for (can be empty or partial set) + new Integer(1), "<address> " + "<street>" + - "<number given='no' />"+ + "<number given='no' />" + "</street>" + - "</address>" + - "</person>" - }, - 1, // expected result count - new Object[] { // expected resources to check for (can be empty or partial set) - new Integer(1), - "<address> " + - "<street>" + - "<number given='no' />"+ - "</street>" + - "</address>" - } ); + "</address>" + }); aTest.runTest(); } @@ -494,35 +452,35 @@ */ public void testSpecificElementNoAttributeNameIndexer2() throws Exception { IndexerTestDefinition aTest = new IndexerTestDefinition( - "testSpecificElementNoAttributeNameIndexer2", // description - "/person/[EMAIL PROTECTED]", // query - "SENA", // index name - "Name", // index type - "second", // index pattern - 10, // indexed query speedup expected (conservative) - new String[] { // test docs specifically for this test - "<?xml version='1.0'?>" + - "<person number3='yes'>" + - "<first surname='no' given='yes'>Sally</first>" + - "<second surname='no' given='yes'>Wally</second>" + - "<last surname='yes'>aSm</last>" + - "<phone call='no' type='work'>555-345-6789</phone>" + - "<address> " + - "<street>" + - "<number given='no' />"+ - "</street>" + - "</address>" + - "</person>" - }, - 1, // expected result count - new Object[] { // expected resources to check for (can be empty or partial set) - new Integer(1), - "<second surname='no' given='yes'>Wally</second>" - } ); - + "testSpecificElementNoAttributeNameIndexer2", // description + "/person/[EMAIL PROTECTED]", // query + "SENA", // index name + "Name", // index type + "second", // index pattern + 10, // indexed query speedup expected (conservative) + new String[] { // test docs specifically for this test + "<?xml version='1.0'?>" + + "<person number3='yes'>" + + "<first surname='no' given='yes'>Sally</first>" + + "<second surname='no' given='yes'>Wally</second>" + + "<last surname='yes'>aSm</last>" + + "<phone call='no' type='work'>555-345-6789</phone>" + + "<address> " + + "<street>" + + "<number given='no' />" + + "</street>" + + "</address>" + + "</person>" + }, + 1, // expected result count + new Object[] { // expected resources to check for (can be empty or partial set) + new Integer(1), + "<second surname='no' given='yes'>Wally</second>" + }); + aTest.runTest(); } - + /** * Tests the functionality of indexed searches on a Collection * with a name index that has a pattern specifying both an Element @@ -531,34 +489,34 @@ public void testSpecificElementSpecificAttributeNameIndexer() throws Exception { // select all phone records having a call attribute IndexerTestDefinition aTest = new IndexerTestDefinition( - "testSpecificElementSpecificAttributeNameIndexer", // description - "/person/[EMAIL PROTECTED]", // query - "SESA", // index name - "Name", // index type - "[EMAIL PROTECTED]", // index pattern - 8, // indexed query speedup expected (conservative) - new String[] { // test docs specifically for this test - "<?xml version='1.0'?>" + - "<person number3='yes'>" + - "<first surname='no' given='yes'>Sally</first>" + - "<last surname='yes'>aSm</last>" + - "<phone call='no' type='work'>555-345-6789</phone>" + - "<address> " + - "<street>" + - "<number given='no' />"+ - "</street>" + - "</address>" + - "</person>" - }, - 1, // expected result count - new Object[] { // expected resources to check for (can be empty or partial set) - new Integer(1), - "<phone call='no' type='work'>555-345-6789</phone>" - } ); - + "testSpecificElementSpecificAttributeNameIndexer", // description + "/person/[EMAIL PROTECTED]", // query + "SESA", // index name + "Name", // index type + "[EMAIL PROTECTED]", // index pattern + 8, // indexed query speedup expected (conservative) + new String[] { // test docs specifically for this test + "<?xml version='1.0'?>" + + "<person number3='yes'>" + + "<first surname='no' given='yes'>Sally</first>" + + "<last surname='yes'>aSm</last>" + + "<phone call='no' type='work'>555-345-6789</phone>" + + "<address> " + + "<street>" + + "<number given='no' />" + + "</street>" + + "</address>" + + "</person>" + }, + 1, // expected result count + new Object[] { // expected resources to check for (can be empty or partial set) + new Integer(1), + "<phone call='no' type='work'>555-345-6789</phone>" + }); + aTest.runTest(); } - + /** * Tests the functionality of indexed searches on a Collection * with a name index that has a pattern specifying a specific Element @@ -567,35 +525,35 @@ public void testSpecificElementWildAttributeNameIndexer() throws Exception { // select resources having a "first" element containing a "surname" attribute that is a child of a "person" element IndexerTestDefinition aTest = new IndexerTestDefinition( - "testSpecificElementWildAttributeNameIndexer", // description - "/person/[EMAIL PROTECTED]", // query - "SEWA", // index name - "Name", // index type - "[EMAIL PROTECTED]", // index pattern - 10, // indexed query speedup expected (conservative) - new String[] { // test docs specifically for this test - "<?xml version='1.0'?>" + - "<person number3='yes'>" + - "<first surname='no' given='yes'>Sally</first>" + - "<second surname='no' given='yes'>Wally</second>" + - "<last surname='yes'>aSm</last>" + - "<phone call='no' type='work'>555-345-6789</phone>" + - "<address> " + - "<street>" + - "<number given='no' />"+ - "</street>" + - "</address>" + - "</person>" - }, - 1, // expected result count - new Object[] { // expected resources to check for (can be empty or partial set) - new Integer(1), + "testSpecificElementWildAttributeNameIndexer", // description + "/person/[EMAIL PROTECTED]", // query + "SEWA", // index name + "Name", // index type + "[EMAIL PROTECTED]", // index pattern + 10, // indexed query speedup expected (conservative) + new String[] { // test docs specifically for this test + "<?xml version='1.0'?>" + + "<person number3='yes'>" + + "<first surname='no' given='yes'>Sally</first>" + + "<second surname='no' given='yes'>Wally</second>" + + "<last surname='yes'>aSm</last>" + + "<phone call='no' type='work'>555-345-6789</phone>" + + "<address> " + + "<street>" + + "<number given='no' />" + + "</street>" + + "</address>" + + "</person>" + }, + 1, // expected result count + new Object[] { // expected resources to check for (can be empty or partial set) + new Integer(1), "<second surname='no' given='yes'>Wally</second>", - } ); - + }); + aTest.runTest(); } - + /** * Tests the functionality of indexed searches on a Collection * with a name index that has a pattern specifying a wildcard Element @@ -604,42 +562,41 @@ public void testWildElementSpecificAttributeNameIndexer() throws Exception { // select resources having any element containing a "surname" attribute that is a child of a "person" element IndexerTestDefinition aTest = new IndexerTestDefinition( - "testWildElementSpecificAttributeNameIndexer", // description - "//[EMAIL PROTECTED]", // query - "WESA", // index name - "Name", // index type - "[EMAIL PROTECTED]", // index pattern - 10, // indexed query speedup expected (conservative) - new String[] { // test docs specifically for this test - "<?xml version='1.0'?>" + - "<person number3='yes'>" + - "<first surname='no' given='yes'>Sally</first>" + - "<last surname='yes'>aSm</last>" + - "<phone call='no' type='work'>555-345-6789</phone>" + + "testWildElementSpecificAttributeNameIndexer", // description + "//[EMAIL PROTECTED]", // query + "WESA", // index name + "Name", // index type + "[EMAIL PROTECTED]", // index pattern + 10, // indexed query speedup expected (conservative) + new String[] { // test docs specifically for this test + "<?xml version='1.0'?>" + + "<person number3='yes'>" + + "<first surname='no' given='yes'>Sally</first>" + + "<last surname='yes'>aSm</last>" + + "<phone call='no' type='work'>555-345-6789</phone>" + + "<address> " + + "<street>" + + "<number given='no' />" + + "</street>" + + "</address>" + + "</person>" + }, + 2, // expected result count + new Object[] { // expected resources to check for (can be empty or partial set) + new Integer(1), + "<first surname='no' given='yes'>Sally</first>", + + new Integer(1), "<address> " + "<street>" + - "<number given='no' />"+ + "<number given='no' />" + "</street>" + - "</address>" + - "</person>" - }, - 2, // expected result count - new Object[] { // expected resources to check for (can be empty or partial set) - - new Integer(1), - "<first surname='no' given='yes'>Sally</first>", - - new Integer(1), - "<address> " + - "<street>" + - "<number given='no' />"+ - "</street>" + - "</address>" - } ); - + "</address>" + }); + aTest.runTest(); } - + /** * Tests the functionality of indexed searches on a Collection * with a name index that has a pattern specifying a wildcard Element @@ -649,137 +606,133 @@ public void testWildElementWildAttributeNameIndexer() throws Exception { // select nodes with an attribute named 'given' IndexerTestDefinition aTest = new IndexerTestDefinition( - "testWildElementWildAttributeNameIndexer", // description - "//[EMAIL PROTECTED]", // query - "WEWA", // index name - "Name", // index type - "[EMAIL PROTECTED]", // index pattern - 0, // indexed query speedup expected (conservative) - new String[] { // test docs specifically for this test - "<?xml version='1.0'?>" + - "<person number3='yes'>" + - "<first surname='no' given='yes'>Sally</first>" + - "<last surname='yes'>aSm</last>" + - "<phone call='no' type='work'>555-345-6789</phone>" + - "<address> " + - "<street>" + - "<number given='no' />"+ - "</street>" + - "</address>" + - "</person>" - }, - 2, // expected result count - new Object[] { // expected resources to check for (can be empty or partial set) - new Integer(1), "<first surname='no' given='yes'>Sally</first>", - new Integer(1), "<number given='no' />" - } ); - + "testWildElementWildAttributeNameIndexer", // description + "//[EMAIL PROTECTED]", // query + "WEWA", // index name + "Name", // index type + "[EMAIL PROTECTED]", // index pattern + 0, // indexed query speedup expected (conservative) + new String[] { // test docs specifically for this test + "<?xml version='1.0'?>" + + "<person number3='yes'>" + + "<first surname='no' given='yes'>Sally</first>" + + "<last surname='yes'>aSm</last>" + + "<phone call='no' type='work'>555-345-6789</phone>" + + "<address> " + + "<street>" + + "<number given='no' />" + + "</street>" + + "</address>" + + "</person>" + }, + 2, // expected result count + new Object[] { // expected resources to check for (can be empty or partial set) + new Integer(1), "<first surname='no' given='yes'>Sally</first>", + new Integer(1), "<number given='no' />" + }); + aTest.runTest(); } - + /** * Tests a starts-with search query for an Element value that should be resolvable using indexed searching * on a value index. (index pattern like "last") */ public void testSpecificElementNoAttributeValueIndexedStartsWithSearch() - throws Exception { + throws Exception { // search all records whose last name begins with 'Smi' IndexerTestDefinition aTest = new IndexerTestDefinition( - "testSpecificElementNoAttributeValueIndexedStartsWithSearch", // description - "//person[starts-with(last, 'Smi')]", // query - "SENA", // index name - "Value", // index type - "last", // index pattern - 10, // indexed query speedup expected (conservative) - new String[] { // test docs specifically for this test - "<?xml version='1.0'?>" + - "<person number3='yes'>" + - "<first surname='no' given='yes'>Sally</first>" + - "<last surname='yes'>Smith</last>" + - "<phone call='no' type='work'>555-345-6789</phone>" + - "<address> " + - "<street>" + - "<number given='no' />"+ - "</street>" + - "</address>" + - "</person>", - - "<?xml version='1.0'?>" + - "<person number3='yes'>" + - "<first surname='no' given='yes'>Sally</first>" + - "<last surname='yes'>Smithers</last>" + - "<phone call='no' type='work'>555-345-6789</phone>" + - "<address> " + - "<street>" + - "<number given='no' />"+ - "</street>" + - "</address>" + - "</person>" - - }, - 2, // expected result count - new Object[] { // expected resources to check for (can be empty or partial set) - new Integer(1), "<person number3='yes'>" + - "<first surname='no' given='yes'>Sally</first>" + - "<last surname='yes'>Smith</last>" + - "<phone call='no' type='work'>555-345-6789</phone>" + - "<address> " + - "<street>" + - "<number given='no' />"+ - "</street>" + - "</address>" + - "</person>", - - new Integer(2), "<person number3='yes'>" + - "<first surname='no' given='yes'>Sally</first>" + - "<last surname='yes'>Smithers</last>" + - "<phone call='no' type='work'>555-345-6789</phone>" + - "<address> " + - "<street>" + - "<number given='no' />"+ - "</street>" + - "</address>" + - "</person>" + "testSpecificElementNoAttributeValueIndexedStartsWithSearch", // description + "//person[starts-with(last, 'Smi')]", // query + "SENA", // index name + "Value", // index type + "last", // index pattern + 8, // indexed query speedup expected (conservative) + new String[] { // test docs specifically for this test + "<?xml version='1.0'?>" + + "<person number3='yes'>" + + "<first surname='no' given='yes'>Sally</first>" + + "<last surname='yes'>Smith</last>" + + "<phone call='no' type='work'>555-345-6789</phone>" + + "<address> " + + "<street>" + + "<number given='no' />" + + "</street>" + + "</address>" + + "</person>", + + "<?xml version='1.0'?>" + + "<person number3='yes'>" + + "<first surname='no' given='yes'>Sally</first>" + + "<last surname='yes'>Smithers</last>" + + "<phone call='no' type='work'>555-345-6789</phone>" + + "<address> " + + "<street>" + + "<number given='no' />" + + "</street>" + + "</address>" + + "</person>" + }, + 2, // expected result count + new Object[] { // expected resources to check for (can be empty or partial set) + new Integer(1), "<person number3='yes'>" + + "<first surname='no' given='yes'>Sally</first>" + + "<last surname='yes'>Smith</last>" + + "<phone call='no' type='work'>555-345-6789</phone>" + + "<address> " + + "<street>" + + "<number given='no' />" + + "</street>" + + "</address>" + + "</person>", + + new Integer(2), "<person number3='yes'>" + + "<first surname='no' given='yes'>Sally</first>" + + "<last surname='yes'>Smithers</last>" + + "<phone call='no' type='work'>555-345-6789</phone>" + + "<address> " + + "<street>" + + "<number given='no' />" + + "</street>" + + "</address>" + + "</person>" + }); - } ); - aTest.runTest(); } - + /** * Tests a starts-with search query for an attribute value that should be resolvable using indexed searching * on a value index. (index pattern like "[EMAIL PROTECTED]") */ public void testSpecificElementSpecificAttributeValueIndexedStartsWithSearch() - throws Exception { + throws Exception { // search all records whose last name begins with 'Smi' - String query = "//phone[starts-with(@call, 'n')]"; - IndexerTestDefinition aTest = new IndexerTestDefinition( - "testSpecificElementSpecificAttributeValueIndexedStartsWithSearch", // description - "//phone[starts-with(@call, 'n')]", // query - "SESA", // index name - "Value", // index type - "[EMAIL PROTECTED]", // index pattern - 10, // indexed query speedup expected (conservative) - new String[] { // test docs specifically for this test - "<?xml version='1.0'?>" + - "<person number3='yes'>" + - "<first surname='no' given='yes'>Sally</first>" + - "<last surname='yes'>aSm</last>" + - "<phone call='no' type='work'>555-345-6789</phone>" + - "<address> " + - "<street>" + - "<number given='no' />"+ - "</street>" + - "</address>" + - "</person>" - }, - 1, // expected result count - new Object[] { // expected resources to check for (can be empty or partial set) - new Integer(1), "<phone call='no' type='work'>555-345-6789</phone>" - } ); - + "testSpecificElementSpecificAttributeValueIndexedStartsWithSearch", // description + "//phone[starts-with(@call, 'n')]", // query + "SESA", // index name + "Value", // index type + "[EMAIL PROTECTED]", // index pattern + 8, // indexed query speedup expected (conservative) + new String[] { // test docs specifically for this test + "<?xml version='1.0'?>" + + "<person number3='yes'>" + + "<first surname='no' given='yes'>Sally</first>" + + "<last surname='yes'>aSm</last>" + + "<phone call='no' type='work'>555-345-6789</phone>" + + "<address> " + + "<street>" + + "<number given='no' />" + + "</street>" + + "</address>" + + "</person>" + }, + 1, // expected result count + new Object[] { // expected resources to check for (can be empty or partial set) + new Integer(1), "<phone call='no' type='work'>555-345-6789</phone>" + }); + aTest.runTest(); } @@ -788,46 +741,46 @@ * on a value index. (index pattern like "[EMAIL PROTECTED]") */ public void testWildElementSpecificAttributeValueIndexedStartsWithSearch() - throws Exception { + throws Exception { // search all records whose last name begins with 'Smi' IndexerTestDefinition aTest = new IndexerTestDefinition( - "testWildElementSpecificAttributeValueIndexedStartsWithSearch", // description - "//phone[starts-with(@call, 'n')]", // query - "SENA", // index name - "Value", // index type - "[EMAIL PROTECTED]", // index pattern - 10, // indexed query speedup expected (conservative) - new String[] { // test docs specifically for this test - "<?xml version='1.0'?>" + - "<person number3='yes'>" + - "<first surname='no' given='yes'>Sally</first>" + - "<last surname='yes'>aSm</last>" + - "<phone call='no' type='work'>555-345-6789</phone>" + - "<address call='no'> " + - "<street>" + - "<number given='no' />"+ - "</street>" + - "</address>" + - "</person>", + "testWildElementSpecificAttributeValueIndexedStartsWithSearch", // description + "//phone[starts-with(@call, 'n')]", // query + "SENA", // index name + "Value", // index type + "[EMAIL PROTECTED]", // index pattern + 7, // indexed query speedup expected (conservative) + new String[] { // test docs specifically for this test + "<?xml version='1.0'?>" + + "<person number3='yes'>" + + "<first surname='no' given='yes'>Sally</first>" + + "<last surname='yes'>aSm</last>" + + "<phone call='no' type='work'>555-345-6789</phone>" + + "<address call='no'> " + + "<street>" + + "<number given='no' />" + + "</street>" + + "</address>" + + "</person>", + + "<?xml version='1.0'?>" + + "<person number3='yes'>" + + "<first surname='no' given='yes'>Sally</first>" + + "<last surname='yes'>aSm</last>" + + "<phone call='no' type='work'>525-345-6789</phone>" + + "<address call='no'> " + + "<street>" + + "<number given='no' />" + + "</street>" + + "</address>" + + "</person>" + }, + 2, // expected result count + new Object[] { // expected resources to check for (can be empty or partial set) + new Integer(1), "<phone call='no' type='work'>555-345-6789</phone>", + new Integer(1), "<phone call='no' type='work'>525-345-6789</phone>" + }); - "<?xml version='1.0'?>" + - "<person number3='yes'>" + - "<first surname='no' given='yes'>Sally</first>" + - "<last surname='yes'>aSm</last>" + - "<phone call='no' type='work'>525-345-6789</phone>" + - "<address call='no'> " + - "<street>" + - "<number given='no' />"+ - "</street>" + - "</address>" + - "</person>" - }, - 2, // expected result count - new Object[] { // expected resources to check for (can be empty or partial set) - new Integer(1), "<phone call='no' type='work'>555-345-6789</phone>", - new Integer(1), "<phone call='no' type='work'>525-345-6789</phone>" - } ); - aTest.runTest(); } }