You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ace.apache.org by ja...@apache.org on 2013/10/04 13:14:01 UTC
svn commit: r1529131 -
/ace/trunk/org.apache.ace.log.server.store.itest/src/org/apache/ace/log/server/store/tests/MongoLogStoreTest.java
Author: jawi
Date: Fri Oct 4 11:14:01 2013
New Revision: 1529131
URL: http://svn.apache.org/r1529131
Log:
Rewrote test a little to make it more robust.
Modified:
ace/trunk/org.apache.ace.log.server.store.itest/src/org/apache/ace/log/server/store/tests/MongoLogStoreTest.java
Modified: ace/trunk/org.apache.ace.log.server.store.itest/src/org/apache/ace/log/server/store/tests/MongoLogStoreTest.java
URL: http://svn.apache.org/viewvc/ace/trunk/org.apache.ace.log.server.store.itest/src/org/apache/ace/log/server/store/tests/MongoLogStoreTest.java?rev=1529131&r1=1529130&r2=1529131&view=diff
==============================================================================
--- ace/trunk/org.apache.ace.log.server.store.itest/src/org/apache/ace/log/server/store/tests/MongoLogStoreTest.java (original)
+++ ace/trunk/org.apache.ace.log.server.store.itest/src/org/apache/ace/log/server/store/tests/MongoLogStoreTest.java Fri Oct 4 11:14:01 2013
@@ -23,7 +23,6 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.concurrent.TimeUnit;
import org.amdatu.mongo.MongoDBService;
import org.apache.ace.feedback.Descriptor;
@@ -34,167 +33,175 @@ import org.apache.felix.dm.Component;
import org.osgi.service.log.LogService;
import com.mongodb.BasicDBObject;
+import com.mongodb.CommandResult;
import com.mongodb.DBCollection;
-import com.mongodb.MongoException;
public class MongoLogStoreTest extends IntegrationTestBase {
- private volatile LogStore m_logStore;
- private volatile MongoDBService m_mongodbService;
+ private volatile LogStore m_logStore;
+ private volatile MongoDBService m_mongodbService;
- @Override
- protected void configureProvisionedServices() throws Exception {
- configureFactory("org.amdatu.mongo", "dbName", "ace");
- configureFactory("org.apache.ace.log.server.store.factory", "name", "serverlog");
- super.configureProvisionedServices();
- }
-
- protected org.apache.felix.dm.Component[] getDependencies() {
- return new Component[] { createComponent().setImplementation(this)
- .add(createServiceDependency().setService(LogStore.class).setRequired(true))
- .add(createServiceDependency().setService(MongoDBService.class).setRequired(true)) };
- }
-
- public void testPutEvents() throws Exception {
-
- try {
- DBCollection collection = m_mongodbService.getDB().getCollection("serverlog");
- collection.remove(new BasicDBObject());
- TimeUnit.SECONDS.sleep(2);
-
- storeEvents();
- collection = m_mongodbService.getDB().getCollection("serverlog");
- assertEquals(5, collection.count());
- } catch (MongoException ex) {
- System.err.println("Mongodb not available on localhost, skipping test");
- }
- }
-
- public void testGetEvents() throws Exception {
- try {
- DBCollection collection = m_mongodbService.getDB().getCollection("serverlog");
- collection.remove(new BasicDBObject());
- TimeUnit.SECONDS.sleep(2);
-
- storeEvents();
-
- List<Event> events = m_logStore.get(new Descriptor("mytarget1,1,0"));
- assertEquals(3, events.size());
- } catch (MongoException ex) {
- System.err.println("Mongodb not available on localhost, skipping test");
- }
- }
-
- public void testGetEventsWithRange() throws Exception {
- try {
- DBCollection collection = m_mongodbService.getDB().getCollection("serverlog");
- collection.remove(new BasicDBObject());
- TimeUnit.SECONDS.sleep(2);
-
- storeEvents();
-
- List<Event> events = m_logStore.get(new Descriptor("mytarget1,1,2"));
- assertEquals(2, events.size());
- } catch (Exception ex) {
- System.err.println("Mongodb not available on localhost, skipping test");
- }
- }
-
- public void testGetDescriptorsSingleLogId() throws Exception {
- try {
- DBCollection collection = m_mongodbService.getDB().getCollection("serverlog");
- collection.remove(new BasicDBObject());
- TimeUnit.SECONDS.sleep(2);
-
- storeEvents();
-
- List<Descriptor> descriptors = m_logStore.getDescriptors();
- assertEquals(2, descriptors.size());
- assertEquals("mytarget1", descriptors.get(0).getTargetID());
- assertEquals(1, descriptors.get(0).getStoreID());
- assertEquals(4, descriptors.get(0).getRangeSet().getHigh());
- assertEquals("mytarget2", descriptors.get(1).getTargetID());
- assertEquals(1, descriptors.get(1).getStoreID());
- assertEquals(5, descriptors.get(1).getRangeSet().getHigh());
- } catch (MongoException ex) {
- System.err.println("Mongodb not available on localhost, skipping test");
- }
-
- }
-
- public void testGetDescriptorsMultipleLogIds() throws Exception {
- try {
- DBCollection collection = m_mongodbService.getDB().getCollection("serverlog");
- collection.remove(new BasicDBObject());
- TimeUnit.SECONDS.sleep(2);
-
- storeEvents();
-
- Map<String, String> props = new HashMap<String, String>();
- props.put("myProperty", "myvalue");
-
- Event event1 = new Event("mytarget1", 2, 1, System.currentTimeMillis(), LogService.LOG_ERROR, props);
- Event event2 = new Event("mytarget1", 2, 2, System.currentTimeMillis(), LogService.LOG_ERROR, props);
-
- m_logStore.put(Arrays.asList(event1, event2));
-
- List<Descriptor> descriptors = m_logStore.getDescriptors();
- assertEquals(3, descriptors.size());
- assertEquals("mytarget1", descriptors.get(0).getTargetID());
- assertEquals(1, descriptors.get(0).getStoreID());
- assertEquals(4, descriptors.get(0).getRangeSet().getHigh());
-
- assertEquals("mytarget1", descriptors.get(1).getTargetID());
- assertEquals(2, descriptors.get(1).getStoreID());
- assertEquals(2, descriptors.get(1).getRangeSet().getHigh());
-
- assertEquals("mytarget2", descriptors.get(2).getTargetID());
- assertEquals(1, descriptors.get(2).getStoreID());
- assertEquals(5, descriptors.get(2).getRangeSet().getHigh());
- } catch (MongoException ex) {
- System.err.println("Mongodb not available on localhost, skipping test");
- }
- }
-
- public void testGetDescriptorsForTarget() throws Exception {
- try {
- DBCollection collection = m_mongodbService.getDB().getCollection("serverlog");
- collection.remove(new BasicDBObject());
- TimeUnit.SECONDS.sleep(2);
-
- storeEvents();
-
- Map<String, String> props = new HashMap<String, String>();
- props.put("myProperty", "myvalue");
-
- Event event1 = new Event("mytarget1", 2, 1, System.currentTimeMillis(), LogService.LOG_ERROR, props);
- Event event2 = new Event("mytarget1", 2, 2, System.currentTimeMillis(), LogService.LOG_ERROR, props);
-
- m_logStore.put(Arrays.asList(event1, event2));
-
- List<Descriptor> descriptors = m_logStore.getDescriptors("mytarget1");
- assertEquals(2, descriptors.size());
- assertEquals("mytarget1", descriptors.get(0).getTargetID());
- assertEquals(1, descriptors.get(0).getStoreID());
- assertEquals(4, descriptors.get(0).getRangeSet().getHigh());
-
- assertEquals("mytarget1", descriptors.get(1).getTargetID());
- assertEquals(2, descriptors.get(1).getStoreID());
- assertEquals(2, descriptors.get(1).getRangeSet().getHigh());
- } catch (MongoException ex) {
- System.err.println("Mongodb not available on localhost, skipping test");
- }
- }
+ private DBCollection m_collection;
- private void storeEvents() throws IOException {
+ public void testGetDescriptorsForTarget() throws Exception {
+ if (!canRunTest()) {
+ return;
+ }
+
+ storeEvents();
+
+ Map<String, String> props = new HashMap<String, String>();
+ props.put("myProperty", "myvalue");
+
+ Event event1 = new Event("mytarget1", 2, 1, System.currentTimeMillis(), LogService.LOG_ERROR, props);
+ Event event2 = new Event("mytarget1", 2, 2, System.currentTimeMillis(), LogService.LOG_ERROR, props);
+
+ m_logStore.put(Arrays.asList(event1, event2));
+
+ List<Descriptor> descriptors = m_logStore.getDescriptors("mytarget1");
+ assertEquals(2, descriptors.size());
+ assertEquals("mytarget1", descriptors.get(0).getTargetID());
+ assertEquals(1, descriptors.get(0).getStoreID());
+ assertEquals(4, descriptors.get(0).getRangeSet().getHigh());
+
+ assertEquals("mytarget1", descriptors.get(1).getTargetID());
+ assertEquals(2, descriptors.get(1).getStoreID());
+ assertEquals(2, descriptors.get(1).getRangeSet().getHigh());
+ }
+
+ public void testGetDescriptorsMultipleLogIds() throws Exception {
+ if (!canRunTest()) {
+ return;
+ }
+
+ storeEvents();
+
+ Map<String, String> props = new HashMap<String, String>();
+ props.put("myProperty", "myvalue");
+
+ Event event1 = new Event("mytarget1", 2, 1, System.currentTimeMillis(), LogService.LOG_ERROR, props);
+ Event event2 = new Event("mytarget1", 2, 2, System.currentTimeMillis(), LogService.LOG_ERROR, props);
+
+ m_logStore.put(Arrays.asList(event1, event2));
+
+ List<Descriptor> descriptors = m_logStore.getDescriptors();
+ assertEquals(3, descriptors.size());
+ assertEquals("mytarget1", descriptors.get(0).getTargetID());
+ assertEquals(1, descriptors.get(0).getStoreID());
+ assertEquals(4, descriptors.get(0).getRangeSet().getHigh());
+
+ assertEquals("mytarget1", descriptors.get(1).getTargetID());
+ assertEquals(2, descriptors.get(1).getStoreID());
+ assertEquals(2, descriptors.get(1).getRangeSet().getHigh());
+
+ assertEquals("mytarget2", descriptors.get(2).getTargetID());
+ assertEquals(1, descriptors.get(2).getStoreID());
+ assertEquals(5, descriptors.get(2).getRangeSet().getHigh());
+ }
+
+ public void testGetDescriptorsSingleLogId() throws Exception {
+ if (!canRunTest()) {
+ return;
+ }
+
+ storeEvents();
+
+ List<Descriptor> descriptors = m_logStore.getDescriptors();
+ assertEquals(2, descriptors.size());
+ assertEquals("mytarget1", descriptors.get(0).getTargetID());
+ assertEquals(1, descriptors.get(0).getStoreID());
+ assertEquals(4, descriptors.get(0).getRangeSet().getHigh());
+ assertEquals("mytarget2", descriptors.get(1).getTargetID());
+ assertEquals(1, descriptors.get(1).getStoreID());
+ assertEquals(5, descriptors.get(1).getRangeSet().getHigh());
+ }
+
+ public void testGetEvents() throws Exception {
+ if (!canRunTest()) {
+ return;
+ }
+
+ storeEvents();
+
+ List<Event> events = m_logStore.get(new Descriptor("mytarget1,1,0"));
+ assertEquals(3, events.size());
+ }
+
+ public void testGetEventsWithRange() throws Exception {
+ if (!canRunTest()) {
+ return;
+ }
+
+ storeEvents();
+
+ List<Event> events = m_logStore.get(new Descriptor("mytarget1,1,2"));
+ assertEquals(2, events.size());
+ }
+
+ public void testPutEvents() throws Exception {
+ if (!canRunTest()) {
+ return;
+ }
+
+ storeEvents();
+
+ assertEquals(5, m_collection.count());
+ }
+
+ @Override
+ protected void configureAdditionalServices() throws Exception {
+ try {
+ m_collection = m_mongodbService.getDB().getCollection("serverlog");
+ // we always get a collection back, regardless if there is an actual MongoDB listening, hence we should do
+ // some actual calls that cause a connection to MongoDB to be created...
+ if (m_collection.getCount() > 0L) {
+ m_collection.remove(new BasicDBObject());
+ }
+ }
+ catch (Exception exception) {
+ System.err.println("Mongodb not available on localhost, skipping test...");
+ m_collection = null;
+ }
+ }
+
+ @Override
+ protected void configureProvisionedServices() throws Exception {
+ configureFactory("org.amdatu.mongo", "dbName", "ace");
+ configureFactory("org.apache.ace.log.server.store.factory", "name", "serverlog");
+ }
+
+ @Override
+ protected void doTearDown() throws Exception {
+ if (canRunTest()) {
+ m_collection.remove(new BasicDBObject());
+
+ CommandResult lastError = m_mongodbService.getDB().getLastError();
+ assertNull(lastError.getException());
+
+ assertTrue(m_collection.getCount() == 0L);
+ }
+ }
+
+ @Override
+ protected org.apache.felix.dm.Component[] getDependencies() {
+ return new Component[] { createComponent().setImplementation(this)
+ .add(createServiceDependency().setService(LogStore.class).setRequired(true))
+ .add(createServiceDependency().setService(MongoDBService.class).setRequired(true)) };
+ }
+
+ private boolean canRunTest() {
+ return m_collection != null;
+ }
+
+ private void storeEvents() throws IOException {
Map<String, String> props = new HashMap<String, String>();
- props.put("myProperty", "myvalue");
- Event event1 = new Event("mytarget1", 1, 1, System.currentTimeMillis(), LogService.LOG_ERROR, props);
- Event event2 = new Event("mytarget1", 1, 2, System.currentTimeMillis(), LogService.LOG_ERROR, props);
- Event event3 = new Event("mytarget2", 1, 3, System.currentTimeMillis(), LogService.LOG_ERROR, props);
- Event event4 = new Event("mytarget2", 1, 5, System.currentTimeMillis(), LogService.LOG_ERROR, props);
- Event event5 = new Event("mytarget1", 1, 4, System.currentTimeMillis(), LogService.LOG_ERROR, props);
+ props.put("myProperty", "myvalue");
+ Event event1 = new Event("mytarget1", 1, 1, System.currentTimeMillis(), LogService.LOG_ERROR, props);
+ Event event2 = new Event("mytarget1", 1, 2, System.currentTimeMillis(), LogService.LOG_ERROR, props);
+ Event event3 = new Event("mytarget2", 1, 3, System.currentTimeMillis(), LogService.LOG_ERROR, props);
+ Event event4 = new Event("mytarget2", 1, 5, System.currentTimeMillis(), LogService.LOG_ERROR, props);
+ Event event5 = new Event("mytarget1", 1, 4, System.currentTimeMillis(), LogService.LOG_ERROR, props);
- m_logStore.put(Arrays.asList(event1, event2, event3, event4, event5));
- }
+ m_logStore.put(Arrays.asList(event1, event2, event3, event4, event5));
+ }
}