killbill-memoizeit

Changes

Details

diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/EntitlementTestSuiteNoDB.java b/entitlement/src/test/java/com/ning/billing/entitlement/EntitlementTestSuiteNoDB.java
index d36b083..2348176 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/EntitlementTestSuiteNoDB.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/EntitlementTestSuiteNoDB.java
@@ -39,7 +39,7 @@ import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.entitlement.api.user.TestEntitlementHelper;
 import com.ning.billing.entitlement.engine.dao.EntitlementDao;
 import com.ning.billing.entitlement.engine.dao.MockEntitlementDaoMemory;
-import com.ning.billing.entitlement.glue.TestEngineModuleMemory;
+import com.ning.billing.entitlement.glue.TestEngineModuleNoDB;
 import com.ning.billing.util.clock.ClockMock;
 import com.ning.billing.util.config.EntitlementConfig;
 import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
@@ -95,7 +95,7 @@ public class EntitlementTestSuiteNoDB extends GuicyKillbillTestSuiteNoDB {
     @BeforeClass(groups = "fast")
     public void setup() throws Exception {
         DefaultEntitlementTestInitializer.loadSystemPropertiesFromClasspath("/entitlement.properties");
-        final Injector g = Guice.createInjector(Stage.PRODUCTION, new TestEngineModuleMemory());
+        final Injector g = Guice.createInjector(Stage.PRODUCTION, new TestEngineModuleNoDB());
         g.injectMembers(this);
     }
 
diff --git a/entitlement/src/test/java/com/ning/billing/entitlement/EntitlementTestSuiteWithEmbeddedDB.java b/entitlement/src/test/java/com/ning/billing/entitlement/EntitlementTestSuiteWithEmbeddedDB.java
index 5d49fdf..a301ed3 100644
--- a/entitlement/src/test/java/com/ning/billing/entitlement/EntitlementTestSuiteWithEmbeddedDB.java
+++ b/entitlement/src/test/java/com/ning/billing/entitlement/EntitlementTestSuiteWithEmbeddedDB.java
@@ -38,7 +38,7 @@ import com.ning.billing.entitlement.api.user.EntitlementUserApi;
 import com.ning.billing.entitlement.api.user.SubscriptionBundle;
 import com.ning.billing.entitlement.api.user.TestEntitlementHelper;
 import com.ning.billing.entitlement.engine.dao.EntitlementDao;
-import com.ning.billing.entitlement.glue.TestEngineModuleSql;
+import com.ning.billing.entitlement.glue.TestEngineModuleWithEmbeddedDB;
 import com.ning.billing.util.clock.ClockMock;
 import com.ning.billing.util.config.EntitlementConfig;
 import com.ning.billing.util.svcapi.entitlement.EntitlementInternalApi;
@@ -94,7 +94,7 @@ public class EntitlementTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteWi
     @BeforeClass(groups = "slow")
     public void setup() throws Exception {
         DefaultEntitlementTestInitializer.loadSystemPropertiesFromClasspath("/entitlement.properties");
-        final Injector g = Guice.createInjector(Stage.PRODUCTION, new TestEngineModuleSql());
+        final Injector g = Guice.createInjector(Stage.PRODUCTION, new TestEngineModuleWithEmbeddedDB());
         g.injectMembers(this);
     }
 
diff --git a/util/src/test/java/com/ning/billing/api/TestApiListener.java b/util/src/test/java/com/ning/billing/api/TestApiListener.java
index 6979bc8..c18bceb 100644
--- a/util/src/test/java/com/ning/billing/api/TestApiListener.java
+++ b/util/src/test/java/com/ning/billing/api/TestApiListener.java
@@ -32,6 +32,8 @@ import com.ning.billing.util.events.InvoiceCreationInternalEvent;
 import com.ning.billing.util.events.PaymentErrorInternalEvent;
 import com.ning.billing.util.events.PaymentInfoInternalEvent;
 import com.ning.billing.util.events.RepairEntitlementInternalEvent;
+import com.ning.billing.util.events.TagDefinitionInternalEvent;
+import com.ning.billing.util.events.TagInternalEvent;
 
 import com.google.common.base.Joiner;
 import com.google.common.eventbus.Subscribe;
@@ -72,7 +74,9 @@ public class TestApiListener {
         INVOICE_ADJUSTMENT,
         PAYMENT,
         PAYMENT_ERROR,
-        REPAIR_BUNDLE
+        REPAIR_BUNDLE,
+        TAG,
+        TAG_DEFINITION
     }
 
     public void setNonExpectedMode() {
@@ -134,6 +138,20 @@ public class TestApiListener {
     }
 
     @Subscribe
+    public synchronized void processTagEvent(final TagInternalEvent event) {
+        log.info(String.format("Got TagInternalEvent event %s", event.toString()));
+        assertEqualsNicely(NextEvent.TAG);
+        notifyIfStackEmpty();
+    }
+
+    @Subscribe
+    public synchronized void processTagDefinitonEvent(final TagDefinitionInternalEvent event) {
+        log.info(String.format("Got TagDefinitionInternalEvent event %s", event.toString()));
+        assertEqualsNicely(NextEvent.TAG_DEFINITION);
+        notifyIfStackEmpty();
+    }
+
+    @Subscribe
     public void handleInvoiceEvents(final InvoiceCreationInternalEvent event) {
         log.info(String.format("Got Invoice event %s", event.toString()));
         assertEqualsNicely(NextEvent.INVOICE);
diff --git a/util/src/test/java/com/ning/billing/GuicyKillbillTestSuiteWithEmbeddedDB.java b/util/src/test/java/com/ning/billing/GuicyKillbillTestSuiteWithEmbeddedDB.java
index c171dcf..8ec407e 100644
--- a/util/src/test/java/com/ning/billing/GuicyKillbillTestSuiteWithEmbeddedDB.java
+++ b/util/src/test/java/com/ning/billing/GuicyKillbillTestSuiteWithEmbeddedDB.java
@@ -38,7 +38,7 @@ public class GuicyKillbillTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuite
     private static final Logger log = LoggerFactory.getLogger(KillbillTestSuiteWithEmbeddedDB.class);
 
     @Inject
-    private DBTestingHelper helper;
+    protected DBTestingHelper helper;
 
     public DBTestingHelper getDBTestingHelper() {
         return GuicyKillbillTestWithEmbeddedDBModule.getDBTestingHelper();
diff --git a/util/src/test/java/com/ning/billing/util/audit/api/TestDefaultAuditUserApi.java b/util/src/test/java/com/ning/billing/util/audit/api/TestDefaultAuditUserApi.java
index 32912cf..955653f 100644
--- a/util/src/test/java/com/ning/billing/util/audit/api/TestDefaultAuditUserApi.java
+++ b/util/src/test/java/com/ning/billing/util/audit/api/TestDefaultAuditUserApi.java
@@ -23,6 +23,7 @@ import java.util.UUID;
 
 import org.mockito.Mockito;
 import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
 
@@ -51,23 +52,24 @@ import com.google.common.collect.ImmutableList;
 
 public class TestDefaultAuditUserApi extends AuditLogsTestBase {
 
-    private final List<AuditLog> auditLogs = ImmutableList.<AuditLog>of(createAuditLog(), createAuditLog(), createAuditLog(), createAuditLog());
-    private final List<UUID> objectIds = ImmutableList.<UUID>of(UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID());
+    private List<AuditLog> auditLogs;
+    private List<UUID> objectIds;
 
-    private AuditUserApi auditUserApi;
 
-    @BeforeTest(groups = "fast")
-    public void setupAuditLogs() throws Exception {
-        final MockAuditDao auditDao = new MockAuditDao();
+    @Override
+    @BeforeClass(groups = "fast")
+    public void setup() throws Exception {
+        super.setup();
+        auditLogs = ImmutableList.<AuditLog>of(createAuditLog(), createAuditLog(), createAuditLog(), createAuditLog());
+        objectIds = ImmutableList.<UUID>of(UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID());
+        super.setup();
         for (final TableName tableName : TableName.values()) {
             for (final UUID objectId : objectIds) {
                 for (final AuditLog auditLog : auditLogs) {
-                    auditDao.addAuditLogForId(tableName, objectId, auditLog);
+                    ((MockAuditDao) auditDao).addAuditLogForId(tableName, objectId, auditLog);
                 }
             }
         }
-
-        auditUserApi = new DefaultAuditUserApi(auditDao, null, Mockito.mock(InternalCallContextFactory.class));
     }
 
     @Test(groups = "fast")
diff --git a/util/src/test/java/com/ning/billing/util/audit/AuditLogsTestBase.java b/util/src/test/java/com/ning/billing/util/audit/AuditLogsTestBase.java
index 715b240..4260c01 100644
--- a/util/src/test/java/com/ning/billing/util/audit/AuditLogsTestBase.java
+++ b/util/src/test/java/com/ning/billing/util/audit/AuditLogsTestBase.java
@@ -21,16 +21,12 @@ import java.util.UUID;
 
 import org.mockito.Mockito;
 
-import com.ning.billing.util.UtilTestSuite;
-import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.clock.ClockMock;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 
-public abstract class AuditLogsTestBase extends UtilTestSuite {
-
-    private final Clock clock = new ClockMock();
+public abstract class AuditLogsTestBase extends UtilTestSuiteNoDB {
 
     protected ImmutableMap<UUID, List<AuditLog>> createAuditLogsAssociation() {
         final UUID id1 = UUID.randomUUID();
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 d1b419d..111d8fe 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
@@ -16,85 +16,36 @@
 
 package com.ning.billing.util.audit.dao;
 
-import java.io.IOException;
 import java.util.List;
 import java.util.UUID;
 
 import org.skife.jdbi.v2.Handle;
-import org.skife.jdbi.v2.IDBI;
 import org.testng.Assert;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
 import com.ning.billing.ObjectType;
-import com.ning.billing.mock.glue.MockDbHelperModule;
-import com.ning.billing.mock.glue.MockEntitlementModule;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.api.AuditLevel;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.api.TagDefinitionApiException;
 import com.ning.billing.util.audit.AuditLog;
 import com.ning.billing.util.audit.ChangeType;
-import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.dao.NonEntityDao;
 import com.ning.billing.util.dao.TableName;
-import com.ning.billing.util.glue.AuditModule;
-import com.ning.billing.util.glue.BusModule;
-import com.ning.billing.util.glue.CacheModule;
-import com.ning.billing.util.glue.ClockModule;
-import com.ning.billing.util.glue.NonEntityDaoModule;
-import com.ning.billing.util.glue.TagStoreModule;
-import com.ning.billing.util.svcsapi.bus.InternalBus;
 import com.ning.billing.util.tag.DescriptiveTag;
 import com.ning.billing.util.tag.Tag;
-import com.ning.billing.util.tag.dao.DefaultTagDao;
-import com.ning.billing.util.tag.dao.TagDefinitionDao;
 import com.ning.billing.util.tag.dao.TagDefinitionModelDao;
 import com.ning.billing.util.tag.dao.TagModelDao;
 
-import com.google.inject.Inject;
-
-@Guice(modules = {TagStoreModule.class, CacheModule.class, AuditModule.class, MockEntitlementModule.class, ClockModule.class, BusModule.class, MockDbHelperModule.class, NonEntityDaoModule.class})
 public class TestDefaultAuditDao extends UtilTestSuiteWithEmbeddedDB {
 
-    @Inject
-    private TagDefinitionDao tagDefinitionDao;
-
-    @Inject
-    private DefaultTagDao tagDao;
-
-    @Inject
-    private AuditDao auditDao;
-
-    @Inject
-    private Clock clock;
-
-    @Inject
-    private InternalBus bus;
-
-    @Inject
-    private IDBI dbi;
-
     private UUID tagId;
 
-    @BeforeClass(groups = "slow")
-    public void setup() throws IOException {
-        bus.start();
-    }
-
-    @AfterClass(groups = "slow")
-    public void tearDown() {
-        bus.stop();
-    }
-
     @Test(groups = "slow")
     public void testRetrieveAuditsDirectly() throws Exception {
         addTag();
 
         // Verify we get an audit entry for the tag_history table
-        final Handle handle = dbi.open();
+        final Handle handle = getDBI().open();
         final String tagHistoryString = (String) handle.select("select id from tag_history limit 1").get(0).get("id");
         handle.close();
 
diff --git a/util/src/test/java/com/ning/billing/util/audit/TestDefaultAuditLog.java b/util/src/test/java/com/ning/billing/util/audit/TestDefaultAuditLog.java
index db78585..9f77e13 100644
--- a/util/src/test/java/com/ning/billing/util/audit/TestDefaultAuditLog.java
+++ b/util/src/test/java/com/ning/billing/util/audit/TestDefaultAuditLog.java
@@ -21,7 +21,7 @@ import java.util.UUID;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 import com.ning.billing.util.callcontext.CallContext;
 import com.ning.billing.util.callcontext.CallOrigin;
 import com.ning.billing.util.callcontext.DefaultCallContext;
@@ -30,7 +30,7 @@ import com.ning.billing.util.clock.ClockMock;
 import com.ning.billing.util.dao.EntityAudit;
 import com.ning.billing.util.dao.TableName;
 
-public class TestDefaultAuditLog extends UtilTestSuite {
+public class TestDefaultAuditLog extends UtilTestSuiteNoDB {
 
     @Test(groups = "fast")
     public void testGetters() throws Exception {
diff --git a/util/src/test/java/com/ning/billing/util/bus/TestEventBus.java b/util/src/test/java/com/ning/billing/util/bus/TestEventBus.java
index b93b0b8..79533d8 100644
--- a/util/src/test/java/com/ning/billing/util/bus/TestEventBus.java
+++ b/util/src/test/java/com/ning/billing/util/bus/TestEventBus.java
@@ -19,20 +19,26 @@ package com.ning.billing.util.bus;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-public class TestEventBus extends TestEventBusBase {
-    @BeforeClass(groups = "slow")
+import com.ning.billing.util.UtilTestSuiteNoDB;
+
+public class TestEventBus extends UtilTestSuiteNoDB {
+
+    private TestEventBusBase testEventBusBase;
+
+    @Override
+    @BeforeClass(groups = "fast")
     public void setup() throws Exception {
-        eventBus = new InMemoryInternalBus();
         super.setup();
+        testEventBusBase = new TestEventBusBase(eventBus, internalCallContext);
     }
 
-    @Test(groups = "slow")
+    @Test(groups = "fast")
     public void testSimple() {
-        super.testSimple();
+        testEventBusBase.testSimple();
     }
 
-    @Test(groups = "slow")
+    @Test(groups = "fast")
     public void testDifferentType() {
-        super.testDifferentType();
+        testEventBusBase.testDifferentType();
     }
 }
diff --git a/util/src/test/java/com/ning/billing/util/bus/TestEventBusBase.java b/util/src/test/java/com/ning/billing/util/bus/TestEventBusBase.java
index a6188de..b25ebbc 100644
--- a/util/src/test/java/com/ning/billing/util/bus/TestEventBusBase.java
+++ b/util/src/test/java/com/ning/billing/util/bus/TestEventBusBase.java
@@ -25,6 +25,7 @@ import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
+import com.ning.billing.util.callcontext.InternalCallContext;
 import com.ning.billing.util.events.BusInternalEvent;
 import com.ning.billing.util.events.BusInternalEvent.BusInternalEventType;
 import com.ning.billing.util.events.DefaultBusInternalEvent;
@@ -36,20 +37,16 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.google.common.eventbus.Subscribe;
 import com.google.inject.Inject;
 
-public abstract class TestEventBusBase extends UtilTestSuiteWithEmbeddedDB {
-    protected static final Logger log = LoggerFactory.getLogger(TestEventBusBase.class);
+public class TestEventBusBase {
 
-    @Inject
-    protected InternalBus eventBus;
+    protected static final Logger log = LoggerFactory.getLogger(TestEventBusBase.class);
 
-    @BeforeClass(groups = "slow")
-    public void setup() throws Exception {
-        eventBus.start();
-    }
+    private final InternalBus eventBus;
+    private final InternalCallContext internalCallContext;
 
-    @AfterClass(groups = "slow")
-    public void tearDown() {
-        eventBus.stop();
+    public TestEventBusBase(final InternalBus eventBus, final InternalCallContext internalCallContext) {
+        this.eventBus = eventBus;
+        this.internalCallContext = internalCallContext;
     }
 
     public static class MyEvent extends DefaultBusInternalEvent implements BusInternalEvent {
diff --git a/util/src/test/java/com/ning/billing/util/bus/TestPersistentEventBus.java b/util/src/test/java/com/ning/billing/util/bus/TestPersistentEventBus.java
index abd8339..6e339f5 100644
--- a/util/src/test/java/com/ning/billing/util/bus/TestPersistentEventBus.java
+++ b/util/src/test/java/com/ning/billing/util/bus/TestPersistentEventBus.java
@@ -16,59 +16,31 @@
 
 package com.ning.billing.util.bus;
 
-import org.skife.config.ConfigurationObjectFactory;
-import org.skife.jdbi.v2.IDBI;
-import org.testng.annotations.Guice;
+import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
-import com.ning.billing.dbi.DBIProvider;
-import com.ning.billing.dbi.DBTestingHelper;
-import com.ning.billing.dbi.DbiConfig;
-import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.clock.ClockMock;
-import com.ning.billing.util.glue.BusModule;
-import com.ning.billing.util.glue.BusModule.BusType;
-import com.ning.billing.util.glue.CacheModule;
-import com.ning.billing.util.glue.NonEntityDaoModule;
+import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 
-import com.google.inject.AbstractModule;
+public class TestPersistentEventBus extends UtilTestSuiteWithEmbeddedDB {
 
-@Guice(modules = TestPersistentEventBus.PersistentBusModuleTest.class)
-public class TestPersistentEventBus extends TestEventBusBase {
 
-    public static class PersistentBusModuleTest extends AbstractModule {
+    private TestEventBusBase testEventBusBase;
 
-        @Override
-        protected void configure() {
-            //System.setProperty("com.ning.billing.dbi.test.useLocalDb", "true");
-
-            bind(Clock.class).to(ClockMock.class).asEagerSingleton();
-            bind(ClockMock.class).asEagerSingleton();
-
-            final DBTestingHelper helper = KillbillTestSuiteWithEmbeddedDB.getDBTestingHelper();
-            if (helper.isUsingLocalInstance()) {
-                bind(IDBI.class).toProvider(DBIProvider.class).asEagerSingleton();
-                final DbiConfig config = new ConfigurationObjectFactory(System.getProperties()).build(DbiConfig.class);
-                bind(DbiConfig.class).toInstance(config);
-            } else {
-                final IDBI dbi = helper.getDBI();
-                bind(IDBI.class).toInstance(dbi);
-            }
-            install(new BusModule(BusType.PERSISTENT));
-            install(new NonEntityDaoModule());
-            install(new CacheModule());
-        }
+    @Override
+    @BeforeClass(groups = "slow")
+    public void setup() throws Exception {
+        super.setup();
+        testEventBusBase = new TestEventBusBase(eventBus, internalCallContext);
     }
 
     @Test(groups = "slow")
     public void testSimple() {
-        super.testSimple();
+        testEventBusBase.testSimple();
     }
 
     // Until Guava fixes exception handling, r13?
     @Test(groups = "slow", enabled = false)
     public void testSimpleWithException() {
-        super.testSimpleWithException();
+        testEventBusBase.testSimpleWithException();
     }
 }
diff --git a/util/src/test/java/com/ning/billing/util/cache/TestCache.java b/util/src/test/java/com/ning/billing/util/cache/TestCache.java
index 1fcbf39..1c4c113 100644
--- a/util/src/test/java/com/ning/billing/util/cache/TestCache.java
+++ b/util/src/test/java/com/ning/billing/util/cache/TestCache.java
@@ -39,15 +39,8 @@ import com.ning.billing.util.glue.NonEntityDaoModule;
 import com.ning.billing.util.tag.dao.TagModelDao;
 import com.ning.billing.util.tag.dao.TagSqlDao;
 
-@Guice(modules = {ClockModule.class, CacheModule.class, MockDbHelperModule.class, NonEntityDaoModule.class } )
 public class TestCache extends UtilTestSuiteWithEmbeddedDB {
 
-    @Inject
-    private CacheControllerDispatcher controlCacheDispatcher;
-
-    @Inject
-    private NonEntityDao nonEntityDao;
-
     private  EntitySqlDaoTransactionalJdbiWrapper transactionalSqlDao;
 
 
diff --git a/util/src/test/java/com/ning/billing/util/callcontext/TestDefaultCallContext.java b/util/src/test/java/com/ning/billing/util/callcontext/TestDefaultCallContext.java
index 860d537..823174f 100644
--- a/util/src/test/java/com/ning/billing/util/callcontext/TestDefaultCallContext.java
+++ b/util/src/test/java/com/ning/billing/util/callcontext/TestDefaultCallContext.java
@@ -22,13 +22,9 @@ import org.joda.time.DateTime;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import com.ning.billing.util.UtilTestSuite;
-import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.clock.ClockMock;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 
-public class TestDefaultCallContext extends UtilTestSuite {
-
-    private final Clock clock = new ClockMock();
+public class TestDefaultCallContext extends UtilTestSuiteNoDB {
 
     @Test(groups = "fast")
     public void testGetters() throws Exception {
diff --git a/util/src/test/java/com/ning/billing/util/callcontext/TestInternalCallContextFactory.java b/util/src/test/java/com/ning/billing/util/callcontext/TestInternalCallContextFactory.java
index b3d9e4e..be0a173 100644
--- a/util/src/test/java/com/ning/billing/util/callcontext/TestInternalCallContextFactory.java
+++ b/util/src/test/java/com/ning/billing/util/callcontext/TestInternalCallContextFactory.java
@@ -34,16 +34,6 @@ import com.ning.billing.util.dao.NonEntityDao;
 
 public class TestInternalCallContextFactory extends UtilTestSuiteWithEmbeddedDB {
 
-    private InternalCallContextFactory internalCallContextFactory;
-    private CacheControllerDispatcher cacheControllerDispatcher;
-    private NonEntityDao nonEntityDao;
-
-    @BeforeMethod(groups = "slow")
-    public void setUp() throws Exception {
-        cacheControllerDispatcher =  new CacheControllerDispatcher();
-        nonEntityDao = new DefaultNonEntityDao(getDBI());
-        internalCallContextFactory = new InternalCallContextFactory(new ClockMock(), nonEntityDao, cacheControllerDispatcher);
-    }
 
     @Test(groups = "slow")
     public void testCreateInternalCallContextWithAccountRecordIdFromSimpleObjectType() throws Exception {
diff --git a/util/src/test/java/com/ning/billing/util/config/TestXMLLoader.java b/util/src/test/java/com/ning/billing/util/config/TestXMLLoader.java
index 0fe408b..70ea5e0 100644
--- a/util/src/test/java/com/ning/billing/util/config/TestXMLLoader.java
+++ b/util/src/test/java/com/ning/billing/util/config/TestXMLLoader.java
@@ -29,14 +29,14 @@ import org.testng.annotations.Test;
 import org.xml.sax.SAXException;
 
 import com.ning.billing.catalog.api.InvalidConfigException;
-import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 import com.ning.billing.util.config.catalog.ValidationException;
 import com.ning.billing.util.config.catalog.XMLLoader;
 
 import static org.testng.Assert.assertEquals;
 
 
-public class TestXMLLoader extends UtilTestSuite {
+public class TestXMLLoader extends UtilTestSuiteNoDB {
     public static final String TEST_XML =
             "<xmlTestClass>" +
                     "	<foo>foo</foo>" +
diff --git a/util/src/test/java/com/ning/billing/util/config/TestXMLSchemaGenerator.java b/util/src/test/java/com/ning/billing/util/config/TestXMLSchemaGenerator.java
index cf6db03..76033bd 100644
--- a/util/src/test/java/com/ning/billing/util/config/TestXMLSchemaGenerator.java
+++ b/util/src/test/java/com/ning/billing/util/config/TestXMLSchemaGenerator.java
@@ -24,11 +24,12 @@ import javax.xml.transform.TransformerException;
 
 import org.testng.annotations.Test;
 
-import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 import com.ning.billing.util.config.catalog.XMLSchemaGenerator;
 import com.ning.billing.util.io.IOUtils;
 
-public class TestXMLSchemaGenerator extends UtilTestSuite {
+public class TestXMLSchemaGenerator extends UtilTestSuiteNoDB {
+
     @Test(groups = "fast", enabled = false)
     public void test() throws IOException, TransformerException, JAXBException {
         final InputStream stream = XMLSchemaGenerator.xmlSchema(XmlTestClass.class);
diff --git a/util/src/test/java/com/ning/billing/util/config/TestXMLWriter.java b/util/src/test/java/com/ning/billing/util/config/TestXMLWriter.java
index 2864af7..e9e287a 100644
--- a/util/src/test/java/com/ning/billing/util/config/TestXMLWriter.java
+++ b/util/src/test/java/com/ning/billing/util/config/TestXMLWriter.java
@@ -22,20 +22,21 @@ import java.net.URI;
 
 import org.testng.annotations.Test;
 
-import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 import com.ning.billing.util.config.catalog.XMLLoader;
 import com.ning.billing.util.config.catalog.XMLWriter;
 
 import static org.testng.Assert.assertEquals;
 
-public class TestXMLWriter extends UtilTestSuite {
+public class TestXMLWriter extends UtilTestSuiteNoDB {
+
     public static final String TEST_XML =
             "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>" +
-                    "<xmlTestClass>" +
-                    "<foo>foo</foo>" +
-                    "<bar>1.0</bar>" +
-                    "<lala>42</lala>" +
-                    "</xmlTestClass>";
+            "<xmlTestClass>" +
+            "<foo>foo</foo>" +
+            "<bar>1.0</bar>" +
+            "<lala>42</lala>" +
+            "</xmlTestClass>";
 
     @Test(groups = "fast")
     public void test() throws Exception {
diff --git a/util/src/test/java/com/ning/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java b/util/src/test/java/com/ning/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
index bff019c..c5522ad 100644
--- a/util/src/test/java/com/ning/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
+++ b/util/src/test/java/com/ning/billing/util/customfield/api/TestDefaultCustomFieldUserApi.java
@@ -24,36 +24,17 @@ import java.util.UUID;
 import org.skife.jdbi.v2.Handle;
 import org.skife.jdbi.v2.tweak.HandleCallback;
 import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import com.ning.billing.ObjectType;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
-import com.ning.billing.util.cache.CacheControllerDispatcher;
-import com.ning.billing.util.callcontext.InternalCallContextFactory;
-import com.ning.billing.util.clock.ClockMock;
 import com.ning.billing.util.customfield.CustomField;
 import com.ning.billing.util.customfield.StringCustomField;
-import com.ning.billing.util.customfield.dao.DefaultCustomFieldDao;
-import com.ning.billing.util.customfield.dao.CustomFieldDao;
-import com.ning.billing.util.dao.DefaultNonEntityDao;
-import com.ning.billing.util.dao.NonEntityDao;
 
 import com.google.common.collect.ImmutableList;
 
 public class TestDefaultCustomFieldUserApi extends UtilTestSuiteWithEmbeddedDB {
 
-    private DefaultCustomFieldUserApi customFieldUserApi;
-
-    private CacheControllerDispatcher controllerDispatcher = new CacheControllerDispatcher();
-
-    @BeforeMethod(groups = "slow")
-    public void setUp() throws Exception {
-        final NonEntityDao nonEntityDao = new DefaultNonEntityDao(getDBI());
-        final InternalCallContextFactory internalCallContextFactory = new InternalCallContextFactory(new ClockMock(), nonEntityDao, controllerDispatcher);
-        final CustomFieldDao customFieldDao = new DefaultCustomFieldDao(getDBI(), clock, controllerDispatcher, nonEntityDao);
-        customFieldUserApi = new DefaultCustomFieldUserApi(internalCallContextFactory, customFieldDao);
-    }
 
     @Test(groups = "slow")
     public void testSaveCustomFieldWithAccountRecordId() throws Exception {
@@ -65,7 +46,7 @@ public class TestDefaultCustomFieldUserApi extends UtilTestSuiteWithEmbeddedDB {
             public Void withHandle(final Handle handle) throws Exception {
                 // Note: we always create an accounts table, see MysqlTestingHelper
                 handle.execute("insert into accounts (record_id, id, email, name, first_name_length, is_notified_for_invoices, created_date, created_by, updated_date, updated_by) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
-                        accountRecordId, accountId.toString(), "yo@t.com", "toto", 4, false, new Date(), "i", new Date(), "j");
+                               accountRecordId, accountId.toString(), "yo@t.com", "toto", 4, false, new Date(), "i", new Date(), "j");
 
                 return null;
             }
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 6d0a494..f75ddae 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
@@ -16,46 +16,17 @@
 
 package com.ning.billing.util.customfield;
 
-import java.io.IOException;
 import java.util.UUID;
 
-import org.skife.jdbi.v2.IDBI;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
 import com.ning.billing.ObjectType;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.api.CustomFieldApiException;
-import com.ning.billing.util.cache.CacheControllerDispatcher;
-import com.ning.billing.util.customfield.dao.CustomFieldDao;
 import com.ning.billing.util.customfield.dao.CustomFieldModelDao;
-import com.ning.billing.util.customfield.dao.DefaultCustomFieldDao;
-import com.ning.billing.util.dao.DefaultNonEntityDao;
-import com.ning.billing.util.dao.NonEntityDao;
-
-import static org.testng.Assert.fail;
 
 public class TestFieldStore extends UtilTestSuiteWithEmbeddedDB {
 
-    private final Logger log = LoggerFactory.getLogger(TestFieldStore.class);
-    private CustomFieldDao customFieldDao;
-
-    private CacheControllerDispatcher controllerDispatcher = new CacheControllerDispatcher();
-
-    @BeforeClass(groups = "slow")
-    protected void setup() throws IOException {
-        try {
-            final IDBI dbi = getDBI();
-            final NonEntityDao nonEntityDao = new DefaultNonEntityDao(dbi);
-            customFieldDao = new DefaultCustomFieldDao(dbi, clock, controllerDispatcher, nonEntityDao);
-        } catch (Throwable t) {
-            log.error("Setup failed", t);
-            fail(t.toString());
-        }
-    }
-
     @Test(groups = "slow")
     public void testCreateCustomField() throws CustomFieldApiException {
         final UUID id = UUID.randomUUID();
diff --git a/util/src/test/java/com/ning/billing/util/dao/TestNonEntityDao.java b/util/src/test/java/com/ning/billing/util/dao/TestNonEntityDao.java
index 5090226..153968f 100644
--- a/util/src/test/java/com/ning/billing/util/dao/TestNonEntityDao.java
+++ b/util/src/test/java/com/ning/billing/util/dao/TestNonEntityDao.java
@@ -22,7 +22,6 @@ import java.util.UUID;
 import org.skife.jdbi.v2.Handle;
 import org.skife.jdbi.v2.tweak.HandleCallback;
 import org.testng.Assert;
-import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
 import com.ning.billing.ObjectType;
@@ -30,7 +29,6 @@ import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 
 public class TestNonEntityDao extends UtilTestSuiteWithEmbeddedDB {
 
-
     final Long tenantRecordId = 123123123L;
     final UUID tenantId = UUID.fromString("121c59d4-0458-4038-a683-698c9a121c12");
 
@@ -48,14 +46,6 @@ public class TestNonEntityDao extends UtilTestSuiteWithEmbeddedDB {
     final Long tagRecordId = 55555555L;
 
 
-    private NonEntityDao nonEntityDao;
-
-    @BeforeClass(groups = "slow")
-    public void setup() {
-        nonEntityDao = new DefaultNonEntityDao(getDBI());
-    }
-
-
     @Test(groups = "slow")
     public void testRetrieveRecordIdFromObject() {
 
@@ -99,7 +89,7 @@ public class TestNonEntityDao extends UtilTestSuiteWithEmbeddedDB {
 
         insertAccount();
 
-        final Long resultTenantRecordId = nonEntityDao.retrieveTenantRecordIdFromObject(accountId, ObjectType.ACCOUNT,null);
+        final Long resultTenantRecordId = nonEntityDao.retrieveTenantRecordIdFromObject(accountId, ObjectType.ACCOUNT, null);
         Assert.assertEquals(resultTenantRecordId, tenantRecordId);
     }
 
@@ -111,18 +101,6 @@ public class TestNonEntityDao extends UtilTestSuiteWithEmbeddedDB {
         final Long resultTenantRecordId = nonEntityDao.retrieveTenantRecordIdFromObject(tenantId, ObjectType.TENANT, null);
         Assert.assertEquals(resultTenantRecordId, tenantRecordId);
     }
-
-    /*
-    @Test(groups = "slow")
-    public void testRetrieveTenantRecordIdFromTenantObject() {
-
-        insertTenant();
-
-        final Long resultTenantRecordId = nonEntityDao.retrieveLastHistoryRecordIdFromTransaction();
-        Assert.assertEquals(resultTenantRecordId, tenantRecordId);
-    }
-*/
-
     private void insertAccount() {
         getDBI().withHandle(new HandleCallback<Void>() {
             @Override
@@ -178,7 +156,7 @@ public class TestNonEntityDao extends UtilTestSuiteWithEmbeddedDB {
             public Void withHandle(final Handle handle) throws Exception {
                 // Note: we always create an accounts table, see MysqlTestingHelper
                 handle.execute("insert into tenants (record_id, id, external_key, api_key, api_secret, api_salt, created_date, created_by, updated_date, updated_by) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
-                               tenantRecordId, tenantId.toString(), "foo",  "key", "secret", "salt", new Date(), "i", new Date(), "j");
+                               tenantRecordId, tenantId.toString(), "foo", "key", "secret", "salt", new Date(), "i", new Date(), "j");
                 return null;
             }
         });
diff --git a/util/src/test/java/com/ning/billing/util/dao/TestStringTemplateInheritance.java b/util/src/test/java/com/ning/billing/util/dao/TestStringTemplateInheritance.java
index 5513d73..17399c3 100644
--- a/util/src/test/java/com/ning/billing/util/dao/TestStringTemplateInheritance.java
+++ b/util/src/test/java/com/ning/billing/util/dao/TestStringTemplateInheritance.java
@@ -25,23 +25,27 @@ import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 
 import com.google.common.collect.ImmutableMap;
 
-public class TestStringTemplateInheritance extends UtilTestSuite {
+public class TestStringTemplateInheritance extends UtilTestSuiteNoDB {
 
     InputStream entityStream;
     InputStream kombuchaStream;
 
+    @Override
     @BeforeMethod(groups = "fast")
-    public void setUp() throws Exception {
+    public void setupTest() throws Exception {
+        super.setupTest();
         entityStream = this.getClass().getResourceAsStream("/com/ning/billing/util/entity/dao/EntitySqlDao.sql.stg");
         kombuchaStream = this.getClass().getResourceAsStream("/com/ning/billing/util/dao/Kombucha.sql.stg");
     }
 
+    @Override
     @AfterMethod(groups = "fast")
-    public void tearDown() throws Exception {
+    public void cleanupTest() throws Exception {
+        super.cleanupTest();
         if (entityStream != null) {
             entityStream.close();
         }
diff --git a/util/src/test/java/com/ning/billing/util/dao/TestStringTemplateInheritanceWithJdbi.java b/util/src/test/java/com/ning/billing/util/dao/TestStringTemplateInheritanceWithJdbi.java
index 7f0b6a6..ef86f5b 100644
--- a/util/src/test/java/com/ning/billing/util/dao/TestStringTemplateInheritanceWithJdbi.java
+++ b/util/src/test/java/com/ning/billing/util/dao/TestStringTemplateInheritanceWithJdbi.java
@@ -20,17 +20,14 @@ import org.skife.jdbi.v2.sqlobject.SqlQuery;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
-import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.clock.ClockMock;
+import com.ning.billing.GuicyKillbillTestSuiteWithEmbeddedDB;
+import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.entity.Entity;
 import com.ning.billing.util.entity.dao.EntityModelDao;
 import com.ning.billing.util.entity.dao.EntitySqlDao;
 import com.ning.billing.util.entity.dao.EntitySqlDaoStringTemplate;
 
-public class TestStringTemplateInheritanceWithJdbi extends KillbillTestSuiteWithEmbeddedDB {
-
-    private final Clock clock = new ClockMock();
+public class TestStringTemplateInheritanceWithJdbi extends UtilTestSuiteWithEmbeddedDB {
 
     private static interface Kombucha extends Entity {}
 
diff --git a/util/src/test/java/com/ning/billing/util/email/DefaultCatalogTranslationTest.java b/util/src/test/java/com/ning/billing/util/email/DefaultCatalogTranslationTest.java
index d48cc32..a5e0d08 100644
--- a/util/src/test/java/com/ning/billing/util/email/DefaultCatalogTranslationTest.java
+++ b/util/src/test/java/com/ning/billing/util/email/DefaultCatalogTranslationTest.java
@@ -22,7 +22,7 @@ import org.skife.config.ConfigurationObjectFactory;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 import com.ning.billing.util.template.translation.DefaultCatalogTranslator;
 import com.ning.billing.util.template.translation.Translator;
 import com.ning.billing.util.template.translation.TranslatorConfig;
@@ -31,11 +31,14 @@ import com.google.common.collect.ImmutableMap;
 
 import static org.testng.Assert.assertEquals;
 
-public class DefaultCatalogTranslationTest extends UtilTestSuite {
+public class DefaultCatalogTranslationTest extends UtilTestSuiteNoDB {
+
     private Translator translation;
 
+    @Override
     @BeforeClass(groups = "fast")
-    public void setup() {
+    public void setup() throws Exception {
+        super.setup();
         final ConfigSource configSource = new ConfigSource() {
             private final Map<String, String> properties = ImmutableMap.<String, String>of("killbill.template.invoiceFormatterFactoryClass",
                                                                                            "com.ning.billing.mock.MockInvoiceFormatterFactory");
diff --git a/util/src/test/java/com/ning/billing/util/email/EmailSenderTest.java b/util/src/test/java/com/ning/billing/util/email/EmailSenderTest.java
index 0fb604f..367ffd1 100644
--- a/util/src/test/java/com/ning/billing/util/email/EmailSenderTest.java
+++ b/util/src/test/java/com/ning/billing/util/email/EmailSenderTest.java
@@ -21,10 +21,11 @@ import org.skife.config.ConfigurationObjectFactory;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 
 @Test(groups = "slow")
-public class EmailSenderTest extends UtilTestSuite {
+public class EmailSenderTest extends UtilTestSuiteNoDB {
+
     private EmailConfig config;
 
     @BeforeClass
diff --git a/util/src/test/java/com/ning/billing/util/export/dao/TestCSVExportOutputStream.java b/util/src/test/java/com/ning/billing/util/export/dao/TestCSVExportOutputStream.java
index b55b487..056b491 100644
--- a/util/src/test/java/com/ning/billing/util/export/dao/TestCSVExportOutputStream.java
+++ b/util/src/test/java/com/ning/billing/util/export/dao/TestCSVExportOutputStream.java
@@ -22,14 +22,14 @@ import java.util.UUID;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 import com.ning.billing.util.api.ColumnInfo;
 import com.ning.billing.util.validation.DefaultColumnInfo;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 
-public class TestCSVExportOutputStream extends UtilTestSuite {
+public class TestCSVExportOutputStream extends UtilTestSuiteNoDB {
 
     @Test(groups = "fast")
     public void testSimpleGenerator() throws Exception {
diff --git a/util/src/test/java/com/ning/billing/util/export/dao/TestDatabaseExportDao.java b/util/src/test/java/com/ning/billing/util/export/dao/TestDatabaseExportDao.java
index f8b36a9..9e2184b 100644
--- a/util/src/test/java/com/ning/billing/util/export/dao/TestDatabaseExportDao.java
+++ b/util/src/test/java/com/ning/billing/util/export/dao/TestDatabaseExportDao.java
@@ -32,14 +32,6 @@ import com.ning.billing.util.validation.dao.DatabaseSchemaDao;
 
 public class TestDatabaseExportDao extends UtilTestSuiteWithEmbeddedDB {
 
-    private DatabaseExportDao dao;
-
-    @BeforeMethod(groups = "slow")
-    public void setUp() throws Exception {
-        final DatabaseSchemaDao databaseSchemaDao = new DatabaseSchemaDao(getDBI());
-        dao = new DatabaseExportDao(databaseSchemaDao, getDBI());
-    }
-
     @Test(groups = "slow")
     public void testExportSimpleData() throws Exception {
         // Empty database
diff --git a/util/src/test/java/com/ning/billing/util/globallocker/TestMysqlGlobalLocker.java b/util/src/test/java/com/ning/billing/util/globallocker/TestMysqlGlobalLocker.java
index 9f787d0..8682bc5 100644
--- a/util/src/test/java/com/ning/billing/util/globallocker/TestMysqlGlobalLocker.java
+++ b/util/src/test/java/com/ning/billing/util/globallocker/TestMysqlGlobalLocker.java
@@ -16,46 +16,29 @@
 
 package com.ning.billing.util.globallocker;
 
-import java.io.IOException;
 import java.util.UUID;
 
 import org.skife.jdbi.v2.Handle;
-import org.skife.jdbi.v2.IDBI;
 import org.skife.jdbi.v2.TransactionCallback;
 import org.skife.jdbi.v2.TransactionStatus;
 import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.globallocker.GlobalLocker.LockerType;
-import com.ning.billing.util.io.IOUtils;
 
-import com.google.inject.AbstractModule;
-import com.google.inject.Inject;
-
-@Guice(modules = TestMysqlGlobalLocker.TestMysqlGlobalLockerModule.class)
 public class TestMysqlGlobalLocker extends UtilTestSuiteWithEmbeddedDB {
 
-    @Inject
-    private IDBI dbi;
-
-    @BeforeMethod(groups = "mysql")
-    public void setup() throws IOException {
-        final String testDdl = IOUtils.toString(TestMysqlGlobalLocker.class.getResourceAsStream("/com/ning/billing/util/ddl_test.sql"));
-        helper.initDb(testDdl);
-    }
 
     // Used as a manual test to validate the simple DAO by stepping through that locking is done and release correctly
     @Test(groups = "mysql")
     public void testSimpleLocking() {
         final String lockName = UUID.randomUUID().toString();
 
-        final GlobalLocker locker = new MySqlGlobalLocker(dbi);
+        final GlobalLocker locker = new MySqlGlobalLocker(getDBI());
         final GlobalLock lock = locker.lockWithNumberOfTries(LockerType.ACCOUNT_FOR_INVOICE_PAYMENTS, lockName, 3);
 
-        dbi.inTransaction(new TransactionCallback<Void>() {
+        getDBI().inTransaction(new TransactionCallback<Void>() {
             @Override
             public Void inTransaction(final Handle conn, final TransactionStatus status)
                     throws Exception {
@@ -77,13 +60,4 @@ public class TestMysqlGlobalLocker extends UtilTestSuiteWithEmbeddedDB {
 
         Assert.assertEquals(locker.isFree(LockerType.ACCOUNT_FOR_INVOICE_PAYMENTS, lockName), Boolean.TRUE);
     }
-
-    public static final class TestMysqlGlobalLockerModule extends AbstractModule {
-
-        @Override
-        protected void configure() {
-            final IDBI dbi = getDBI();
-            bind(IDBI.class).toInstance(dbi);
-        }
-    }
 }
diff --git a/util/src/test/java/com/ning/billing/util/glue/TestUtilModule.java b/util/src/test/java/com/ning/billing/util/glue/TestUtilModule.java
new file mode 100644
index 0000000..f45f2e6
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/util/glue/TestUtilModule.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2010-2013 Ning, Inc.
+ *
+ * Ning 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 com.ning.billing.util.glue;
+
+import org.mockito.Mockito;
+
+import com.ning.billing.entitlement.api.timeline.EntitlementTimelineApi;
+
+import com.google.inject.AbstractModule;
+
+public class TestUtilModule extends AbstractModule {
+
+    // TODO STEPH this is bad-- because DefaultAuditUserApi is using entitlementTimeline API
+    public void installHack() {
+        bind(EntitlementTimelineApi.class).toInstance(Mockito.mock(EntitlementTimelineApi.class));
+    }
+
+    @Override
+    protected void configure() {
+        //install(new CallContextModule());
+        install(new CacheModule());
+
+        installHack();
+    }
+}
diff --git a/util/src/test/java/com/ning/billing/util/glue/TestUtilModuleNoDB.java b/util/src/test/java/com/ning/billing/util/glue/TestUtilModuleNoDB.java
new file mode 100644
index 0000000..f7a7af6
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/util/glue/TestUtilModuleNoDB.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2010-2013 Ning, Inc.
+ *
+ * Ning 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 com.ning.billing.util.glue;
+
+import com.ning.billing.GuicyKillbillTestNoDBModule;
+import com.ning.billing.mock.glue.MockGlobalLockerModule;
+import com.ning.billing.mock.glue.MockNonEntityDaoModule;
+import com.ning.billing.mock.glue.MockNotificationQueueModule;
+import com.ning.billing.util.api.AuditUserApi;
+import com.ning.billing.util.audit.api.DefaultAuditUserApi;
+import com.ning.billing.util.audit.dao.AuditDao;
+import com.ning.billing.util.audit.dao.MockAuditDao;
+import com.ning.billing.util.bus.InMemoryBusModule;
+
+public class TestUtilModuleNoDB extends TestUtilModule {
+
+
+    private void installAuditMock() {
+        bind(AuditDao.class).toInstance(new MockAuditDao());
+        bind(AuditUserApi.class).to(DefaultAuditUserApi.class).asEagerSingleton();
+    }
+
+    @Override
+    protected void configure() {
+        super.configure();
+        install(new GuicyKillbillTestNoDBModule());
+
+        install(new MockNonEntityDaoModule());
+        install(new MockGlobalLockerModule());
+        install(new InMemoryBusModule());
+        install(new MockNotificationQueueModule());
+
+        installAuditMock();
+    }
+}
diff --git a/util/src/test/java/com/ning/billing/util/notificationq/dao/TestNotificationSqlDao.java b/util/src/test/java/com/ning/billing/util/notificationq/dao/TestNotificationSqlDao.java
index a3266d9..1ef9b84 100644
--- a/util/src/test/java/com/ning/billing/util/notificationq/dao/TestNotificationSqlDao.java
+++ b/util/src/test/java/com/ning/billing/util/notificationq/dao/TestNotificationSqlDao.java
@@ -22,11 +22,10 @@ import java.util.UUID;
 import org.joda.time.DateTime;
 import org.joda.time.DateTimeZone;
 import org.skife.jdbi.v2.Handle;
-import org.skife.jdbi.v2.IDBI;
 import org.skife.jdbi.v2.tweak.HandleCallback;
 import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
@@ -35,25 +34,20 @@ import com.ning.billing.util.notificationq.Notification;
 import com.ning.billing.util.notificationq.dao.NotificationSqlDao.NotificationSqlMapper;
 import com.ning.billing.util.queue.PersistentQueueEntryLifecycle.PersistentQueueEntryLifecycleState;
 
-import com.google.inject.AbstractModule;
-import com.google.inject.Inject;
-
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 
-@Guice(modules = TestNotificationSqlDao.TestNotificationSqlDaoModule.class)
 public class TestNotificationSqlDao extends UtilTestSuiteWithEmbeddedDB {
 
     private static final String hostname = "Yop";
 
-    @Inject
-    private IDBI dbi;
-
     private NotificationSqlDao dao;
 
-    @BeforeSuite(groups = "slow")
-    public void setup() {
-        dao = dbi.onDemand(NotificationSqlDao.class);
+    @Override
+    @BeforeClass(groups = "slow")
+    public void setup() throws Exception {
+        super.setup();
+        dao = getDBI().onDemand(NotificationSqlDao.class);
     }
 
     @Test(groups = "slow")
@@ -130,7 +124,7 @@ public class TestNotificationSqlDao extends UtilTestSuiteWithEmbeddedDB {
     }
 
     private Notification fetchNotification(final String notificationId) {
-        return dbi.withHandle(new HandleCallback<Notification>() {
+        return getDBI().withHandle(new HandleCallback<Notification>() {
             @Override
             public Notification withHandle(final Handle handle) throws Exception {
                 return handle.createQuery("   select" +
@@ -178,6 +172,7 @@ public class TestNotificationSqlDao extends UtilTestSuiteWithEmbeddedDB {
         return result.toDateTime(DateTimeZone.UTC);
     }
 
+    /*
     public static class TestNotificationSqlDaoModule extends AbstractModule {
 
         @Override
@@ -186,4 +181,5 @@ public class TestNotificationSqlDao extends UtilTestSuiteWithEmbeddedDB {
             bind(IDBI.class).toInstance(dbi);
         }
     }
+    */
 }
diff --git a/util/src/test/java/com/ning/billing/util/notificationq/TestNotificationQueue.java b/util/src/test/java/com/ning/billing/util/notificationq/TestNotificationQueue.java
index 79dbb01..6bd9ed1 100644
--- a/util/src/test/java/com/ning/billing/util/notificationq/TestNotificationQueue.java
+++ b/util/src/test/java/com/ning/billing/util/notificationq/TestNotificationQueue.java
@@ -24,65 +24,37 @@ import java.util.concurrent.Callable;
 import java.util.concurrent.TimeUnit;
 
 import org.joda.time.DateTime;
-import org.skife.jdbi.v2.IDBI;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
-import com.ning.billing.util.cache.CacheControllerDispatcher;
-import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.clock.ClockMock;
-import com.ning.billing.util.dao.NonEntityDao;
 import com.ning.billing.util.entity.dao.EntitySqlDao;
 import com.ning.billing.util.entity.dao.EntitySqlDaoTransactionWrapper;
 import com.ning.billing.util.entity.dao.EntitySqlDaoTransactionalJdbiWrapper;
 import com.ning.billing.util.entity.dao.EntitySqlDaoWrapperFactory;
-import com.ning.billing.util.glue.CacheModule;
-import com.ning.billing.util.glue.NonEntityDaoModule;
-import com.ning.billing.util.io.IOUtils;
 import com.ning.billing.util.notificationq.NotificationQueueService.NotificationQueueHandler;
-import com.ning.billing.util.notificationq.dao.NotificationSqlDao;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.google.common.base.Predicate;
 import com.google.common.collect.Collections2;
-import com.google.inject.AbstractModule;
-import com.google.inject.Inject;
-import com.google.inject.name.Names;
 
 import static com.jayway.awaitility.Awaitility.await;
 import static java.util.concurrent.TimeUnit.MINUTES;
 import static org.testng.Assert.assertEquals;
 
-@Guice(modules = {TestNotificationQueue.TestNotificationQueueModule.class, CacheModule.class, NonEntityDaoModule.class})
 public class TestNotificationQueue extends UtilTestSuiteWithEmbeddedDB {
 
     private final Logger log = LoggerFactory.getLogger(TestNotificationQueue.class);
 
     private EntitySqlDaoTransactionalJdbiWrapper entitySqlDaoTransactionalJdbiWrapper;
 
-    @Inject
-    private IDBI dbi;
-
-    @Inject
-    private Clock clock;
-
-    @Inject
-    private NotificationQueueService queueService;
-
-    @Inject
-    private CacheControllerDispatcher controllerDispatcher;
-
-    @Inject
-    private NonEntityDao nonEntityDao;
-
-
     private int eventsReceived;
 
     private static final class TestNotificationKey implements NotificationKey, Comparable<TestNotificationKey> {
@@ -112,17 +84,19 @@ public class TestNotificationQueue extends UtilTestSuiteWithEmbeddedDB {
         }
     }
 
-    @BeforeSuite(groups = "slow")
+    @Override
+    @BeforeClass(groups = "slow")
     public void setup() throws Exception {
-        final String testDdl = IOUtils.toString(NotificationSqlDao.class.getResourceAsStream("/com/ning/billing/util/ddl_test.sql"));
-        helper.initDb(testDdl);
-        entitySqlDaoTransactionalJdbiWrapper = new EntitySqlDaoTransactionalJdbiWrapper(dbi, clock, controllerDispatcher, nonEntityDao);
+        super.setup();
+        entitySqlDaoTransactionalJdbiWrapper = new EntitySqlDaoTransactionalJdbiWrapper(getDBI(), clock, cacheControllerDispatcher, nonEntityDao);
     }
+    @Override
+    @BeforeMethod(groups = "slow")
+    public void setupTest() throws Exception {
+        super.setupTest();
 
-    @BeforeTest(groups = "slow")
-    public void beforeTest() {
         // Reset time to real value
-        ((ClockMock) clock).resetDeltaFromReality();
+        clock.resetDeltaFromReality();
         eventsReceived = 0;
     }
 
@@ -442,6 +416,7 @@ public class TestNotificationQueue extends UtilTestSuiteWithEmbeddedDB {
         };
     }
 
+    /*
     public static class TestNotificationQueueModule extends AbstractModule {
 
         @Override
@@ -456,4 +431,5 @@ public class TestNotificationQueue extends UtilTestSuiteWithEmbeddedDB {
             bind(NotificationQueueConfig.class).toInstance(getNotificationConfig(false, 100));
         }
     }
+    */
 }
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagCreationEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagCreationEvent.java
index 05c1297..9495acf 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagCreationEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagCreationEvent.java
@@ -22,13 +22,14 @@ import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.ning.billing.ObjectType;
-import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 import com.ning.billing.util.events.BusInternalEvent;
 import com.ning.billing.util.jackson.ObjectMapper;
 import com.ning.billing.util.tag.DefaultTagDefinition;
 import com.ning.billing.util.tag.TagDefinition;
 
-public class TestDefaultControlTagCreationEvent extends UtilTestSuite {
+public class TestDefaultControlTagCreationEvent extends UtilTestSuiteNoDB {
+
     @Test(groups = "fast")
     public void testPojo() throws Exception {
         final UUID tagId = UUID.randomUUID();
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionCreationEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionCreationEvent.java
index 46bcd6a..6bbd8d6 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionCreationEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionCreationEvent.java
@@ -21,13 +21,14 @@ import java.util.UUID;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 import com.ning.billing.util.events.BusInternalEvent;
 import com.ning.billing.util.jackson.ObjectMapper;
 import com.ning.billing.util.tag.DefaultTagDefinition;
 import com.ning.billing.util.tag.TagDefinition;
 
-public class TestDefaultControlTagDefinitionCreationEvent extends UtilTestSuite {
+public class TestDefaultControlTagDefinitionCreationEvent extends UtilTestSuiteNoDB {
+
     @Test(groups = "fast")
     public void testPojo() throws Exception {
         final UUID tagDefinitionId = UUID.randomUUID();
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionDeletionEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionDeletionEvent.java
index 800d551..7fd763c 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionDeletionEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDefinitionDeletionEvent.java
@@ -21,13 +21,14 @@ import java.util.UUID;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 import com.ning.billing.util.events.BusInternalEvent;
 import com.ning.billing.util.jackson.ObjectMapper;
 import com.ning.billing.util.tag.DefaultTagDefinition;
 import com.ning.billing.util.tag.TagDefinition;
 
-public class TestDefaultControlTagDefinitionDeletionEvent extends UtilTestSuite {
+public class TestDefaultControlTagDefinitionDeletionEvent extends UtilTestSuiteNoDB {
+
     @Test(groups = "fast")
     public void testPojo() throws Exception {
         final UUID tagDefinitionId = UUID.randomUUID();
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDeletionEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDeletionEvent.java
index 2b4f300..d7a6005 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDeletionEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultControlTagDeletionEvent.java
@@ -22,13 +22,14 @@ import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.ning.billing.ObjectType;
-import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 import com.ning.billing.util.events.BusInternalEvent;
 import com.ning.billing.util.jackson.ObjectMapper;
 import com.ning.billing.util.tag.DefaultTagDefinition;
 import com.ning.billing.util.tag.TagDefinition;
 
-public class TestDefaultControlTagDeletionEvent extends UtilTestSuite {
+public class TestDefaultControlTagDeletionEvent extends UtilTestSuiteNoDB {
+
     @Test(groups = "fast")
     public void testPojo() throws Exception {
         final UUID tagId = UUID.randomUUID();
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagCreationEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagCreationEvent.java
index 9d0172d..5054106 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagCreationEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagCreationEvent.java
@@ -22,13 +22,14 @@ import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.ning.billing.ObjectType;
-import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 import com.ning.billing.util.events.BusInternalEvent;
 import com.ning.billing.util.jackson.ObjectMapper;
 import com.ning.billing.util.tag.DefaultTagDefinition;
 import com.ning.billing.util.tag.TagDefinition;
 
-public class TestDefaultUserTagCreationEvent extends UtilTestSuite {
+public class TestDefaultUserTagCreationEvent extends UtilTestSuiteNoDB {
+
     @Test(groups = "fast")
     public void testPojo() throws Exception {
         final UUID tagId = UUID.randomUUID();
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionCreationEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionCreationEvent.java
index 211918e..257cb47 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionCreationEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionCreationEvent.java
@@ -21,13 +21,14 @@ import java.util.UUID;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 import com.ning.billing.util.events.BusInternalEvent;
 import com.ning.billing.util.jackson.ObjectMapper;
 import com.ning.billing.util.tag.DefaultTagDefinition;
 import com.ning.billing.util.tag.TagDefinition;
 
-public class TestDefaultUserTagDefinitionCreationEvent extends UtilTestSuite {
+public class TestDefaultUserTagDefinitionCreationEvent extends UtilTestSuiteNoDB {
+
     @Test(groups = "fast")
     public void testPojo() throws Exception {
         final UUID tagDefinitionId = UUID.randomUUID();
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionDeletionEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionDeletionEvent.java
index bb050f1..7294239 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionDeletionEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDefinitionDeletionEvent.java
@@ -21,13 +21,14 @@ import java.util.UUID;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 import com.ning.billing.util.events.BusInternalEvent;
 import com.ning.billing.util.jackson.ObjectMapper;
 import com.ning.billing.util.tag.DefaultTagDefinition;
 import com.ning.billing.util.tag.TagDefinition;
 
-public class TestDefaultUserTagDefinitionDeletionEvent extends UtilTestSuite {
+public class TestDefaultUserTagDefinitionDeletionEvent extends UtilTestSuiteNoDB
+{
     @Test(groups = "fast")
     public void testPojo() throws Exception {
         final UUID tagDefinitionId = UUID.randomUUID();
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDeletionEvent.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDeletionEvent.java
index e420df3..41b1b23 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDeletionEvent.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestDefaultUserTagDeletionEvent.java
@@ -22,13 +22,14 @@ import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.ning.billing.ObjectType;
-import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 import com.ning.billing.util.events.BusInternalEvent;
 import com.ning.billing.util.jackson.ObjectMapper;
 import com.ning.billing.util.tag.DefaultTagDefinition;
 import com.ning.billing.util.tag.TagDefinition;
 
-public class TestDefaultUserTagDeletionEvent extends UtilTestSuite {
+public class TestDefaultUserTagDeletionEvent extends UtilTestSuiteNoDB
+{
     @Test(groups = "fast")
     public void testPojo() throws Exception {
         final UUID tagId = UUID.randomUUID();
diff --git a/util/src/test/java/com/ning/billing/util/tag/api/user/TestTagEventBuilder.java b/util/src/test/java/com/ning/billing/util/tag/api/user/TestTagEventBuilder.java
index f619b3a..5fbcab0 100644
--- a/util/src/test/java/com/ning/billing/util/tag/api/user/TestTagEventBuilder.java
+++ b/util/src/test/java/com/ning/billing/util/tag/api/user/TestTagEventBuilder.java
@@ -22,7 +22,7 @@ import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.ning.billing.ObjectType;
-import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.UtilTestSuiteNoDB;
 import com.ning.billing.util.events.ControlTagCreationInternalEvent;
 import com.ning.billing.util.events.ControlTagDefinitionCreationInternalEvent;
 import com.ning.billing.util.events.ControlTagDefinitionDeletionInternalEvent;
@@ -37,7 +37,8 @@ import com.ning.billing.util.tag.DefaultTagDefinition;
 import com.ning.billing.util.tag.TagDefinition;
 import com.ning.billing.util.tag.dao.TagDefinitionModelDao;
 
-public class TestTagEventBuilder extends UtilTestSuite {
+public class TestTagEventBuilder extends UtilTestSuiteNoDB
+{
 
     @Test(groups = "fast")
     public void testNewUserTagDefinitionCreationEvent() throws Exception {
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 fb2cac3..2d238ea 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
@@ -23,12 +23,16 @@ import java.util.UUID;
 
 import org.testng.Assert;
 import org.testng.annotations.AfterClass;
+import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
 import com.ning.billing.ObjectType;
+import com.ning.billing.api.TestApiListener;
+import com.ning.billing.api.TestApiListener.NextEvent;
+import com.ning.billing.api.TestListenerStatus;
 import com.ning.billing.mock.glue.MockDbHelperModule;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.api.TagDefinitionApiException;
@@ -50,37 +54,23 @@ import com.google.inject.Inject;
 
 import static org.testng.Assert.assertEquals;
 
-@Guice(modules = {TagStoreModule.class, CacheModule.class, ClockModule.class, InMemoryBusModule.class, MockDbHelperModule.class, NonEntityDaoModule.class})
 public class TestDefaultTagDao extends UtilTestSuiteWithEmbeddedDB {
 
-    @Inject
-    private TagDefinitionDao tagDefinitionDao;
-
-    @Inject
-    private DefaultTagDao tagDao;
-
-    @Inject
-    private Clock clock;
-
-    @Inject
-    private InternalBus bus;
-
-    private EventsListener eventsListener;
-
-    @BeforeClass(groups = "slow")
-    public void setup() throws IOException {
-        bus.start();
-    }
+    private TestApiListener eventsListener;
 
+    @Override
     @BeforeMethod(groups = "slow")
-    public void cleanupBeforeMethod() throws InternalBus.EventBusException {
-        eventsListener = new EventsListener();
-        bus.register(eventsListener);
+    public void setupTest() throws Exception {
+        super.setupTest();
+        eventsListener = new TestApiListener(null);
+        eventBus.register(eventsListener);
     }
 
-    @AfterClass(groups = "slow")
-    public void tearDown() {
-        bus.stop();
+    @Override
+    @AfterMethod(groups = "slow")
+    public void cleanupTest() throws Exception {
+        eventBus.unregister(eventsListener);
+        super.cleanupTest();
     }
 
     @Test(groups = "slow")
@@ -155,76 +145,50 @@ public class TestDefaultTagDao extends UtilTestSuiteWithEmbeddedDB {
         final UUID objectId = UUID.randomUUID();
         final ObjectType objectType = ObjectType.INVOICE_ITEM;
 
-        // Verify the initial state
-        Assert.assertEquals(eventsListener.getEvents().size(), 0);
-        Assert.assertEquals(eventsListener.getTagEvents().size(), 0);
-
         // Create a tag definition
+        eventsListener.pushExpectedEvent(NextEvent.TAG_DEFINITION);
         final TagDefinitionModelDao createdTagDefinition = tagDefinitionDao.create(definitionName, description, internalCallContext);
         Assert.assertEquals(createdTagDefinition.getName(), definitionName);
         Assert.assertEquals(createdTagDefinition.getDescription(), description);
+        Assert.assertTrue(eventsListener.isCompleted(2000));
 
         // 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));
 
         // Make sure we can retrieve it via the DAO
         final List<TagModelDao> foundTags = tagDao.getTags(objectId, objectType, internalCallContext);
         Assert.assertEquals(foundTags.size(), 1);
         Assert.assertEquals(foundTags.get(0).getTagDefinitionId(), createdTagDefinition.getId());
 
+/*
+        TODO verify that event content matches what we expect
         // Verify we caught an event on the bus -  we got 2 total (one for the tag definition, one for the tag)
-        Assert.assertEquals(eventsListener.getEvents().size(), 2);
-        Assert.assertEquals(eventsListener.getTagEvents().size(), 1);
-        final TagInternalEvent tagFirstEventReceived = eventsListener.getTagEvents().get(0);
-        Assert.assertEquals(eventsListener.getEvents().get(1), tagFirstEventReceived);
         Assert.assertEquals(tagFirstEventReceived.getObjectId(), objectId);
         Assert.assertEquals(tagFirstEventReceived.getObjectType(), objectType);
         Assert.assertEquals(tagFirstEventReceived.getTagDefinition().getName(), createdTagDefinition.getName());
         Assert.assertEquals(tagFirstEventReceived.getTagDefinition().getDescription(), createdTagDefinition.getDescription());
         Assert.assertEquals(tagFirstEventReceived.getBusEventType(), BusInternalEvent.BusInternalEventType.USER_TAG_CREATION);
         Assert.assertEquals(tagFirstEventReceived.getUserToken(), internalCallContext.getUserToken());
-
+*/
         // Delete the tag
+        eventsListener.pushExpectedEvent(NextEvent.TAG);
         tagDao.deleteTag(objectId, objectType, createdTagDefinition.getId(), internalCallContext);
+        Assert.assertTrue(eventsListener.isCompleted(2000));
 
         // Make sure the tag is deleted
         Assert.assertEquals(tagDao.getTags(objectId, objectType, internalCallContext).size(), 0);
 
-        // Verify we caught an event on the bus
-        Assert.assertEquals(eventsListener.getEvents().size(), 3);
-        Assert.assertEquals(eventsListener.getTagEvents().size(), 2);
+        /*
         final TagInternalEvent tagSecondEventReceived = eventsListener.getTagEvents().get(1);
-        Assert.assertEquals(eventsListener.getEvents().get(2), tagSecondEventReceived);
         Assert.assertEquals(tagSecondEventReceived.getObjectId(), objectId);
         Assert.assertEquals(tagSecondEventReceived.getObjectType(), objectType);
         Assert.assertEquals(tagSecondEventReceived.getTagDefinition().getName(), createdTagDefinition.getName());
         Assert.assertEquals(tagSecondEventReceived.getTagDefinition().getDescription(), createdTagDefinition.getDescription());
         Assert.assertEquals(tagSecondEventReceived.getBusEventType(), BusInternalEvent.BusInternalEventType.USER_TAG_DELETION);
         Assert.assertEquals(tagSecondEventReceived.getUserToken(), internalCallContext.getUserToken());
-    }
-
-    private static final class EventsListener {
-
-        private final List<BusInternalEvent> events = new ArrayList<BusInternalEvent>();
-        private final List<TagInternalEvent> tagEvents = new ArrayList<TagInternalEvent>();
-
-        @Subscribe
-        public synchronized void processEvent(final BusInternalEvent event) {
-            events.add(event);
-        }
-
-        @Subscribe
-        public synchronized void processTagDefinitionEvent(final TagInternalEvent tagEvent) {
-            tagEvents.add(tagEvent);
-        }
-
-        public List<BusInternalEvent> getEvents() {
-            return events;
-        }
-
-        public List<TagInternalEvent> getTagEvents() {
-            return tagEvents;
-        }
+        */
     }
 }
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 8287661..b63e883 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
@@ -16,108 +16,87 @@
 
 package com.ning.billing.util.tag.dao;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.UUID;
 
 import org.testng.Assert;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
+import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
-import com.ning.billing.mock.glue.MockDbHelperModule;
+import com.ning.billing.api.TestApiListener;
+import com.ning.billing.api.TestApiListener.NextEvent;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
-import com.ning.billing.util.bus.InMemoryBusModule;
-import com.ning.billing.util.clock.Clock;
 import com.ning.billing.util.events.BusInternalEvent;
 import com.ning.billing.util.events.TagDefinitionInternalEvent;
-import com.ning.billing.util.glue.CacheModule;
-import com.ning.billing.util.glue.ClockModule;
-import com.ning.billing.util.glue.NonEntityDaoModule;
-import com.ning.billing.util.glue.TagStoreModule;
-import com.ning.billing.util.svcsapi.bus.InternalBus;
 
 import com.google.common.eventbus.Subscribe;
-import com.google.inject.Inject;
 
-@Guice(modules = {TagStoreModule.class, CacheModule.class, ClockModule.class, InMemoryBusModule.class, MockDbHelperModule.class, NonEntityDaoModule.class})
 public class TestDefaultTagDefinitionDao extends UtilTestSuiteWithEmbeddedDB {
 
-    @Inject
-    private TagDefinitionDao tagDefinitionDao;
+    private TestApiListener eventsListener;
 
-    @Inject
-    private Clock clock;
-
-    @Inject
-    private InternalBus bus;
-
-    private EventsListener eventsListener;
-
-    @BeforeClass(groups = "slow")
-    public void setup() throws IOException {
-        bus.start();
-    }
 
+    @Override
     @BeforeMethod(groups = "slow")
-    public void cleanupBeforeMethod() throws InternalBus.EventBusException {
-        eventsListener = new EventsListener();
-        bus.register(eventsListener);
+    public void setupTest() throws Exception {
+        super.setupTest();
+        eventsListener = new TestApiListener(null);
+        eventBus.register(eventsListener);
     }
 
-    @AfterClass(groups = "slow")
-    public void tearDown() {
-        bus.stop();
+    @Override
+    @AfterMethod(groups = "slow")
+    public void cleanupTest() throws Exception {
+        eventBus.unregister(eventsListener);
+        super.cleanupTest();
     }
 
+
     @Test(groups = "slow")
     public void testCatchEventsOnCreateAndDelete() throws Exception {
         final String definitionName = UUID.randomUUID().toString().substring(0, 5);
         final String description = UUID.randomUUID().toString().substring(0, 5);
 
-        // Verify the initial state
-        Assert.assertEquals(eventsListener.getEvents().size(), 0);
-        Assert.assertEquals(eventsListener.getTagDefinitionEvents().size(), 0);
-
         // Make sure we can create a tag definition
+        eventsListener.pushExpectedEvent(NextEvent.TAG_DEFINITION);
         final TagDefinitionModelDao createdTagDefinition = tagDefinitionDao.create(definitionName, description, internalCallContext);
         Assert.assertEquals(createdTagDefinition.getName(), definitionName);
         Assert.assertEquals(createdTagDefinition.getDescription(), description);
+        Assert.assertTrue(eventsListener.isCompleted(2000));
 
         // Make sure we can retrieve it via the DAO
         final TagDefinitionModelDao foundTagDefinition = tagDefinitionDao.getByName(definitionName, internalCallContext);
         Assert.assertEquals(foundTagDefinition, createdTagDefinition);
 
+        /*
         // Verify we caught an event on the bus
-        Assert.assertEquals(eventsListener.getEvents().size(), 1);
-        Assert.assertEquals(eventsListener.getTagDefinitionEvents().size(), 1);
         final TagDefinitionInternalEvent tagDefinitionFirstEventReceived = eventsListener.getTagDefinitionEvents().get(0);
-        Assert.assertEquals(eventsListener.getEvents().get(0), tagDefinitionFirstEventReceived);
         Assert.assertEquals(tagDefinitionFirstEventReceived.getTagDefinitionId(), createdTagDefinition.getId());
         Assert.assertEquals(tagDefinitionFirstEventReceived.getTagDefinition().getName(), createdTagDefinition.getName());
         Assert.assertEquals(tagDefinitionFirstEventReceived.getTagDefinition().getDescription(), createdTagDefinition.getDescription());
         Assert.assertEquals(tagDefinitionFirstEventReceived.getBusEventType(), BusInternalEvent.BusInternalEventType.USER_TAGDEFINITION_CREATION);
         Assert.assertEquals(tagDefinitionFirstEventReceived.getUserToken(), internalCallContext.getUserToken());
 
+        */
         // Delete the tag definition
+        eventsListener.pushExpectedEvent(NextEvent.TAG_DEFINITION);
         tagDefinitionDao.deleteById(foundTagDefinition.getId(), internalCallContext);
+        Assert.assertTrue(eventsListener.isCompleted(2000));
 
         // Make sure the tag definition is deleted
         Assert.assertNull(tagDefinitionDao.getByName(definitionName, internalCallContext));
 
+        /*
         // Verify we caught an event on the bus
-        Assert.assertEquals(eventsListener.getEvents().size(), 2);
-        Assert.assertEquals(eventsListener.getTagDefinitionEvents().size(), 2);
         final TagDefinitionInternalEvent tagDefinitionSecondEventReceived = eventsListener.getTagDefinitionEvents().get(1);
-        Assert.assertEquals(eventsListener.getEvents().get(1), tagDefinitionSecondEventReceived);
         Assert.assertEquals(tagDefinitionSecondEventReceived.getTagDefinitionId(), createdTagDefinition.getId());
         Assert.assertEquals(tagDefinitionSecondEventReceived.getTagDefinition().getName(), createdTagDefinition.getName());
         Assert.assertEquals(tagDefinitionSecondEventReceived.getTagDefinition().getDescription(), createdTagDefinition.getDescription());
         Assert.assertEquals(tagDefinitionSecondEventReceived.getBusEventType(), BusInternalEvent.BusInternalEventType.USER_TAGDEFINITION_DELETION);
         Assert.assertEquals(tagDefinitionSecondEventReceived.getUserToken(), internalCallContext.getUserToken());
+        */
     }
 
     private static final class EventsListener {
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 29b76c0..70e8766 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
@@ -16,99 +16,36 @@
 
 package com.ning.billing.util.tag;
 
-import java.io.IOException;
 import java.util.List;
 import java.util.UUID;
 
-import org.skife.jdbi.v2.IDBI;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Guice;
 import org.testng.annotations.Test;
 
 import com.ning.billing.ObjectType;
-import com.ning.billing.mock.glue.MockDbHelperModule;
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
 import com.ning.billing.util.api.TagApiException;
 import com.ning.billing.util.api.TagDefinitionApiException;
-import com.ning.billing.util.clock.Clock;
-import com.ning.billing.util.glue.BusModule;
-import com.ning.billing.util.glue.CacheModule;
-import com.ning.billing.util.glue.ClockModule;
-import com.ning.billing.util.glue.NonEntityDaoModule;
-import com.ning.billing.util.glue.TagStoreModule;
-import com.ning.billing.util.svcsapi.bus.InternalBus;
-import com.ning.billing.util.tag.dao.TagDao;
-import com.ning.billing.util.tag.dao.TagDefinitionDao;
 import com.ning.billing.util.tag.dao.TagDefinitionModelDao;
 import com.ning.billing.util.tag.dao.TagModelDao;
 
-import com.google.inject.Inject;
-
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.fail;
 
-@Test(groups = {"slow"})
-@Guice(modules = {TagStoreModule.class, ClockModule.class, BusModule.class, CacheModule.class, MockDbHelperModule.class, NonEntityDaoModule.class})
 public class TestTagStore extends UtilTestSuiteWithEmbeddedDB {
 
-    @Inject
-    private IDBI dbi;
-
-    @Inject
-    private TagDao tagDao;
-
-    @Inject
-    private TagDefinitionDao tagDefinitionDao;
-
-    @Inject
-    private Clock clock;
-
-    @Inject
-    private InternalBus bus;
 
-    private TagDefinitionModelDao testTagDefinition;
-
-    private final Logger log = LoggerFactory.getLogger(TestTagStore.class);
-
-    @BeforeClass(groups = "slow")
-    protected void setup() throws IOException {
-        try {
-            bus.start();
-
-        } catch (Throwable t) {
-            log.error("Failed to start tag store tests", t);
-            fail(t.toString());
-        }
-    }
+    @Test(groups = "slow")
+    public void testTagCreationAndRetrieval() throws TagApiException, TagDefinitionApiException {
+        final UUID accountId = UUID.randomUUID();
 
-    // We need tag definitions before we start the tests
-    @Override
-    @BeforeMethod(groups = "slow")
-    public void cleanupTablesBetweenMethods() {
-        super.cleanupTablesBetweenMethods();
-        try {
-            tagDefinitionDao.create("tag1", "First tag", internalCallContext);
-            testTagDefinition = tagDefinitionDao.create("testTagDefinition", "Second tag", internalCallContext);
-        } catch (TagDefinitionApiException e) {
-            fail(e.toString());
-        }
-    }
+        TagDefinitionModelDao testTagDefinition;
+        tagDefinitionDao.create("tag1", "First tag", internalCallContext);
+        testTagDefinition = tagDefinitionDao.create("testTagDefinition", "Second tag", internalCallContext);
 
-    @AfterClass(groups = "slow")
-    public void tearDown() {
-        bus.stop();
-    }
 
-    @Test(groups = "slow")
-    public void testTagCreationAndRetrieval() throws TagApiException {
-        final UUID accountId = UUID.randomUUID();
         final Tag tag = new DescriptiveTag(testTagDefinition.getId(), ObjectType.ACCOUNT, accountId, clock.getUTCNow());
 
         tagDao.create(new TagModelDao(tag), internalCallContext);
diff --git a/util/src/test/java/com/ning/billing/util/template/translation/TestDefaultTranslatorBase.java b/util/src/test/java/com/ning/billing/util/template/translation/TestDefaultTranslatorBase.java
index 00fc0c2..603213a 100644
--- a/util/src/test/java/com/ning/billing/util/template/translation/TestDefaultTranslatorBase.java
+++ b/util/src/test/java/com/ning/billing/util/template/translation/TestDefaultTranslatorBase.java
@@ -23,10 +23,12 @@ import org.mockito.Mockito;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import com.ning.billing.util.UtilTestSuite;
+import com.ning.billing.util.UtilTestSuiteNoDB;
+
+public class TestDefaultTranslatorBase extends UtilTestSuiteNoDB {
 
-public class TestDefaultTranslatorBase extends UtilTestSuite {
     private final class TestTranslatorBase extends DefaultTranslatorBase {
+
         public TestTranslatorBase(final TranslatorConfig config) {
             super(config);
         }
diff --git a/util/src/test/java/com/ning/billing/util/UtilTestSuiteNoDB.java b/util/src/test/java/com/ning/billing/util/UtilTestSuiteNoDB.java
new file mode 100644
index 0000000..64fa9df
--- /dev/null
+++ b/util/src/test/java/com/ning/billing/util/UtilTestSuiteNoDB.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2010-2013 Ning, Inc.
+ *
+ * Ning 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 com.ning.billing.util;
+
+import javax.inject.Inject;
+
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+
+import com.ning.billing.GuicyKillbillTestSuiteNoDB;
+import com.ning.billing.util.api.AuditUserApi;
+import com.ning.billing.util.audit.dao.AuditDao;
+import com.ning.billing.util.cache.CacheControllerDispatcher;
+import com.ning.billing.util.callcontext.InternalCallContextFactory;
+import com.ning.billing.util.dao.NonEntityDao;
+import com.ning.billing.util.glue.TestUtilModuleNoDB;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Stage;
+
+public class UtilTestSuiteNoDB extends GuicyKillbillTestSuiteNoDB {
+
+
+    @Inject
+    protected InternalBus eventBus;
+    @Inject
+    protected CacheControllerDispatcher controlCacheDispatcher;
+    @Inject
+    protected NonEntityDao nonEntityDao;
+    @Inject
+    protected InternalCallContextFactory internalCallContextFactory;
+    @Inject
+    protected CacheControllerDispatcher cacheControllerDispatcher;
+    @Inject
+    protected AuditDao auditDao;
+    @Inject
+    protected AuditUserApi auditUserApi;
+
+    @BeforeClass(groups = "fast")
+    public void setup() throws Exception {
+        final Injector g = Guice.createInjector(Stage.PRODUCTION, new TestUtilModuleNoDB());
+        g.injectMembers(this);
+    }
+
+    @BeforeMethod(groups = "fast")
+    public void setupTest() throws Exception {
+        eventBus.start();
+    }
+
+    @AfterMethod(groups = "fast")
+    public void cleanupTest() throws Exception {
+        eventBus.stop();
+    }
+
+}
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 e0b2c3d..617eaef 100644
--- a/util/src/test/java/com/ning/billing/util/UtilTestSuiteWithEmbeddedDB.java
+++ b/util/src/test/java/com/ning/billing/util/UtilTestSuiteWithEmbeddedDB.java
@@ -16,7 +16,75 @@
 
 package com.ning.billing.util;
 
-import com.ning.billing.KillbillTestSuiteWithEmbeddedDB;
+import javax.inject.Inject;
+
+import org.testng.annotations.AfterMethod;
+import org.testng.annotations.AfterTest;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.BeforeTest;
+
+import com.ning.billing.GuicyKillbillTestSuiteWithEmbeddedDB;
+import com.ning.billing.util.audit.dao.AuditDao;
+import com.ning.billing.util.cache.CacheControllerDispatcher;
+import com.ning.billing.util.callcontext.InternalCallContextFactory;
+import com.ning.billing.util.customfield.api.DefaultCustomFieldUserApi;
+import com.ning.billing.util.customfield.dao.CustomFieldDao;
+import com.ning.billing.util.dao.NonEntityDao;
+import com.ning.billing.util.export.dao.DatabaseExportDao;
+import com.ning.billing.util.glue.TestUtilModuleWithEmbeddedDB;
+import com.ning.billing.util.notificationq.NotificationQueueService;
+import com.ning.billing.util.svcsapi.bus.InternalBus;
+import com.ning.billing.util.tag.dao.DefaultTagDao;
+import com.ning.billing.util.tag.dao.TagDefinitionDao;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Stage;
+
+
+public abstract class UtilTestSuiteWithEmbeddedDB extends GuicyKillbillTestSuiteWithEmbeddedDB {
+
+    @Inject
+    protected InternalBus eventBus;
+    @Inject
+    protected CacheControllerDispatcher controlCacheDispatcher;
+    @Inject
+    protected NonEntityDao nonEntityDao;
+    @Inject
+    protected InternalCallContextFactory internalCallContextFactory;
+    @Inject
+    protected CacheControllerDispatcher cacheControllerDispatcher;
+    @Inject
+    protected DefaultCustomFieldUserApi customFieldUserApi;
+    @Inject
+    protected CustomFieldDao customFieldDao;
+    @Inject
+    protected DatabaseExportDao dao;
+    @Inject
+    protected NotificationQueueService queueService;
+    @Inject
+    protected TagDefinitionDao tagDefinitionDao;
+    @Inject
+    protected DefaultTagDao tagDao;
+    @Inject
+    protected AuditDao auditDao;
+
+    @BeforeClass(groups = "slow")
+    public void setup() throws Exception {
+        final Injector g = Guice.createInjector(Stage.PRODUCTION, new TestUtilModuleWithEmbeddedDB());
+        g.injectMembers(this);
+    }
+
+    @BeforeMethod(groups = "slow")
+    public void setupTest() throws Exception  {
+        eventBus.start();
+    }
+
+    @AfterMethod(groups = "slow")
+    public void cleanupTest() throws Exception {
+        eventBus.stop();
+    }
+
 
-public abstract class UtilTestSuiteWithEmbeddedDB extends KillbillTestSuiteWithEmbeddedDB {
 }
diff --git a/util/src/test/java/com/ning/billing/util/validation/TestValidationManager.java b/util/src/test/java/com/ning/billing/util/validation/TestValidationManager.java
index c79b781..0faa814 100644
--- a/util/src/test/java/com/ning/billing/util/validation/TestValidationManager.java
+++ b/util/src/test/java/com/ning/billing/util/validation/TestValidationManager.java
@@ -16,17 +16,13 @@
 
 package com.ning.billing.util.validation;
 
-import java.io.IOException;
 import java.util.Collection;
 
 import org.joda.time.DateTime;
-import org.skife.jdbi.v2.IDBI;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
 import com.ning.billing.util.UtilTestSuiteWithEmbeddedDB;
-import com.ning.billing.util.globallocker.TestMysqlGlobalLocker;
-import com.ning.billing.util.io.IOUtils;
 import com.ning.billing.util.validation.dao.DatabaseSchemaDao;
 
 import static org.testng.Assert.assertEquals;
@@ -36,27 +32,20 @@ import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
 
 public class TestValidationManager extends UtilTestSuiteWithEmbeddedDB {
+
     private static final String TABLE_NAME = "validation_test";
 
     private ValidationManager vm;
 
+    @Override
     @BeforeClass(groups = "slow")
-    public void setup() throws IOException {
-        setupDatabase();
-        setupDao();
-    }
-
-    private void setupDao() {
-        final IDBI dbi = helper.getDBI();
-        final DatabaseSchemaDao dao = new DatabaseSchemaDao(dbi);
+    public void setup() throws Exception {
+        super.setup();
+        final DatabaseSchemaDao dao = new DatabaseSchemaDao(getDBI());
         vm = new ValidationManager(dao);
         vm.loadSchemaInformation(helper.getDbName());
     }
 
-    private void setupDatabase() throws IOException {
-        final String testDdl = IOUtils.toString(TestMysqlGlobalLocker.class.getResourceAsStream("/com/ning/billing/util/ddl_test.sql"));
-        helper.initDb(testDdl);
-    }
 
     @Test(groups = "slow")
     public void testRetrievingColumnInfo() {
@@ -141,6 +130,7 @@ public class TestValidationManager extends UtilTestSuiteWithEmbeddedDB {
     }
 
     private class SimpleTestClass {
+
         private String stringField1;
         private String stringField2;
         private double numericField1;