package com.github.mongorest.service; import static org.junit.Assert.*; import java.io.File; import java.net.URI; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response.Status; import org.bson.types.ObjectId; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.mortbay.jetty.Server; import org.mortbay.jetty.webapp.WebAppContext; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.web.context.support.WebApplicationContextUtils; import com.github.mongorest.util.AppContext; import com.github.mongorest.util.ResourceClientFactory; import com.github.mongorest.util.Utils.EncodingUtils; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBObject; import com.mongodb.Mongo; import com.mongodb.util.JSON; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.GenericType; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "/META-INF/wiring-local.xml" }) @DirtiesContext(classMode = ClassMode.AFTER_CLASS) public class MongoRestServiceTest { private Server server; private static final String baseUri = "http://localhost:9002/api/mongo"; private static final String baseDbUri = baseUri + "/databases"; private Client clientHandle; @BeforeClass public static void useTestOverrides() { System.setProperty("db.name", "test"); System.setProperty("db.user", ""); System.setProperty("db.password", ""); System.setProperty("datastore.replicas", ""); System.setProperty("domain", "localhost:9002"); } @Before public void setUp() throws Exception { WebAppContext context = new WebAppContext(); context.setContextPath("/"); context.setWar(getWebappDirectory().getAbsolutePath()); server = new Server(9002); server.setHandler(context); server.setStopAtShutdown(true); server.start(); WebApplicationContextUtils.getWebApplicationContext(context.getServletContext()); String testUsername = "junit"; String testPassword = EncodingUtils.encodeBase64("r3$tfuLM0ng0"); Mongo mongo = (Mongo) AppContext.getApplicationContext().getBean("mongo"); DB db = mongo.getDB("credentials"); DBCollection collection = db.getCollection("data_service"); DBObject credentials = new BasicDBObject(); credentials.put("user", testUsername); credentials.put("password", testPassword); collection.insert(credentials); clientHandle = ResourceClientFactory.getClientHandle(testUsername, testPassword, 0, 0); } // Adjust this if needed private File getWebappDirectory() { File file = new File("./src/main/webapp/"); if (!file.exists()) { file = new File("~/mongo-rest/src/main/webapp"); } return file; } @After public void tearDown() throws Exception { try { if (server != null) { server.stop(); server.destroy(); } } catch (Throwable t) { t.printStackTrace(); } Mongo mongo = (Mongo) AppContext.getApplicationContext().getBean("mongo"); for (String dbName : mongo.getDatabaseNames()) { mongo.dropDatabase(dbName); } } @Test public void testCreateDatabase() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); db.setName("mongo-rest-test"); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); } @Test public void testFindDatabase() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); db.setWriteConcern(com.github.mongorest.to.request.WriteConcern.SAFE); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); response = clientHandle.resource(response.getLocation()).type(MediaType.APPLICATION_JSON_TYPE) .get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); com.github.mongorest.to.response.Database database = response .getEntity(com.github.mongorest.to.response.Database.class); assertNotNull(database); assertEquals(dbName, database.getName()); assertEquals(com.github.mongorest.to.response.WriteConcern.SAFE, database.getWriteConcern()); } @Test public void testUpdateDatabase() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); db.setWriteConcern(com.github.mongorest.to.request.WriteConcern.SAFE); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); response = clientHandle.resource(dbUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); com.github.mongorest.to.response.Database database = response .getEntity(com.github.mongorest.to.response.Database.class); assertNotNull(database); assertEquals(dbName, database.getName()); assertEquals(com.github.mongorest.to.response.WriteConcern.SAFE, database.getWriteConcern()); db.setWriteConcern(com.github.mongorest.to.request.WriteConcern.FSYNC_SAFE); response = clientHandle.resource(dbUrl).type(MediaType.APPLICATION_JSON_TYPE).put(ClientResponse.class, db); assertEquals(Status.OK.getStatusCode(), response.getStatus()); response = clientHandle.resource(dbUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); database = response.getEntity(com.github.mongorest.to.response.Database.class); assertNotNull(database); assertEquals(dbName, database.getName()); assertEquals(com.github.mongorest.to.response.WriteConcern.FSYNC_SAFE, database.getWriteConcern()); } @Test public void testDeleteDatabase() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); response = clientHandle.resource(response.getLocation()).delete(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); } @Test public void testFindDatabases() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName1 = "mongo-rest-test1"; db.setName(dbName1); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); db = new com.github.mongorest.to.request.Database(); String dbName2 = "mongo-rest-test2"; db.setName(dbName2); response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); List<com.github.mongorest.to.response.Database> databases = clientHandle.resource(baseDbUri) .type(MediaType.APPLICATION_JSON_TYPE) .get(new GenericType<List<com.github.mongorest.to.response.Database>>() { }); assertEquals(2, databases.size()); List<String> names = new ArrayList<String>(2); names.add(dbName1); names.add(dbName2); for (com.github.mongorest.to.response.Database database : databases) { assertTrue(names.contains(database.getName())); assertEquals(com.github.mongorest.to.response.WriteConcern.FSYNC_SAFE, database.getWriteConcern()); } } @Test public void testDeleteDatabases() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName1 = "mongo-rest-test1"; db.setName(dbName1); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); db = new com.github.mongorest.to.request.Database(); String dbName2 = "mongo-rest-test2"; db.setName(dbName2); response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); List<com.github.mongorest.to.response.Database> databases = clientHandle.resource(baseDbUri) .type(MediaType.APPLICATION_JSON_TYPE) .get(new GenericType<List<com.github.mongorest.to.response.Database>>() { }); assertEquals(2, databases.size()); response = clientHandle.resource(baseDbUri).delete(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); databases = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .get(new GenericType<List<com.github.mongorest.to.response.Database>>() { }); assertEquals(0, databases.size()); } @Test public void testCreateCollection() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); db.setName("mongo-rest-test"); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); com.github.mongorest.to.request.Collection collection = new com.github.mongorest.to.request.Collection(); collection.setName("mongo-collection-1"); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); collection = new com.github.mongorest.to.request.Collection(); collection.setName("mongo-collection-2"); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); com.github.mongorest.to.response.Database database = clientHandle.resource(dbUrl) .queryParam("collDetails", "true").type(MediaType.APPLICATION_JSON_TYPE) .get(com.github.mongorest.to.response.Database.class); assertEquals(2, database.getCollections().size()); for (com.github.mongorest.to.response.Collection coll : database.getCollections()) { assertEquals(1, coll.getIndexes().size()); assertEquals(0, coll.getDocuments().size()); } } @Test public void testFindCollection() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); com.github.mongorest.to.request.Collection collection = new com.github.mongorest.to.request.Collection(); String collName = "mongo-test-collection"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); com.github.mongorest.to.response.Collection foundCollection = clientHandle.resource(response.getLocation()) .type(MediaType.APPLICATION_JSON_TYPE).get(com.github.mongorest.to.response.Collection.class); assertEquals(1, foundCollection.getIndexes().size()); assertEquals(0, foundCollection.getDocuments().size()); assertEquals(collName, foundCollection.getName()); assertEquals(dbName, foundCollection.getDbName()); } @Test public void testUpdateCollection() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); com.github.mongorest.to.request.Collection collection = new com.github.mongorest.to.request.Collection(); String collName = "mongo-test-collection"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI collUrl = response.getLocation(); com.github.mongorest.to.response.Collection foundCollection = clientHandle.resource(collUrl) .type(MediaType.APPLICATION_JSON_TYPE).get(com.github.mongorest.to.response.Collection.class); assertEquals(1, foundCollection.getIndexes().size()); assertEquals(0, foundCollection.getDocuments().size()); assertEquals(collName, foundCollection.getName()); assertEquals(dbName, foundCollection.getDbName()); collection.setWriteConcern(com.github.mongorest.to.request.WriteConcern.FSYNC_SAFE); response = clientHandle.resource(collUrl).type(MediaType.APPLICATION_JSON_TYPE) .put(ClientResponse.class, collection); assertEquals(Status.OK.getStatusCode(), response.getStatus()); foundCollection = clientHandle.resource(collUrl).type(MediaType.APPLICATION_JSON_TYPE) .get(com.github.mongorest.to.response.Collection.class); assertEquals(1, foundCollection.getIndexes().size()); assertEquals(0, foundCollection.getDocuments().size()); assertEquals(collName, foundCollection.getName()); assertEquals(dbName, foundCollection.getDbName()); assertEquals(com.github.mongorest.to.response.WriteConcern.FSYNC_SAFE, foundCollection.getWriteConcern()); } @Test public void testDeleteCollection() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); com.github.mongorest.to.request.Collection collection = new com.github.mongorest.to.request.Collection(); String collName = "mongo-test-collection"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI collUrl = response.getLocation(); response = clientHandle.resource(collUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); response = clientHandle.resource(collUrl).delete(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); response = clientHandle.resource(collUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus()); } @Test public void testFindCollections() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); com.github.mongorest.to.request.Collection collection = new com.github.mongorest.to.request.Collection(); String collName = "mongo-test-collection-1"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI collUrl1 = response.getLocation(); response = clientHandle.resource(collUrl1).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); collection = new com.github.mongorest.to.request.Collection(); collName = "mongo-test-collection-2"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI collUrl2 = response.getLocation(); response = clientHandle.resource(collUrl2).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); List<com.github.mongorest.to.response.Collection> collections = clientHandle.resource(dbUrl + "/collections") .type(MediaType.APPLICATION_JSON_TYPE) .get(new GenericType<List<com.github.mongorest.to.response.Collection>>() { }); assertEquals(2, collections.size()); } @Test public void testDeleteCollections() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); com.github.mongorest.to.request.Collection collection = new com.github.mongorest.to.request.Collection(); String collName = "mongo-test-collection-1"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI collUrl1 = response.getLocation(); response = clientHandle.resource(collUrl1).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); collection = new com.github.mongorest.to.request.Collection(); collName = "mongo-test-collection-2"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI collUrl2 = response.getLocation(); response = clientHandle.resource(collUrl2).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); response = clientHandle.resource(dbUrl + "/collections").delete(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); response = clientHandle.resource(collUrl1).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus()); response = clientHandle.resource(collUrl2).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus()); } @Test public void testCreateIndex() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); com.github.mongorest.to.request.Collection collection = new com.github.mongorest.to.request.Collection(); String collName = "mongo-test-collection"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI collUrl = response.getLocation(); response = clientHandle.resource(collUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); com.github.mongorest.to.request.Index index = new com.github.mongorest.to.request.Index(); index.setName("simple-index"); index.setUnique(true); List<String> keys = new ArrayList<String>(); keys.add("name"); keys.add("age"); index.setKeys(keys); response = clientHandle.resource(collUrl + "/indexes").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, index); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); } @Test public void testFindIndex() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); com.github.mongorest.to.request.Collection collection = new com.github.mongorest.to.request.Collection(); String collName = "mongo-test-collection"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI collUrl = response.getLocation(); response = clientHandle.resource(collUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); com.github.mongorest.to.request.Index index1 = new com.github.mongorest.to.request.Index(); index1.setName("stats-index"); index1.setUnique(true); List<String> keys = new ArrayList<String>(); keys.add("name"); keys.add("age"); keys.add("height"); index1.setKeys(keys); response = clientHandle.resource(collUrl + "/indexes").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, index1); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI index1Url = response.getLocation(); response = clientHandle.resource(index1Url).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); com.github.mongorest.to.response.Index foundIndex = response .getEntity(com.github.mongorest.to.response.Index.class); assertNotNull(foundIndex); assertEquals(index1.getName(), foundIndex.getName()); for (String key : index1.getKeys()) { assertTrue(foundIndex.getKeys().contains(key)); } assertEquals(index1.isUnique(), foundIndex.isUnique()); } @Test public void testDeleteIndex() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); com.github.mongorest.to.request.Collection collection = new com.github.mongorest.to.request.Collection(); String collName = "mongo-test-collection"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI collUrl = response.getLocation(); response = clientHandle.resource(collUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); com.github.mongorest.to.request.Index index = new com.github.mongorest.to.request.Index(); index.setName("stats-index"); index.setUnique(true); List<String> keys = new ArrayList<String>(); keys.add("name"); keys.add("age"); keys.add("height"); index.setKeys(keys); response = clientHandle.resource(collUrl + "/indexes").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, index); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI indexUrl = response.getLocation(); response = clientHandle.resource(indexUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); response = clientHandle.resource(indexUrl).delete(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); response = clientHandle.resource(indexUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus()); } @Test public void testFindIndexes() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); com.github.mongorest.to.request.Collection collection = new com.github.mongorest.to.request.Collection(); String collName = "mongo-test-collection"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI collUrl = response.getLocation(); response = clientHandle.resource(collUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); com.github.mongorest.to.request.Index index1 = new com.github.mongorest.to.request.Index(); index1.setName("stats-index"); index1.setUnique(true); List<String> keys = new ArrayList<String>(); keys.add("name"); keys.add("age"); keys.add("height"); index1.setKeys(keys); response = clientHandle.resource(collUrl + "/indexes").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, index1); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); com.github.mongorest.to.request.Index index2 = new com.github.mongorest.to.request.Index(); index2.setName("location-index"); index2.setUnique(true); keys = new ArrayList<String>(); keys.add("address"); keys.add("phone"); index2.setKeys(keys); response = clientHandle.resource(collUrl + "/indexes").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, index2); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); List<com.github.mongorest.to.request.Index> indexes = new ArrayList<com.github.mongorest.to.request.Index>(2); indexes.add(index1); indexes.add(index2); response = clientHandle.resource(collUrl + "/indexes").type(MediaType.APPLICATION_JSON_TYPE) .get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); List<com.github.mongorest.to.response.Index> foundIndexes = response .getEntity(new GenericType<List<com.github.mongorest.to.response.Index>>() { }); assertEquals(2, foundIndexes.size()); for (com.github.mongorest.to.response.Index foundIndex : foundIndexes) { for (com.github.mongorest.to.request.Index index : indexes) { if (index.getName().equals(foundIndex.getName())) { for (String key : index.getKeys()) { assertTrue(foundIndex.getKeys().contains(key)); } assertEquals(index.isUnique(), foundIndex.isUnique()); assertEquals(dbName, foundIndex.getDbName()); assertEquals(collName, foundIndex.getCollectionName()); } } } } @Test public void testDeleteIndexes() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); com.github.mongorest.to.request.Collection collection = new com.github.mongorest.to.request.Collection(); String collName = "mongo-test-collection"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI collUrl = response.getLocation(); response = clientHandle.resource(collUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); com.github.mongorest.to.request.Index index = new com.github.mongorest.to.request.Index(); index.setName("stats-index"); index.setUnique(true); List<String> keys = new ArrayList<String>(); keys.add("name"); keys.add("age"); keys.add("height"); index.setKeys(keys); response = clientHandle.resource(collUrl + "/indexes").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, index); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI indexUrl = response.getLocation(); response = clientHandle.resource(indexUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); response = clientHandle.resource(collUrl + "/indexes").delete(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); response = clientHandle.resource(indexUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus()); response = clientHandle.resource(collUrl + "/indexes").type(MediaType.APPLICATION_JSON_TYPE) .get(ClientResponse.class); List<com.github.mongorest.to.response.Index> foundIndexes = response .getEntity(new GenericType<List<com.github.mongorest.to.response.Index>>() { }); assertEquals(0, foundIndexes.size()); } @Test public void testCreateDocument() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); com.github.mongorest.to.request.Collection collection = new com.github.mongorest.to.request.Collection(); String collName = "mongo-test-collection"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI collUrl = response.getLocation(); response = clientHandle.resource(collUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); Map<String, Object> objMap = new HashMap<String, Object>(); String fKey = "city"; String fValue = "san francisco"; objMap.put(fKey, fValue); String sKey = "state"; String sValue = "california"; objMap.put(sKey, sValue); Map<String, String> tempMap = new HashMap<String, String>(); String jKey = "january"; String jTemp = "50"; tempMap.put(jKey, jTemp); String dKey = "december"; String dTemp = "45"; tempMap.put(dKey, dTemp); String tempMapKey = "tempMap"; objMap.put(tempMapKey, tempMap); String json = JSON.serialize(objMap); com.github.mongorest.to.request.Document document = new com.github.mongorest.to.request.Document(); document.setJson(json); response = clientHandle.resource(collUrl + "/documents").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, document); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); } @Test public void testFindDocument() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); com.github.mongorest.to.request.Collection collection = new com.github.mongorest.to.request.Collection(); String collName = "mongo-test-collection"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI collUrl = response.getLocation(); response = clientHandle.resource(collUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); Map<String, Object> objMap = new HashMap<String, Object>(); String fKey = "city"; String fValue = "san francisco"; objMap.put(fKey, fValue); String sKey = "state"; String sValue = "california"; objMap.put(sKey, sValue); Map<String, String> tempMap = new HashMap<String, String>(); String jKey = "january"; String jTemp = "50"; tempMap.put(jKey, jTemp); String dKey = "december"; String dTemp = "45"; tempMap.put(dKey, dTemp); String tempMapKey = "tempMap"; objMap.put(tempMapKey, tempMap); String json = JSON.serialize(objMap); com.github.mongorest.to.request.Document document = new com.github.mongorest.to.request.Document(); document.setJson(json); response = clientHandle.resource(collUrl + "/documents").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, document); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); response = clientHandle.resource(response.getLocation()).type(MediaType.APPLICATION_JSON_TYPE) .get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); com.github.mongorest.to.response.Document insertedDocument = response .getEntity(com.github.mongorest.to.response.Document.class); BasicDBObject foundJson = (BasicDBObject) JSON.parse(insertedDocument.getJson()); @SuppressWarnings("rawtypes") Map foundMap = foundJson.toMap(); for (String key : objMap.keySet()) { assertTrue(foundMap.containsKey(key)); assertEquals(objMap.get(key), foundMap.get(key)); } assertNotNull(foundMap.get("_id")); } @SuppressWarnings({ "unchecked", "rawtypes" }) @Test public void testUpdateDocument() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); com.github.mongorest.to.request.Collection collection = new com.github.mongorest.to.request.Collection(); String collName = "mongo-test-collection"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI collUrl = response.getLocation(); response = clientHandle.resource(collUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); Map<String, Object> objMap = new HashMap<String, Object>(); String fKey = "city"; String fValue = "san francisco"; objMap.put(fKey, fValue); String sKey = "state"; String sValue = "california"; objMap.put(sKey, sValue); Map<String, String> tempMap = new HashMap<String, String>(); String jKey = "january"; String jTemp = "50"; tempMap.put(jKey, jTemp); String dKey = "december"; String dTemp = "45"; tempMap.put(dKey, dTemp); String tempMapKey = "tempMap"; objMap.put(tempMapKey, tempMap); String json = JSON.serialize(objMap); com.github.mongorest.to.request.Document document = new com.github.mongorest.to.request.Document(); document.setJson(json); response = clientHandle.resource(collUrl + "/documents").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, document); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI docUrl = response.getLocation(); response = clientHandle.resource(docUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); com.github.mongorest.to.response.Document insertedDocument = response .getEntity(com.github.mongorest.to.response.Document.class); BasicDBObject insertedJson = (BasicDBObject) JSON.parse(insertedDocument.getJson()); Map insertedMap = insertedJson.toMap(); for (String key : objMap.keySet()) { assertTrue(insertedMap.containsKey(key)); assertEquals(objMap.get(key), insertedMap.get(key)); } ObjectId docId = (ObjectId) insertedMap.get("_id"); assertNotNull(docId); fKey = "city"; fValue = "fresno"; insertedMap.put(fKey, fValue); document.setJson(JSON.serialize(insertedMap)); response = clientHandle.resource(docUrl).type(MediaType.APPLICATION_JSON_TYPE) .put(ClientResponse.class, document); assertEquals(Status.OK.getStatusCode(), response.getStatus()); response = clientHandle.resource(docUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); com.github.mongorest.to.response.Document updatedDocument = response .getEntity(com.github.mongorest.to.response.Document.class); BasicDBObject updatedJson = (BasicDBObject) JSON.parse(updatedDocument.getJson()); Map updatedMap = updatedJson.toMap(); for (Object key : insertedMap.keySet()) { if (key.equals("_id")) { continue; } assertTrue(updatedMap.containsKey(key)); assertEquals(insertedMap.get(key), updatedMap.get(key)); } assertEquals(docId, (ObjectId) updatedMap.get("_id")); } @Test public void testDeleteDocument() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); com.github.mongorest.to.request.Collection collection = new com.github.mongorest.to.request.Collection(); String collName = "mongo-test-collection"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI collUrl = response.getLocation(); response = clientHandle.resource(collUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); Map<String, Object> objMap = new HashMap<String, Object>(); String fKey = "city"; String fValue = "san francisco"; objMap.put(fKey, fValue); String sKey = "state"; String sValue = "california"; objMap.put(sKey, sValue); Map<String, String> tempMap = new HashMap<String, String>(); String jKey = "january"; String jTemp = "50"; tempMap.put(jKey, jTemp); String dKey = "december"; String dTemp = "45"; tempMap.put(dKey, dTemp); String tempMapKey = "tempMap"; objMap.put(tempMapKey, tempMap); String json = JSON.serialize(objMap); com.github.mongorest.to.request.Document document = new com.github.mongorest.to.request.Document(); document.setJson(json); response = clientHandle.resource(collUrl + "/documents").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, document); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI docUrl = response.getLocation(); response = clientHandle.resource(docUrl).delete(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); response = clientHandle.resource(docUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus()); } @Test public void testFindDocuments() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); com.github.mongorest.to.request.Collection collection = new com.github.mongorest.to.request.Collection(); String collName = "mongo-test-collection"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI collUrl = response.getLocation(); response = clientHandle.resource(collUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); Map<String, Object> objMap = new HashMap<String, Object>(); String fKey = "city"; String fValue = "san francisco"; objMap.put(fKey, fValue); String sKey = "state"; String sValue = "california"; objMap.put(sKey, sValue); Map<String, String> tempMap = new HashMap<String, String>(); String jKey = "january"; String jTemp = "50"; tempMap.put(jKey, jTemp); String dKey = "december"; String dTemp = "45"; tempMap.put(dKey, dTemp); String tempMapKey = "tempMap"; objMap.put(tempMapKey, tempMap); String json = JSON.serialize(objMap); com.github.mongorest.to.request.Document document = new com.github.mongorest.to.request.Document(); document.setJson(json); response = clientHandle.resource(collUrl + "/documents").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, document); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); List<com.github.mongorest.to.response.Document> foundDocuments = clientHandle.resource(collUrl + "/documents") .type(MediaType.APPLICATION_JSON_TYPE) .get(new GenericType<List<com.github.mongorest.to.response.Document>>() { }); assertEquals(1, foundDocuments.size()); BasicDBObject foundJson = (BasicDBObject) JSON.parse(foundDocuments.get(0).getJson()); @SuppressWarnings("rawtypes") Map foundMap = foundJson.toMap(); for (String key : objMap.keySet()) { assertTrue(foundMap.containsKey(key)); assertEquals(objMap.get(key), foundMap.get(key)); } assertNotNull(foundMap.get("_id")); } @Test public void testDeleteDocuments() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); com.github.mongorest.to.request.Collection collection = new com.github.mongorest.to.request.Collection(); String collName = "mongo-test-collection"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI collUrl = response.getLocation(); response = clientHandle.resource(collUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); Map<String, Object> objMap = new HashMap<String, Object>(); String fKey = "city"; String fValue = "san francisco"; objMap.put(fKey, fValue); String sKey = "state"; String sValue = "california"; objMap.put(sKey, sValue); Map<String, String> tempMap = new HashMap<String, String>(); String jKey = "january"; String jTemp = "50"; tempMap.put(jKey, jTemp); String dKey = "december"; String dTemp = "45"; tempMap.put(dKey, dTemp); String tempMapKey = "tempMap"; objMap.put(tempMapKey, tempMap); String json = JSON.serialize(objMap); com.github.mongorest.to.request.Document document = new com.github.mongorest.to.request.Document(); document.setJson(json); response = clientHandle.resource(collUrl + "/documents").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, document); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI docUrl = response.getLocation(); response = clientHandle.resource(collUrl + "/documents").delete(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); response = clientHandle.resource(docUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.NOT_FOUND.getStatusCode(), response.getStatus()); } @Test public void testPing() { ClientResponse response = clientHandle.resource(baseUri + "/ping").type(MediaType.APPLICATION_JSON_TYPE) .get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); } @Test public void testShutdown() { ClientResponse response = clientHandle.resource(baseUri + "/ping").type(MediaType.APPLICATION_JSON_TYPE) .get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); response = clientHandle.resource(baseUri + "/shutdown").type(MediaType.APPLICATION_JSON_TYPE) .get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); response = clientHandle.resource(baseUri + "/ping").type(MediaType.APPLICATION_JSON_TYPE) .get(ClientResponse.class); assertEquals(Status.SERVICE_UNAVAILABLE.getStatusCode(), response.getStatus()); } @Test public void testCreateBinary() { com.github.mongorest.to.request.Database db = new com.github.mongorest.to.request.Database(); String dbName = "mongo-rest-test"; db.setName(dbName); ClientResponse response = clientHandle.resource(baseDbUri).type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, db); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI dbUrl = response.getLocation(); com.github.mongorest.to.request.Collection collection = new com.github.mongorest.to.request.Collection(); String collName = "mongo-test-collection"; collection.setName(collName); response = clientHandle.resource(dbUrl + "/collections").type(MediaType.APPLICATION_JSON_TYPE) .post(ClientResponse.class, collection); assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); URI collUrl = response.getLocation(); response = clientHandle.resource(collUrl).type(MediaType.APPLICATION_JSON_TYPE).get(ClientResponse.class); assertEquals(Status.OK.getStatusCode(), response.getStatus()); // response = clientHandle.resource(collUrl + // "/binary").type(MediaType.MULTIPART_FORM_DATA_TYPE).post(ClientResponse.class, // binary); // assertEquals(Status.CREATED.getStatusCode(), response.getStatus()); } }