vgritsenko 2003/12/24 06:10:05
Modified: java/tests/src/org/apache/xindice/core DatabaseTest.java
java/src/org/apache/xindice/core Collection.java
CollectionManager.java
Log:
Add additional checks into createCollection
Add more createCollection tests into DatabaseTest
Revision Changes Path
1.2 +58 -18
xml-xindice/java/tests/src/org/apache/xindice/core/DatabaseTest.java
Index: DatabaseTest.java
===================================================================
RCS file:
/home/cvs/xml-xindice/java/tests/src/org/apache/xindice/core/DatabaseTest.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DatabaseTest.java 22 Dec 2003 02:14:07 -0000 1.1
+++ DatabaseTest.java 24 Dec 2003 14:10:04 -0000 1.2
@@ -65,12 +65,15 @@
import junit.framework.TestCase;
/**
- * @version CVS $Revision$, $Date$
+ * Tests Xindice Core API (org.apache.xindice.core.Database,
+ * org.apache.xindice.core.Collection) createCollection.
+ *
* @author <a href="mailto:[EMAIL PROTECTED]">Vadim Gritsenko</a>
+ * @version CVS $Revision$, $Date$
*/
public class DatabaseTest extends TestCase {
- final String DATABASE =
+ public static final String DATABASE =
"<root-collection dbroot=\"db/\" name=\"db\">" +
"<queryengine>" +
"<resolver autoindex=\"false\"
class=\"org.apache.xindice.core.query.XPathQueryResolver\" />" +
@@ -78,26 +81,25 @@
"</queryengine>" +
"</root-collection>";
- final String COLLECTIONA =
+ public static final String COLLECTIONA =
"<collection compressed=\"true\" name=\"CollectionA\">" +
"<filer class=\"org.apache.xindice.core.filer.BTreeFiler\" />" +
"<indexes />" +
"</collection>";
- final String COLLECTIONB =
+ public static final String COLLECTIONB =
"<collection compressed=\"true\" name=\"CollectionB\">" +
"<filer class=\"org.apache.xindice.core.filer.BTreeFiler\" />" +
"<indexes />" +
"</collection>";
- final String COLLECTIONC =
- "<collection compressed=\"true\" name=\"CollectionC\">" +
+ public static final String COLLECTIONC =
+ "<collection compressed=\"true\" name=\"CollectionC\"
inline-metadata=\"true\">" +
"<filer class=\"org.apache.xindice.core.filer.BTreeFiler\" />" +
"<indexes />" +
"</collection>";
-
- private static Database db;
+ private Database db;
private Configuration configurationA;
private Configuration configurationB;
private Configuration configurationC;
@@ -114,22 +116,62 @@
configurationC = new
Configuration(DOMParser.toDocument(COLLECTIONC));
}
+ public void testCreateCollectionNullName() throws Exception {
+ try {
+ db.createCollection(null, configurationA);
+ fail("DBException expected");
+ } catch (DBException e) {
+ // Ok
+ }
+ }
+
+ public void testCreateCollectionEmptyName() throws Exception {
+ try {
+ db.createCollection("", configurationA);
+ fail("DBException expected");
+ } catch (DBException e) {
+ // Ok
+ }
+ }
+
+ public void testCreateCollectionNullConfig() throws Exception {
+ try {
+ db.createCollection("name", null);
+ fail("DBException expected");
+ } catch (DBException e) {
+ // Ok
+ }
+ }
+
public void testCreateCollection() throws Exception {
Collection collection = db.createCollection("CollectionA",
configurationA);
assertNotNull("Collection expected", collection);
assertEquals("Collection name", "CollectionA", collection.getName());
}
- public void testFailCreateCollection() throws Exception {
- Collection collection = null;
+ public void testCreateDuplicateCollection() throws Exception {
+ db.createCollection("CollectionA", configurationA);
try {
- collection = db.createCollection("somepath", configurationA);
+ db.createCollection("CollectionA", configurationA);
+ fail("DBException expected");
+ } catch (DBException e) {
+ // Ok
+ }
+ }
+
+ public void testCreateCollectionWrongName() throws Exception {
+ try {
+ // Name does not match name in configuration
+ db.createCollection("somepath", configurationA);
fail("Exception expected");
} catch (DBException e) {
// Expected
}
}
+ /**
+ * Multithreaded getCollection test
+ */
public void testMTGetCollection() throws Exception {
Collection a = db.createCollection("CollectionA", configurationA);
Collection b = db.createCollection("CollectionB", configurationB);
@@ -191,15 +233,13 @@
public void tearDown() throws Exception {
try {
db.dropCollection(db.getCollection("CollectionA"));
- } catch (Exception e) {
- }
+ } catch (Exception e) {}
try {
db.dropCollection(db.getCollection("CollectionB"));
- } catch (Exception e) {
- }
+ } catch (Exception e) {}
try {
db.dropCollection(db.getCollection("CollectionC"));
- } catch (Exception e) {
- }
+ } catch (Exception e) {}
+ db.close();
}
}
1.42 +3 -2
xml-xindice/java/src/org/apache/xindice/core/Collection.java
Index: Collection.java
===================================================================
RCS file:
/home/cvs/xml-xindice/java/src/org/apache/xindice/core/Collection.java,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -r1.41 -r1.42
--- Collection.java 23 Dec 2003 12:20:07 -0000 1.41
+++ Collection.java 24 Dec 2003 14:10:04 -0000 1.42
@@ -1204,6 +1204,7 @@
}
}
+ // TODO: Move into if(compressed) ?
flushSymbolTable();
// Temporary until insert and update are separate
1.22 +21 -13
xml-xindice/java/src/org/apache/xindice/core/CollectionManager.java
Index: CollectionManager.java
===================================================================
RCS file:
/home/cvs/xml-xindice/java/src/org/apache/xindice/core/CollectionManager.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- CollectionManager.java 22 Dec 2003 02:10:44 -0000 1.21
+++ CollectionManager.java 24 Dec 2003 14:10:04 -0000 1.22
@@ -82,10 +82,11 @@
private static final String COLLECTION = "collection";
private static final String COLLECTIONS = "collections";
- private static final String[] EmptyStrings = new String[0];
+ private static final String[] EMPTY_STRINGS = new String[0];
private static final String NAME = "name";
- private final Map collections = new HashMap(); // Collection
+ // FIXME: Access to collections and config is not synchronized
+ private final Map collections = new HashMap();
private Configuration config = null;
@@ -118,6 +119,11 @@
* @return The newly created Collection
*/
public Collection createCollection(String path, Configuration cfg)
throws DBException {
+ if (path == null || "".equals(path)) {
+ throw new DBException(FaultCodes.COL_CANNOT_CREATE,
+ "Null or empty collection name");
+ }
+
if (path.indexOf("/") != -1) {
CollectionManager cm = this;
StringTokenizer st = new StringTokenizer(path, "/");
@@ -138,21 +144,21 @@
"Parent Collection '" + path + "' doesn't
exist");
}
- Collection collection = null;
- if (CollectionManager.this instanceof Database) {
- collection = new Collection((Database) CollectionManager.this);
- } else {
- collection = new Collection((Collection) CollectionManager.this);
+ if (path.indexOf('/') != -1) {
+ throw new DBException(FaultCodes.COL_CANNOT_CREATE, "Name cannot
contain '/'");
}
+ Collection collection = new Collection((Collection) this);
try {
// Do a name check to see if all is well
String n = cfg.getAttribute(NAME);
if (n == null || n.trim().equals("")) {
- throw new DBException(FaultCodes.COL_CANNOT_CREATE, "No name
specified");
+ throw new DBException(FaultCodes.COL_CANNOT_CREATE,
+ "No name specified in collection
configuration");
}
if (!n.equals(path)) {
- throw new DBException(FaultCodes.COL_CANNOT_CREATE, "Name
does not match with path name");
+ throw new DBException(FaultCodes.COL_CANNOT_CREATE,
+ "Name does not match with path name");
}
if (getCollection(n) != null) {
@@ -166,7 +172,9 @@
collection.setConfig(cfg);
collection.create();
collections.put(n, collection);
- log.info("Created a new collection named '" + n + "'");
+ if (log.isInfoEnabled()) {
+ log.info("Created a new collection named '" + n + "'");
+ }
} catch (DBException e) {
// Do not wrap DBException
throw e;
@@ -269,7 +277,7 @@
* @return The Collection list
*/
public final String[] listCollections() throws DBException {
- return (String[]) collections.keySet().toArray(EmptyStrings);
+ return (String[]) collections.keySet().toArray(EMPTY_STRINGS);
}
/**