You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metamodel.apache.org by ka...@apache.org on 2014/04/04 21:59:56 UTC
[1/2] git commit: METAMODEL-45: Externalized CouchDB connection info
Repository: incubator-metamodel
Updated Branches:
refs/heads/master 7e4d0b984 -> 6b0f5f1a3
METAMODEL-45: Externalized CouchDB connection info
Project: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/commit/f18d40d4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/tree/f18d40d4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/diff/f18d40d4
Branch: refs/heads/master
Commit: f18d40d431fa130f7a7692288a50c59ff3193655
Parents: 7e4d0b9
Author: Kasper Sørensen <i....@gmail.com>
Authored: Fri Apr 4 21:44:41 2014 +0200
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Fri Apr 4 21:44:41 2014 +0200
----------------------------------------------------------------------
.../couchdb/CouchDbDataContextTest.java | 115 +++++++++----------
.../metamodel/couchdb/CouchDbTestCase.java | 80 +++++++++++++
2 files changed, 135 insertions(+), 60 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/f18d40d4/couchdb/src/test/java/org/apache/metamodel/couchdb/CouchDbDataContextTest.java
----------------------------------------------------------------------
diff --git a/couchdb/src/test/java/org/apache/metamodel/couchdb/CouchDbDataContextTest.java b/couchdb/src/test/java/org/apache/metamodel/couchdb/CouchDbDataContextTest.java
index 9124717..5f8c7b7 100644
--- a/couchdb/src/test/java/org/apache/metamodel/couchdb/CouchDbDataContextTest.java
+++ b/couchdb/src/test/java/org/apache/metamodel/couchdb/CouchDbDataContextTest.java
@@ -25,13 +25,6 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import junit.framework.TestCase;
-
-import org.ektorp.CouchDbConnector;
-import org.ektorp.DbAccessException;
-import org.ektorp.http.HttpClient;
-import org.ektorp.http.StdHttpClient;
-import org.ektorp.impl.StdCouchDbInstance;
import org.apache.metamodel.UpdateCallback;
import org.apache.metamodel.UpdateScript;
import org.apache.metamodel.data.DataSet;
@@ -43,12 +36,12 @@ import org.apache.metamodel.schema.ColumnType;
import org.apache.metamodel.schema.Schema;
import org.apache.metamodel.schema.Table;
import org.apache.metamodel.util.SimpleTableDef;
+import org.ektorp.CouchDbConnector;
+import org.ektorp.http.HttpClient;
+import org.ektorp.http.StdHttpClient;
+import org.ektorp.impl.StdCouchDbInstance;
-public class CouchDbDataContextTest extends TestCase {
-
- private static final String TEST_DATABASE_NAME = "eobjects_metamodel_test";
-
- private boolean serverAvailable;
+public class CouchDbDataContextTest extends CouchDbTestCase {
private HttpClient httpClient;
private StdCouchDbInstance couchDbInstance;
@@ -58,27 +51,24 @@ public class CouchDbDataContextTest extends TestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
- httpClient = new StdHttpClient.Builder().host("localhost").build();
- // set up a simple database
- couchDbInstance = new StdCouchDbInstance(httpClient);
+ if (isConfigured()) {
+ httpClient = new StdHttpClient.Builder().host(getHostname()).build();
- try {
- if (couchDbInstance.getAllDatabases().contains(TEST_DATABASE_NAME)) {
- throw new IllegalStateException("Couch DB instance already has a database called " + TEST_DATABASE_NAME);
+ // set up a simple database
+ couchDbInstance = new StdCouchDbInstance(httpClient);
+
+ final String databaseName = getDatabaseName();
+ if (couchDbInstance.getAllDatabases().contains(databaseName)) {
+ throw new IllegalStateException("Couch DB instance already has a database called " + databaseName);
}
- connector = couchDbInstance.createConnector(TEST_DATABASE_NAME, true);
- System.out.println("Running CouchDB integration tests");
- serverAvailable = true;
- } catch (DbAccessException e) {
- System.err.println("!!! WARNING: Skipping CouchDB tests because local server is not available");
- e.printStackTrace();
- serverAvailable = false;
+ connector = couchDbInstance.createConnector(databaseName, true);
+
+ final String[] columnNames = new String[] { "name", "gender", "age" };
+ final ColumnType[] columnTypes = new ColumnType[] { ColumnType.VARCHAR, ColumnType.CHAR, ColumnType.INTEGER };
+ predefinedTableDef = new SimpleTableDef(databaseName, columnNames, columnTypes);
}
- final String[] columnNames = new String[] { "name", "gender", "age" };
- final ColumnType[] columnTypes = new ColumnType[] { ColumnType.VARCHAR, ColumnType.CHAR, ColumnType.INTEGER };
- predefinedTableDef = new SimpleTableDef(TEST_DATABASE_NAME, columnNames, columnTypes);
}
@Override
@@ -87,15 +77,16 @@ public class CouchDbDataContextTest extends TestCase {
connector = null;
- if (serverAvailable) {
- couchDbInstance.deleteDatabase(TEST_DATABASE_NAME);
- }
+ if (isConfigured()) {
+ couchDbInstance.deleteDatabase(getDatabaseName());
- httpClient.shutdown();
+ httpClient.shutdown();
+ }
}
public void testWorkingWithMapsAndLists() throws Exception {
- if (!serverAvailable) {
+ if (!isConfigured()) {
+ System.err.println(getInvalidConfigurationMessage());
return;
}
@@ -139,7 +130,8 @@ public class CouchDbDataContextTest extends TestCase {
}
public void testCreateUpdateDeleteScenario() throws Exception {
- if (!serverAvailable) {
+ if (!isConfigured()) {
+ System.err.println(getInvalidConfigurationMessage());
return;
}
@@ -149,16 +141,16 @@ public class CouchDbDataContextTest extends TestCase {
dc.executeUpdate(new UpdateScript() {
@Override
public void run(UpdateCallback callback) {
- callback.dropTable(TEST_DATABASE_NAME).execute();
+ callback.dropTable(getDatabaseName()).execute();
}
});
- assertNull(dc.getDefaultSchema().getTableByName(TEST_DATABASE_NAME));
+ assertNull(dc.getDefaultSchema().getTableByName(getDatabaseName()));
dc.executeUpdate(new UpdateScript() {
@Override
public void run(UpdateCallback callback) {
- Table table = callback.createTable(dc.getDefaultSchema(), TEST_DATABASE_NAME).withColumn("foo")
+ Table table = callback.createTable(dc.getDefaultSchema(), getDatabaseName()).withColumn("foo")
.ofType(ColumnType.VARCHAR).withColumn("greeting").ofType(ColumnType.VARCHAR).execute();
assertEquals("[_id, _rev, foo, greeting]", Arrays.toString(table.getColumnNames()));
}
@@ -167,12 +159,12 @@ public class CouchDbDataContextTest extends TestCase {
dc.executeUpdate(new UpdateScript() {
@Override
public void run(UpdateCallback callback) {
- callback.insertInto(TEST_DATABASE_NAME).value("foo", "bar").value("greeting", "hello").execute();
- callback.insertInto(TEST_DATABASE_NAME).value("foo", "baz").value("greeting", "hi").execute();
+ callback.insertInto(getDatabaseName()).value("foo", "bar").value("greeting", "hello").execute();
+ callback.insertInto(getDatabaseName()).value("foo", "baz").value("greeting", "hi").execute();
}
});
- DataSet ds = dc.query().from(TEST_DATABASE_NAME).select("_id", "foo", "greeting").execute();
+ DataSet ds = dc.query().from(getDatabaseName()).select("_id", "foo", "greeting").execute();
assertTrue(ds.next());
assertNotNull(ds.getRow().getValue(0));
assertEquals("bar", ds.getRow().getValue(1));
@@ -187,13 +179,13 @@ public class CouchDbDataContextTest extends TestCase {
dc.executeUpdate(new UpdateScript() {
@Override
public void run(UpdateCallback callback) {
- callback.update(TEST_DATABASE_NAME).value("greeting", "howdy").where("foo").isEquals("baz").execute();
+ callback.update(getDatabaseName()).value("greeting", "howdy").where("foo").isEquals("baz").execute();
- callback.update(TEST_DATABASE_NAME).value("foo", "foo").where("foo").isEquals("bar").execute();
+ callback.update(getDatabaseName()).value("foo", "foo").where("foo").isEquals("bar").execute();
}
});
- ds = dc.query().from(TEST_DATABASE_NAME).select("_id", "foo", "greeting").execute();
+ ds = dc.query().from(getDatabaseName()).select("_id", "foo", "greeting").execute();
assertTrue(ds.next());
assertNotNull(ds.getRow().getValue(0));
assertEquals("foo", ds.getRow().getValue(1));
@@ -207,7 +199,8 @@ public class CouchDbDataContextTest extends TestCase {
}
public void testBasicQuery() throws Exception {
- if (!serverAvailable) {
+ if (!isConfigured()) {
+ System.err.println(getInvalidConfigurationMessage());
return;
}
@@ -232,21 +225,21 @@ public class CouchDbDataContextTest extends TestCase {
// verify schema and execute query
Schema schema = dc.getMainSchema();
- assertEquals("[eobjects_metamodel_test]", Arrays.toString(schema.getTableNames()));
+ assertEquals("[" + getDatabaseName() + "]", Arrays.toString(schema.getTableNames()));
assertEquals("[_id, _rev, age, gender, name]",
- Arrays.toString(schema.getTableByName(TEST_DATABASE_NAME).getColumnNames()));
- Column idColumn = schema.getTableByName(TEST_DATABASE_NAME).getColumnByName("_id");
+ Arrays.toString(schema.getTableByName(getDatabaseName()).getColumnNames()));
+ Column idColumn = schema.getTableByName(getDatabaseName()).getColumnByName("_id");
assertEquals("Column[name=_id,columnNumber=0,type=VARCHAR,nullable=true,nativeType=null,columnSize=null]",
idColumn.toString());
assertTrue(idColumn.isPrimaryKey());
assertEquals("Column[name=_rev,columnNumber=1,type=VARCHAR,nullable=true,nativeType=null,columnSize=null]",
- schema.getTableByName(TEST_DATABASE_NAME).getColumnByName("_rev").toString());
+ schema.getTableByName(getDatabaseName()).getColumnByName("_rev").toString());
DataSet ds;
- ds = dc.query().from(TEST_DATABASE_NAME).select("name").and("age").execute();
+ ds = dc.query().from(getDatabaseName()).select("name").and("age").execute();
assertTrue(ds.next());
assertEquals("Row[values=[John Doe, 30]]", ds.getRow().toString());
assertTrue(ds.next());
@@ -254,7 +247,7 @@ public class CouchDbDataContextTest extends TestCase {
assertFalse(ds.next());
ds.close();
- ds = dc.query().from(TEST_DATABASE_NAME).select("name").and("gender").where("age").isNull().execute();
+ ds = dc.query().from(getDatabaseName()).select("name").and("gender").where("age").isNull().execute();
assertTrue(ds.next());
assertEquals("Row[values=[Jane Doe, F]]", ds.getRow().toString());
assertFalse(ds.next());
@@ -262,7 +255,8 @@ public class CouchDbDataContextTest extends TestCase {
}
public void testFirstRowAndLastRow() throws Exception {
- if (!serverAvailable) {
+ if (!isConfigured()) {
+ System.err.println(getInvalidConfigurationMessage());
return;
}
@@ -285,8 +279,8 @@ public class CouchDbDataContextTest extends TestCase {
SimpleTableDef tableDef = CouchDbDataContext.detectTable(connector);
CouchDbDataContext dc = new CouchDbDataContext(couchDbInstance, tableDef);
- DataSet ds1 = dc.query().from(TEST_DATABASE_NAME).select("name").and("age").firstRow(2).execute();
- DataSet ds2 = dc.query().from(TEST_DATABASE_NAME).select("name").and("age").maxRows(1).execute();
+ DataSet ds1 = dc.query().from(getDatabaseName()).select("name").and("age").firstRow(2).execute();
+ DataSet ds2 = dc.query().from(getDatabaseName()).select("name").and("age").maxRows(1).execute();
assertTrue("Class: " + ds1.getClass().getName(), ds1 instanceof CouchDbDataSet);
assertTrue("Class: " + ds2.getClass().getName(), ds2 instanceof CouchDbDataSet);
@@ -308,13 +302,14 @@ public class CouchDbDataContextTest extends TestCase {
}
public void testInsert() throws Exception {
- if (!serverAvailable) {
+ if (!isConfigured()) {
+ System.err.println(getInvalidConfigurationMessage());
return;
}
// create datacontext using predefined table def
CouchDbDataContext dc = new CouchDbDataContext(httpClient, predefinedTableDef);
- Table table = dc.getTableByQualifiedLabel(TEST_DATABASE_NAME);
+ Table table = dc.getTableByQualifiedLabel(getDatabaseName());
assertNotNull(table);
assertEquals("[_id, _rev, name, gender, age]", Arrays.toString(table.getColumnNames()));
@@ -322,7 +317,7 @@ public class CouchDbDataContextTest extends TestCase {
DataSet ds;
// assert not rows in DB
- ds = dc.query().from(TEST_DATABASE_NAME).selectCount().execute();
+ ds = dc.query().from(getDatabaseName()).selectCount().execute();
assertTrue(ds.next());
assertEquals(0, ((Number) ds.getRow().getValue(0)).intValue());
assertFalse(ds.next());
@@ -331,19 +326,19 @@ public class CouchDbDataContextTest extends TestCase {
dc.executeUpdate(new UpdateScript() {
@Override
public void run(UpdateCallback callback) {
- callback.insertInto(TEST_DATABASE_NAME).value("name", "foo").value("gender", 'M').execute();
- callback.insertInto(TEST_DATABASE_NAME).value("name", "bar").value("age", 32).execute();
+ callback.insertInto(getDatabaseName()).value("name", "foo").value("gender", 'M').execute();
+ callback.insertInto(getDatabaseName()).value("name", "bar").value("age", 32).execute();
}
});
// now count should be 2
- ds = dc.query().from(TEST_DATABASE_NAME).selectCount().execute();
+ ds = dc.query().from(getDatabaseName()).selectCount().execute();
assertTrue(ds.next());
assertEquals(2, ((Number) ds.getRow().getValue(0)).intValue());
assertFalse(ds.next());
ds.close();
- ds = dc.query().from(TEST_DATABASE_NAME).select("name", "gender", "age").execute();
+ ds = dc.query().from(getDatabaseName()).select("name", "gender", "age").execute();
assertTrue(ds.next());
assertEquals("Row[values=[foo, M, null]]", ds.getRow().toString());
assertTrue(ds.next());
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/f18d40d4/couchdb/src/test/java/org/apache/metamodel/couchdb/CouchDbTestCase.java
----------------------------------------------------------------------
diff --git a/couchdb/src/test/java/org/apache/metamodel/couchdb/CouchDbTestCase.java b/couchdb/src/test/java/org/apache/metamodel/couchdb/CouchDbTestCase.java
new file mode 100644
index 0000000..bfcc24a
--- /dev/null
+++ b/couchdb/src/test/java/org/apache/metamodel/couchdb/CouchDbTestCase.java
@@ -0,0 +1,80 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.metamodel.couchdb;
+
+import java.io.File;
+import java.io.FileReader;
+import java.util.Properties;
+
+import junit.framework.TestCase;
+
+public abstract class CouchDbTestCase extends TestCase {
+
+ private static final String DEFAULT_TEST_DATABASE_NAME = "eobjects_metamodel_test";
+
+ private String _hostname;
+ private boolean _configured;
+ private String _databaseName;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ Properties properties = new Properties();
+ File file = new File(getPropertyFilePath());
+ if (file.exists()) {
+ properties.load(new FileReader(file));
+ _hostname = properties.getProperty("couchdb.hostname");
+ _databaseName = properties.getProperty("couchdb.databaseName");
+ if (_databaseName == null || _databaseName.isEmpty()) {
+ _databaseName = DEFAULT_TEST_DATABASE_NAME;
+ }
+
+ _configured = (_hostname != null && !_hostname.isEmpty());
+
+ if (_configured) {
+ System.out.println("Loaded CouchDB configuration. Hostname=" + _hostname + ", Database=" + _databaseName);
+ }
+ } else {
+ _configured = false;
+ }
+ }
+
+ private String getPropertyFilePath() {
+ String userHome = System.getProperty("user.home");
+ return userHome + "/metamodel-integrationtest-configuration.properties";
+ }
+
+ protected String getInvalidConfigurationMessage() {
+ return "!!! WARN !!! CouchDB module ignored\r\n" + "Please configure couchdb connection locally ("
+ + getPropertyFilePath() + "), to run integration tests";
+ }
+
+ public boolean isConfigured() {
+ return _configured;
+ }
+
+ public String getHostname() {
+ return _hostname;
+ }
+
+ public String getDatabaseName() {
+ return _databaseName;
+ }
+}
[2/2] git commit: Externalized MongoDB integration test connection
information.
Posted by ka...@apache.org.
Externalized MongoDB integration test connection information.
Project: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/commit/6b0f5f1a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/tree/6b0f5f1a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-metamodel/diff/6b0f5f1a
Branch: refs/heads/master
Commit: 6b0f5f1a35cb368763f7e75b307986e604513cd8
Parents: f18d40d
Author: Kasper Sørensen <i....@gmail.com>
Authored: Fri Apr 4 21:59:34 2014 +0200
Committer: Kasper Sørensen <i....@gmail.com>
Committed: Fri Apr 4 21:59:34 2014 +0200
----------------------------------------------------------------------
...del-integrationtest-configuration.properties | 15 +
.../mongodb/MongoDbDataContextTest.java | 586 +++++++++----------
.../metamodel/mongodb/MongoDbTestCase.java | 94 +++
3 files changed, 395 insertions(+), 300 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/6b0f5f1a/example-metamodel-integrationtest-configuration.properties
----------------------------------------------------------------------
diff --git a/example-metamodel-integrationtest-configuration.properties b/example-metamodel-integrationtest-configuration.properties
index 6311be9..40d0346 100644
--- a/example-metamodel-integrationtest-configuration.properties
+++ b/example-metamodel-integrationtest-configuration.properties
@@ -7,6 +7,21 @@
# -----------
# To use this file, copy it into your user home directory and uncomment the lines of relevance to you
+# --------------------------
+# CouchDB module properties:
+# --------------------------
+
+#couchdb.hostname=localhost
+#couchdb.databaseName=metamodel_test_database
+
+# --------------------------
+# MongoDB module properties:
+# --------------------------
+
+#mongodb.hostname=localhost
+#mongodb.databaseName=metamodel_test
+#mongodb.collectionName=my_collection
+
# ------------------------
# HBase module properties:
# ------------------------
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/6b0f5f1a/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbDataContextTest.java
----------------------------------------------------------------------
diff --git a/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbDataContextTest.java b/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbDataContextTest.java
index 92d54f6..b539160 100644
--- a/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbDataContextTest.java
+++ b/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbDataContextTest.java
@@ -24,8 +24,6 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import junit.framework.TestCase;
-
import org.apache.metamodel.DataContext;
import org.apache.metamodel.UpdateCallback;
import org.apache.metamodel.UpdateScript;
@@ -43,365 +41,353 @@ import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.Mongo;
-public class MongoDbDataContextTest extends TestCase {
-
- private static final boolean SKIP_TEST_WHEN_NO_CONNECTION = true;
+public class MongoDbDataContextTest extends MongoDbTestCase {
private DB db;
@Override
protected void setUp() throws Exception {
super.setUp();
- Mongo mongo = new Mongo();
- db = mongo.getDB("metamodel_test");
+ if (isConfigured()) {
+ Mongo mongo = new Mongo(getHostname());
+ db = mongo.getDB(getDatabaseName());
+ }
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
- if (proceedWithUnitTest()) {
+ if (isConfigured()) {
db.dropDatabase();
}
}
- private boolean proceedWithUnitTest() {
- try {
- // this will invoke a call over the connection
- db.getCollectionNames();
- System.out.println("MongoDB connection is open!");
- return true;
- } catch (Exception e) {
- e.printStackTrace();
-
- if (SKIP_TEST_WHEN_NO_CONNECTION) {
- System.out.println("WARNING!!! Skipping test because mongo server is not running!");
- }
-
- return !SKIP_TEST_WHEN_NO_CONNECTION;
- }
- }
-
public void testFirstRowAndMaxRows() throws Exception {
- if (proceedWithUnitTest()) {
- DBCollection col = db.createCollection("my_collection", null);
-
- // delete if already exists
- {
- col.drop();
- col = db.createCollection("my_collection", null);
- }
-
- // create 3 records
- for (int i = 0; i < 3; i++) {
- BasicDBObject dbRow = new BasicDBObject();
- dbRow.put("id", i + 1);
- col.insert(dbRow);
- }
-
- final MongoDbDataContext dc = new MongoDbDataContext(db);
+ if (!isConfigured()) {
+ System.err.println(getInvalidConfigurationMessage());
+ return;
+ }
- DataSet ds;
+ DBCollection col = db.createCollection(getCollectionName(), null);
- ds = dc.query().from("my_collection").select("id").firstRow(2).execute();
- assertTrue(ds instanceof MongoDbDataSet);
- assertTrue(ds.next());
- assertEquals("Row[values=[2]]", ds.getRow().toString());
- assertTrue(ds.next());
- assertEquals("Row[values=[3]]", ds.getRow().toString());
- assertFalse(ds.next());
- ds.close();
-
- ds = dc.query().from("my_collection").select("id").maxRows(1).execute();
- assertTrue(ds instanceof MongoDbDataSet);
- assertTrue(ds.next());
- assertEquals("Row[values=[1]]", ds.getRow().toString());
- assertFalse(ds.next());
- ds.close();
+ // delete if already exists
+ {
+ col.drop();
+ col = db.createCollection(getCollectionName(), null);
+ }
- ds = dc.query().from("my_collection").select("id").maxRows(1).firstRow(2).execute();
- assertTrue(ds instanceof MongoDbDataSet);
- assertTrue(ds.next());
- assertEquals("Row[values=[2]]", ds.getRow().toString());
- assertFalse(ds.next());
- ds.close();
+ // create 3 records
+ for (int i = 0; i < 3; i++) {
+ BasicDBObject dbRow = new BasicDBObject();
+ dbRow.put("id", i + 1);
+ col.insert(dbRow);
}
+
+ final MongoDbDataContext dc = new MongoDbDataContext(db);
+
+ DataSet ds;
+
+ ds = dc.query().from(getCollectionName()).select("id").firstRow(2).execute();
+ assertTrue(ds instanceof MongoDbDataSet);
+ assertTrue(ds.next());
+ assertEquals("Row[values=[2]]", ds.getRow().toString());
+ assertTrue(ds.next());
+ assertEquals("Row[values=[3]]", ds.getRow().toString());
+ assertFalse(ds.next());
+ ds.close();
+
+ ds = dc.query().from(getCollectionName()).select("id").maxRows(1).execute();
+ assertTrue(ds instanceof MongoDbDataSet);
+ assertTrue(ds.next());
+ assertEquals("Row[values=[1]]", ds.getRow().toString());
+ assertFalse(ds.next());
+ ds.close();
+
+ ds = dc.query().from(getCollectionName()).select("id").maxRows(1).firstRow(2).execute();
+ assertTrue(ds instanceof MongoDbDataSet);
+ assertTrue(ds.next());
+ assertEquals("Row[values=[2]]", ds.getRow().toString());
+ assertFalse(ds.next());
+ ds.close();
}
public void testRead() throws Exception {
- if (proceedWithUnitTest()) {
+ if (!isConfigured()) {
+ System.err.println(getInvalidConfigurationMessage());
+ return;
+ }
- DBCollection col = db.createCollection("my_collection", null);
+ DBCollection col = db.createCollection(getCollectionName(), null);
+
+ // delete if already exists
+ {
+ col.drop();
+ col = db.createCollection(getCollectionName(), null);
+ }
- // delete if already exists
- {
- col.drop();
- col = db.createCollection("my_collection", null);
+ // create 1000 records
+ for (int i = 0; i < 1000; i++) {
+ BasicDBObject dbRow = new BasicDBObject();
+ dbRow.put("id", i);
+ dbRow.put("name", "record no. " + i);
+ if (i % 5 == 0) {
+ dbRow.put("foo", "bar");
+ } else {
+ dbRow.put("foo", "baz");
}
+ BasicDBObject nestedObj = new BasicDBObject();
+ nestedObj.put("count", i);
+ nestedObj.put("constant", "foobarbaz");
+ dbRow.put("baz", nestedObj);
- // create 1000 records
- for (int i = 0; i < 1000; i++) {
- BasicDBObject dbRow = new BasicDBObject();
- dbRow.put("id", i);
- dbRow.put("name", "record no. " + i);
- if (i % 5 == 0) {
- dbRow.put("foo", "bar");
- } else {
- dbRow.put("foo", "baz");
- }
- BasicDBObject nestedObj = new BasicDBObject();
- nestedObj.put("count", i);
- nestedObj.put("constant", "foobarbaz");
- dbRow.put("baz", nestedObj);
+ dbRow.put("list", Arrays.<Object> asList("l1", "l2", "l3", i));
- dbRow.put("list", Arrays.<Object> asList("l1", "l2", "l3", i));
+ col.insert(dbRow);
+ }
- col.insert(dbRow);
- }
+ // Instantiate the actual data context
+ final DataContext dataContext = new MongoDbDataContext(db);
- // Instantiate the actual data context
- final DataContext dataContext = new MongoDbDataContext(db);
-
- assertEquals("[my_collection, system.indexes]",
- Arrays.toString(dataContext.getDefaultSchema().getTableNames()));
- Table table = dataContext.getDefaultSchema().getTableByName("my_collection");
- assertEquals("[_id, baz, foo, id, list, name]", Arrays.toString(table.getColumnNames()));
-
- assertEquals(ColumnType.MAP, table.getColumnByName("baz").getType());
- assertEquals(ColumnType.VARCHAR, table.getColumnByName("foo").getType());
- assertEquals(ColumnType.LIST, table.getColumnByName("list").getType());
- assertEquals(ColumnType.INTEGER, table.getColumnByName("id").getType());
- assertEquals(ColumnType.ROWID, table.getColumnByName("_id").getType());
-
- DataSet ds = dataContext.query().from("my_collection").select("name").and("foo").and("baz").and("list")
- .where("id").greaterThan(800).or("foo").isEquals("bar").execute();
- assertEquals(MongoDbDataSet.class, ds.getClass());
- assertFalse(((MongoDbDataSet) ds).isQueryPostProcessed());
- try {
- assertTrue(ds.next());
- assertEquals(
- "Row[values=[record no. 0, bar, {count=0, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 0]]]",
- ds.getRow().toString());
+ assertEquals("[" + getCollectionName() + ", system.indexes]", Arrays.toString(dataContext.getDefaultSchema().getTableNames()));
+ Table table = dataContext.getDefaultSchema().getTableByName(getCollectionName());
+ assertEquals("[_id, baz, foo, id, list, name]", Arrays.toString(table.getColumnNames()));
- assertTrue(ds.next());
- assertEquals(
- "Row[values=[record no. 5, bar, {count=5, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 5]]]",
- ds.getRow().toString());
+ assertEquals(ColumnType.MAP, table.getColumnByName("baz").getType());
+ assertEquals(ColumnType.VARCHAR, table.getColumnByName("foo").getType());
+ assertEquals(ColumnType.LIST, table.getColumnByName("list").getType());
+ assertEquals(ColumnType.INTEGER, table.getColumnByName("id").getType());
+ assertEquals(ColumnType.ROWID, table.getColumnByName("_id").getType());
- assertTrue(ds.next());
- assertEquals(
- "Row[values=[record no. 10, bar, {count=10, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 10]]]",
- ds.getRow().toString());
-
- for (int j = 15; j < 801; j++) {
- if (j % 5 == 0) {
- assertTrue(ds.next());
- assertEquals("Row[values=[record no. " + j + ", bar, {count=" + j
- + ", constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , " + j + "]]]", ds.getRow()
- .toString());
- }
- }
-
- assertTrue(ds.next());
- assertTrue(ds.getRow().getValue(2) instanceof Map);
- assertEquals(LinkedHashMap.class, ds.getRow().getValue(2).getClass());
+ DataSet ds = dataContext.query().from(getCollectionName()).select("name").and("foo").and("baz").and("list")
+ .where("id").greaterThan(800).or("foo").isEquals("bar").execute();
+ assertEquals(MongoDbDataSet.class, ds.getClass());
+ assertFalse(((MongoDbDataSet) ds).isQueryPostProcessed());
+ try {
+ assertTrue(ds.next());
+ assertEquals(
+ "Row[values=[record no. 0, bar, {count=0, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 0]]]",
+ ds.getRow().toString());
- assertTrue("unexpected type: " + ds.getRow().getValue(3).getClass(),
- ds.getRow().getValue(3) instanceof List);
- assertEquals(BasicDBList.class, ds.getRow().getValue(3).getClass());
+ assertTrue(ds.next());
+ assertEquals(
+ "Row[values=[record no. 5, bar, {count=5, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 5]]]",
+ ds.getRow().toString());
- assertEquals(
- "Row[values=[record no. 801, baz, {count=801, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 801]]]",
- ds.getRow().toString());
- assertTrue(ds.next());
- assertEquals(
- "Row[values=[record no. 802, baz, {count=802, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 802]]]",
- ds.getRow().toString());
- assertTrue(ds.next());
- assertEquals(
- "Row[values=[record no. 803, baz, {count=803, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 803]]]",
- ds.getRow().toString());
- assertTrue(ds.next());
- assertEquals(
- "Row[values=[record no. 804, baz, {count=804, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 804]]]",
- ds.getRow().toString());
- assertTrue(ds.next());
- assertEquals(
- "Row[values=[record no. 805, bar, {count=805, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 805]]]",
- ds.getRow().toString());
+ assertTrue(ds.next());
+ assertEquals(
+ "Row[values=[record no. 10, bar, {count=10, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 10]]]",
+ ds.getRow().toString());
- for (int i = 0; i < 194; i++) {
+ for (int j = 15; j < 801; j++) {
+ if (j % 5 == 0) {
assertTrue(ds.next());
+ assertEquals("Row[values=[record no. " + j + ", bar, {count=" + j
+ + ", constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , " + j + "]]]", ds.getRow()
+ .toString());
}
- assertEquals(
- "Row[values=[record no. 999, baz, {count=999, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 999]]]",
- ds.getRow().toString());
- assertFalse(ds.next());
- } finally {
- ds.close();
}
- ds = dataContext.query().from("my_collection").select("id").and("name").where("id").in(2, 6, 8, 9)
- .execute();
assertTrue(ds.next());
- assertEquals("Row[values=[2, record no. 2]]", ds.getRow().toString());
+ assertTrue(ds.getRow().getValue(2) instanceof Map);
+ assertEquals(LinkedHashMap.class, ds.getRow().getValue(2).getClass());
+
+ assertTrue("unexpected type: " + ds.getRow().getValue(3).getClass(),
+ ds.getRow().getValue(3) instanceof List);
+ assertEquals(BasicDBList.class, ds.getRow().getValue(3).getClass());
+
+ assertEquals(
+ "Row[values=[record no. 801, baz, {count=801, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 801]]]",
+ ds.getRow().toString());
assertTrue(ds.next());
- assertEquals("Row[values=[6, record no. 6]]", ds.getRow().toString());
+ assertEquals(
+ "Row[values=[record no. 802, baz, {count=802, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 802]]]",
+ ds.getRow().toString());
assertTrue(ds.next());
- assertEquals("Row[values=[8, record no. 8]]", ds.getRow().toString());
+ assertEquals(
+ "Row[values=[record no. 803, baz, {count=803, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 803]]]",
+ ds.getRow().toString());
assertTrue(ds.next());
- assertEquals("Row[values=[9, record no. 9]]", ds.getRow().toString());
- assertFalse(ds.next());
- ds.close();
+ assertEquals(
+ "Row[values=[record no. 804, baz, {count=804, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 804]]]",
+ ds.getRow().toString());
+ assertTrue(ds.next());
+ assertEquals(
+ "Row[values=[record no. 805, bar, {count=805, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 805]]]",
+ ds.getRow().toString());
- ds = dataContext.query().from("my_collection").select("id").and("name").where("foo").isEquals("bar")
- .execute();
- assertEquals(MongoDbDataSet.class, ds.getClass());
- assertFalse(((MongoDbDataSet) ds).isQueryPostProcessed());
-
- try {
- List<Object[]> objectArrays = ds.toObjectArrays();
- assertEquals(200, objectArrays.size());
- assertEquals("[0, record no. 0]", Arrays.toString(objectArrays.get(0)));
- } finally {
- ds.close();
+ for (int i = 0; i < 194; i++) {
+ assertTrue(ds.next());
}
-
- // test a primary key lookup query
- BasicDBObject dbRow = new BasicDBObject();
- dbRow.put("_id", 123456);
- dbRow.put("id", 123456);
- dbRow.put("name", "record no. " + 123456);
- dbRow.put("foo", "bar123456");
- BasicDBObject nestedObj = new BasicDBObject();
- nestedObj.put("count", 123456);
- nestedObj.put("constant", "foobarbaz");
- dbRow.put("baz", nestedObj);
-
- dbRow.put("list", Arrays.<Object> asList("l1", "l2", "l3", 123456));
-
- col.insert(dbRow);
-
- ds = dataContext.query().from("my_collection").select("id").and("name").where("_id").eq(123456).execute();
- assertTrue(ds.next());
- assertEquals("Row[values=[123456, record no. 123456]]", ds.getRow().toString());
+ assertEquals(
+ "Row[values=[record no. 999, baz, {count=999, constant=foobarbaz}, [ \"l1\" , \"l2\" , \"l3\" , 999]]]",
+ ds.getRow().toString());
assertFalse(ds.next());
+ } finally {
+ ds.close();
+ }
- // do a query that we cannot push to mongo
- ds = dataContext.query().from("my_collection")
- .select(FunctionType.SUM, dataContext.getDefaultSchema().getTables()[0].getColumnByName("id"))
- .where("foo").isEquals("bar").execute();
- assertEquals(InMemoryDataSet.class, ds.getClass());
+ ds = dataContext.query().from(getCollectionName()).select("id").and("name").where("id").in(2, 6, 8, 9)
+ .execute();
+ assertTrue(ds.next());
+ assertEquals("Row[values=[2, record no. 2]]", ds.getRow().toString());
+ assertTrue(ds.next());
+ assertEquals("Row[values=[6, record no. 6]]", ds.getRow().toString());
+ assertTrue(ds.next());
+ assertEquals("Row[values=[8, record no. 8]]", ds.getRow().toString());
+ assertTrue(ds.next());
+ assertEquals("Row[values=[9, record no. 9]]", ds.getRow().toString());
+ assertFalse(ds.next());
+ ds.close();
+
+ ds = dataContext.query().from(getCollectionName()).select("id").and("name").where("foo").isEquals("bar")
+ .execute();
+ assertEquals(MongoDbDataSet.class, ds.getClass());
+ assertFalse(((MongoDbDataSet) ds).isQueryPostProcessed());
+ try {
+ List<Object[]> objectArrays = ds.toObjectArrays();
+ assertEquals(200, objectArrays.size());
+ assertEquals("[0, record no. 0]", Arrays.toString(objectArrays.get(0)));
+ } finally {
ds.close();
}
+
+ // test a primary key lookup query
+ BasicDBObject dbRow = new BasicDBObject();
+ dbRow.put("_id", 123456);
+ dbRow.put("id", 123456);
+ dbRow.put("name", "record no. " + 123456);
+ dbRow.put("foo", "bar123456");
+ BasicDBObject nestedObj = new BasicDBObject();
+ nestedObj.put("count", 123456);
+ nestedObj.put("constant", "foobarbaz");
+ dbRow.put("baz", nestedObj);
+
+ dbRow.put("list", Arrays.<Object> asList("l1", "l2", "l3", 123456));
+
+ col.insert(dbRow);
+
+ ds = dataContext.query().from(getCollectionName()).select("id").and("name").where("_id").eq(123456).execute();
+ assertTrue(ds.next());
+ assertEquals("Row[values=[123456, record no. 123456]]", ds.getRow().toString());
+ assertFalse(ds.next());
+
+ // do a query that we cannot push to mongo
+ ds = dataContext.query().from(getCollectionName())
+ .select(FunctionType.SUM, dataContext.getDefaultSchema().getTables()[0].getColumnByName("id"))
+ .where("foo").isEquals("bar").execute();
+ assertEquals(InMemoryDataSet.class, ds.getClass());
+
+ ds.close();
}
public void testCreateAndWriteData() throws Exception {
- if (proceedWithUnitTest()) {
- final MongoDbDataContext dc = new MongoDbDataContext(db);
- final Schema defaultSchema = dc.getDefaultSchema();
-
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback callback) {
- Table[] tables = defaultSchema.getTables();
- for (Table table : tables) {
- callback.deleteFrom(table).execute();
- }
+ if (!isConfigured()) {
+ System.err.println(getInvalidConfigurationMessage());
+ return;
+ }
+ final MongoDbDataContext dc = new MongoDbDataContext(db);
+ final Schema defaultSchema = dc.getDefaultSchema();
+
+ dc.executeUpdate(new UpdateScript() {
+ @Override
+ public void run(UpdateCallback callback) {
+ Table[] tables = defaultSchema.getTables();
+ for (Table table : tables) {
+ callback.deleteFrom(table).execute();
}
- });
-
- assertEquals(0, defaultSchema.getTableCount());
+ }
+ });
- dc.executeUpdate(new UpdateScript() {
+ assertEquals(0, defaultSchema.getTableCount());
- @Override
- public void run(UpdateCallback callback) {
- Table table = callback.createTable(defaultSchema, "some_entries").withColumn("foo")
- .withColumn("bar").withColumn("baz").withColumn("list").execute();
+ dc.executeUpdate(new UpdateScript() {
- callback.insertInto(table).value("foo", 1).value("bar", "hello").execute();
- callback.insertInto(table).value("foo", 2).value("bar", "world").execute();
- callback.insertInto(table).value("foo", 3).value("bar", "hi").execute();
+ @Override
+ public void run(UpdateCallback callback) {
+ Table table = callback.createTable(defaultSchema, "some_entries").withColumn("foo").withColumn("bar")
+ .withColumn("baz").withColumn("list").execute();
- Map<String, Object> nestedObj = new HashMap<String, Object>();
- nestedObj.put("foo", "bar");
- nestedObj.put("123", 456);
+ callback.insertInto(table).value("foo", 1).value("bar", "hello").execute();
+ callback.insertInto(table).value("foo", 2).value("bar", "world").execute();
+ callback.insertInto(table).value("foo", 3).value("bar", "hi").execute();
- callback.insertInto(table).value("foo", 4).value("bar", "there").value("baz", nestedObj)
- .value("list", Arrays.asList(1, 2, 3)).execute();
- }
- });
-
- DataSet dataSet;
- assertEquals(1, defaultSchema.getTableCount());
-
- // "Pure" SELECT COUNT(*) query
- dataSet = dc.query().from("some_entries").selectCount().execute();
- dataSet.close();
- assertTrue(dataSet.next());
- assertEquals(1, dataSet.getSelectItems().length);
- assertEquals(SelectItem.getCountAllItem(), dataSet.getSelectItems()[0]);
- assertEquals(4l, dataSet.getRow().getValue(SelectItem.getCountAllItem()));
- assertFalse(dataSet.next());
- assertEquals(InMemoryDataSet.class, dataSet.getClass());
-
- // A conditional SELECT COUNT(*) query
- dataSet = dc.query().from("some_entries").selectCount().where("foo").greaterThan(2).execute();
- dataSet.close();
- assertTrue(dataSet.next());
- assertEquals(1, dataSet.getSelectItems().length);
- assertEquals(SelectItem.getCountAllItem(), dataSet.getSelectItems()[0]);
- assertEquals(2l, dataSet.getRow().getValue(SelectItem.getCountAllItem()));
- assertFalse(dataSet.next());
- assertEquals(InMemoryDataSet.class, dataSet.getClass());
-
- // Select columns
- dataSet = dc.query().from("some_entries").select("foo").and("bar").and("baz").and("list").execute();
- assertTrue(dataSet.next());
- assertEquals("Row[values=[1, hello, null, null]]", dataSet.getRow().toString());
- assertTrue(dataSet.next());
- assertEquals("Row[values=[2, world, null, null]]", dataSet.getRow().toString());
- assertTrue(dataSet.next());
- assertEquals("Row[values=[3, hi, null, null]]", dataSet.getRow().toString());
- assertTrue(dataSet.next());
- assertEquals("Row[values=[4, there, {123=456, foo=bar}, [ 1 , 2 , 3]]]", dataSet.getRow().toString());
- assertFalse(dataSet.next());
- dataSet.close();
- assertEquals(MongoDbDataSet.class, dataSet.getClass());
-
- // delete some records
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback callback) {
- callback.deleteFrom("some_entries").where("foo").greaterThan(2).where("baz").isNotNull().execute();
- }
- });
-
- dataSet = dc.query().from("some_entries").select("foo").execute();
- assertTrue(dataSet.next());
- assertEquals("Row[values=[1]]", dataSet.getRow().toString());
- assertTrue(dataSet.next());
- assertEquals("Row[values=[2]]", dataSet.getRow().toString());
- assertTrue(dataSet.next());
- assertEquals("Row[values=[3]]", dataSet.getRow().toString());
- assertFalse(dataSet.next());
- dataSet.close();
- assertEquals(MongoDbDataSet.class, dataSet.getClass());
-
- // drop the collection
- dc.executeUpdate(new UpdateScript() {
- @Override
- public void run(UpdateCallback callback) {
- callback.dropTable("some_entries").execute();
- }
- });
+ Map<String, Object> nestedObj = new HashMap<String, Object>();
+ nestedObj.put("foo", "bar");
+ nestedObj.put("123", 456);
- assertNull(dc.getTableByQualifiedLabel("some_entries"));
+ callback.insertInto(table).value("foo", 4).value("bar", "there").value("baz", nestedObj)
+ .value("list", Arrays.asList(1, 2, 3)).execute();
+ }
+ });
+
+ DataSet dataSet;
+ assertEquals(1, defaultSchema.getTableCount());
+
+ // "Pure" SELECT COUNT(*) query
+ dataSet = dc.query().from("some_entries").selectCount().execute();
+ dataSet.close();
+ assertTrue(dataSet.next());
+ assertEquals(1, dataSet.getSelectItems().length);
+ assertEquals(SelectItem.getCountAllItem(), dataSet.getSelectItems()[0]);
+ assertEquals(4l, dataSet.getRow().getValue(SelectItem.getCountAllItem()));
+ assertFalse(dataSet.next());
+ assertEquals(InMemoryDataSet.class, dataSet.getClass());
+
+ // A conditional SELECT COUNT(*) query
+ dataSet = dc.query().from("some_entries").selectCount().where("foo").greaterThan(2).execute();
+ dataSet.close();
+ assertTrue(dataSet.next());
+ assertEquals(1, dataSet.getSelectItems().length);
+ assertEquals(SelectItem.getCountAllItem(), dataSet.getSelectItems()[0]);
+ assertEquals(2l, dataSet.getRow().getValue(SelectItem.getCountAllItem()));
+ assertFalse(dataSet.next());
+ assertEquals(InMemoryDataSet.class, dataSet.getClass());
+
+ // Select columns
+ dataSet = dc.query().from("some_entries").select("foo").and("bar").and("baz").and("list").execute();
+ assertTrue(dataSet.next());
+ assertEquals("Row[values=[1, hello, null, null]]", dataSet.getRow().toString());
+ assertTrue(dataSet.next());
+ assertEquals("Row[values=[2, world, null, null]]", dataSet.getRow().toString());
+ assertTrue(dataSet.next());
+ assertEquals("Row[values=[3, hi, null, null]]", dataSet.getRow().toString());
+ assertTrue(dataSet.next());
+ assertEquals("Row[values=[4, there, {123=456, foo=bar}, [ 1 , 2 , 3]]]", dataSet.getRow().toString());
+ assertFalse(dataSet.next());
+ dataSet.close();
+ assertEquals(MongoDbDataSet.class, dataSet.getClass());
+
+ // delete some records
+ dc.executeUpdate(new UpdateScript() {
+ @Override
+ public void run(UpdateCallback callback) {
+ callback.deleteFrom("some_entries").where("foo").greaterThan(2).where("baz").isNotNull().execute();
+ }
+ });
+
+ dataSet = dc.query().from("some_entries").select("foo").execute();
+ assertTrue(dataSet.next());
+ assertEquals("Row[values=[1]]", dataSet.getRow().toString());
+ assertTrue(dataSet.next());
+ assertEquals("Row[values=[2]]", dataSet.getRow().toString());
+ assertTrue(dataSet.next());
+ assertEquals("Row[values=[3]]", dataSet.getRow().toString());
+ assertFalse(dataSet.next());
+ dataSet.close();
+ assertEquals(MongoDbDataSet.class, dataSet.getClass());
+
+ // drop the collection
+ dc.executeUpdate(new UpdateScript() {
+ @Override
+ public void run(UpdateCallback callback) {
+ callback.dropTable("some_entries").execute();
+ }
+ });
- dc.refreshSchemas();
- assertEquals(0, defaultSchema.getTableCount());
- }
+ assertNull(dc.getTableByQualifiedLabel("some_entries"));
+ dc.refreshSchemas();
+ assertEquals(0, defaultSchema.getTableCount());
}
}
http://git-wip-us.apache.org/repos/asf/incubator-metamodel/blob/6b0f5f1a/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbTestCase.java
----------------------------------------------------------------------
diff --git a/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbTestCase.java b/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbTestCase.java
new file mode 100644
index 0000000..446f368
--- /dev/null
+++ b/mongodb/src/test/java/org/apache/metamodel/mongodb/MongoDbTestCase.java
@@ -0,0 +1,94 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.metamodel.mongodb;
+
+import java.io.File;
+import java.io.FileReader;
+import java.util.Properties;
+
+import junit.framework.TestCase;
+
+public abstract class MongoDbTestCase extends TestCase {
+
+ private static final String DEFAULT_TEST_COLLECTION_NAME = "my_collection";
+ private static final String DEFAULT_TEST_DATABASE_NAME = "metamodel_test";
+
+ private String _hostname;
+ private String _collectionName;
+ private boolean _configured;
+
+ private String _databaseName;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ Properties properties = new Properties();
+ File file = new File(getPropertyFilePath());
+ if (file.exists()) {
+ properties.load(new FileReader(file));
+ _hostname = properties.getProperty("mongodb.hostname");
+
+ _databaseName = properties.getProperty("mongodb.databaseName");
+ if (_databaseName == null || _databaseName.isEmpty()) {
+ _databaseName = DEFAULT_TEST_DATABASE_NAME;
+ }
+
+ _collectionName = properties.getProperty("mongodb.collectionName");
+ if (_collectionName == null || _collectionName.isEmpty()) {
+ _collectionName = DEFAULT_TEST_COLLECTION_NAME;
+ }
+
+ _configured = (_hostname != null && !_hostname.isEmpty());
+
+ if (_configured) {
+ System.out.println("Loaded MongoDB configuration. Hostname=" + _hostname + ", Collection="
+ + _collectionName);
+ }
+ } else {
+ _configured = false;
+ }
+ }
+
+ private String getPropertyFilePath() {
+ String userHome = System.getProperty("user.home");
+ return userHome + "/metamodel-integrationtest-configuration.properties";
+ }
+
+ protected String getInvalidConfigurationMessage() {
+ return "!!! WARN !!! MongoDB module ignored\r\n" + "Please configure mongodb connection locally ("
+ + getPropertyFilePath() + "), to run integration tests";
+ }
+
+ public String getDatabaseName() {
+ return _databaseName;
+ }
+
+ public String getCollectionName() {
+ return _collectionName;
+ }
+
+ public String getHostname() {
+ return _hostname;
+ }
+
+ public boolean isConfigured() {
+ return _configured;
+ }
+}