/* * dbXML License, Version 1.0 * * * Copyright (c) 1999-2001 The dbXML Group, L.L.C. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by * The dbXML Group (http://www.dbxml.com/)." * Alternately, this acknowledgment may appear in the software * itself, if and wherever such third-party acknowledgments normally * appear. * * 4. The names "dbXML" and "The dbXML Group" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * info@dbxml.com. * * 5. Products derived from this software may not be called "dbXML", * nor may "dbXML" appear in their name, without prior written * permission of The dbXML Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE DBXML GROUP OR ITS CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * $Id: CollectionManagerTest.java,v 1.6 2001/08/15 20:06:48 tom Exp $ */ import java.io.*; import junit.framework.*; import org.xmldb.api.*; import org.xmldb.api.base.*; import org.xmldb.api.modules.*; import org.dbxml.core.corba.db.EncodedBuffer; import org.dbxml.core.corba.db.*; import org.dbxml.core.corba.db.Collection; import org.dbxml.xml.dom.*; import org.w3c.dom.*; public class CollectionManagerTest extends CorbaAPITestCase { private boolean exceptioncaught = false ; public CollectionManagerTest(String name) { super(name); } public static junit.framework.Test suite() { System.out.println("In CollectionManagerTest.suite() "); return new junit.framework.TestSuite(CollectionManagerTest.class); } public void testGetName() { try { assertTrue( colman.getName().equals("tests") ); } catch( Exception e ) { fail(e.getMessage() ); } } public void testGetCanonicalName() { try { assertTrue( colman.getCanonicalName().equals("/db/tests") ); } catch( Exception e ) { fail(e.getMessage() ); } } public void testCreateCollection() { Collection tempcol = null; try { // Name of the valid collection to create String newcolname = "testchild"; // Config XML for valid collection created String colconf = "" ; colconf = colconf + "" ; colconf = colconf + "" ; EncodedBuffer colconfbuf = new EncodedBuffer(-1, EmptyBytes, colconf.getBytes() ); // Create the collection tempcol = colman.createCollection(newcolname, colconfbuf); // Verify that collection created, and that name was set correctly assertTrue( tempcol.getName().equals( newcolname ) ); // Now drop the collection colman.dropCollection( newcolname ); // Attempt to create a collection with an empty configuration try { exceptioncaught = false; String empty = ""; EncodedBuffer emptybuf = new EncodedBuffer(-1, EmptyBytes, empty.getBytes() ); tempcol = colman.createCollection("NullConfig", emptybuf ); } catch( APIException e ) { exceptioncaught = true; assertTrue( e.faultCode == FaultCodes.JAVA_RUNTIME_ERROR ); } finally { assertTrue( exceptioncaught ); } // Attempt to create a collection with a malformed configuration try { exceptioncaught = false; // Bad configuration file String malconf = "lkjasf"; EncodedBuffer malconfbuf = new EncodedBuffer(-1, EmptyBytes, malconf.getBytes() ); // Attempt to create the collection tempcol = colman.createCollection("malconf", malconfbuf ); } catch( APIException e ) { exceptioncaught = true; assertTrue( e.faultCode == FaultCodes.JAVA_RUNTIME_ERROR ); } finally { assertTrue( exceptioncaught ); } // Attempt to create a collection with an invalid configuration, missing name attribute try { exceptioncaught = false; // Bad configuration file String invalidconf = "" ; invalidconf = invalidconf + "" ; invalidconf = invalidconf + "" ; EncodedBuffer invalidconfbuf = new EncodedBuffer(-1, EmptyBytes, invalidconf.getBytes() ); // Attempt to create the collection tempcol = colman.createCollection("invalid", invalidconfbuf ); // Test that the collection was created by calling getName() on it assertTrue( tempcol.getName().equals("invalid") ); colman.dropCollection("invalid"); } catch( APIException e ) { exceptioncaught = true; assertTrue( e.faultCode == FaultCodes.COL_CANNOT_CREATE ); } finally { assertTrue( exceptioncaught ); } // Attempt to create a collection without a filer attribute, this should be allowed exceptioncaught = false; String nofilerconf = "" ; nofilerconf = nofilerconf + "" ; EncodedBuffer nofilerconfbuf = new EncodedBuffer(-1, EmptyBytes, nofilerconf.getBytes() ); // Attempt to create the collection tempcol = colman.createCollection("nofiler", nofilerconfbuf ); colman.dropCollection("nofiler"); } catch( Exception e ) { e.printStackTrace(); fail(e.getMessage() ); } finally { // Remove collection added so that we don't break other tests, release recources for tempcol tempcol.remove(); } } public void testDropCollection() { Collection tempcol = null; try { // Name of the valid collection to create String newcolname = "coltodrop"; // Config XML for valid collection created String colconf = "" ; colconf = colconf + "" ; colconf = colconf + "" ; EncodedBuffer colconfbuf = new EncodedBuffer(-1, EmptyBytes, colconf.getBytes() ); // Create a collection tempcol = colman.createCollection(newcolname, colconfbuf); // Verify that collection created, and that name was set correctly assertTrue( tempcol.getName().equals( newcolname ) ); // Drop the collection colman.dropCollection(newcolname); // Try dropping the collection we just dropped try { exceptioncaught = false; colman.dropCollection(newcolname); } catch( APIException e ) { assertTrue( e.faultCode == FaultCodes.COL_COLLECTION_NOT_FOUND ); } // Try dropping a collection that doesn't exist try { exceptioncaught = false; colman.dropCollection("boguscollectionname"); } catch( APIException e ) { assertTrue( e.faultCode == FaultCodes.COL_COLLECTION_NOT_FOUND ); } // Try dropping a collection with the empty string for a name try { exceptioncaught = false; colman.dropCollection(""); } catch( APIException e ) { assertTrue( e.faultCode == FaultCodes.COL_COLLECTION_NOT_FOUND ); } } catch( Exception e ) { e.printStackTrace(); fail(e.getMessage() ); } finally { tempcol.remove(); } } public void testCreateIndexer() { try { // Try adding a normal index try { String indexconf = ""; EncodedBuffer indexconfbuf = new EncodedBuffer(-1, EmptyBytes, indexconf.getBytes() ); colman.createIndexer( indexconfbuf ); } catch( APIException e ) { fail( e.getMessage() ); } // Try re-adding the same index, should thow IDX_DUPLICATE_INDEX try { exceptioncaught = false ; String indexconf = ""; EncodedBuffer indexconfbuf = new EncodedBuffer(-1, EmptyBytes, indexconf.getBytes() ); colman.createIndexer( indexconfbuf ); } catch( APIException e ) { exceptioncaught = true ; assertTrue( e.faultCode == FaultCodes.IDX_DUPLICATE_INDEX ); } finally { assertTrue( exceptioncaught == true ); } // Try adding an index without a name in the configuration, IDX_CANNOT_CREATE try { exceptioncaught = false; String nonameindexconf = ""; EncodedBuffer nonameindexconfbuf = new EncodedBuffer(-1, EmptyBytes, nonameindexconf.getBytes() ); colman.createIndexer( nonameindexconfbuf ); } catch( APIException e ) { exceptioncaught = true; assertTrue( e.faultCode == FaultCodes.IDX_CANNOT_CREATE ); } finally { assertTrue( exceptioncaught == true ); } // Try adding an index without a class try { exceptioncaught = false; String noclassindexconf = ""; EncodedBuffer noclassindexconfbuf = new EncodedBuffer(-1, EmptyBytes, noclassindexconf.getBytes() ); colman.createIndexer( noclassindexconfbuf ); } catch( APIException e ) { exceptioncaught = true; assertTrue( e.faultCode == FaultCodes.IDX_CANNOT_CREATE ); } finally { assertTrue( exceptioncaught == true ); } } catch( Exception e ) { fail(e.getMessage() ); } } public void testListIndexers() { try { // Should start out with 0 indexers assertTrue( colman.listIndexers().length == 0 ); // Add an 5 indexers, verify that 5 were added, try to retrieve each of them by name for( int i = 1 ; i < 6 ; i++ ) { String indexname = "index" + i ; String indexconf = ""; EncodedBuffer indexconfbuf = new EncodedBuffer(-1, EmptyBytes, indexconf.getBytes() ); colman.createIndexer( indexconfbuf ); assertTrue( colman.listIndexers().length == i ); // Since we are not gauranteed the order these are returned in we must loop over each boolean found = false; for( int x=0 ; x < colman.listIndexers().length ; x++ ) { if( colman.listIndexers()[x].equals(indexname) ) { found=true; } } assertTrue( found == true ); } // Remove all indexers, verify that none are listed String[] colindexes = colman.listIndexers(); for ( int i=0 ; i < colindexes.length ; i++ ) { colman.dropIndexer( colindexes[i] ); } assertTrue( colman.listIndexers().length == 0 ); } catch( Exception e ) { e.printStackTrace(); fail(e.getMessage() ); } } public void testdropIndexer() { try { int numindexes = 5 ; // Add an 5 indexers for( int i = 1 ; i <= numindexes ; i++ ) { String indexname = "index" + i ; String indexconf = ""; EncodedBuffer indexconfbuf = new EncodedBuffer(-1, EmptyBytes, indexconf.getBytes() ); colman.createIndexer( indexconfbuf ); } // Remove each indexer individually, verify the count and that it is deleted for( int i = 1 ; i <= numindexes ; i++ ) { String indexname = "index" + i ; colman.dropIndexer( indexname ); // Verify the index count assertTrue( colman.listIndexers().length == (numindexes - i) ); // Loop over each index, making sure that the name is not returned by listIndexers() boolean notfound = true; for( int x=0 ; x < colman.listIndexers().length ; x++ ) { if( colman.listIndexers()[x].equals(indexname) ) { notfound=false; } } assertTrue( notfound ); } // Try dropping an index that does not exist try { exceptioncaught = false; colman.dropIndexer("BogusName"); } catch( APIException e ) { exceptioncaught = true; assertTrue( e.faultCode == FaultCodes.IDX_INDEX_NOT_FOUND ); } finally { assertTrue( exceptioncaught ); } } catch( Exception e ) { fail(e.getMessage() ); } } public void testCreateXMLObject() { try { // Create a normal XMLObject String objectconf = ""; EncodedBuffer objectconfbuf = new EncodedBuffer(-1, EmptyBytes, objectconf.getBytes() ); colman.createXMLObject( objectconfbuf ); // Try re-adding the same XMLObject, should throw OBJ_DUPLICATE_OBJECT try { exceptioncaught = false; colman.createXMLObject( objectconfbuf ); } catch( APIException e) { exceptioncaught = true; assertTrue( e.faultCode == FaultCodes.OBJ_DUPLICATE_OBJECT ); } finally { assertTrue( exceptioncaught ); } // Try to add an object with no name in configuration try { // Create an XMLObject w/o name attribute String nonameobjectconf = ""; EncodedBuffer nonameobjectconfbuf = new EncodedBuffer(-1, EmptyBytes, nonameobjectconf.getBytes() ); colman.createXMLObject( nonameobjectconfbuf ); } catch( APIException e) { exceptioncaught = true; assertTrue( e.faultCode == FaultCodes.OBJ_CANNOT_CREATE ); } finally { assertTrue( exceptioncaught ); } // Try to add an object with no class in configuration try { // Create an XMLObject w/o class attribute String nonameobjectconf = ""; EncodedBuffer nonameobjectconfbuf = new EncodedBuffer(-1, EmptyBytes, nonameobjectconf.getBytes() ); colman.createXMLObject( nonameobjectconfbuf ); } catch( APIException e) { exceptioncaught = true; assertTrue( e.faultCode == FaultCodes.OBJ_CANNOT_CREATE ); } finally { assertTrue( exceptioncaught ); } // Try to add an object with a blank configuration try { // Create an XMLObject w/o class attribute String nonameobjectconf = ""; EncodedBuffer nonameobjectconfbuf = new EncodedBuffer(-1, EmptyBytes, nonameobjectconf.getBytes() ); colman.createXMLObject( nonameobjectconfbuf ); } catch( APIException e) { exceptioncaught = true; assertTrue( e.faultCode == FaultCodes.JAVA_RUNTIME_ERROR ); } finally { assertTrue( exceptioncaught ); } } catch( Exception e ) { fail(e.getMessage() ); } } public void testListXMLObjects() { try { int numobjects = 10; // Verify that we have no XMLObjects assertTrue( colman.listXMLObjects().length == 0 ); // Create XMLObjects, verify that they were added, try to retrieve each of them by name for( int i = 1 ; i < 6 ; i++ ) { String objectname = "xmlobject" + i ; String objectconf = ""; EncodedBuffer objectconfbuf = new EncodedBuffer(-1, EmptyBytes, objectconf.getBytes() ); colman.createXMLObject( objectconfbuf ); assertTrue( colman.listXMLObjects().length == i ); // Since we are not gauranteed the order these are returned in we must loop over each boolean found = false; for( int x=0 ; x < colman.listXMLObjects().length ; x++ ) { if( colman.listXMLObjects()[x].equals(objectname) ) { found=true; } } assertTrue( found == true ); } // Loop over all XMLObjects in the collection and remove String[] colxmlobjects = colman.listXMLObjects(); for ( int i=0 ; i < colxmlobjects.length ; i++ ) { colman.dropXMLObject( colxmlobjects[i] ); } // Verify that no XMLObjects remain assertTrue( colman.listXMLObjects().length == 0 ); } catch( Exception e ) { fail(e.getMessage() ); } } public void testDropXMLObject() { try { // Add an XMLObject to drop String objectconf = ""; EncodedBuffer objectconfbuf = new EncodedBuffer(-1, EmptyBytes, objectconf.getBytes() ); colman.createXMLObject( objectconfbuf ); // Drop the object colman.dropXMLObject( "droptest" ); // Try to drop the same object again try { exceptioncaught = false ; colman.dropXMLObject( "droptest" ); } catch ( APIException e ) { exceptioncaught = true; assertTrue( e.faultCode == FaultCodes.OBJ_OBJECT_NOT_FOUND ); } finally { assertTrue( exceptioncaught); } // Try to drop a non-existent object try { exceptioncaught = false ; colman.dropXMLObject( "bogusobject" ); } catch ( APIException e ) { exceptioncaught = true; assertTrue( e.faultCode == FaultCodes.OBJ_OBJECT_NOT_FOUND ); } finally { assertTrue( exceptioncaught); } // Try to drop with an empty name try { exceptioncaught = false ; colman.dropXMLObject( "" ); } catch ( APIException e ) { exceptioncaught = true; assertTrue( e.faultCode == FaultCodes.OBJ_OBJECT_NOT_FOUND ); } finally { assertTrue( exceptioncaught); } } catch( Exception e ) { fail(e.getMessage() ); } } }