Details
diff --git a/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java b/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java
index bdee1c6..b249338 100644
--- a/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java
+++ b/util/src/test/java/com/ning/billing/util/audit/dao/TestDefaultAuditDao.java
@@ -24,6 +24,7 @@ import org.testng.Assert;
import org.testng.annotations.Test;
import com.ning.billing.ObjectType;
+import com.ning.billing.api.TestApiListener.NextEvent;
import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
import com.ning.billing.util.api.AuditLevel;
import com.ning.billing.util.api.TagApiException;
@@ -72,7 +73,10 @@ public class TestDefaultAuditDao extends UtilTestSuiteWithEmbeddedDB {
Assert.assertEquals(firstAuditLogs.size(), 1);
Assert.assertEquals(firstAuditLogs.get(0).getChangeType(), ChangeType.INSERT);
+ eventsListener.pushExpectedEvent(NextEvent.TAG);
tagDao.deleteTag(tag.getObjectId(), tag.getObjectType(), tag.getTagDefinitionId(), internalCallContext);
+ assertListenerStatus();
+
final List<AuditLog> secondAuditLogs = auditDao.getAuditLogsForId(TableName.TAG, tag.getId(), AuditLevel.FULL, internalCallContext);
Assert.assertEquals(secondAuditLogs.size(), 2);
Assert.assertEquals(secondAuditLogs.get(0).getChangeType(), ChangeType.INSERT);
@@ -81,9 +85,12 @@ public class TestDefaultAuditDao extends UtilTestSuiteWithEmbeddedDB {
private void addTag() throws TagDefinitionApiException, TagApiException {
// Create a tag definition
+ eventsListener.pushExpectedEvent(NextEvent.TAG_DEFINITION);
final TagDefinitionModelDao tagDefinition = tagDefinitionDao.create(UUID.randomUUID().toString().substring(0, 5),
UUID.randomUUID().toString().substring(0, 5),
internalCallContext);
+ assertListenerStatus();
+
Assert.assertEquals(tagDefinitionDao.getById(tagDefinition.getId(), internalCallContext), tagDefinition);
// Create a tag
@@ -91,7 +98,10 @@ public class TestDefaultAuditDao extends UtilTestSuiteWithEmbeddedDB {
final Tag theTag = new DescriptiveTag(tagDefinition.getId(), ObjectType.ACCOUNT, objectId, clock.getUTCNow());
+ eventsListener.pushExpectedEvent(NextEvent.TAG);
tagDao.create(new TagModelDao(theTag), internalCallContext);
+ assertListenerStatus();
+
final List<TagModelDao> tags = tagDao.getTagsForObject(objectId, ObjectType.ACCOUNT, internalCallContext);
Assert.assertEquals(tags.size(), 1);
tag = tags.get(0);
diff --git a/util/src/test/java/com/ning/billing/util/customfield/TestFieldStore.java b/util/src/test/java/com/ning/billing/util/customfield/TestFieldStore.java
index f75ddae..1a18955 100644
--- a/util/src/test/java/com/ning/billing/util/customfield/TestFieldStore.java
+++ b/util/src/test/java/com/ning/billing/util/customfield/TestFieldStore.java
@@ -21,6 +21,7 @@ import java.util.UUID;
import org.testng.annotations.Test;
import com.ning.billing.ObjectType;
+import com.ning.billing.api.TestApiListener.NextEvent;
import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
import com.ning.billing.util.api.CustomFieldApiException;
import com.ning.billing.util.customfield.dao.CustomFieldModelDao;
@@ -36,11 +37,15 @@ public class TestFieldStore extends UtilTestSuiteWithEmbeddedDB {
String fieldValue = "Kitty Hawk";
final CustomField field = new StringCustomField(fieldName, fieldValue, objectType, id, internalCallContext.getCreatedDate());
+ eventsListener.pushExpectedEvent(NextEvent.CUSTOM_FIELD);
customFieldDao.create(new CustomFieldModelDao(field), internalCallContext);
+ assertListenerStatus();
fieldName = "TestField2";
fieldValue = "Cape Canaveral";
final CustomField field2 = new StringCustomField(fieldName, fieldValue, objectType, id, internalCallContext.getCreatedDate());
+ eventsListener.pushExpectedEvent(NextEvent.CUSTOM_FIELD);
customFieldDao.create(new CustomFieldModelDao(field2), internalCallContext);
+ assertListenerStatus();
}
}
diff --git a/util/src/test/java/com/ning/billing/util/dao/TestPagination.java b/util/src/test/java/com/ning/billing/util/dao/TestPagination.java
index 0f0832a..01b7b8a 100644
--- a/util/src/test/java/com/ning/billing/util/dao/TestPagination.java
+++ b/util/src/test/java/com/ning/billing/util/dao/TestPagination.java
@@ -21,6 +21,7 @@ import java.util.List;
import org.testng.Assert;
import org.testng.annotations.Test;
+import com.ning.billing.api.TestApiListener.NextEvent;
import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
import com.ning.billing.util.tag.dao.TagDefinitionModelDao;
import com.ning.billing.util.tag.dao.TagDefinitionSqlDao;
@@ -36,7 +37,9 @@ public class TestPagination extends UtilTestSuiteWithEmbeddedDB {
for (int i = 0; i < 10; i++) {
final String definitionName = "name-" + i;
final String description = "description-" + i;
+ eventsListener.pushExpectedEvent(NextEvent.TAG_DEFINITION);
tagDefinitionDao.create(definitionName, description, internalCallContext);
+ assertListenerStatus();
}
// Tests via SQL dao directly
diff --git a/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDao.java b/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDao.java
index e9ebb64..ff33436 100644
--- a/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDao.java
+++ b/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDao.java
@@ -38,23 +38,6 @@ import static org.testng.Assert.assertEquals;
public class TestDefaultTagDao extends UtilTestSuiteWithEmbeddedDB {
- private TestApiListener eventsListener;
-
- @Override
- @BeforeMethod(groups = "slow")
- public void beforeMethod() throws Exception {
- super.beforeMethod();
- eventsListener = new TestApiListener(null, idbi);
- eventBus.register(eventsListener);
- }
-
- @Override
- @AfterMethod(groups = "slow")
- public void afterMethod() throws Exception {
- eventBus.unregister(eventsListener);
- super.afterMethod();
- }
-
@Test(groups = "slow")
public void testGetByIds() throws TagDefinitionApiException {
final List<UUID> uuids = new ArrayList<UUID>();
@@ -63,11 +46,19 @@ public class TestDefaultTagDao extends UtilTestSuiteWithEmbeddedDB {
List<TagDefinitionModelDao> result = tagDefinitionDao.getByIds(uuids, internalCallContext);
assertEquals(result.size(), 0);
+ eventsListener.pushExpectedEvent(NextEvent.TAG_DEFINITION);
final TagDefinitionModelDao defYo = tagDefinitionDao.create(UUID.randomUUID().toString().substring(0, 5), "defintion yo", internalCallContext);
+ assertListenerStatus();
uuids.add(defYo.getId());
+
+ eventsListener.pushExpectedEvent(NextEvent.TAG_DEFINITION);
final TagDefinitionModelDao defBah = tagDefinitionDao.create(UUID.randomUUID().toString().substring(0, 5), "defintion bah", internalCallContext);
+ assertListenerStatus();
uuids.add(defBah.getId());
+
+ eventsListener.pushExpectedEvent(NextEvent.TAG_DEFINITION);
final TagDefinitionModelDao defZoo = tagDefinitionDao.create(UUID.randomUUID().toString().substring(0, 5), "defintion zoo", internalCallContext);
+ assertListenerStatus();
uuids.add(defZoo.getId());
result = tagDefinitionDao.getByIds(uuids, internalCallContext);
@@ -85,7 +76,10 @@ public class TestDefaultTagDao extends UtilTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testGetById() throws TagDefinitionApiException {
// User Tag
+ eventsListener.pushExpectedEvent(NextEvent.TAG_DEFINITION);
final TagDefinitionModelDao defYo = tagDefinitionDao.create(UUID.randomUUID().toString().substring(0, 5), "defintion yo", internalCallContext);
+ assertListenerStatus();
+
final TagDefinitionModelDao resDefYo = tagDefinitionDao.getById(defYo.getId(), internalCallContext);
assertEquals(defYo, resDefYo);
@@ -104,7 +98,10 @@ public class TestDefaultTagDao extends UtilTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testGetByName() throws TagDefinitionApiException {
// User Tag
+ eventsListener.pushExpectedEvent(NextEvent.TAG_DEFINITION);
final TagDefinitionModelDao defYo = tagDefinitionDao.create(UUID.randomUUID().toString().substring(0, 5), "defintion yo", internalCallContext);
+ assertListenerStatus();
+
final TagDefinitionModelDao resDefYo = tagDefinitionDao.getByName(defYo.getName(), internalCallContext);
assertEquals(defYo, resDefYo);
@@ -132,13 +129,13 @@ public class TestDefaultTagDao extends UtilTestSuiteWithEmbeddedDB {
final TagDefinitionModelDao createdTagDefinition = tagDefinitionDao.create(definitionName, description, internalCallContext);
Assert.assertEquals(createdTagDefinition.getName(), definitionName);
Assert.assertEquals(createdTagDefinition.getDescription(), description);
- Assert.assertTrue(eventsListener.isCompleted(2000));
+ assertListenerStatus();
// Make sure we can create a tag
eventsListener.pushExpectedEvent(NextEvent.TAG);
final Tag tag = new DescriptiveTag(createdTagDefinition.getId(), objectType, objectId, internalCallContext.getCreatedDate());
tagDao.create(new TagModelDao(tag), internalCallContext);
- Assert.assertTrue(eventsListener.isCompleted(2000));
+ assertListenerStatus();
// Make sure we can retrieve it via the DAO
final List<TagModelDao> foundTags = tagDao.getTagsForObject(objectId, objectType, internalCallContext);
@@ -158,7 +155,7 @@ public class TestDefaultTagDao extends UtilTestSuiteWithEmbeddedDB {
// Delete the tag
eventsListener.pushExpectedEvent(NextEvent.TAG);
tagDao.deleteTag(objectId, objectType, createdTagDefinition.getId(), internalCallContext);
- Assert.assertTrue(eventsListener.isCompleted(2000));
+ assertListenerStatus();
// Make sure the tag is deleted
Assert.assertEquals(tagDao.getTagsForObject(objectId, objectType, internalCallContext).size(), 0);
diff --git a/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDefinitionDao.java b/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDefinitionDao.java
index 5c5c627..1c8bc17 100644
--- a/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDefinitionDao.java
+++ b/util/src/test/java/com/ning/billing/util/tag/dao/TestDefaultTagDefinitionDao.java
@@ -35,25 +35,6 @@ import com.google.common.eventbus.Subscribe;
public class TestDefaultTagDefinitionDao extends UtilTestSuiteWithEmbeddedDB {
- private TestApiListener eventsListener;
-
-
- @Override
- @BeforeMethod(groups = "slow")
- public void beforeMethod() throws Exception {
- super.beforeMethod();
- eventsListener = new TestApiListener(null, idbi);
- eventBus.register(eventsListener);
- }
-
- @Override
- @AfterMethod(groups = "slow")
- public void afterMethod() throws Exception {
- eventBus.unregister(eventsListener);
- super.afterMethod();
- }
-
-
@Test(groups = "slow")
public void testCatchEventsOnCreateAndDelete() throws Exception {
final String definitionName = UUID.randomUUID().toString().substring(0, 5);
@@ -64,8 +45,7 @@ public class TestDefaultTagDefinitionDao extends UtilTestSuiteWithEmbeddedDB {
final TagDefinitionModelDao createdTagDefinition = tagDefinitionDao.create(definitionName, description, internalCallContext);
Assert.assertEquals(createdTagDefinition.getName(), definitionName);
Assert.assertEquals(createdTagDefinition.getDescription(), description);
-
- Assert.assertTrue(eventsListener.isCompleted(2000));
+ assertListenerStatus();
// Make sure we can retrieve it via the DAO
final TagDefinitionModelDao foundTagDefinition = tagDefinitionDao.getByName(definitionName, internalCallContext);
@@ -84,7 +64,7 @@ public class TestDefaultTagDefinitionDao extends UtilTestSuiteWithEmbeddedDB {
// Delete the tag definition
eventsListener.pushExpectedEvent(NextEvent.TAG_DEFINITION);
tagDefinitionDao.deleteById(foundTagDefinition.getId(), internalCallContext);
- Assert.assertTrue(eventsListener.isCompleted(2000));
+ assertListenerStatus();
// Make sure the tag definition is deleted
Assert.assertNull(tagDefinitionDao.getByName(definitionName, internalCallContext));
diff --git a/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java b/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java
index 70e8766..6d2fc68 100644
--- a/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java
+++ b/util/src/test/java/com/ning/billing/util/tag/TestTagStore.java
@@ -22,6 +22,7 @@ import java.util.UUID;
import org.testng.annotations.Test;
import com.ning.billing.ObjectType;
+import com.ning.billing.api.TestApiListener.NextEvent;
import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
import com.ning.billing.util.api.TagApiException;
import com.ning.billing.util.api.TagDefinitionApiException;
@@ -41,14 +42,19 @@ public class TestTagStore extends UtilTestSuiteWithEmbeddedDB {
public void testTagCreationAndRetrieval() throws TagApiException, TagDefinitionApiException {
final UUID accountId = UUID.randomUUID();
- TagDefinitionModelDao testTagDefinition;
+ eventsListener.pushExpectedEvent(NextEvent.TAG_DEFINITION);
tagDefinitionDao.create("tag1", "First tag", internalCallContext);
- testTagDefinition = tagDefinitionDao.create("testTagDefinition", "Second tag", internalCallContext);
+ assertListenerStatus();
+ eventsListener.pushExpectedEvent(NextEvent.TAG_DEFINITION);
+ final TagDefinitionModelDao testTagDefinition = tagDefinitionDao.create("testTagDefinition", "Second tag", internalCallContext);
+ assertListenerStatus();
final Tag tag = new DescriptiveTag(testTagDefinition.getId(), ObjectType.ACCOUNT, accountId, clock.getUTCNow());
+ eventsListener.pushExpectedEvent(NextEvent.TAG);
tagDao.create(new TagModelDao(tag), internalCallContext);
+ assertListenerStatus();
final TagModelDao savedTag = tagDao.getById(tag.getId(), internalCallContext);
assertEquals(savedTag.getTagDefinitionId(), tag.getTagDefinitionId());
@@ -60,7 +66,9 @@ public class TestTagStore extends UtilTestSuiteWithEmbeddedDB {
final UUID accountId = UUID.randomUUID();
final ControlTag tag = new DefaultControlTag(ControlTagType.AUTO_INVOICING_OFF, ObjectType.ACCOUNT, accountId, clock.getUTCNow());
+ eventsListener.pushExpectedEvent(NextEvent.TAG);
tagDao.create(new TagModelDao(tag), internalCallContext);
+ assertListenerStatus();
final TagModelDao savedTag = tagDao.getById(tag.getId(), internalCallContext);
assertEquals(savedTag.getTagDefinitionId(), tag.getTagDefinitionId());
@@ -76,12 +84,17 @@ public class TestTagStore extends UtilTestSuiteWithEmbeddedDB {
@Test(groups = "slow")
public void testTagDefinitionDeletionForUnusedDefinition() throws TagDefinitionApiException {
final String definitionName = "TestTag1234";
+ eventsListener.pushExpectedEvent(NextEvent.TAG_DEFINITION);
tagDefinitionDao.create(definitionName, "Some test tag", internalCallContext);
+ assertListenerStatus();
TagDefinitionModelDao tagDefinition = tagDefinitionDao.getByName(definitionName, internalCallContext);
assertNotNull(tagDefinition);
+ eventsListener.pushExpectedEvent(NextEvent.TAG_DEFINITION);
tagDefinitionDao.deleteById(tagDefinition.getId(), internalCallContext);
+ assertListenerStatus();
+
tagDefinition = tagDefinitionDao.getByName(definitionName, internalCallContext);
assertNull(tagDefinition);
}
@@ -89,26 +102,28 @@ public class TestTagStore extends UtilTestSuiteWithEmbeddedDB {
@Test(groups = "slow", expectedExceptions = TagDefinitionApiException.class)
public void testTagDefinitionDeletionForDefinitionInUse() throws TagDefinitionApiException, TagApiException {
final String definitionName = "TestTag12345";
+ eventsListener.pushExpectedEvent(NextEvent.TAG_DEFINITION);
tagDefinitionDao.create(definitionName, "Some test tag", internalCallContext);
+ assertListenerStatus();
final TagDefinitionModelDao tagDefinition = tagDefinitionDao.getByName(definitionName, internalCallContext);
assertNotNull(tagDefinition);
final UUID objectId = UUID.randomUUID();
final Tag tag = new DescriptiveTag(tagDefinition.getId(), ObjectType.ACCOUNT, objectId, internalCallContext.getCreatedDate());
+ eventsListener.pushExpectedEvent(NextEvent.TAG);
tagDao.create(new TagModelDao(tag), internalCallContext);
+ assertListenerStatus();
tagDefinitionDao.deleteById(tagDefinition.getId(), internalCallContext);
}
@Test(groups = "slow")
- public void testDeleteTagBeforeDeleteTagDefinition() throws TagApiException {
+ public void testDeleteTagBeforeDeleteTagDefinition() throws TagDefinitionApiException, TagApiException {
final String definitionName = "TestTag1234567";
- try {
- tagDefinitionDao.create(definitionName, "Some test tag", internalCallContext);
- } catch (TagDefinitionApiException e) {
- fail("Could not create tag definition", e);
- }
+ eventsListener.pushExpectedEvent(NextEvent.TAG_DEFINITION);
+ tagDefinitionDao.create(definitionName, "Some test tag", internalCallContext);
+ assertListenerStatus();
final TagDefinitionModelDao tagDefinition = tagDefinitionDao.getByName(definitionName, internalCallContext);
assertNotNull(tagDefinition);
@@ -116,14 +131,17 @@ public class TestTagStore extends UtilTestSuiteWithEmbeddedDB {
final UUID objectId = UUID.randomUUID();
final Tag tag = new DescriptiveTag(tagDefinition.getId(), ObjectType.ACCOUNT, objectId, internalCallContext.getCreatedDate());
+ eventsListener.pushExpectedEvent(NextEvent.TAG);
tagDao.create(new TagModelDao(tag), internalCallContext);
+ assertListenerStatus();
+
+ eventsListener.pushExpectedEvent(NextEvent.TAG);
tagDao.deleteTag(objectId, ObjectType.ACCOUNT, tagDefinition.getId(), internalCallContext);
+ assertListenerStatus();
- try {
- tagDefinitionDao.deleteById(tagDefinition.getId(), internalCallContext);
- } catch (TagDefinitionApiException e) {
- fail("Could not delete tag definition", e);
- }
+ eventsListener.pushExpectedEvent(NextEvent.TAG_DEFINITION);
+ tagDefinitionDao.deleteById(tagDefinition.getId(), internalCallContext);
+ assertListenerStatus();
}
@Test(groups = "slow")
diff --git a/util/src/test/java/com/ning/billing/util/UtilTestSuiteWithEmbeddedDB.java b/util/src/test/java/com/ning/billing/util/UtilTestSuiteWithEmbeddedDB.java
index ee15ee9..ad1e535 100644
--- a/util/src/test/java/com/ning/billing/util/UtilTestSuiteWithEmbeddedDB.java
+++ b/util/src/test/java/com/ning/billing/util/UtilTestSuiteWithEmbeddedDB.java
@@ -19,11 +19,16 @@ package com.ning.billing.util;
import javax.inject.Inject;
import org.skife.jdbi.v2.IDBI;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.Assert;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import com.ning.billing.GuicyKillbillTestSuiteWithEmbeddedDB;
+import com.ning.billing.api.TestApiListener;
+import com.ning.billing.api.TestListenerStatus;
import com.ning.billing.bus.api.PersistentBus;
import com.ning.billing.notificationq.api.NotificationQueueService;
import com.ning.billing.util.audit.dao.AuditDao;
@@ -41,8 +46,13 @@ import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Stage;
+import static org.testng.Assert.assertTrue;
-public abstract class UtilTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteWithEmbeddedDB {
+public abstract class UtilTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteWithEmbeddedDB implements TestListenerStatus {
+
+ private static final Logger log = LoggerFactory.getLogger(UtilTestSuiteWithEmbeddedDB.class);
+
+ protected static final long DELAY = 10000;
@Inject
protected PersistentBus eventBus;
@@ -69,24 +79,62 @@ public abstract class UtilTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuite
@Inject
protected IDBI idbi;
+ protected TestApiListener eventsListener;
+
+ private boolean isListenerFailed;
+ private String listenerFailedMsg;
+
@BeforeClass(groups = "slow")
public void beforeClass() throws Exception {
final Injector g = Guice.createInjector(Stage.PRODUCTION, new TestUtilModuleWithEmbeddedDB(configSource));
g.injectMembers(this);
+
+ eventsListener = new TestApiListener(this, idbi);
}
@Override
@BeforeMethod(groups = "slow")
public void beforeMethod() throws Exception {
super.beforeMethod();
- controlCacheDispatcher.clearAll();
+
+ resetTestListenerStatus();
+ eventsListener.reset();
+
eventBus.start();
+ eventBus.register(eventsListener);
+
+ controlCacheDispatcher.clearAll();
+
+ // Make sure we start with a clean state
+ assertListenerStatus();
}
@AfterMethod(groups = "slow")
public void afterMethod() throws Exception {
+ // Make sure we finish in a clean state
+ assertListenerStatus();
+
+ eventBus.unregister(eventsListener);
eventBus.stop();
}
+ @Override
+ public void failed(final String msg) {
+ isListenerFailed = true;
+ listenerFailedMsg = msg;
+ }
+ @Override
+ public void resetTestListenerStatus() {
+ isListenerFailed = false;
+ listenerFailedMsg = null;
+ }
+
+ protected void assertListenerStatus() {
+ assertTrue(eventsListener.isCompleted(DELAY));
+ if (isListenerFailed) {
+ log.error(listenerFailedMsg);
+ Assert.fail(listenerFailedMsg);
+ }
+ }
}